type weapon [display="Weapon"] { // WeaponDef is extremely large in CoD4 (1000+ bytes) // This is a simplified version focusing on the key fields i32 name_ptr [ui, readonly, display="Name Ptr"]; i32 display_name_ptr [ui, readonly, display="Display Name Ptr"]; i32 ai_overlay_description_ptr [ui, readonly, display="AI Overlay Desc Ptr"]; // Gun model pointers i32 gun_model_ptr [ui, readonly, display="Gun Model Ptr"]; i32 hand_model_ptr [ui, readonly, display="Hand Model Ptr"]; // Mode name (for alternate fire modes) i32 mode_name_ptr [ui, readonly, display="Mode Name Ptr"]; // Player anim type i32 player_anim_type [ui, readonly, display="Player Anim Type"]; // Weapon type and class i32 weapon_type [ui, readonly, display="Weapon Type"]; i32 weapon_class [ui, readonly, display="Weapon Class"]; i32 penetrate_type [ui, readonly, display="Penetrate Type"]; i32 impact_type [ui, readonly, display="Impact Type"]; i32 inventory_type [ui, readonly, display="Inventory Type"]; i32 fire_type [ui, readonly, display="Fire Type"]; // Offhand class i32 offhand_class [ui, readonly, display="Offhand Class"]; // Stance i32 stance [ui, readonly, display="Stance"]; // View model pointers i32 view_flash_effect_ptr [ui, readonly, display="View Flash Effect Ptr"]; i32 world_flash_effect_ptr [ui, readonly, display="World Flash Effect Ptr"]; // Sounds i32 pickup_sound_ptr [ui, readonly, display="Pickup Sound Ptr"]; i32 pickup_sound_player_ptr [ui, readonly, display="Pickup Sound Player Ptr"]; i32 ammo_pickup_sound_ptr [ui, readonly, display="Ammo Pickup Sound Ptr"]; i32 ammo_pickup_sound_player_ptr [ui, readonly, display="Ammo Pickup Sound Player Ptr"]; i32 projectile_sound_ptr [ui, readonly, display="Projectile Sound Ptr"]; i32 pullback_sound_ptr [ui, readonly, display="Pullback Sound Ptr"]; i32 pullback_sound_player_ptr [ui, readonly, display="Pullback Sound Player Ptr"]; i32 fire_sound_ptr [ui, readonly, display="Fire Sound Ptr"]; i32 fire_sound_player_ptr [ui, readonly, display="Fire Sound Player Ptr"]; i32 fire_loop_sound_ptr [ui, readonly, display="Fire Loop Sound Ptr"]; i32 fire_loop_sound_player_ptr [ui, readonly, display="Fire Loop Sound Player Ptr"]; i32 fire_stop_sound_ptr [ui, readonly, display="Fire Stop Sound Ptr"]; i32 fire_stop_sound_player_ptr [ui, readonly, display="Fire Stop Sound Player Ptr"]; i32 fire_last_sound_ptr [ui, readonly, display="Fire Last Sound Ptr"]; i32 fire_last_sound_player_ptr [ui, readonly, display="Fire Last Sound Player Ptr"]; i32 empty_fire_sound_ptr [ui, readonly, display="Empty Fire Sound Ptr"]; i32 empty_fire_sound_player_ptr [ui, readonly, display="Empty Fire Sound Player Ptr"]; i32 melee_swipe_sound_ptr [ui, readonly, display="Melee Swipe Sound Ptr"]; i32 melee_swipe_sound_player_ptr [ui, readonly, display="Melee Swipe Sound Player Ptr"]; i32 melee_hit_sound_ptr [ui, readonly, display="Melee Hit Sound Ptr"]; i32 melee_miss_sound_ptr [ui, readonly, display="Melee Miss Sound Ptr"]; i32 rechamber_sound_ptr [ui, readonly, display="Rechamber Sound Ptr"]; i32 rechamber_sound_player_ptr [ui, readonly, display="Rechamber Sound Player Ptr"]; i32 reload_sound_ptr [ui, readonly, display="Reload Sound Ptr"]; i32 reload_sound_player_ptr [ui, readonly, display="Reload Sound Player Ptr"]; i32 reload_empty_sound_ptr [ui, readonly, display="Reload Empty Sound Ptr"]; i32 reload_empty_sound_player_ptr [ui, readonly, display="Reload Empty Sound Player Ptr"]; i32 reload_start_sound_ptr [ui, readonly, display="Reload Start Sound Ptr"]; i32 reload_start_sound_player_ptr [ui, readonly, display="Reload Start Sound Player Ptr"]; i32 reload_end_sound_ptr [ui, readonly, display="Reload End Sound Ptr"]; i32 reload_end_sound_player_ptr [ui, readonly, display="Reload End Sound Player Ptr"]; i32 deploy_sound_ptr [ui, readonly, display="Deploy Sound Ptr"]; i32 deploy_sound_player_ptr [ui, readonly, display="Deploy Sound Player Ptr"]; i32 finish_deploy_sound_ptr [ui, readonly, display="Finish Deploy Sound Ptr"]; i32 finish_deploy_sound_player_ptr [ui, readonly, display="Finish Deploy Sound Player Ptr"]; i32 breakdown_sound_ptr [ui, readonly, display="Breakdown Sound Ptr"]; i32 breakdown_sound_player_ptr [ui, readonly, display="Breakdown Sound Player Ptr"]; i32 finish_breakdown_sound_ptr [ui, readonly, display="Finish Breakdown Sound Ptr"]; i32 finish_breakdown_sound_player_ptr [ui, readonly, display="Finish Breakdown Sound Player Ptr"]; i32 detonate_sound_ptr [ui, readonly, display="Detonate Sound Ptr"]; i32 detonate_sound_player_ptr [ui, readonly, display="Detonate Sound Player Ptr"]; i32 night_vision_wear_sound_ptr [ui, readonly, display="Night Vision Wear Sound Ptr"]; i32 night_vision_wear_sound_player_ptr [ui, readonly, display="Night Vision Wear Sound Player Ptr"]; i32 night_vision_remove_sound_ptr [ui, readonly, display="Night Vision Remove Sound Ptr"]; i32 night_vision_remove_sound_player_ptr [ui, readonly, display="Night Vision Remove Sound Player Ptr"]; i32 alt_switch_sound_ptr [ui, readonly, display="Alt Switch Sound Ptr"]; i32 alt_switch_sound_player_ptr [ui, readonly, display="Alt Switch Sound Player Ptr"]; i32 raise_sound_ptr [ui, readonly, display="Raise Sound Ptr"]; i32 raise_sound_player_ptr [ui, readonly, display="Raise Sound Player Ptr"]; i32 first_raise_sound_ptr [ui, readonly, display="First Raise Sound Ptr"]; i32 first_raise_sound_player_ptr [ui, readonly, display="First Raise Sound Player Ptr"]; i32 put_away_sound_ptr [ui, readonly, display="Put Away Sound Ptr"]; i32 put_away_sound_player_ptr [ui, readonly, display="Put Away Sound Player Ptr"]; // Read remaining weapon data as raw bytes // The full structure has many more fields (damage, range, spread, etc.) // This reads enough to cover the core structure (around 800+ more bytes) weapon_data = read(800) [ui, readonly, display="Weapon Data"]; // Parse inline name if (name_ptr == -1) { name = cstring() [ui, readonly, display="Name"]; _name = name; } // Parse inline display name if (display_name_ptr == -1) { display_name = cstring() [ui, readonly, display="Display Name"]; } // Parse inline AI overlay description if (ai_overlay_description_ptr == -1) { ai_overlay_description = cstring() [ui, readonly, display="AI Overlay Description"]; } // Parse inline mode name if (mode_name_ptr == -1) { mode_name = cstring() [ui, readonly, display="Mode Name"]; } // Note: Many more inline assets would follow (models, effects, sounds, etc.) // This is a simplified version }