356 lines
10 KiB
Markdown
356 lines
10 KiB
Markdown
# ASHES Language Support - HowTo Guide
|
|
|
|
This guide provides comprehensive instructions for configuring and using the ASHES Language Support extension for Visual Studio Code.
|
|
|
|
## Table of Contents
|
|
|
|
1. [Installation & Configuration](#installation--configuration)
|
|
2. [Available Commands & Functionality](#available-commands--functionality)
|
|
3. [Language Features](#language-features)
|
|
4. [Code Snippets](#code-snippets)
|
|
5. [Auto-completion & IntelliSense](#auto-completion--intellisense)
|
|
6. [Syntax Highlighting](#syntax-highlighting)
|
|
7. [Troubleshooting](#troubleshooting)
|
|
|
|
## Installation & Configuration
|
|
|
|
### Quick Installation
|
|
|
|
1. **Copy the extension folder** to your VS Code extensions directory:
|
|
- **Linux**: `~/.vscode/extensions/`
|
|
- **macOS**: `~/.vscode/extensions/`
|
|
- **Windows**: `%USERPROFILE%\.vscode\extensions\`
|
|
|
|
2. **Rename the folder** to `ashes-language-support-0.1.0`
|
|
|
|
3. **Reload VS Code** or restart the application
|
|
|
|
4. **Verify installation** by opening any `.esc` file - you should see "ASHES" in the language selector (bottom-right corner)
|
|
|
|
### Development Mode Installation
|
|
|
|
1. **Open VS Code** in the extension directory:
|
|
```bash
|
|
cd vscode-extension-ashes
|
|
code .
|
|
```
|
|
|
|
2. **Install dependencies**:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
3. **Compile TypeScript**:
|
|
```bash
|
|
npm run compile
|
|
```
|
|
|
|
4. **Press F5** to run the extension in a new Extension Development Host window
|
|
|
|
### Configuration Options
|
|
|
|
The extension automatically configures itself when you open `.esc` files. No additional configuration is required, but you can customize:
|
|
|
|
- **File associations**: Ensure `.esc` files are associated with the ASHES language
|
|
- **Editor settings**: Configure indentation, word wrap, etc. in VS Code settings
|
|
- **Theme compatibility**: The extension works with all VS Code themes
|
|
|
|
## Available Commands & Functionality
|
|
|
|
### VSCode Commands
|
|
|
|
#### `ASHES: Show Command Reference`
|
|
- **Access**: `Ctrl+Shift+P` → Type "ASHES: Show Command Reference"
|
|
- **Description**: Opens a webview panel with a complete reference of all ASHES commands
|
|
- **Features**:
|
|
- Searchable table of commands
|
|
- Parameter information
|
|
- Command descriptions
|
|
|
|
### ASHES Language Commands
|
|
|
|
The extension supports **60+ ASHES commands** organized by category:
|
|
|
|
#### Animation Commands
|
|
- `anim(object_id, animation_name)` - Play animation on object
|
|
- `anim_block(object_id, animation_name)` - Play animation and wait for completion
|
|
- `set_animations(object_id, animations)` - Set object animations
|
|
|
|
#### Camera Commands
|
|
- `camera_push(x, y)` - Push camera to new position
|
|
- `camera_set_pos(x, y)` - Set camera position
|
|
- `camera_set_target(object_id)` - Set camera target
|
|
- `camera_set_zoom(zoom_level)` - Set camera zoom level
|
|
- `camera_shift(x, y)` - Shift camera position
|
|
|
|
#### Dialog & Text Commands
|
|
- `say(speaker, text, translation_key, type)` - Display dialog text
|
|
- `say_random(speaker, list_id, length)` - Say random text from list
|
|
- `say_sequence(speaker, list_id, length, loop)` - Say text sequence
|
|
- `block_say()` - Start a block of say commands
|
|
- `end_block_say()` - End a block of say commands
|
|
|
|
#### Game State Commands
|
|
- `change_scene(scene_path, enable_transition, run_events)` - Change to a different scene
|
|
- `save_game(save_name)` - Save game state
|
|
- `set_global(variable_name, value, force)` - Set global variable
|
|
- `set_globals(variables_dict)` - Set multiple global variables
|
|
- `inc_global(variable_name)` - Increment global variable
|
|
- `dec_global(variable_name)` - Decrement global variable
|
|
|
|
#### Inventory Commands
|
|
- `inventory_add(item_id)` - Add item to inventory
|
|
- `inventory_remove(item_id)` - Remove item from inventory
|
|
- `item_count_add(item_id, count)` - Add to item count
|
|
- `set_item_custom_data(item_id, key, value)` - Set item custom data
|
|
|
|
#### Object Manipulation Commands
|
|
- `set_active(object_id, active)` - Set object active/inactive
|
|
- `set_interactive(object_id, interactive)` - Set object interactive state
|
|
- `set_state(object_id, state)` - Set object state
|
|
- `set_tooltip(object_id, action, text)` - Set object tooltip
|
|
- `teleport(object_id, target_id)` - Teleport object to target
|
|
- `teleport_pos(object_id, x, y)` - Teleport object to position
|
|
- `walk(object_id, target_id)` - Walk object to target
|
|
- `walk_to_pos(object_id, x, y)` - Walk object to position
|
|
|
|
#### Audio/Video Commands
|
|
- `play_snd(sound_path, type)` - Play sound file
|
|
- `play_lib_snd(filename, namespace)` - Play library sound
|
|
- `play_video(video_path)` - Play video file
|
|
- `stop_snd(sound_type)` - Stop sound
|
|
|
|
#### Utility Commands
|
|
- `print(message)` - Print debug message
|
|
- `wait(duration)` - Wait for specified time
|
|
- `transition(transition_type, duration)` - Play transition effect
|
|
- `custom(command_name, ...args)` - Execute custom command
|
|
|
|
### Built-in Variables
|
|
|
|
The extension provides auto-completion for these built-in variables:
|
|
- `CURRENT_PLAYER` - Current player object
|
|
- `ESC_LAST_SCENE` - Last scene identifier
|
|
- `ESC_CURRENT_SCENE` - Current scene identifier
|
|
- `FORCE_LAST_SCENE_NULL` - Force last scene to null
|
|
- `ANIMATION_RESOURCES` - Animation resources
|
|
|
|
### Keywords
|
|
|
|
Auto-completion for ASHES keywords:
|
|
- `var` - Local variable declaration
|
|
- `global` - Global variable declaration
|
|
- `if`, `elif`, `else` - Conditional statements
|
|
- `while` - Loop statement
|
|
- `break`, `done` - Loop control
|
|
- `stop`, `pass` - Flow control
|
|
- `true`, `false`, `nil` - Boolean values
|
|
- `and`, `or`, `not` - Logical operators
|
|
- `in`, `is`, `active` - Special operators
|
|
|
|
## Language Features
|
|
|
|
### Events
|
|
```ashes
|
|
:event_name
|
|
# Event code here
|
|
|
|
:event_with_target "target_id"
|
|
# Event code here
|
|
|
|
:event_with_flags | NO_UI | NO_TT
|
|
# Event code here
|
|
```
|
|
|
|
### Variables
|
|
```ashes
|
|
# Local variables
|
|
var my_variable = "value"
|
|
|
|
# Global variables
|
|
global game_state = "playing"
|
|
|
|
# Global IDs (with $ prefix)
|
|
set_active($player, true)
|
|
```
|
|
|
|
### Control Flow
|
|
```ashes
|
|
if condition:
|
|
# Code here
|
|
elif other_condition:
|
|
# Code here
|
|
else:
|
|
# Code here
|
|
|
|
while condition:
|
|
# Code here
|
|
break # Exit loop
|
|
# or
|
|
done # Continue to next iteration
|
|
```
|
|
|
|
### Dialog System
|
|
```ashes
|
|
?!
|
|
- "Choice 1"
|
|
# Code for choice 1
|
|
- "Choice 2" [condition]
|
|
# Code for choice 2 (only if condition is true)
|
|
```
|
|
|
|
### Comments
|
|
```ashes
|
|
# This is a line comment
|
|
```
|
|
|
|
## Code Snippets
|
|
|
|
The extension provides **20+ code snippets** for common ASHES patterns:
|
|
|
|
### Event Snippets
|
|
- `event` → Create new event
|
|
- `eventtarget` → Create event with target
|
|
- `eventflags` → Create event with flags
|
|
- `eventflagstarget` → Create event with flags and target
|
|
|
|
### Command Snippets
|
|
- `say` → Say command
|
|
- `setglobal` → Set global variable
|
|
- `changescene` → Change scene
|
|
- `setactive` → Set object active
|
|
- `teleport` → Teleport object
|
|
- `walk` → Walk object
|
|
- `playsnd` → Play sound
|
|
- `playvideo` → Play video
|
|
- `inventoryadd` → Add to inventory
|
|
- `inventoryremove` → Remove from inventory
|
|
|
|
### Control Flow Snippets
|
|
- `if` → If statement
|
|
- `ifelse` → If-else statement
|
|
- `while` → While loop
|
|
|
|
### Dialog Snippets
|
|
- `dialog` → Dialog block with choice
|
|
- `dialogif` → Dialog choice with condition
|
|
|
|
### Utility Snippets
|
|
- `var` → Local variable declaration
|
|
- `global` → Global variable declaration
|
|
- `comment` → Add comment
|
|
- `print` → Print debug message
|
|
|
|
### Using Snippets
|
|
1. Type the snippet prefix (e.g., `event`)
|
|
2. Press `Tab` to expand
|
|
3. Use `Tab` to navigate between placeholders
|
|
4. Press `Enter` or `Escape` to finish
|
|
|
|
## Auto-completion & IntelliSense
|
|
|
|
### Trigger Characters
|
|
Auto-completion is triggered by:
|
|
- Space character (` `)
|
|
- Opening parenthesis (`(`)
|
|
- Dollar sign (`$`) for global IDs
|
|
|
|
### Command Completion
|
|
- Type any ASHES command and press `Ctrl+Space`
|
|
- Commands show with descriptions and parameter hints
|
|
- Parameters are automatically inserted with placeholders
|
|
|
|
### Variable Completion
|
|
- Built-in variables are automatically suggested
|
|
- Global IDs with `$` prefix are suggested
|
|
- Keywords are suggested in appropriate contexts
|
|
|
|
### Hover Information
|
|
- Hover over any command to see detailed information
|
|
- Shows command description and parameter list
|
|
- Works for built-in variables and keywords
|
|
|
|
## Syntax Highlighting
|
|
|
|
The extension provides comprehensive syntax highlighting:
|
|
|
|
### Color Scheme
|
|
- **Events** (`:event_name`) - Blue
|
|
- **Commands** (`say`, `set_global`, etc.) - Green
|
|
- **Variables** (`var`, `global`) - Orange
|
|
- **Strings** (`"text"`) - Yellow
|
|
- **Comments** (`# comment`) - Gray
|
|
- **Dialog blocks** (`?!`) - Special highlighting
|
|
- **Global IDs** (`$object_id`) - Distinct color
|
|
|
|
### Smart Indentation
|
|
- Automatic indentation for events, control flow, and dialog blocks
|
|
- Proper outdenting for `break`, `done`, `else`, etc.
|
|
- Configurable through VS Code settings
|
|
|
|
### Code Folding
|
|
- Events can be folded for better organization
|
|
- Dialog blocks can be folded
|
|
- Folding markers: `:event_name` (start), empty line (end)
|
|
|
|
## Troubleshooting
|
|
|
|
### Extension Not Loading
|
|
1. Check that the folder is in the correct extensions directory
|
|
2. Restart VS Code completely
|
|
3. Check the Developer Console for errors (`Help > Toggle Developer Tools`)
|
|
|
|
### Syntax Highlighting Not Working
|
|
1. Ensure the file has a `.esc` extension
|
|
2. Check that the language is set to "ASHES" in the bottom-right corner
|
|
3. Reload the window (`Ctrl+Shift+P` → "Developer: Reload Window")
|
|
|
|
### Auto-completion Not Working
|
|
1. Press `Ctrl+Space` to manually trigger completion
|
|
2. Check that the extension is activated (should show in the Extensions panel)
|
|
3. Ensure you're typing in a `.esc` file
|
|
|
|
### Snippets Not Working
|
|
1. Make sure you're in a `.esc` file
|
|
2. Type the snippet prefix and press `Tab`
|
|
3. Check that the language is set to "ASHES"
|
|
|
|
### Performance Issues
|
|
1. Large files may cause slower auto-completion
|
|
2. Consider splitting large `.esc` files into smaller ones
|
|
3. Disable other extensions if needed
|
|
|
|
## Advanced Usage
|
|
|
|
### Custom Commands
|
|
The extension supports custom commands through the `custom()` function:
|
|
```ashes
|
|
custom("my_custom_command", "param1", "param2")
|
|
```
|
|
|
|
### File Organization
|
|
- Use multiple `.esc` files for different scenes/characters
|
|
- Organize events logically within files
|
|
- Use comments to document complex logic
|
|
|
|
### Integration with Escoria
|
|
- The extension is designed specifically for the Escoria framework
|
|
- Commands correspond to Escoria's ASHES implementation
|
|
- Global IDs should match your Escoria project structure
|
|
|
|
## Contributing
|
|
|
|
To contribute to the extension:
|
|
1. Fork the repository
|
|
2. Make your changes
|
|
3. Test thoroughly with `.esc` files
|
|
4. Submit a pull request
|
|
|
|
## Support
|
|
|
|
For issues or questions:
|
|
1. Check this HowTo guide first
|
|
2. Review the main README.md
|
|
3. Check the installation guide (INSTALL.md)
|
|
4. Report issues through the project's issue tracker
|