*save_checkpoint ch1
*set checkpoint1 true
*set fight_opponent_name "Eric"
*set stats_screen "main"
Chapter 1: Eric "Blazefist" Jiang 

Cold office air, an uncooperative chair, a cramp in your toe. Three more market research reports to read. Someone two cubicles over grumbles about a client who sent six versions of the same Excel file, all of them "final".

Your phone buzzes. You stare at the message. "Opponent confirmed: Eric 'Blazefist' Jiang. 29th April."

You close it.

A newcomer. Last month, he knocked his opponent out with a flaming uppercut. There's a video of it: his fist connects with their jaw, fire trailing his arm in a long arc. Another time, he launched into a flying kick, missed, and toppled a folding chair.

The forums argue about him every day. Some nights he's on fire; other times he burns himself.

As for you, three months in, your jab's okay. Your wrists aren't. You still remember the first time you slammed a cross into the heavy bag. It moved. Sure, it was supposed to, but you want that feeling again.

Now you're refusing overtime and claiming you need to attend a cousin's wedding. Your team leader pauses before nodding. How can one person have so many cousins named "Winnie"?

And your next fight is against someone who's not allowed near petrol stations.

6:05pm. Still early enough to get to the gym.

*choice
    #Get a quick explanation of how the month works. [i](Recommended for first-time players.)[/i]
        *set tutorial_mode true
        Welcome to the circuit. Here's how each month works.

        Each month is split into two fortnights. In each one, you'll make two key choices:

        [b]Train.[/b] Focus on power, technique, toughness, mental game, or recovery. Keep your [b]energy[/b] at a reasonable level, or your stats will be penalised.

        [b]Visit.[/b] Spend time with one character. A visit may unlock additional training options, deepen your relationship, or grant [i]Boxing Insights[/i]. (Not this month, since you haven't made any connections yet.)

        At any time, you can click [b]Show Stats[/b] to see a current snapshot of your character.

        You'll only have enough time to complete the stories of one or two characters. Plan accordingly.

        When the month ends, you fight.

        *page_break
    #Skip explanation.
        *set tutorial_mode false
Tuesday, 2 April 2024

Engine fumes, curry fishballs, air-conditioner exhaust. In five minutes, sweat and leather and Tiger Balm.

Mong Kok's alleys are pasted with decaying flyers promoting questionable saunas and bygone concerts. Near the entrance to MK Fight Gym, a crumbling poster shows a child in uniform saluting. "Embrace National Identity, Love Hong Kong." The corner peels a little more every week. Nobody touches it.

You climb three flights of stairs, past the cook smoking in the stairwell, still in his white apron and fisherman's boots. The door creaks open. A ring, its ropes frayed, posts scuffed. Old photos and yellowed fight cards on a corkboard. The smell of old gloves, the smack of limbs on heavy bags. The ceiling fans rattle. Your shoes scrape the torn mats.

You breathe deeper. Your body knows what to do here.

How will you use the first fortnight?
*gosub_scene utils fortnight_choice
Monday, 15 April 2024
*gosub_scene utils show_stats
*set epithet "calendar salvager"
*set glutinous_rice_chicken_eaten true

Your fight against Eric Jiang is near.

In your tiny Mong Kok flat, your hands curl into fists, ready to hit some pads. The gym's five minutes away, and it's like a second home.

A flimsy calendar hangs on the wall, a promotional freebie salvaged from the office bin. [i]29th April[/i] is circled with thick black ink. You've barely enough time to nail down the fundamentals, let alone fight someone whose punches literally catch fire.

At MK Fight Gym, the mood is different. The cramped space on Tung Choi Street, usually full of trash talk, is quieter. The regulars know about your upcoming fight. Nods of recognition, of cautious respect. Coach Lam watches from the corner, arms folded across his faded T-shirt.

This is your last chance to sharpen your skills before you step into the ring.

*gosub_scene utils fortnight_choice
Monday, 29 April 2024
*gosub_scene utils show_stats

*if (boxing_insights_unspent > 0)
    *gosub_scene upgrades spend_insight_choices

You leave the office at 6pm on the dot. Brief nods to your colleagues, who nod back.

You squeeze into an MTR train, and the air conditioning makes you shiver, despite the crush of bodies. The signs for Yau Ma Tei and Jordan flash by. Your stomach tightens.

Tsim Sha Tsui. You ride the escalators up to shining skyscrapers. Visitors flood the streets. It feels different here, too clean.

Outside the Museum of Art, you pause as laser beams sweep the harbour. The tourists throng the promenade, but you're just another office worker, lost in the crowd.

Across Victoria Harbour, a thousand tiny lights gleam, waiting to see who burns.

*page_break Eric "Blazefist" Jiang.
*gosub eric_fight
*gosub_scene utils first_loss_notification
*finish End of Chapter 1.



*label eric_fight
*temp dc_easy 10
*temp dc_medium 14
*temp dc_hard 18
*set fight_momentum 5
*set trait_bonus_amount 2
*gosub_scene utils calc_adj_stats
*comment If the player trains two separate stats, they'll be at effective stats 14/14/8/8. If they train one stat twice, 18/8/8/8
Further east along the Tsim Sha Tsui waterfront, away from the tourist crowds. Waist-high metal barricades and rusting bleachers form a crude rectangle, floodlights at the corners illuminating a circle of thick rope in the centre. There's a small crowd on the bleachers, a few dozen strong, mostly staring at their phones. A bookmaker paces along the edge of the promenade, displaying odds and taking bets, his eyes glazed. A passing Star Ferry blares its horn, low and flat.

You're in the second match of the night against Eric "Blazefist" Jiang. His red gi catches the light as he warms up in his corner, black belt knotted twice in the traditional style, the fabric frayed only where the knot crosses. You look up at his face: dense eyebrows, neatly cropped hair. His square, heavyset jaw could belong to the bronze lions outside HSBC. He's bouncing on the balls of his feet as he shadowboxes, and the air seems to shimmer with his punches.

You size up the arena. The rope circle looks to be six metres across, laid over scuffed blue mats, with a one-metre safety strip separating it from the bleachers. On the far side, Victoria Harbour itself bumps right against the edge of the rope circle, a concrete railing at chest height the only protection against a tumble into the water.

Stretching in your corner, you adjust your headgear. The padding feels loose, and you can't get a comfortable fit. Three suited spectators, sticking out among the T-shirts and casual wear, watch with unreadable expressions. You shake your head, turning your attention back to wrapping your hands.

Done. Mouthguard in. You pull on your red 10 oz gloves, the insides stiff with dried sweat, and stand. The referee gestures you towards the rope circle.

*choice
    #Regulate your breathing and ground yourself.
        *gosub_scene utils increase_composure
        You let your arms hang loose, shoulders soft, and take a slow breath. In through the nose. Out through the mouth. You notice the floodlights, the crowd noise, Eric's warm-up, but they don't affect you. You're not here to react. You're new, but you're grounded.
    #Tune into the energy in the air.
        *gosub_scene utils increase_empathy
        You feel it before you move. A tightness in the chest. He hasn't looked your way, but his breathing's regular. Slower. He's grounding himself. You match it instinctively. The crowd fades.
    #Break the fight down before it begins.
        *gosub_scene utils increase_analysis
        You break it down piece by piece. Ring dimensions: six metres across. Ropes: low enough to step over, tight enough to cut off lateral movement. Lighting: harsh, angled. Hides high kicks, highlights feints, blinds you if you look up. Eric's stance: relaxed, but the bounce in his rear foot suggests aggression out of the gate. You tune out the crowd. This is just another problem to solve.

You tap your glove against his wrapped fist. The referee nods, steps back, and chops his hand downward. "Fight!"

You start cautiously, arms tight to your centreline, breath shallow. Eric sinks into a low stance. He draws both hands back near his right hip, palms cupped like they're holding water. A flicker of heat pulses between them. Then he pivots on his rear foot and drives forward in a single flowing thrust. His hands snap open, revealing a sphere of compressed light.

The hairs on your arms stiffen. His [i]Energy Wave[/i] rushes forward, no wider than your torso. The air ripples with distorted light.

You freeze, a half-second gone.

Almost on you.

*gosub_scene utils show_fight_momentum

*choice
    #Use a ${block} to weather the impact.@{fight_vision  [i](Toughness, Mental)[/i]|}
        *gosub_scene utils calculate_trait_bonus "composure"
        *if (((adj_toughness * 0.7) + (adj_mental * 0.3)) + trait_bonus_applied) >= dc_easy
            You set your guard firmly as the energy projectile crashes against your defence with a dull thud, the force jarring your arms. Eric rolls his shoulders back as you recover. "Still standing, huh? Most people tense up too much and eat it."
        *else
            You raise your defence too late, the energy projectile crashing into your raised gloves. The force drives your own gloves into your face with a blunt smack. You stumble, nearly falling. Eric takes the centre, bouncing on his feet.
            *set fight_momentum -1
    #Touching that energy projectile can't be good. Attempt a sidestep.@{fight_vision  [i](Technique, Mental)[/i]|}
        *gosub_scene utils calculate_trait_bonus "analysis"
        *if (((adj_technique * 0.7) + (adj_mental * 0.3)) + trait_bonus_applied) >= ((dc_medium * 0.5) + (dc_hard * 0.5))
            Your legs move by instinct, your torso barely avoiding the projectile. Your trailing leg brushes the outer rope, the coarse hemp scraping your ankle. Spectators gasp as the energy wave hisses past and splashes against the harbour railing. Eric's still recovering from throwing the energy wave, and you step in with a ${jab}. It thuds into his shoulder. He steps back, arms raised.
            *set fight_momentum +1
        *elseif (((adj_technique * 0.7) + (adj_mental * 0.3)) + trait_bonus_applied) >= dc_medium
            You manage to dodge most of the energy projectile, suffering only a glancing blow to your ribs that still sends a sting through your side. As you reset, Eric finishes his recovery from the energy wave. "Clever footwork. Most people freeze," he says, adjusting his stance.
        *else
            You try to evade the energy projectile, but you're caught off guard, the projectile striking you in the chest before you finish your dodge. The impact steals your breath and shoves you two steps towards the edge. Your foot hits the boundary rope, and your retreat halts. Eric takes the centre, bouncing on his feet.
            *set fight_momentum -1

    #Throw a quick ${jab} to disperse the Energy Wave.
        You try to dissipate the energy projectile by jabbing it. It drives your gloved fist back, making you punch yourself in the face. Eric pauses, brows furrowed.
        *set fight_momentum -1

A shout: "Yeah! The fireball is the best part!"

You and Eric glance over. It's a young man wearing thick glasses. The referee shushes him, and he sits back down.

*if fight_momentum <= 4
    No time to dwell. You circle around his front kick. You duck his roundhouse. You fire off jabs into his high block. Eric bounces on the balls of his feet, slides forward, shrinking your space, but you keep throwing.

    When you land a clean cross against his step punch, people look up from their phones. Eric's footwork quickens. "Good shot," he says, as energy flares around him.
*elseif fight_momentum = 5
    No time to dwell. You circle around his front kick. You duck his roundhouse. You fire off jabs into his high block.

    People look up from their phones when you land a clean cross against his step punch. He tightens his stance and sets his jaw. "Your form is good," he remarks, as energy flares around him.
*else
    No time to dwell. You circle around his front kick. You duck his roundhouse. You fire off jabs into his high block.

    You land a clean cross against his step punch, countering Eric at the start of his lunge. The crowd is on its feet.

    "You're good." That's all he says, as energy flares around him.

He shifts his weight with a feint left, then pushes off hard from his rear leg, launching into a spinning jump. One leg tucks in tight, the other whips outwards — horizontal, fast, spinning. His extended leg slices straight towards your head.

*gosub_scene utils show_fight_momentum

*choice
    #Raise your guard and angle your ${block} towards his leg.@{fight_vision  [i](Toughness, Power)[/i]|}
        *gosub_scene utils calculate_trait_bonus "composure"
        *if (((adj_toughness * 0.5) + (adj_power * 0.5)) + trait_bonus_applied) >= dc_medium
            You raise your guard and angle it into the strike. One. Two. Three. Three times his [i]Tornado Kick[/i] smashes into your forearms, and three times you shift your weight to absorb it, moving your arms with the impact to angle it off.

            He lands. Instead of attacking, you reset your stance. Your forearms pulse faintly.

        *else
            *set fight_momentum -1
            You raise your guard and angle it into his [i]Tornado Kick[/i]. The first hit slams into your forearms. The second and third send you stumbling back, until your heel snags the rope.

            He lands smoothly and resets. "Still standing," he says, his eyes narrowing.

            You shake out your trembling arms, bring your gloves back to your cheeks. Just in time.

    #Backstep until he runs out of momentum.@{fight_vision  [i](Technique, Mental)[/i]|}
        *gosub_scene utils calculate_trait_bonus "analysis"
        *if (((adj_technique * 0.7) + (adj_mental * 0.3)) + trait_bonus_applied) >= dc_medium
            Your feet retreat in rapid half-steps, staying just ahead as his [i]Tornado Kick[/i] slices the air, so close that wind brushes your face. On the third rotation, his momentum starts to slow. You pivot fractionally. He lands, crouching, back turned to you.

            You stay still as he turns around. Eric straightens up and looks at you, an eyebrow raised. "Surprised you didn't go for it," he says.

            You reset your stance and breathe steady.

        *else
            *set fight_momentum -1
            Your feet are already moving, rapid half-steps, trying to stay ahead of his [i]Tornado Kick[/i]. The first kick misses, cleaving the air, so close that a wind brushes your face. But Eric is faster than you expected. The second kick crashes into your shoulder, a blunt and heavy impact that numbs your muscles. The third one hammers into your forearms before they're fully set. You stagger.

            Your heel catches on the rope circle. No more room. Eric lands in a crouch. You both reset at the same time.

    #Attempt to duck under the whirling kicks.@{fight_vision  [i](Technique, Toughness)[/i]|}
        *gosub_scene utils calculate_trait_bonus "analysis"
        *if (((adj_technique * 0.5) + (adj_toughness * 0.5)) + trait_bonus_applied) >= ((dc_medium * 0.8) + (dc_hard * 0.2))
            *set fight_momentum +1
            You drop nearly to the floor as Eric's [i]Tornado Kick[/i] slices the air overhead. He spins twice more before landing with his back to you.

            You rise, lunging forward, and slam a cross into his ribs as he turns. The impact reverberates up your arm as it drives the air from his lungs. He staggers, plants his feet, and brings his forearms back up.

            "Impressive reactions. Didn't expect that."

            You settle back into your stance and breathe steady.

        *elseif (((adj_technique * 0.5) + (adj_toughness * 0.5)) + trait_bonus_applied) >= dc_medium
            You drop to the floor as Eric spins past in his [i]Tornado Kick[/i]. It's too low, your face touching the mat. He whirls past you, but now you're stuck, all your weight on your arms. Your gloves slip against the mat as you scramble upright just as he lands and resets.

            "Was worth a try," he comments.

            You settle back into your stance and breathe steady.

        *else
            *set fight_momentum -2
            Too slow. Eric's [i]Tornado Kick[/i] catches your forehead. Another kick catches you high on the arms, staggering you.

            The next one catches you on the shoulder and slams you down. You land on your back, hard, skidding on the mat.

            The referee starts the count. It's hard to focus with the floodlights blinding you. You rise by seven and blink hard. Legs still shaky, but everything else steady.

            Eric gives you space. Once you're set, he advances.

More. You throw jabs, you throw the jab-cross, you even throw the jab-cross-hook. Eric meets them with hard blocks, comes back with side kicks and straight punches. Sweat, breath, grunts. Heavier steps, sagging guard.

Eric takes a step back and sinks low into Horse Stance: base wide, hips locked. His fists, near his hips, glow amber.

He waits.

*gosub_scene utils show_fight_momentum

*choice
    #Throw a light jab, then punish his likely counterattack.@{fight_vision  [i](Technique, Mental)[/i]|}
        *gosub_scene utils calculate_trait_bonus "analysis"
        *if (((adj_technique * 0.7) + (adj_mental * 0.3)) + trait_bonus_applied) >= ((dc_medium * 0.5) + (dc_hard * 0.5))
            You throw out a feather-light ${jab}, more of a tap than a real punch. Then you turtle up into a tight guard.

            Eric absorbs your jab and responds with a palm thrust, but it bounces off your gloves. You step in with a one-two while his arms are extended, scoring cleanly.
            *set fight_momentum +1
        *else
            You test Eric with a feather-light ${jab}, more of a tap than a real punch. But your timing is off, and you take too long raising your guard.

            Eric's palm thrust arrives before you're ready and smacks you in the chest. You stumble back, the impact driving the air from your lungs.
            *set fight_momentum -1
    #Keep your distance, waiting out his counter.
        You maintain distance, guard tight, eyes fixed on Eric. He exhales and straightens, the glow around his fists dissipating. He advances again.

Then the air tightens around Eric's fists. Flame erupts, a dry heat washing over you. His feet dig in, his knees bend.

You see every detail as he rises. The knotted belt whipping on his crimson [i]gi[/i], the veins standing out on his fist, his clenched teeth. Burnt ozone, the low roar of fire.

Then he explodes upwards, fist rising in a blazing uppercut.

You're in its path.

*temp match_result 0
*gosub_scene utils show_fight_momentum
*temp uppercut_response "none"
*choice
    #Stand your ground. Brace for impact.@{fight_vision  [i](Toughness, Power)[/i]|}
        *set uppercut_response "guard"
        *gosub_scene utils calculate_trait_bonus "composure"
        *if (((adj_toughness * 0.5) + (adj_power * 0.5)) + trait_bonus_applied) >= dc_medium
            *set fight_momentum +1
        You sink in, legs set, breath held, core locked.

    #Try to sidestep at the last second.@{fight_vision  [i](Technique, Mental)[/i]|}
        *set uppercut_response "sidestep"
        *gosub_scene utils calculate_trait_bonus "analysis"
        *if (((adj_technique * 0.7) + (adj_mental * 0.3)) + trait_bonus_applied) >= ((dc_medium * 0.5) + (dc_hard * 0.5))
            *set fight_momentum +1
        You shift your weight to your lead leg. To the side. Wait.

*if fight_momentum < 3
    *if uppercut_response = "guard"
        The [i]Rising Uppercut[/i] drives upwards in a tight leap, fire spiralling from Eric's fist. The trailing flame lashes behind him. You try to raise your arms, but they're too slow, too heavy. His punch forces your raised gloves back into your face before slamming into your chin.

        Your jaw snaps back. You collapse onto the mat. The ref starts the count, but even sitting up is like dragging your body through water. You're done.
    *elseif uppercut_response = "sidestep"
        The [i]Rising Uppercut[/i] drives upwards in a tight leap, fire spiralling from Eric's fist. The trailing flame lashes behind him. You're a half-step too slow. Before you can move, his fist catches you clean under the jaw, snapping your head back hard.

        The ring tilts. Your legs give out. You crash to the mat. The ref starts the count, but even sitting up is like dragging your body through water. You're done.
    *else
        *bug invalid choice
    *set match_result 1

*elseif fight_momentum < 5
    *if uppercut_response = "guard"
        The [i]Rising Uppercut[/i] drives upwards, fire spiralling from Eric's fist. The trailing flame lashes behind him. You brace. The impact rattles through your arms, through your shoulders.

        He lands hard, off balance, grey smoke trailing from his fist. You throw your ${combo} with the last of your strength, your gloves thudding against his chest.
    *elseif uppercut_response = "sidestep"
        The [i]Rising Uppercut[/i] drives upwards, fire spiralling from Eric's fist. The trailing flame lashes behind him. You throw yourself outside the arc. Still close enough to feel the heat streak past your jaw.

        You counter with your ${combo}, but the hits land without weight.
    *else
        *bug invalid choice

    He chambers his arms, another [i]Energy Wave[/i] coming out fast, slamming into your chest. You lose your footing, and he sweeps your legs out from under you.

    You lie there, dazed, staring vacantly at the bright floodlights.

    *set match_result 2
*else
    *if uppercut_response = "guard"
        The [i]Rising Uppercut[/i] drives upwards, fire spiralling from Eric's fist. The trailing flame lashes behind him. You absorb the shock on your forearms. The impact rattles through your arms, through your shoulders.
    *elseif uppercut_response = "sidestep"
        The [i]Rising Uppercut[/i] drives upwards, fire spiralling from Eric's fist. The trailing flame lashes behind him. You lunge sideways, heat streaking past your jaw.
    *else
        *bug invalid choice

    He lands hard, off balance, grey smoke trailing from his fist.

    Now.

    You close in with your ${combo}, connecting hard and breaking his guard. You step forward and finish with an uppercut that catches him right on the jaw.

    His head snaps back, and he drops.

    The ref starts counting. A hush falls over the crowd.

    Four. Five.

    Eric sits up slowly and glances at you. He smiles, exhales, then leans back on his palms. Makes no move to rise.

    Nine... ten.

    Breathing hurts. The strength leaves your arms.
    *set match_result 3

*page_break
*if match_result = 1
    "The winner is Jiang!" the referee announces, raising his hand. You catch your breath, then push yourself up.

    Eric shakes your hand, his grip firm, his hand uncomfortably hot. "You made a good effort. Solid fundamentals. You just need more experience."

    "Thanks. I've been training for four months. I learnt a lot today."

    "Keep at it." He pauses. Then he leans in. "I train at Eastside Combat Club most weekdays. You're welcome to come over for a training session."

    He bows, then walks off. Your heartbeat slows, and your sweat-soaked shirt feels cold against your skin.

    An official hands you a laminated A4 sheet and turns away. You look at it. It's a black-and-white printout with a curly border and clip-art petals. "Certificate of Loss". Your name is written on the plastic in blue marker, still wet.

    "This Certificate Acknowledges That ${first_name} ${last_name} Is The Loser Of The Match Held On 29 April 2024." The signature under the plastic is an illegible scrawl.

    You lost, but you still fought. That's enough.
    *set record_losses +1
    *set eric_result "loss"
*elseif match_result = 2
    "The winner is Jiang!" the referee announces, raising his hand. You catch your breath, then push yourself up.

    Eric shakes your hand, his grip firm, his hand uncomfortably hot. "You did very well. Good combat sense. How long have you been training for?"

    "Thanks. I've been training for four months."

    His eyes widen. "Four months? That's really quick progress." Then he leans in.

    "Look, I train at Eastside Combat Club most weekdays. You should drop by sometime. I'd like to train with you."

    He bows slowly, then walks off. Your heartbeat slows, and your sweat-soaked shirt feels cold against your skin.

    An official hands you a laminated A4 sheet and turns away. You look at it. It's a black-and-white printout with a curly border and clip-art petals. "Certificate of Loss". Your name is written on the plastic in blue marker, still wet.

    "This Certificate Acknowledges That ${first_name} ${last_name} Is The Loser Of The Match Held On 29 April 2024." The signature under the plastic is an illegible scrawl.

    Maybe next time you'll win. Or you might lose again. No matter. Today, you fought. That's enough.
    *set record_losses +1
    *set eric_result "loss"
*elseif match_result = 3
    "The winner is ${last_name}!" the referee announces, raising your hand. Eric pushes himself up slowly. He meets your gaze. Then he bows to you, bending from the waist. The crowd is on their feet as they shout your name.

    "Impressive combat sense. How long have you been doing this?"

    "Thanks. I've been training for four months."

    Eric's jaw drops. "Four months!" He looks you up and down.

    "Damn. Four months. That's crazy."

    Then he leans in. "Look, I train at Eastside Combat Club most weekdays. I think we could learn a lot from each other. Come by sometime."

    He bows again, then walks off. Your heartbeat slows, your sweat-soaked shirt feeling cold against your skin.

    An official hands you a laminated A4 sheet and turns away. You look at it. It's a black-and-white printout with a curly border and clip-art petals. "Certificate of Victory". Your name is written on the plastic in blue marker, still wet.

    "This Certificate Acknowledges That ${first_name} ${last_name} Is The Winner Of The Match Held On 29 April 2024." The signature under the plastic is an illegible scrawl.

    You won. Maybe you'll win your next match, too. And if not, it doesn't matter. You fought, and that's enough.
    *set record_wins +1
    *set eric_result "win"
*else
    *bug Unknown match result
*set eric_subplot_status "available"
*set eric_unvisited_timer 0
*return