extends BaseHitscanWeapon class_name M4 func _init() -> void: weapon_name = "M4" fire_rate = 0.08 # ~750 RPM max_ammo = 40 reload_time = 1.6 base_damage = 22.0 min_damage = 12.0 falloff_start = 15.0 max_range = 100.0 automatic = true spread_angle = 0.01 func _build_model() -> void: position = Vector3(0.3, -0.3, -0.656) var model_scene = load("res://assets/weapons/m4/source/M4a4.fbx") if model_scene: var model = model_scene.instantiate() model_root.add_child(model) model.scale = Vector3(0.275, 0.275, 0.275) model.rotation_degrees.y = 90 for light in model.find_children("*", "Light3D", true, false): light.queue_free() # Muzzle Flash muzzle_flash = OmniLight3D.new() muzzle_flash.light_color = Color(1.0, 0.8, 0.4) muzzle_flash.light_energy = 0.0 muzzle_flash.omni_range = 4.0 muzzle_flash.position = Vector3(0, 0.04, -0.4) model_root.add_child(muzzle_flash) # Audio fire_sound = AudioStreamPlayer3D.new() fire_sound.bus = "SFX" fire_sound.stream = AudioManager.stream_for("m4_fire", "res://assets/sounds/m4_fire.wav") fire_sound.position = muzzle_flash.position fire_sound.volume_db = -8.0 model_root.add_child(fire_sound) reload_sound = AudioStreamPlayer3D.new() reload_sound.bus = "SFX" reload_sound.stream = AudioManager.stream_for("shotgun_reload", "res://assets/sounds/shotgun_reload.wav") model_root.add_child(reload_sound)