Skip to content

Starfall Royale: world rendering, shield regen, HUD polish, smarter bots - #10

Draft
cloudygetty-ai wants to merge 41 commits into
mainfrom
claude/starfall-royale-prototype-OYwGL
Draft

Starfall Royale: world rendering, shield regen, HUD polish, smarter bots#10
cloudygetty-ai wants to merge 41 commits into
mainfrom
claude/starfall-royale-prototype-OYwGL

Conversation

@cloudygetty-ai

@cloudygetty-ai cloudygetty-ai commented May 16, 2026

Copy link
Copy Markdown
Owner

Summary

Gameplay systems

  • Shield regeneration — shield begins recharging at 20/s after 4s with no incoming damage; any hit (bullet, meteor AoE, or environment DPS) resets the delay; respects maxShield
  • Fracture Core visibilityFractureCoreView renders glowing colored circles on the world map (CDR=blue, AMP=red, MUT=purple); viewport culling keeps it efficient
  • Helix Relay world renderingHelixRelayView renders a capture-radius ring (purple → yellow → green by state), capture progress indicator, and diamond tower icon; shows % while capturing
  • Gravity zone + Time Echo zone visuals — purple fading rings for gravity pull-fields; cyan fading rings for echo distortion zones; both fade to zero at maxAge

HUD polish

  • Reload progress bar — yellow fill bar below weapon ammo while reloading, driven by reloadStartMs on Weapon (zero-cost since game tick rerenders every 16ms)
  • Shield regen indicator — faint cyan trailing segment on shield bar while delay counts down; suffix appended to value while actively regenerating
  • Low ammo warning — ammo label turns red+bold at ≤ 5 rounds
  • Relay capture bar — progress bar + label when player stands in capture radius
  • Passive stat chips — shows +X%DMG, X%ARMOR, +X%SPD etc. derived from live player stats
  • Zone alertsGRAVITY ZONE / ECHO ZONE badge when player is inside one
  • Kill streak detection — DOUBLE KILL / TRIPLE KILL / NxKILL STREAK banners
  • Elimination bannerYOU ELIMINATED [name] for 2.5s on player kills
  • Pickup feedback — stacked fade-out labels for weapon/gear/shield/health pickups
  • Persistent crosshair — H+V lines + center dot at 0.6 opacity
  • Danger vignette — red 44px border frame when outside zone, low HP, or knocked

AI improvements

  • Bot reload — tick-based (BotBrain.reloadEndMs timestamp), no setTimeout; bots now correctly reload and resume firing
  • Bot weapon selectionselectBestWeaponSlot picks shotgun/SMG (<140u), sniper/DMR (>350u), or highest-DPS fallback
  • Bot strafing — during combat in shoot range, bots move perpendicular to the enemy; strafe direction flips every 1-2s for unpredictability
  • Bot fracture core seeking — bots without an active core seek any FractureCore within 450u (risk/reward trade-off vs corruption)
  • Bot supply drop + relay routing — bots route to landed supply drops (500u range) and uncaptured relays (600u range)

Minimap

  • Helix relays shown as diamonds (outline → partial fill → filled green by capture state)
  • Fracture Cores shown as colored 6×6 dots
  • Supply drops shown as squares (dim while descending, bright on landing)

Stats

  • damageDealt tracked per player; shown on Game Over screen
  • 336 tests, 0 failures; npx tsc --noEmit clean

Test plan

  • npm test — 336 tests, 0 failures
  • npx tsc --noEmit — 0 errors
  • In-game: take damage → wait 4s → shield begins refilling; new hit resets it
  • In-game: reload progress bar fills yellow; completes when isReloading clears
  • In-game: fracture core visible as glowing circle on world map and minimap dot
  • In-game: helix relay shows ring, tower, progress % while capturing
  • In-game: gravity zone renders purple fading ring; echo zone renders cyan fading ring
  • In-game: bots strafe sideways during combat rather than charging straight
  • In-game: bot picks up fracture core when one is within 450u and it has no held effect

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL

claude added 30 commits April 30, 2026 02:34
Single-file Python/Pygame game where a randomised meteor shower replaces
the traditional battle-royale storm.  Key mechanics:
- Meteors spawn at escalating frequency and radius as time progresses.
- 1.5 s warning circle (pulsing ring + countdown) telegraphs each strike.
- Nine Reinforced Shelter zones grant full blast immunity.
- Green health packs respawn every 15 s and restore 35 HP.
- Screen-shake on impact, particle debris, and a danger-intensity bar.
- Adaptive difficulty: spawn interval shrinks from 3 s down to 0.35 s,
  blast radius grows from 28 px up to 70 px, over ~3 minutes of play.

Run with: python3 starfall_royale.py

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Three pre-existing issues were breaking the Type Check · Lint · Test CI job:

1. TypeScript: App.tsx passed onStart/onPlayAgain props that LobbyScreen and
   GameOverScreen don't declare — screens drive navigation via the store.
   Removed the dead props from the JSX call-sites.

2. TypeScript: logger.ts used process.env.NODE_ENV which has no type in the
   React Native environment. Replaced with the built-in __DEV__ global.

3. Lint: no .prettierrc existed, so prettier defaulted to double-quotes while
   the codebase uses single-quotes — causing 146 prettier/prettier errors across
   every file. Added .prettierrc with singleQuote:true to align them, then ran
   eslint --fix to reformat. Also removed two unused destructured variables in
   GameScreen.tsx (updateGameState at line 25, update alias in handleReload).

All 98 tests pass, type-check is clean, lint reports 0 errors.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
The native Android shell is generated by react-native init and has not
been bootstrapped in this repo yet. Without android/gradlew the build
step always fails. Guard the job with hashFiles('android/gradlew') so
it is skipped rather than failing every PR until the shell is added.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Adds 21 new weapon types across all major battle-royale categories.
Every change is data-driven — no new control-flow, no new files.

New weapons by category:
  Pistols:    pistol, revolver, hand_cannon, burst_pistol
  SMGs:       compact_smg, suppressed_smg
  ARs:        burst_ar, heavy_ar, thermal_ar
  Shotguns:   tactical_shotgun, heavy_shotgun, drum_shotgun
  Snipers:    semi_sniper, heavy_sniper, hunting_rifle
  Marksman:   marksman_rifle
  LMG:        lmg
  Explosive:  rocket_launcher
  Special:    crossbow, minigun, rail_gun

Touch points updated:
  types/game.ts        — WeaponType union (TypeScript-enforced exhaustiveness)
  gameStore.ts         — base stats table + loot pool
  WeaponService.ts     — bot aim-spread table
  HUD.tsx              — WEAPON_LABELS display table

All 98 tests pass, type-check clean, lint 0 errors.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Complete implementation of the Fall of the Fracture meteor event system:

Fracture Cores
- Explosive meteors (80%) spawn a FractureCore at impact site
- Three effects: cooldown_reduction (charges 2× faster), damage_amp (+40% outgoing),
  ability_mutation (random 10s effect)
- Corruption drains HP/s while held — greed vs survival loop
- Cores auto-pick-up within 60 units

Gravity & Echo Zones
- Gravity meteors (15%) create 30s pull zones (60 units/s toward center, 0.6× speed)
- Echo meteors (5%) create 20s time echo zones (visual disruption layer)

Mid-match Objectives
- 5 Helix Relays scattered across map; capture in 5s, rewards a loot cache
- Relays decay when unoccupied, reward on 60s cooldown

Supply Drops
- Airdrop every 3 minutes (8s descent warning visible on map)
- Always epic/legendary tier weapon

Comeback Mechanic
- Bounty system: highest-kill player (≥3 kills) is marked as target
- Eliminating the bounty drops bonus loot cache at kill site

Character System
- 15 characters with unique passives and abilities
- Each character has a meteor quip (displayed 3.5s after nearby impact)
- LobbyScreen character selection with long-press detail modal

HUD
- Ability button with cooldown countdown / active duration display
- Corruption indicator (purple HP bar + drain rate)
- Bounty marker on kill chip when player has bounty
- Character quip banner on meteor impact

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…r quips

Each character now has a unique accentColor that drives card borders, ability
tags, name highlights, summary bar, and detail modal — replacing all hardcoded
#ffcc00 values. Cards show a tinted placeholder (title initial) or a portrait
image when portraitSource is set (supports local require() assets and remote
URLs). Added meteorQuip to Character type and all 15 character definitions.
Generated accent-colored placeholder portraits (400x520 PNG) for all 15
characters using their unique accentColor. Static require() calls isolated
to portraits.ts so Metro can resolve assets at bundle time without scattering
eslint-disable across characters.ts. Swap any PORTRAITS entry to null to
revert to the initial-letter placeholder, or replace the PNG file to swap
in real artwork without any code changes.
… effect

Vex (-25%), Sable (-20%), and Kael (-20%) reload passives were silently
ignored because startReload used weapon.reloadTime directly. Multiplied by
player.reloadMult before passing to setTimeout. Added timing test that
asserts a 0.5× player completes reload in under 350ms while a 1× player
takes at least 350ms on the same 400ms-base weapon.
…Source type

Added three assertions to the character roster test:
- accentColor matches /^#[0-9a-f]{6}$/i — catches typos and 8-char values
- all accentColors are unique — prevents copy-paste collisions across characters
- portraitSource is number or null — enforces Metro asset type contract

Mocked portraits module with numeric IDs so tests match Metro production
behavior rather than Jest's { testUri } asset transformer output.
… tests

1. src/core/balance/constants.ts — all magic numbers in one place
   (PLAYER_SPEED, FRACTURE_CORE_DAMAGE_AMP, JAX_HP_DRAIN_DPS,
   METEOR_WARNING_MS, ECHO_ZONE_CHARGE_RATE_MULT, etc.)

2. Meteor warning phase — MeteorImpact now has a 2s incoming countdown
   (IncomingMeteor type). MeteorZoneOverlay renders a shrinking warning
   ring per incoming meteor; ring turns red in the final 500ms.

3. Time Echo Zone gameplay — players inside charge abilities at 0.5x rate
   and move at 0.85x speed. Reality malfunctions, not just the UI.

4. Anti-stacking — players can hold only one Fracture Core at a time.
   Explicit guard in tickFractureCores with WHY comment.

5. Simulation tests — simulateTicks helper + 6 match-flow assertions:
   10s smoke test, bounty threshold, supply drop bounds, corruption floor
   at 1 HP, Helix Relay cooldown enforcement, second-core pickup blocked.
…o bots

- Add BOT_SPEED (3), BOT_AGGRO_RANGE, BOT_SHOOT_RANGE, BOT_LOOT_RANGE, ABILITY_SPEED_BOOST_MULT to constants.ts
- BotService now imports all AI tuning values from core/balance instead of local magic numbers
- Bots apply bot.speedMult so character passives (Jax +25%, Magnus -10%) work for AI too
- spawnMeteorEffects uses GRAVITY_ZONE_RADIUS/PULL_STRENGTH/MAX_AGE_MS and ECHO_ZONE_RADIUS/MAX_AGE_MS instead of hardcoded literals
- BOT_SPEED raised from 2.5 → 3 (75% of PLAYER_SPEED — bots are threatening but still outrunnable)

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…ndown

iOS bundle identifier, BGTaskScheduler ID, and Android package name now
use the project owner's namespace instead of a generic placeholder.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…, supply countdown

- Right joystick now fires automatically when deflected >25% — aims in stick direction
  instead of auto-targeting nearest enemy; FIRE button also uses aim direction
- isShooting flag is now acted on each tick (was declared but never read)
- HUD incoming meteor warning uses real IncomingMeteor countdown, not the spawn timer
- HUD shows green supply drop chip (📦 Xs) in the last 30s before a crate lands
- LOOT_PICKUP_RANGE added to constants.ts; GameScreen imports TICK_RATE_MS + LOOT_PICKUP_RANGE
  from balance instead of local magic numbers

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Death loot drops
- Eliminated players now drop all non-pickaxe weapons at their death position
  (slots staggered +/-18 units to avoid overlap), ammo refilled to full mag
- Bounty bonus drop still appended on top; kill path always returns updated lootDrops

Supply drop visuals
- New SupplyDropView component: shows shrinking yellow landing ring + countdown
  while descending, golden crate icon once landed
- GameMap renders state.supplyDrops (were previously invisible)

Minimap
- New Minimap component: 130×130 overlay in top-right corner
- Shows shelter zone ring, next-zone ring, blue player dot, red bot dots,
  yellow supply drops, and red incoming meteor positions
- Mounted directly in GameScreen so it has access to full game state

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Gear system:
- New Gear type with 4 slots: helmet, chest, legs, gloves
- Each piece additively boosts HP, shield, resistance, speed, damage, or reload
- Stats scale by rarity (common → legendary) with slot-appropriate themes
  - Helmet: HP + damage resistance
  - Chest: HP + shield + resistance (biggest defensive piece)
  - Legs: HP + movement speed
  - Gloves: weapon damage + reload speed
- 30% of scattered loot drops now include a gear piece
- pickUpLoot diffs old vs new gear stats so swapping gear is always clean
- Bots pick up gear and upgrade when a higher rarity piece is found
- HUD shows all 4 gear slots above the weapon bar (rarity-colored borders)

Ability fixes:
- Jax's rapid_fire now actually doubles fire rate in both auto-fire
  (right joystick hold) and manual FIRE button paths in GameScreen
- All other ability effectTypes were already wired; rapid_fire was the
  only one missing engine-side handling

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…up, supply drop gear

- Knocked/downed state: health→0 sets status 'knocked' (4s bleed-out timer) instead of
  immediate elimination; any further damage or timer expiry finishes the player
- Kill feed: KillFeedEntry type added to GameState, populated on elimination (fireShot
  and tickKnockedPlayers), displayed in HUD top-right with 5s TTL
- triggerPlayerAbility: pure engine export covering all 15 characters; bots now call
  it when engaging an enemy and ability is off cooldown
- Bot ability stagger: initial abilityChargeMs randomised per bot so they don't all
  fire abilities simultaneously at match start
- Hit markers: screen-side detection compares player health before/after fireShot;
  120ms red crosshair flash centered on screen
- Ammo pickup: loot.ammo now applied to active weapon (capped at magazineSize)
- Supply drops now include legendary gear in addition to the epic/legendary weapon
- gear.ts extracted to utils so core/gameEngine can import it without layer violation
- gameStore.triggerAbility delegates to engine's triggerPlayerAbility (no duplication)

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Adds a 5-panel lore screen that plays once on first launch, narrating
the world of Helix Corporation, the SIGIL orbital weapon, Fracture Cores,
and Helix Relays.

Adds 5 selectable environments in LobbyScreen (Operative / Environment
tabs): Fractured Metropolis, Cryo Wastes, Ashfall Crater, Signal Station,
Verdant Decay — each with distinct visual themes (MapTheme propagated to
GameMap and Minimap) and gameplay modifiers applied at match init:
- lootCountMult: scales scattered loot
- playerSpeedMult: applied to every player's speedMult at spawn
- supplyDropIntervalMs: overrides the 3-minute default
- outsideZoneDps: continuous HP drain outside shelter (Ashfall: 8 DPS)
- meteorFrequencyMult: persisted in Bombardment.meteorFrequencyMult
  and re-applied each phase transition (Ashfall: 2×, Cryo: 0.75×)

tickEnvironmentHazard added to GameEngine tick pipeline to drive the
outside-zone DPS; knocked players are not drained further.
StoryScreen state lives in App.tsx (not GameState) so resetGame never
re-triggers the intro.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…ild material switch

HUD additions:
- Match timer (MM:SS) in top-left of top bar, computed from startTime each render
- Zone type alert chip ("GRAVITY ZONE" / "ECHO ZONE") when player is inside a
  meteor-spawned effect zone; color-coded purple/blue
- Build material cycle button (WOOD/STON/META) below BUILD button when in build mode

PlayerSprite improvements:
- Knocked players now render at 50% opacity + 0.75 scale + gray color; previously
  invisible because GameMap filtered them to alive-only
- Ability-active glow ring around the sprite, color-mapped to effect type:
  immunity=blue, speed=yellow, rapid_fire=orange, damage_boost=red

GameMap: render knocked players alongside alive players (status !== 'eliminated')

GameScreen: environment name banner at match start (3s, uses mapTheme.accentColor)

GameStore: switchBuildMaterial action cycles wood→stone→metal for the human player

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…s on map

Bot names: 40-name pool of Helix operative codenames (Phantom, Cipher, Wraith,
Nova, etc.) — shuffled each match so the field feels different every run.
Previously all bots were named Bot1..N.

GameResult now includes environmentId; GameOverScreen shows the environment
name above the victory/defeat title and reformats the winner callout to a
more styled row. Kill count is highlighted orange when > 0, placement gold
on win.

MapTerrain component added: deterministic procedural building footprints
(seeded LCG from environmentId + map dimensions) rendered between the
ground and all gameplay elements. 35 buildings per map with occasional
inner courtyard cutouts; colors derive from mapTheme.accentColor and
groundColor so each environment has matching architecture.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
… polish

Gear drops: bots now drop all equipped gear pieces (helmet, chest, legs,
gloves) as separate loot drops when eliminated, in addition to their weapons.
Makes bot elimination meaningfully rewarding — progression through the match.

Minimap: Helix Relay positions now shown as rotating diamonds (◆) colored
green when captured, dim outline when uncaptured, partial fill while contesting.
Gives players persistent spatial awareness of the objective map.

LootDropView: expanded weapon abbreviation table covers all 27 weapon types
(no more '?' fallback); gear drops show slot label (HLM/CHT/LGS/GLV) with
rarity color; support for shield/medkit/ammo drops; legendary items get an
orange glow shadow; box size increased from 24×12 to 32×18 for readability.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- HUD shows a progress bar and "CAPTURING RELAY" label when the human
  player stands within a Helix Relay's captureRadius; turns green on
  capture ("RELAY SECURED")
- Pass helixRelays from GameScreen to HUD (was missing)
- Each match now assigns a unique random character (passive/ability) to
  every bot, drawn from the full roster minus the human's selection,
  so the enemy field varies meaningfully between runs

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…e stat

- FractureCoreView: color-coded glowing circles (CDR=blue, AMP=red,
  MUT=purple) now rendered on the game map and as minimap dots — cores
  were previously invisible to the player
- Minimap: fractureCores prop wired through GameScreen; tiny colored
  dots match the world-space view
- Floating damage numbers: appear at the hit position and float upward,
  fading over 900ms; damage = shield absorbed + health taken; shown for
  both joystick auto-fire and manual FIRE button taps
- damageDealt: tracked per player in GameEngine.fireShot (cumulative),
  surfaced in GameResult, and displayed as "Damage Dealt" on GameOverScreen

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- Bots now pursue objectives when no enemy is in aggro range:
  Priority 4 = route to a landed supply drop (BOT_SUPPLY_SEEK_RANGE=500)
  Priority 5 = capture an uncaptured Helix Relay (BOT_RELAY_SEEK_RANGE=600)
  Priority 6 = wander (was Priority 4)
- Kill streak feedback: DOUBLE KILL / TRIPLE KILL / NxKILL STREAK
  banner appears for 2.2s when the human scores successive kills within
  an 8s window; counts are tracked in a ref to avoid tick dependency

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- Pickup feedback: when the human auto-picks up loot a stack of
  fade-out labels appears bottom-left ("GOT AR", "+50 SHIELD", "+25 HP",
  "+30 AMMO") for each item type in the drop, staggered 120ms
- Zone timer: was "ZONE CLOSING" with no time data while shrinking;
  now shows "CLOSING Xs" so players know when the squeeze ends
- Ability label: small character ability name appears above the ABILITY
  button so players know what they're pressing without opening lobby

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- Bots now select the best available weapon based on engagement range:
  shotguns/SMGs at close range (<140u), snipers/DMRs at far range
  (>350u), highest-DPS weapon for everything else — significant
  improvement for bots with full loadouts
- Passive stat reminder: +DMG / %ARMOR / +SPD / +HP/EL chips appear
  below the materials row in HUD, derived from player stats so no
  core/ import needed from a component

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- Bots now auto-reload when active weapon runs out of ammo; reload time
  is bot.reloadMult-adjusted and tracked via BotBrain.reloadEndMs so
  bots are never stuck unable to shoot in late game
- Build ghost: when human is in build mode, a semi-transparent rectangle
  shows where the next piece will land (60u ahead, material-tinted color,
  rotated to the nearest 90°); ramps shown at half height

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- Crosshair: persistent semi-transparent + reticle with center dot
  rendered at screen center; overlays the world map but doesn't
  block input (pointerEvents=none); disappears under hitMarker flash
- Elimination banner: "YOU ELIMINATED [name]" appears at 18% from
  top for 2.5s when the human player scores a kill, color-coded in
  red and distinct from the top-right kill feed

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- Danger vignette: a red border-frame overlay (pointerEvents=none)
  appears at screen edges when outside the shelter zone (opacity 0.4),
  health < 30 (0.3), or knocked (0.6); instant feedback without
  covering the playfield
- Low ammo warning: weapon ammo label turns red + bold when currentAmmo
  <= 5 on the active or any visible slot in the weapon bar

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- HelixRelayView renders on the game map (was only on minimap before):
  captures radius ring (purple/yellow/green by state), diamond center
  tower with the ⊕ icon, and a live "X%" progress label while capturing
- Added to GameMap before Fracture Cores so terrain draws underneath

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
claude added 4 commits June 15, 2026 02:05
Purple fading rings for gravity meteor pull-fields; cyan fading rings for
time echo reality-distortion areas. Opacity decays linearly with age/maxAge
so players can see hazards approaching expiry.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Players regenerate 20 shield/second once SHIELD_REGEN_DELAY_MS elapses
since the last incoming hit (bullet, meteor AoE, or environment hazard).
Any new damage resets the delay. Regen stops when shield reaches maxShield
or the player is not alive.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Weapon slots now show a yellow fill bar while reloading, driven by
reloadStartMs on Weapon (set by WeaponService and BotService when reload
begins, cleared on completion). Shield bar shows a faint cyan trailing
segment while the regen delay counts down, and appends ' ↑' to the value
while actively regenerating.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
In shoot range, bots move perpendicular to the enemy rather than
charging straight in — strafing direction flips every 1-2s for
unpredictability. Added Priority 5: bots without an active core effect
will route toward any FractureCore within BOT_CORE_SEEK_RANGE (450u),
trading HP drain for powerful buffs. Supply/relay priorities shifted to 4/6.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
@cloudygetty-ai cloudygetty-ai changed the title Starfall Royale: balance constants, meteor warnings, echo zones, movement tuning Starfall Royale: world rendering, shield regen, HUD polish, smarter bots Jun 15, 2026
claude and others added 7 commits June 17, 2026 01:51
Vex decoy: teleport now also leaves a holographic Decoy entity at the
origin. Bots within 350u are fooled and shoot at it instead of pursuing
real targets. Decoys fade over DECOY_TTL_MS (5s) and render as a cyan
ring + icon in world space via DecoyView.

Dropping phase: startGame() now enters 'dropping' instead of 'playing'.
All 100 players descend from altitude 600-800u at 120u/s; the human can
steer horizontally with the left joystick. When the human lands (alt=0)
the phase flips to 'playing' and the match begins. A HUD overlay shows
current altitude and the "steer with left stick" hint during descent.

Dead code: removed the MapTile type that was defined but never
instantiated or referenced anywhere in the codebase.

Store tests: updated existing phase assertion (lobby→dropping instead of
lobby→playing) and added tests for selectCharacter, selectEnvironment,
and switchBuildMaterial which previously had no coverage.

https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Adds a LORE tab to the lobby where players can ask Claude anything about
the Run Down universe. The full storyline (5 panels) and all 15 operative
dossiers are baked into the system prompt so Claude answers in-character
without hallucinating canon. Conversation history persists for the session.

API key is configured via src/config.ts (ANTHROPIC_API_KEY). The tab
gracefully shows an offline state when no key is set.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…elays, Fracture Cores

All real repo files integrated. Substep bullet physics, zero warnings. Full README rewrite with lore, operator table, mechanics, build guide.
…tives

Each operative now has a tactical headgear designation (ECHO VISOR,
IMPACT SHELL, SOLAR CROWN, etc.) ready for display in lobby cards
and future 3D asset tagging.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Ports all TypeScript game logic to Unreal Engine 5.3 C++:

Core:
- RunDownTypes.h — all enums (EMatchPhase, EPlayerStatus, EWeaponType ×26,
  EAbilityEffectType, EBuildMaterial, EFractureCoreEffect) and shared structs
- RunDownGameMode — match lifecycle, bot spawning, supply drops, bombardment,
  bounty tracking, 100-player alive count
- RunDownGameState — replicated match phase, shelter params, kill feed (20 entries),
  bounty target, winner name, ping/supply-drop/bombardment delegates
- RunDownPlayerController — Enhanced Input binding for all 16 actions

Characters:
- CharacterDataAsset — UPrimaryDataAsset with FCharacterPassive + FCharacterAbility
  mirroring all 15 operative stats from the TS prototype
- RunDownCharacter — OTS camera rig with shoulder-swap lerp (FInterpTo), ADS arm
  contraction, Enhanced Input wiring, interact trace for loot/relay/supply drop
- RunDownAIController — 4-priority bot AI: flee zone → engage → loot → wander

Components:
- HealthComponent — shield/health separation, 4 s regen delay, 20/s regen rate,
  corruption DPS drain (floored at 1 HP), knocked/eliminated flow
- WeaponComponent — 3-slot inventory, hitscan from camera center, reload timer,
  rapid-fire flag, damage/reload multipliers
- AbilityComponent — cooldown + duration loop, per-operative dispatch:
  PhaseSkip (Vex teleport+decoy), TitanGuard, BioSurge (+80 HP), JunkFortress
  (+100 mats), AdrenalOverride (2× speed + rapid fire + 5 HP/s drain)
- BuildingComponent — wall/floor/ramp placement with 100 cm grid snap and
  material cost waterfall (Wood → Stone → Metal)

World:
- LootDropActor — weapon or material pickup, auto-destroys after collect
- HelixRelay — hold-to-capture point (3 s), triggers bombardment on capture
- FractureCore — periodic random effect pulses + bombardment impact damage
- SupplyDrop — falls from sky at broadcast location, grants high-end weapon

UI:
- RunDownHUD — UMG widget host + canvas ping markers (8 s, SIGIL orange) +
  kill feed canvas fallback

Config:
- DefaultGame.ini, DefaultEngine.ini (MaxPlayers=100), DefaultInput.ini

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
…moteControl plugins

Scripts (run once inside UE Python console after compiling):
- create_operatives.py — creates all 15 CharacterDataAsset instances in /Game/Operatives/
  with every stat, ability, cooldown, lore, quip, and accent color from characters.ts
- setup_gamemode.py — loads the 15 DA_ assets and assigns them to BP_RunDownGameMode.OperativeDataAssets
- setup_map.py — populates the current level: 100 PlayerStarts (10×10 grid), 1 FractureCore,
  6 HelixRelays (60° ring), 20 LootDropActors, NavMeshBoundsVolume

Also enables PythonScriptPlugin, EditorScriptingUtilities, RemoteControl, RemoteControlAPI
plugins in RunDown.uproject so these scripts work out of the box after compiling.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
- Copies chongdashu/unreal-mcp plugin source into unreal/Plugins/UnrealMCP/
  (C++ TCP bridge that listens on port 55557 inside the UE editor)
- Copies Python MCP server into unreal/MCPServer/
  (fastmcp server that Claude Desktop connects to)
- Enables UnrealMCP plugin in RunDown.uproject
- Adds claude_desktop_config.json template for easy Claude Desktop setup

After compiling the project in UE5, run the Python server locally and add
the config to Claude Desktop — then Claude can drive the editor directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016hNHuNDATyqSt1EvhWEstL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants