---
name: afsim-script-generator
description: Generate and execute AFSIM (Advanced Framework for Simulation, Integration and Modeling) scripts. Use when the user needs to: (1) Create AFSIM/WSF scenario scripts, (2) Generate simulation scripts with proper syntax, (3) Run AFSIM simulations using mission.exe, (4) Debug or fix AFSIM script syntax errors, (5) Work with AFSIM scripting language, or (6) Execute and validate AFSIM simulation outputs. Supports complete AFSIM 2.9.0 scripting language syntax including platforms, sensors, weapons, behaviors, and mission scenarios.
---
Expert system for generating syntactically correct AFSIM 2.9.0 scripts and executing them using mission.exe.
- Critical Rules - READ FIRST - Common mistakes that cause failures
- Quick Start Guide - Get started in 4 steps
- File Structure - Standard AFSIM script structure
- Mover Types - All 22+ mover types with parameters
- Script API - WsfPlatform, WsfSensor, WsfWeapon classes
- Commands - Platform, route, sensor, weapon commands
- Message Types - WsfMessage system and all message types
- Sensor Types - Radar, ESM, EO/IR sensor parameters
- Examples - Complete working examples
- Script Execution - Running scripts with mission.exe
- Troubleshooting - Common errors and solutions
MUST READ BEFORE GENERATING ANY SCRIPT
在编写任何脚本前,必须查看: references/script_syntax_critical.md
这个文档包含了实际脚本编写中最容易出错的语法问题:
- ❌ 使用
cout输出 → ✅ 使用print()函数 - ❌
on_initialize中使用script包裹 → ✅ 直接写代码 - ❌ 天线方向图直接定义参数 → ✅ 使用
constant_pattern子块 - ❌ 脉冲宽度用
microsec→ ✅ 使用科学计数法1.0e-6 sec - ❌ 使用三元运算符、fmod、类型转换 → ✅ 使用 if-else 和时间差比较
- ❌ WSF_AIR_MOVER 使用 climb_rate → ✅ 只使用支持的参数
✅ CORRECT: my_script.txt
❌ WRONG: my_script.wsf
AFSIM scripts MUST use .txt extension, NOT .wsf
✅ CORRECT: speed 100 m/sec
❌ WRONG: speed 100
✅ CORRECT: altitude 5000 ft
❌ WRONG: altitude 5000
✅ CORRECT: update_interval 1.0 sec
❌ WRONG: update_interval 1.0
ALL numeric parameters MUST include units
✅ CORRECT:
mover WSF_AIR_MOVER
maximum_speed 500 m/sec
end_mover
❌ WRONG:
mover WSF_AIR_MOVER
maximum_speed 500 m/sec
# Missing end_mover!
Every block MUST have its corresponding end_* tag
✅ CORRECT: position 38:44:52.3n 90:21:36.4w
❌ WRONG: position 38.44.52.3n 90.21.36.4w
Use colon : to separate degrees:minutes:seconds
✅ CORRECT: PLATFORM.Name()
✅ CORRECT: PLATFORM.Latitude()
✅ CORRECT: PLATFORM.Altitude()
❌ WRONG: Position() # Does not exist
❌ WRONG: Geodetic() # Does not exist
❌ WRONG: Time() # Use TIME_NOW instead
Only use documented API methods from script_api_reference.md
For complete error list: See references/common_mistakes.md and references/script_syntax_critical.md
Location: config.txt in skill root directory
The skill uses a configuration file to locate your AFSIM installation. This makes it portable across different computers.
Configuration File:
# AFSIM Installation Directory
AFSIM_INSTALL_DIR=D:\Program Files\afsim2.9.0
Derived Paths:
- mission.exe:
{AFSIM_INSTALL_DIR}/bin/mission.exe - Documentation:
{AFSIM_INSTALL_DIR}/documentation/html/docs
To use on a different computer:
- Open
config.txt - Update
AFSIM_INSTALL_DIRto your AFSIM installation path - Save the file
All paths (mission.exe, documentation) are automatically derived from this setting.
Location: {AFSIM_INSTALL_DIR}/documentation/html/docs
The AFSIM documentation directory contains 1602 HTML files with complete, authoritative information about every AFSIM feature.
When to use:
- ✅ Need to confirm very specific details
- ✅ Looking for obscure parameters or options
- ✅ Want to see official examples
- ✅ Need to verify edge cases
When NOT to use:
- ❌ For common tasks (use skill references instead)
- ❌ For quick lookups (use SKILL.md navigation)
- ❌ For examples (use examples.md)
Think of it as: The ultimate fallback reference when skill documentation doesn't cover a specific detail.
Ask the user about:
- Scenario type: Air-to-air, air-to-ground, ISR, naval, etc.
- Platforms: Aircraft, ships, ground vehicles, satellites
- Sensors: Radar, ESM, EO/IR, etc.
- Weapons: Missiles, bombs, guns
- Mission timeline: Duration, key events
- Output needs: Event logs, tracks, engagement results
- Start with file structure (see File Structure Reference)
- Define platform types with movers (see Mover Types)
- Add sensors/weapons (see Commands Reference)
- Create platform instances with routes
- Add processors for behaviors (see Script API)
- Set simulation end time
python scripts/run_mission.py <script_file.txt> [options]Options:
-es- Event-stepped (default)-rt- Real-time frame-stepped-fs- Non-realtime frame-stepped-fio- Flush output-sm- Suppress messages
- Check mission.exe output for errors
- Verify simulation results
- Adjust script and re-run as needed
Location: references/file_structure.md
Standard AFSIM script structure:
# Header comments
script_interface
debug
end_script_interface
# Output configuration
event_output
file output/simulation.evt
enable all
end_event_output
# Reusable definitions
antenna_pattern [name] [...]
sensor [name] [type] [...]
weapon [name] [type] [...]
# Platform types
platform_type [name] WSF_PLATFORM
mover [type]
[parameters]
end_mover
sensor [name] [type]
[parameters]
end_sensor
processor [name] [type]
[parameters]
end_processor
end_platform_type
# Platform instances
platform [instance-name] [type]
side [blue|red|white]
route
position [lat] [lon] altitude [alt] speed [speed]
end_route
end_platform
# Simulation control
end_time [duration] sec
For complete structure guide: Read references/file_structure.md
Location: references/mover_reference.md
AFSIM supports 22+ mover types for different platform categories:
- WSF_AIR_MOVER - Standard fixed-wing aircraft
- WSF_HELO_MOVER - Helicopters and rotorcraft
- WSF_GUIDED_MOVER - Guided missiles and munitions
- WSF_GROUND_MOVER - Ground vehicles
- WSF_RAIL_MOVER - Rail-based systems
- WSF_SURFACE_MOVER - Surface ships
- WSF_SUBSURFACE_MOVER - Submarines
- WSF_ORBITAL_MOVER - Satellites and orbital platforms
- WSF_BALLISTIC_MOVER - Ballistic missiles
- WSF_STATIONARY_MOVER - Fixed installations
- WSF_SCRIPTED_MOVER - Custom movement logic
Example:
mover WSF_AIR_MOVER
maximum_speed 500 m/sec
minimum_speed 100 m/sec
default_radial_acceleration 5.0 g
default_climb_rate 50 m/sec
end_mover
For complete mover reference: Read references/mover_reference.md
Location: references/script_api_reference.md
Platform access and control:
string Name() # Get platform name
string Type() # Get platform type
double Latitude() # Get latitude (deg)
double Longitude() # Get longitude (deg)
double Altitude() # Get altitude (m)
double X(), Y(), Z() # Get XYZ position (m)
double Heading() # Get heading (deg)
double Speed() # Get speed (m/s)
WsfSensor Sensor(string name) # Get sensor by name
WsfWeapon Weapon(string name) # Get weapon by name
WsfProcessor Processor(string) # Get processor by name
int SensorCount() # Number of sensors
WsfSensor SensorEntry(int i) # Get sensor by index
Sensor access and control:
string Name() # Get sensor name
string Type() # Get sensor type
bool IsTurnedOn() # Check if sensor is on
void TurnOn() # Turn sensor on
void TurnOff() # Turn sensor off
Weapon access and control:
string Name() # Get weapon name
string Type() # Get weapon type
int QuantityRemaining() # Get remaining quantity
bool Fire(WsfTrack target) # Fire at target
Track information:
WsfTrackId TrackId() # Get track ID
string TargetName() # Get target name
double Latitude() # Get track latitude
double Longitude() # Get track longitude
double Altitude() # Get track altitude
double Range() # Get range to track
bool LocationValid() # Check if location valid
Collections:
# Array methods
void PushBack(T value) # Add element
T Get(int index) # Get element
int Size() # Get size
ArrayIterator GetIterator() # Get iterator
# Map methods
void Insert(K key, V value) # Insert key-value pair
V Get(K key) # Get value by key
bool Contains(K key) # Check if key exists
int Size() # Get size
PLATFORM # Current platform
PROCESSOR # Current processor
SENSOR # Current sensor
TRACK # Current track
MESSAGE # Current message
TIME_NOW # Current simulation time
For complete API reference: Read references/script_api_reference.md
Location: references/commands_reference.md
platform [name] [type]
side [blue|red|white|...]
position [lat] [lon] altitude [alt]
command_chain [name] [commander|SELF]
route
position [lat] [lon] altitude [alt] speed [speed]
end_route
sensor [name]
on # or off
end_sensor
weapon [name]
quantity [number]
firing_interval [time] sec
end_weapon
end_platform
route
position [lat] [lon] altitude [alt] speed [speed]
position [lat] [lon] altitude [alt] agl speed [speed]
position [lat] [lon] # Uses previous altitude/speed
end_route
sensor [name] [type]
frame_time [time] sec
location [x] [y] [z]
minimum_range [range] nm
maximum_range [range] nm
processor [processor-name]
end_sensor
weapon [name] [type]
launched_platform_type [type]
weapon_effects [effects-name]
category [category-name]
end_weapon
processor [name] [type]
update_interval [time] sec
script_variables
[type] [name] = [value];
end_script_variables
script [return-type] [name]([parameters])
# Script code
end_script
on_initialize
# Initialization code
end_on_initialize
on_update
# Update code
end_on_update
end_processor
For complete commands reference: Read references/commands_reference.md
Location: references/message_types_reference.md
AFSIM消息系统用于平台、传感器、处理器之间的通信。
所有消息的基类:
string Originator() // 消息发起平台
string Type() // 消息类型
int Priority() // 消息优先级
void SetAuxData(string name, value) // 设置辅助数据传递轨迹信息:
WsfTrack Track() // 获取轨迹
void SetTrack(WsfTrack aTrack) // 设置轨迹发送控制命令:
void SetFunction(string aFunction) // 设置功能
void SetResource(string aResource) // 设置资源
void SetTrack(WsfTrack aTrack) // 设置关联轨迹报告状态:
void SetStatus(string aStatus) // 设置状态
void SetSystemName(string aSystemName) // 设置系统名称战场管理轨迹(功能最丰富):
void SetLLA(double lat, double lon, double alt) // 设置位置
void SetIFFFriendly() // 设置IFF为友方
void SetTrackingStatusNormal() // 设置跟踪状态on_message
type WSF_TRACK_MESSAGE
script
WsfTrackMessage msg = (WsfTrackMessage)MESSAGE;
WsfTrack track = msg.Track();
// 处理轨迹消息
end_script
type WSF_CONTROL_MESSAGE
script
WsfControlMessage msg = (WsfControlMessage)MESSAGE;
// 处理控制消息
end_script
end_on_messageFor complete message types reference: Read references/message_types_reference.md
Location: references/sensor_types_reference.md
AFSIM提供多种特殊传感器类型,每种都有特定的参数和配置。
主动雷达探测传感器:
关键参数:
transmitter
frequency <frequency> // 工作频率
power <power> // 发射功率
pulse_width <time> // 脉冲宽度
pulse_repetition_frequency <freq> // PRF
antenna_pattern <pattern-name> // 天线方向图
end_transmitter
receiver
noise_figure <db-ratio> // 噪声系数
bandwidth <frequency> // 接收带宽
end_receiver
swerling_case [0|1|2|3|4] // Swerling目标模型
number_of_pulses_integrated <integer> // 积分脉冲数
one_m2_detect_range <length> // 1平方米目标检测距离
被动RF检测传感器(RWR、SIGINT、ELINT):
关键参数:
frequency_band <lower-freq> <upper-freq>
dwell_time <time> // 驻留时间
revisit_time <time> // 重访时间
continuous_detection_sensitivity <db-power> // 连续波灵敏度
pulsed_detection_sensitivity <db-power> // 脉冲灵敏度
detection_threshold <db-ratio> // 信噪比门限
scan_on_scan_model <boolean> // 扫描-扫描模型
ranging_time <time> // 测距时间
光学或红外成像传感器:
关键参数:
pixel_count <horizontal> <vertical> // 像素数量
band [visual|short|medium|long|very_long] // 波段选择
atmospheric_attenuation <value> per <length> // 大气衰减
background_radiance <value> <units> // 背景辐射
detection_threshold <value> // 信噪比门限
noise_equivalent_irradiance <value> <units> // NEI
| 传感器 | 用途 | 检测方式 | 关键参数 |
|---|---|---|---|
| RADAR | 主动雷达 | 主动发射接收 | 功率、PRF、脉冲宽度 |
| ESM | 被动RF | 被动接收 | 灵敏度、频段 |
| EOIR | 光电/红外 | 被动成像 | 像素、波段、NEI |
For complete sensor types reference: Read references/sensor_types_reference.md
Location: references/examples.md
Simple aircraft with route and script processor
Complete scenario with sensors, weapons, track sharing, and engagement logic
Ground vehicle with patrol route
Surface ship with radar sensor
- Script variables declaration
- Looping through collections
- Conditional logic
- Message handling
- Accessing platform components
For complete examples: Read references/examples.md
The skill reads AFSIM installation directory from config.txt:
AFSIM_INSTALL_DIR=D:\Program Files\afsim2.9.0
All paths are derived from this:
- mission.exe:
{AFSIM_INSTALL_DIR}/bin/mission.exe - Documentation:
{AFSIM_INSTALL_DIR}/documentation/html/docs
# Basic execution
python scripts/run_mission.py my_script.txt
# With options
python scripts/run_mission.py my_script.txt -es -fio
# Real-time mode
python scripts/run_mission.py my_script.txt -rtThe script will:
- Load configuration from
config.txt - Verify mission.exe exists
- Display configuration paths
- Execute the script
- Capture and display output
- Event-stepped (-es): Default, fastest execution
- Real-time (-rt): Runs in real-time with frame stepping
- Frame-stepped (-fs): Non-realtime frame stepping
Scripts generate output in the output/ directory:
.evt- Event log files.rep- Binary replay files- Console output from mission.exe
Problem: mission.exe not found
- Solution:
- Open
config.txt - Verify
AFSIM_INSTALL_DIRpoints to your AFSIM installation - Check that
{AFSIM_INSTALL_DIR}/bin/mission.exeexists
- Open
Problem: Different computer, different path
- Solution:
- Copy the entire skill directory
- Update
AFSIM_INSTALL_DIRinconfig.txt - Everything else works automatically
Problem: "Unexpected token" or "Parse error"
- Solution: Check
references/common_mistakes.mdfor common syntax errors - Verify all blocks have
end_*tags - Check coordinate format (use
:not.) - Ensure all numbers have units
Problem: "Unknown command"
- Solution: Verify command syntax in
references/commands_reference.md - Check spelling and capitalization
- Ensure command is in correct context
Problem: mission.exe not found
- Solution: Verify path is
D:\Program Files\afsim2.9.0\bin\mission.exe - Check file permissions
- Ensure AFSIM 2.9.0 is installed
Problem: Script file not found
- Solution: Use
.txtextension, not.wsf - Check file path is correct
- Ensure file exists in specified location
Problem: Platform not moving
- Solution: Check mover parameters in
references/mover_reference.md - Verify route has valid waypoints
- Ensure speed is specified with units
Problem: Sensor not detecting
- Solution: Verify sensor is turned on
- Check sensor range and parameters
- Ensure target is within sensor coverage
Problem: Script variables not working
- Solution: Declare variables in
script_variablesblock - Check variable types match usage
- Verify semicolons after declarations
All reference files are located in the references/ directory:
- script_syntax_critical.md - ⭐ NEW: 脚本编写关键语法规则速查(必读)
- common_mistakes.md - 10 critical rules to avoid common errors
- file_structure.md - Standard AFSIM script file structure and templates
- mover_reference.md - Complete reference for all 22+ mover types
- script_api_reference.md - Full API for WsfPlatform, WsfSensor, WsfWeapon, etc. (158 methods)
- commands_reference.md - Complete command syntax reference
- message_types_reference.md - WsfMessage system and all message types
- sensor_types_reference.md - Radar, ESM, EO/IR sensor parameters
- examples.md - Working examples and common patterns
Load these files as needed for detailed information.
- Always start with file_structure.md to understand the standard layout
- Check common_mistakes.md before generating any script
- Use examples.md as templates for common scenarios
- Verify mover types in mover_reference.md before defining platforms
- Reference script_api_reference.md when writing processor scripts
- Test incrementally - start simple, add complexity gradually
- Use meaningful names for platforms, sensors, weapons
- Add comments to explain complex logic
- Validate coordinates - use proper lat/lon format
- Check units - every number needs units
- Config File:
config.txtin skill root directory - Default Install:
D:\Program Files\afsim2.9.0 - Update for your system: Edit
AFSIM_INSTALL_DIRin config.txt
- Installation: Configured via
config.txt - Documentation:
{AFSIM_INSTALL_DIR}/documentation/html/docs(1602 HTML files) - Mission.exe:
{AFSIM_INSTALL_DIR}/bin/mission.exe - Version: AFSIM 2.9.0
- SKILL.md - Quick reference and navigation (use first)
- references/ - Comprehensive skill documentation (use for details)
- {AFSIM_INSTALL_DIR}/documentation/ - Ultimate official reference (use for edge cases)
1. Understand Requirements
↓
2. Check common_mistakes.md
↓
3. Use file_structure.md as template
↓
4. Add platform types (mover_reference.md)
↓
5. Add sensors/weapons (commands_reference.md)
↓
6. Add behaviors (script_api_reference.md)
↓
7. Create platform instances
↓
8. Save as .txt file
↓
9. Execute with run_mission.py
↓
10. Validate output and iterate
Remember: File extension MUST be .txt and ALL numbers MUST have units!