Files
tactical-shooter/client/weapons/data/weapon_data.gd
T
shawn e7299b17e9 Phase 7: netfox + godot-jolt stack upgrade
Stack installed:
- netfox v1.35.3 (core + extras + noray + internals)
- godot-jolt v0.16.0-stable

Architecture:
- Server: ENet transport (works headless, no netfox deps)
- Client/Editor: netfox rollback (RollbackSynchronizer, TickInterpolator)

New/modified:
- docs/migration-netfox-plan.md — migration architecture
- scripts/network/network_manager.gd — netfox-aware ENet fallback
- scripts/network/player.gd — clean base player
- client/characters/player_netfox.gd — rollback player w/ WeaponManager
- client/characters/input/player_net_input.gd — BaseNetInput subclass
- client/characters/character/fps_character_controller.gd — netfox input feed
- client/weapons/ — weapon data, registry, TacticalWeaponHitscan, WeaponManager
- client/scripts/round_replicator.gd — client-side round state bridge
- server/scripts/round_manager.gd — improved state machine
- server/scripts/plugin_api/plugin_manager.gd — refined plugin system
- config: enemy_tag, ally_tag for meatball targeting

Removed: old C++ SimulationServer GDExtension (replaced by netfox rollback)
2026-07-02 17:39:22 -04:00

52 lines
1.7 KiB
GDScript

## WeaponData — resource containing all stats for a weapon.
##
## Used by the weapon system to configure damage, fire rate, recoil,
## economy pricing, and team restrictions.
##
## This is a pure Resource (no Node dependency) so it loads clean
## in both client and server contexts.
extends Resource
class_name WeaponData
enum FireMode { SEMI, AUTO, MELEE }
# Identification
@export var weapon_id: int = 0
@export var weapon_name: String = ""
@export var slot: int = 0 # 0=melee, 1=pistol, 2=SMG, 3=rifle, 4=sniper
# Damage
@export var damage: int = 30
@export var headshot_multiplier: float = 2.0
@export var chest_multiplier: float = 1.0
@export var waist_multiplier: float = 0.75
@export var leg_multiplier: float = 0.5
@export var armor_penetration: float = 0.5 # 0.0-1.0, % damage through armor
# Firing
@export var fire_mode: FireMode = FireMode.SEMI
@export var fire_rate: float = 10.0 # rounds per second
@export var reload_time: float = 2.0 # seconds
@export var max_distance: float = 1000.0
# Magazine
@export var magazine_size: int = 30
@export var reserve_size: int = 90
# Recoil & Spread
@export var recoil_per_shot: float = 0.5 # degrees
@export var recoil_recovery: float = 8.0 # degrees/sec
@export var spread_idle: float = 0.0 # degrees while standing still
@export var spread_walking: float = 2.0 # degrees while moving
@export var spread_sprinting: float = 6.0 # degrees while sprinting
# Movement
@export var move_speed_multiplier: float = 1.0 # multiplier on base move speed
@export var aim_speed_multiplier: float = 0.5 # move speed while aiming
# Economy
@export var price: int = 0
@export var kill_reward: int = 300
@export var team: int = -1 # -1=both, 0=T, 1=CT