soundrts-1.4.0.5-Ultimate-version-windows

118 views
Skip to first unread message

修君

unread,
Jun 18, 2025, 11:07:28 AMJun 18
to soundRTSChat
1.4.0.5:

Reserve an rpg_bindings.txt file for first-person mode to configure hotkeys for use in first-person mode.


Replaced all occurrences of the keyword food with population, for example, food_cost has been changed to population_cost.
Further improved the economic system; the current economic system is quite rich.
Now you can define resource-containing buildings and assign workers to gather resources from them.
For example:
def farm
class building
cost 5 5
hp_max 133.3;  400/3
time_cost 45
requirements townhall
resource_type resource3  ; Resource type for food
extraction_time 3        ; Extraction time
extraction_qty 1         ; Amount extracted each time
auto_cultivate 1         ; With this parameter, the building has an automatic cultivation command
manual_cultivate 1       ; With this parameter, the building has a manual cultivation command
resource_volume_max 50   ; Maximum resource volume contained in the building
resource_volume_start 25 ; Initial resource volume contained in the building
is_gather 1              ; Changing this parameter makes the produced resources add to the building's resource_volume
production_type resource3
production_time 10
production_cost 0 50
production_qty 10

New: `is_create 1` ; Produced resources will create a resource pile that workers can mine.
Other mechanics unchanged.
Automatic production (automatic_production) or automatic cultivation (automatic_cultivation) command:
If the building's internal resource volume reaches its maximum, automatic production or automatic cultivation will stop. They will only restart if the resources are exhausted.
Manual production or manual cultivation command:
If the building's internal resource volume reaches its maximum, manual cultivation cannot be performed, unless resources have been gathered.

The auto_production and manual_production parameters are still valid—the key point is what your building is. If it's a farm, then you should use the auto_cultivate or manual_cultivate parameters; but if it's a building like a gold_house, using auto_production or manual_production is more appropriate.

1.4.0.4:
There are now two production modes for building production resources. One is automatic production: after the player clicks to start production, no further action is required; when production is completed, it will automatically enter the next cycle.
The other is manual production: after production is finished, the player needs to click to start the production cycle again.
In addition, there are two ways to acquire produced resources: one is that the resources are directly added to the resource pool after production; the other is that a resource pile is created after production, and the player needs to assign workers to deliver the resources back to the base.
Resources and deposits are now separated, with a dedicated class resource, distinguishing it from class deposit.
Specific parameters:
auto_production: If set to 1, automatic production is enabled.
manual_production: If set to 1, manual production is enabled.
The parameter is_production has been removed.
is_create: If set to 1, the produced resources require workers to gather them before they become available. If this parameter is absent, produced resources will be automatically added to the player's resource pool.
I have specific examples in the basic rules.txt file.


1.4.0.3


Added faction-exclusive background music and faction-exclusive battle music.
The definition format for faction-exclusive background music is: FactionName_music MusicID, for example: china_music china.
The definition format for faction-exclusive battle music is: FactionName_battle_music MusicID, for example: china_battle_music china_battle.
The playback priority of faction music is the highest, followed by map-exclusive music, and finally the global background music game_music.

1.4.0.2

How to Add Menu Sound Effects in SoundRTS:
Now, you can add select, confirm, and return sounds for the main menu and submenus in the style.txt of each mod. The format is as follows:
def parameters
; Main menu sound format:
main_menu_select_sound  SOUND_ID
main_menu_confirm_sound  SOUND_ID
main_menu_return_sound  SOUND_ID
; Submenu sound format:
submenu_select_sound  SOUND_ID
submenu_confirm_sound  SOUND_ID
submenu_return_sound  SOUND_ID
If you do not specify submenu sounds, the main menu sounds will continue to play.
SoundRTS Menu Music Configuration Guide
You can now set different background music for various menus in SoundRTS.
Supported Menu Music Types
menu_music - Main menu music
campaign_music - Campaign menu music
game_creation_music - Game creation menu music (for the START_A_GAME_ON menu)
server_lobby_music - Server lobby menu music
game_music - In-game background music. You can also assign unique background music to different maps using map_music.
Battle music: battle_music. You can also set exclusive battle music for different maps using map_battle_music.
When enemies appear in your field of vision, the battle music will play.
How to Set Up
Add the following parameters in your style.txt file to set the music for different menus:
def parameters
menu_music SOUND_ID        ; Main menu music
campaign_music SOUND_ID  
game_creation_music SOUND_ID
server_lobby_music SOUND_ID
game_music SOUND_ID
battle_music SOUND_ID
For map music, add the following in the map's .txt file:
map_music SOUND_ID
map_battle_music SOUND_ID
Music File Location
Music files must be in .MP3 format.
Place the music files in one of these locations:
The ui/music/ directory
If using a mod, place them in the mods/[mod_name]/ui/music/ directory
Example
If you set in style.txt:
menu_music title
The system will search for the music file in this order:
ui/music/title.mp3
If a mod is used, it will first look for mods/[mod_name]/ui/music/title.mp3
Default Values
[Omitted in original, add defaults if necessary.]
Notes
There are two fallback mechanisms for menu music:
Config Fallback: If a certain menu music is not set in style.txt, the system will use the default music ID for that menu type.
File Fallback: If a specific menu music file does not exist, the system will automatically play the main menu music as a replacement.
For example, if the music file specified for campaign_music cannot be found, the menu_music file will be played instead.
If the main menu music file cannot be found either, no music will be played.
Players can decide whether or not to add menu music.
Priority of game_music vs map_music:
If map_music is set for a map, it will be played as the in-game background music; if not, the global background music (game_music) will be used.
The same priority rule applies to battle music: map_battle_music takes precedence over battle_music.
Additionally, you can add victory and defeat sounds.
In style.txt:
def parameters
victory_sound SOUND_ID
defeat_sound SOUND_ID
You can also assign different victory and defeat sounds for each map in the map .txt file:
map_victory_sound SOUND_ID
map_defeat_sound SOUND_ID


1.4.0.1
New Charge and Counter-Charge Mechanism:
When a unit with the charge mechanism encounters an enemy, it will launch a charge attack dealing massive damage to the enemy. After the charge is performed, the unit enters a charge cooldown period and switches to normal attack (mdg or rdg). Until the charge cooldown ends, the player must pull the unit back within effective distance to reset the charge status and perform another charge attack.
Keywords:
charge_mdg # Melee charge multiplier, e.g., if mdg = 6, charge_mdg = 2, then final damage is 6*2=12
charge_rdg # Ranged charge multiplier
charge_mdg_vs
charge_rdg_vs
charge_mdg_cd
charge_rdg_cd
charge_mdg_dist # Melee charge effective distance
charge_rdg_dist # Ranged charge effective distance
charge_mdg_splash # Melee charge splash
charge_rdg_splash # Ranged charge splash
charge_mdg_radius # Melee charge splash radius
charge_rdg_radius # Ranged charge splash radius
style.txt Keywords:
charge_success Sound ID # Add sound effect for successful charge
charge_failed Sound ID # Sound effect for failed charge
Counter-Charge Mechanism:
This is a special counter to the charge mechanism. When a unit with the counter-charge ability encounters a unit with charging capability, it will directly interrupt the opponent's charge state, inflicting damage.
Keywords:
op_charge_mdg # Melee counter-charge multiplier
op_charge_rdg # Ranged counter-charge multiplier
Counter-charge damage = self mdg or rdg + enemy's mdg or rdg * charge_mdg or charge_rdg
op_charge_mdg_vs
op_charge_rdg_vs
op_charge_mdg_cd
op_charge_rdg_cd
op_charge_mdg_dist
op_charge_rdg_dist
style.txt Keywords:
op_charge Sound ID
Further Enrichment of the Buff Mechanism:
Added mdg_trigger_rate and rdg_trigger_rate: Probability of triggering buff on normal attack hit
Added charge_mdg_trigger_rate and charge_rdg_trigger_rate: Probability of triggering buff on charge hit
Added op_charge_mdg_trigger_rate and op_charge_rdg_trigger_rate: Probability of triggering buff on counter-charge
Currently, buffs have three trigger methods:
Triggered after hitting an enemy (default trigger)
Triggered upon initiating an attack (active buff)
Triggered when being attacked (passive buff)
To define an active buff, use is_active 1.
To define a passive buff, use is_passive 1.
trigger_condition specifies the trigger condition, e.g., hp < 20 means triggers when hp < 20%. Should be used with passive triggers.
passive_trigger_rate # Passive trigger rate, defaults to 100%, meaning when conditions are met, the buff is triggered 100% of the time (e.g., hp < 20%, the buff will always trigger).
SoundRTS New Defeat Conditions Documentation
1. Overview
SoundRTS now supports more defeat conditions. In addition to the original "no units," "no buildings," and "no enemies" conditions, the following new defeat triggers have been added:
Defeat if a specific unit is killed
Defeat if all units of a specific type are killed
Defeat if a designated number of units of a specific type are killed
Composite defeat conditions for multiple types of units
2. New Defeat Condition Triggers
2.1 unit_lost: Defeat When a Specific Unit is Lost
Checks whether the specified type of unit is dead or lost.
trigger all (unit_lost knight) (defeat) # Defeat if all knights are lost
2.2 key_unit_killed: Defeat When a Key Unit is Killed
Checks if a key unit has been killed by the enemy. Unlike unit_lost, this condition specifically considers being killed, not simply missing for other reasons.
trigger all (key_unit_killed knight) (defeat) # Defeat if any knight is killed
trigger all (key_unit_killed archer knight) (defeat) # Defeat if any archer or knight is killed
2.3 key_units_killed: Defeat When a Number of Key Units are Killed
Checks whether a specified number of key units have been killed.
# Basic format - single unit type
trigger all (key_units_killed 5 knight) (defeat) # Defeat if 5 knights are killed

# Advanced format - multiple unit types
trigger all (key_units_killed 3 knight 5 archer) (defeat) # Defeat if 3 knights and 5 archers are killed
2.4 units_lost: Defeat When Units Are Lost
Checks if a specified number and type of units are lost (includes both being killed and other reasons for disappearing).
# Basic format
trigger all (units_lost 5 knight) (defeat) # Defeat if fewer than 5 knights remain

# Multiple unit types
trigger all (units_lost 3 knight 5 archer) (defeat) # Defeat if fewer than 3 knights or fewer than 5 archers remain
2.5 building_lost/buildings_lost: Defeat When Buildings Are Lost
# Single building
trigger all (building_lost townhall) (defeat) # Defeat if the town hall is destroyed

# Multiple buildings
trigger all (buildings_lost 1 townhall 2 barracks) (defeat) # Defeat if fewer than 1 town hall or fewer than 2 barracks remain
2.6 has_killed: Defeat by Number of Kills
# Basic format
trigger all (has_killed 5 dragon) (defeat) # Defeat after killing 5 dragons
trigger all (has_killed 5 dragon enemy) (defeat) # Defeat after killing 5 enemy dragons
trigger all (has_killed 1 knight ally) (defeat) # Defeat after killing 1 allied knight

# Advanced format
trigger all (has_killed 1 footman 3 knight 7 catapult enemy) (defeat) # Defeat after killing multiple types of enemy units
3. Usage Examples
Example 1: Protect a VIP Unit
trigger all (unit_lost hero) (defeat) # Defeat if the hero dies
Example 2: Protect Multiple Key Units
trigger all (key_unit_killed wizard) (defeat) # Defeat if the wizard is killed
trigger all (key_unit_killed prince) (defeat) # Defeat if the prince is killed
Example 3: Maintain Forces
trigger all (units_lost 3 knight) (defeat) # Defeat if fewer than 3 knights remain
Example 4: Composite Condition
trigger all (buildings_lost 1 castle 2 tower) (defeat) # Defeat if fewer than 1 castle or fewer than 2 towers remain
4. Technical Notes
All newly added defeat conditions are implemented by tracking unit deaths and kill counts. The system records each unit's cause of death, killer, and unit type, in order to trigger the relevant defeat condition.
These new defeat conditions greatly enhance the possibility for campaign and custom map design, allowing for more diverse and challenging gameplay.
They can be combined with victory conditions.
; Victory on killing enemy leader
trigger players (killed_target enemy_leader) (victory)

; Defeat if own leader is killed
trigger players (key_unit_killed player_leader) (defeat)
Distinguishing Enemy and Allied Units
For the killed_target trigger condition, you can now specify whether to only count enemy units or allied units:
; By default, only counts enemy units killed
trigger players (killed_target dragon) (victory)

; Explicitly count only enemy units
trigger players (killed_target dragon enemy) (victory)

; Explicitly count allied units (e.g., for betrayal scenarios)
trigger players (killed_target ally_hero ally) (victory)
This improvement prevents players from winning by killing their own units.
Kill Count Conditions
The has_killed trigger also supports specifying enemy or allied units; it can be used to check if a certain number of enemy or allied units have been killed:
; By default, checks if 5 enemy footmen have been killed
trigger player1 (has_killed 5 footman) (objective_complete 1)

; Explicitly count only enemy units
trigger player1 (has_killed 10 archer enemy) (objective_complete 2)

; Explicitly count allied units (such as in civil war scenarios)
trigger player1 (has_killed 3 knight ally) (objective_complete 3)
Multi-Unit Type Combination Counts
has_killed now also supports checking multiple unit types in a single condition, the format is:
trigger player1 (has_killed number1 type1 number2 type2 ... [enemy|ally]) (action)
For example:
; Check if the player has killed 1 footman, 3 knights, and 7 catapults
trigger player1 (has_killed 1 footman 3 knight 7 catapult) (objective_complete 1)

; Explicitly specify only enemy units
trigger player1 (has_killed 5 peasant 2 archer 1 mage enemy) (objective_complete 2)

; Check if allied unit combinations have been killed (e.g., rebel suppression missions)
trigger player1 (has_killed 3 footman 1 knight ally) (objective_complete 3)
Such compound conditions allow for more complex and diverse game objectives, such as requiring the player to complete a series of specific kill targets in order to receive rewards or progress to the next stage.


1.4

This update is quite substantial, and mod creators may need to readjust their data.
1. Changed the way base attributes and attribute_vs are presented.
Let’s take mdg and mdg_vs as examples. Previously, the final damage was calculated as: final damage = specific damage replaces base damage. This approach was too flawed, because it required manually updating every vs value in the code, which was highly inconvenient.
So now it’s changed to: final damage = mdg + mdg_vs. This way, players only need to work with the base mdg, while mdg_vs can essentially be ignored, since the final value is the sum of both.
Now, when the base damage is 0, the unit will not attack the target, provided you set minimal_damage to 0 in rules.txt.
Therefore, you can disregard base damage and define mdg_vs or rdg_vs directly.
New: Critical (abbreviation: crit)
Critical multiplier attributes are added: mdg_crit, rdg_crit, and crit_vs. For example, mdg_crit 2 means a critical hit multiplier of 2.
Besides the multiplier, there are also critical chance attributes: mdg_crit_rate, rdg_crit_rate, and crit_rate_vs.
In style.txt, you can set the critical_hit sound effect ID to assign a critical sound effect to units.
New: Armor Penetration Attribute
mdg_piercing, rdg_piercing, and piercing_vs are calculated by percentage. For example, mdg_piercing 20 means 20% of armor is ignored.
Of course, there are also mdg_piercing_rate, rdg_piercing_rate, and piercing_rate_vs.
In style.txt, you can set the piercing_triggered sound effect ID for units to trigger armor piercing sound effects.
New: Explosion Damage Mechanism
mdg_explode and rdg_explode use 1 and 0 to toggle enabled/disabled.
When enabled, your mdg or rdg attacks have explosive effects.
You can use, for example, mdg_explode_vs townhall 1 to enable explosive damage against the townhall.
exp_hp_cost allows consuming HP to explode (suicide bombers), calculated as a percentage.
exp_dgf can set an explosion factor. Final damage becomes mdg or rdg + exp_dgf.
When the explosion mechanism is enabled, regardless of whether the attack’s main mdg or rdg hits, mdg_splash and rdg_splash will always work.
I have added a self-destruct (suicide) mechanism to the priest unit for testing purposes.
This self-destruct mechanism may be improved in the future.
mdg_targets and rdg_targets now support more types:
Now you have ground, air, unit, building, or you can even specify a particular unit, such as mdg_targets knight.
harm_target_type has also been expanded and now includes allied, enemy, or can be specified down to an individual unit.
If harm_target_type doesn't specify allied or enemy, it works as before—no distinction between friend or foe.
The buff mechanism’s target works the same way.
Integrated the hero mechanism and upgrade system from version 1.3.5.2 into the current version.
For example:
def hero
class soldier
global_count_limit 1
is_revivable 1
revival_time 10 # Time needed to revive after death
revival_time_per_level 2 # Each death increases revival time by +2
xp_thresholds 200 500 900 # XP required for levels 2 to 4
requirements
cost 0 0
food_cost 0
time_cost 0
hp_max 200
hp_max_per_level 1000 # Each level up adds 1000 HP
hp_regen 0.25
hp_regen_per_level 5
resource_rewards 300 # Resource reward upon killing this unit
xp_reward 100 # XP reward upon killing this unit
xp_reward_per_xp 0.13

def knight
is_a hero
speed 2.5
mdf 1
mdf_bonus 1.5
mdg_range 1
mdg_cd 1.5
mdg 6
mdg_per_level 100 # Each level increases mdg by 100
Now, the unit definition syntax in style.txt can be written as:
def archer
title = 87     # Traditional syntax is supported
or title = "archer"   # Omitting the equals sign is also allowed
If you want to use character strings, you must wrap them in ""
Parameters in 'campaign' can now accept either strings or statements.
For example, the sequence parameter and triggers both allow strings or statements but require "" around strings.
In tts.txt, you can translate using the format:
source language = translation language
Two parameters in map files also support strings or statements:
That is, the title and objective parameters.
Now you can directly place advanced map folders into the multi directory without needing to pack them; the system can parse unpacked advanced maps.
Fixed a bug where entering numbers or characters with the same name as a sound effect in an input box would play the corresponding sound effect.
You are welcome to fully test these features; I am eager for your feedback to further improve this super engine.

1.3.9.8

Integrated the buff functionality from soundrts1.3.5.2 into this version.
debuffs
debuffs <buff names>
List of buffs (usually debuffs) added to a target if the attack is successful.
buffs
^^^^^
effect buffs <buff names list>
Adds the buffs (or debuffs) to the target.
buff




A buff is a temporary improvement of a unit's stat.
A unit gains a buff by:
Carrying an item that provides buffs,
Being hit by a unit with offensive buffs.
In this game, the concept of "buff" is extended to include:
Permanent effects (e.g., healing),
Negative effects (debuffs),
Mixed effects (e.g., damage over time).
duration
========
duration <buff duration (in seconds)>
How long the buff lasts (in seconds). Special rules apply depending on stack size.
Default value: 0
stack
=====
stack <max stack size>
Maximum number of buffs of this type that can be stacked.
Each added buff resets the duration of the entire stack unless the max stack size is 0.
Default value: 0
Possible values:
0: No stacking; no duration resetting.
1: No stacking; duration resetting.
>1: Stacking; duration resetting.
temporary
=========
Default value: 0
Possible values:
0: Healing/damaging buff; stat changes persist after buff removal.
1: Temporary buff/debuff; stats restore automatically upon removal.
negative
========
Default value: 0
Possible values:
0: Positive effect.
1: Negative effect.
stat
====
Name of the affected stat (e.g., armor, damage, hp, hp_max, speed).
No default value.
percentage
==========
Initial percentage-based variation of the stat's current value.
Example: If negative is 1 and stat is speed, 25 means an immediate 25% speed reduction.
Default value: 0
v
=
Initial absolute variation of the stat.
Example: If stat is hp_max, 5 means an immediate +5 to max HP.
Default value: 0
dv
==
Stat variation applied every dt interval.
Default value: 0
dt
==
Time interval (in seconds) for dv adjustments.
Default value: 1
target_type
===========
Syntax matches harm_target_type. Acts as a filter for allowed buff targets. Multiple values require all constraints to be met.
Possible values: healable, ground, air, unit, building, undead.
Default value: (none)
drain_to
========
drain_to <destination stats in priority order>
Requires the buff to be negative. The opposite effect is applied to the buff's caster.
Destination options: hp, mana, hp mana, or mana hp. If two stats are listed, the first is prioritized unless already at max.
Default value: (none)
item




An object that can be picked up by a unit.
abilities
List of abilities granted to the item carrier.
buffs
List of buffs granted to the item carrier.
Recommended setup for item-based buffs: temporary 1 and duration 9999 (effectively permanent but restores stats if the item is dropped).
is_loot
If set to 1, the item is dropped when its carrier dies.
Default value: 0
style
Defined in ui/style.txt and its localized versions.
shortcut








Orders (simple, building, training, ability use) can be assigned shortcuts via a shortcut property followed by a lowercase letter.
Simple orders (e.g., patrol) define shortcuts directly.
Complex orders (training/building/abilities) use the second part of the order for shortcuts.
Note: The item system is currently uncertain if fully functional. Refer to the b_slow buff in the base rules.txt for implementation guidance.
Bug Fix: Fixed an issue where enemies would not immediately appear when a unit arrived at an area containing enemies.

1.3.9.7
Added quantity setting functionality for can_train. The format is "can_train unit_type quantity", e.g:
can_train footman; Traditional definition method, defaults to 1 if quantity is unspecified.
can_train footman 3 archer 2 knight 5.
Alternatively: can_train footman archer knight 3.
can_train can also be modified via class upgrade using the format:
effect bonus can_train footman; Adds +1 to original quantity
or effect bonus can_train footman 3 archer 4 knight 5.
or effect bonus can_train footman archer knight 3.
Added can_change_to functionality, similar to can_upgrade_to but with differences:
1: Changed objects have no inheritance relationship unless explicitly defined with "is_a xxx".
2: change requires no cost, time_cost or food_cost, only the change_time parameter.
Fixed a bug where units with can_use_tech parameter failed to display command menus.


1.3.9.6
Now, when defining a class upgrade, cost, time_cost, and food_cost can be expressed as percentages. For example:
def discount
class upgrade
cost 10 5
time_cost 20
effect bonus cost -50% 0

This method of definition can have a very broad range of applications.
Based on this change, the resource quantities can now display as decimals.
You can also define fixed values:
def discount
class upgrade
cost 10 5
time_cost 20
effect bonus cost -5 0

In addition, parameters can_use_tech and can_use_skill have been added alongside the existing can_use.
can_use_tech is used for class upgrade, and can_use_skill is used for class skill.
Thus, you can either use the old can_use definition method or adopt the new can_use_tech and can_use_skill definitions. This distinction is more intuitive.

1.3.9.5
Added object filtering feature.
By default, pressing m or Shift+m can toggle between friendly, enemy, and all objects. For example, when switched to friendly objects, pressing Tab will only cycle through friendly objects.
Pressing n or Shift+n allows switching between buildings, units, elements, and all objects, following the same logic as above.
This enables combinations. For instance, pressing m to switch to friendly objects, then pressing n to switch to buildings will make Tab cycle only through friendly buildings.
What do you all think? Is this feature necessary?

Lastly, the game’s multilingual switching feature has been improved:
When cfg/language.txt exists and is not empty, the game will use the language specified in that file.
When cfg/language.txt does not exist or is empty, the game will use the system's default language.

In addition, a series of bugs have been fixed. However, performance has decreased for now, but it can still be optimized in the future, so the performance drop is only temporary.

1.3.9.4
The game has been optimized, and the performance improvement is quite noticeable. However, I'm not sure if there are any issues, and extensive testing will be required.

1.3.9.3
No new features this time:
Fixed the bug where mdg_cover_on_terrain and rdg_cover_on_terrain were not working,
and similarly for mdg_dodge_on_terrain and rdg_dodge_on_terrain.
Fixed the bug where, after researching a technology, it only applied to units that already existed at the time and not to units that had yet to be trained.
Temporarily removed matk_splash_hit and ratk_splash_hit, along with their corresponding sound effects.
Game performance has degraded significantly. Although I have done my best to optimize it, the improvements are minimal. Therefore, no new features will be added for now.

1.3.9.2
Now, the cost can be applied to upgrades, such as reducing the training cost of units or the upgrade costs for upgrades. Similarly, time_cost and food_cost can also be adjusted through upgrades.
The casting cost of skills can also be increased or decreased via upgrades.
Added matk_splash_hit and ratk_splash_hit for basic melee splash hit sound effects and basic ranged splash hit sound effects.
Also added matk_splash_hit_vs and ratk_splash_hit_vs for hit sound effects specific to certain units.
Removed the parameters hp_start_vs and hp_max_vs.
Fixed the attribute interface to support the display of floating-point numbers for all attributes.

1.3.9.1:
Added properties: mdg_splash_vs, rdg_splash_vs, mdg_splash_decay_min_vs, rdg_splash_decay_min_vs, mdg_radiu_vs, and rdg_radiu_vs.
Introduced a feature to delay the falling sound effect after playing the death sound effect death. It can be defined as follows:
death 1310
falling 80051; If defined this way, the falling sound effect will not be delayed.
falling_delay 1; Delays the falling sound effect by 1 second after the death sound effect is played.
falling 80051; Plays the falling sound effect.

It is possible to set different falling sound effects for various terrains. The format is similar to move_on_terrain id. For example:
falling_on_grass 1000

Adjusted the attack logic: If a unit's mdg_projectile or rdg_projectile is not equal to 1, that unit cannot attack targets on higher ground from lower ground, regardless of its attack range.
Fixed the logic for splash damage: splash damage will now radiate around the target being attacked.

1.3.9.0
The parameters extraction_time and extraction_qty have been restored and can interact with the worker's gather_time and gather_qty, achieving resource extraction gains or losses.
A new feature allows you to open the unit properties interface with Alt + V. You can use the up and down arrow keys to view various attributes of the unit or use specific hotkeys to quickly jump to the attribute you want to see.
The attributes in this interface are updated in real-time, so you can see changes in attributes after conducting research. This feature is still in testing。

; Hotkey Bindings for Attribute Interface
; This file defines hotkey bindings used in the attribute interface.
; The format is the same as bindings.txt used in the main interface.
;
; Important Notes:
; 1. Hotkeys in the attribute interface are independent from those in the main game interface, allowing for overlapping keys.
; For example: F10 might open the game menu in the main interface but can be set to view dodge rate in the attribute interface.
; 2. Attribute hotkey format: hotkey: attributes_attr AttributeName
; AttributeName must use constant names defined in msgparts.py, such as HP, MELEE_DAMAGE, etc.
; 3. Hotkey binding syntax is the same as in the main interface, supporting modifiers like CTRL, ALT, SHIFT, etc.
;
; Common Attribute Names:
; HP - Health Points
; MANA - Mana/Energy
; MELEE_DAMAGE - Melee Damage
; RANGE_DAMAGE - Ranged Damage
; MELEE_DEFENSE - Melee Defense
; RANGE_DEFENSE - Ranged Defense
; MDG_RANGE - Melee Range
; RANGED_RANGE - Ranged Range
; MDG_CD - Melee Cooldown
; RDG_CD - Ranged Cooldown
; MDG_READY - Melee Preparation
; RDG_READY - Ranged Preparation
; MDG_DODGE - Melee Dodge
; RDG_DODGE - Ranged Dodge
; MDG_COVER - Melee Cover
; RDG_COVER - Ranged Cover
; STATS - Status
; TECHNIC_STATS - Technology Status
; MDG_VS - Melee Damage Bonus
; RDG_VS - Ranged Damage Bonus
; SPEED - Speed
;
; Examples:
; F10: attributes_attr MDG_DODGE - Press F10 to view melee dodge rate
; x: attributes_attr RANGE_DEFENSE - Press x to view ranged defense value
; g: attributes_attr MDG_RANGE - Press g to view melee range

; Navigation Keys
UP: _attribute_prev
DOWN: _attribute_next
LEFT: _attribute_prev
RIGHT: _attribute_next

; Exit Key
ESCAPE: _exit_attributes_screen

; Attribute Quick Access Hotkey Examples:
; These are default hotkeys, and users can modify them as needed
h: attributes_attr HP
m: attributes_attr MELEE_DAMAGE
r: attributes_attr RANGE_DAMAGE
d: attributes_attr MELEE_DEFENSE
f: attributes_attr RANGE_DEFENSE
s: attributes_attr SPEED
a: attributes_attr MDG_CD
c: attributes_attr RDG_CD

; Hotkeys can also be used for special attributes
F10: attributes_attr MDG_DODGE
F11: attributes_attr RDG_DODGE
F9: attributes_attr RANGED_RANGE

attributes_bindings.txt
; Additional commonly used attributes can be added here

1.3.8.8:
Workers can now be assigned specific resource types to gather:
e.g. can_gather resource1 resource2
By default, workers cannot gather any resource types.
Supports can_gather all to gather all resource types.
Removed extraction_time and extraction_qty from deposits.
Added gather_time and gather_qty parameters to worker class.
Examples:
can_gather resource1 resource2 resource3 resource4 resource5
gather_time resource1 10 resource2 15 resource3 20 resource4 25 resource5 30 # Time(seconds) for each resource

Can also define individually:
gather_time_resource1 10
gather_time_resource2 15
gather_qty resource1 2 resource2 3 resource3 4 resource4 5 resource5 6 # Quantity per gathering

Or individual quantity definitions:
gather_qty_resource1 2
gather_qty_resource2 3

Supports global settings:
gather_time all 10 # Time for all resources
gather_qty all 2 # Quantity for all resources

Simplified syntax for single resource:
can_gather resource1
gather_time 20 # Implicitly applies to resource1
gather_qty 2 # Implicitly applies to resource1

All parameters can be modified through research.
Upgrade Examples
Example 1: Bonus-based gathering time reduction
def faster_gathering
class upgrade
cost 10 5
time_cost 60
effect bonus gather_time 1 # -1s per level (bonus style)
requirements lumbermill
end
Example 2: Set specific resource gathering time
def gold_gathering_expert
class upgrade
cost 15 5
time_cost 70
effect gather_time resource1 3 # Set gold gathering to 3s
requirements blacksmith
end
Example 3: Set specific resource quantity
def gold_yield_expert
class upgrade
cost 15 5
time_cost 70
effect gather_qty resource1 12 # Set gold quantity to 12
requirements blacksmith
end
Example 4: Global resource settings
def master_gatherer
class upgrade
cost 20 10
time_cost 80
effect gather_time all 2.5 # All resources take 2.5s
effect gather_qty all 15 # All resources yield 15
requirements castle
end
Example 5: Multi-resource configuration
def resource_specialist
class upgrade
cost 20 10
time_cost 80
effect gather_time resource1 2 resource2 3 # Gold 2s, Wood 3s
effect gather_qty resource1 10 resource2 12 # Gold 10, Wood 12
requirements castle
end
Example 6: Production time bonus
def faster_production
class upgrade
cost 15 8
time_cost 80
effect bonus production_time 30 # -30s per level
requirements lumbermill
end
Example 7: Set production time
def rapid_production
class upgrade
cost 15 8
time_cost 80
effect production_time 180 # Set to 180s
requirements lumbermill
end
Example 8: Production quantity bonus
def enhanced_production
class upgrade
cost 20 10
time_cost 90
effect bonus production_qty 10 # +10 per level
requirements lumbermill
end
Example 9: Set production quantity
def mass_production
class upgrade
cost 20 10
time_cost 90
effect production_qty 70 # Set to 70
requirements lumbermill
end
Example 10: Kill reward bonus
def better_spoils
class upgrade
cost 25 15
time_cost 100
effect bonus rewards_resource 10 5 # +10 Gold +5 Wood per level
requirements castle
end
Example 11: Set kill rewards
def war_profiteer
class upgrade
cost 25 15
time_cost 100
effect rewards_resource 80 20 # Set to 80 Gold 20 Wood
requirements castle


1.3.8.5:
Implemented functionality to associate mods with specific exclusive maps.
Now, when a player switches to a particular mod, the game will only display maps exclusive to that mod, and other maps will not be shown.
To achieve this, you need to create a multi folder in the root directory of the specific mod and place the maps inside it. If you do not create a multi folder, the game will display all maps by default.
In other words, each mod can have its own multi folder for storing its exclusive maps.


1.3.8.4
1: Fixed a bug where mdg_dodge_vs and rdg_dodge_vs had 100% dodge.
2: Added the functionality for buildings to produce resources. The format is as follows:
def gold_house
class building
cost 10 9 # Cost to build the building
time_cost 70 # Time required to construct the building
hp_max 330 # Maximum health of the building
is_production 1 # 1 indicates the building can produce resources; 0 means it cannot
production_type resource1 # Type of resource the building produces (each building can only produce one resource type)
production_cost 2 0 # Cost of production
production_time 300 # Time required for production
production_qty 100 # Yield received after production is complete
can_start_produce # This field allows the "Start Production" option to appear in the command menu

Once the player clicks on "Start Production," the building will automatically begin production. Progress notifications will be reported each time 20% of the production progress is completed. When production is finished, the resources will automatically be added to the player’s resource pool, and the building will immediately begin the next production cycle. Players can stop production at any time by clicking "Stop."



1.3.8.3

Improved inheritance mechanism, allowing players to achieve very flexible unit inheritance.
For example:
is_a footman; inherits all attributes of the footman.
is_a footman(hp_max mdg); selectively inherits specific attributes of the unit.
is_a footman(apart hp_max); inherits all attributes except for hp_max. I call this "exclusion inheritance."
is_a footman(mdg mdf) knight(hp_max rdf); inherits attributes from multiple units simultaneously.
is_a footman knight archer; inherits everything from multiple units simultaneously.
Some players might not fully understand this feature. Below, I will illustrate the power and importance of this functionality with an example:
def light_armor; Define a light armor unit.  
class soldier  

def heavy_armor  
class soldier  

def light_cavalry  
is_a light_armor  
hp_max 20  
mdf 0.5  
[Additional attributes omitted here.]  

def heavy_cavalry  
is_a heavy_armor  
[Additional attributes omitted here.]  

def spearmen  
class soldier  
mdg 4  
mdg_vs light_armor 18; Has high damage against light armor units.  
Since light_cavalry belongs to light_armor, spearmen have a counter advantage against all units inheriting light_armor.
Players can extend and apply this idea further. This is the simplest use case of the inheritance mechanism!
Fixed Bugs:
Fixed a bug where units sometimes failed to hit targets due to range errors.
Fixed the capture_hp_threshold not being functional.

1.3.8.2 - Ultimate

Added Features:
Capture Ownership Mechanic:
A new feature allows capturing ownership of buildings or units. When the health of a building or unit reaches the capture threshold, it will execute a capture.
A simple example is walls and gates. Their capture threshold is set to 30% health, but players can adjust this value.
Keywords in style.txt: capture_success and target_captured.
New Identifiers for High Ground Mechanics:
Added mdg_projectile and rdg_projectile identifiers:
0 = Disabled, 1 = Enabled. These determine whether units on elevated terrain have additional range.
Added mdg_cover_on_terrain and rdg_cover_on_terrain.
Added mdg_dodge_on_terrain and rdg_dodge_on_terrain.
These allow configuring units' hit rate and dodge rate based on specific terrain.
Deprecated Features:
Removed mdg_blic and rdg_blic.
Improvements:
Enhanced the functionality of vehicles positioned at exits:
For example, walls and gates built at an exit can now interact with either side of the exit, allowing for actions such as loading and unloading units on both sides.
Villagers on either side of the exit can now repair the wall or gate simultaneously.
Additionally, observers located on either side of the exit can see both the container and the units inside it.
Bug Fixes:
Fixed an issue in bindings.txt where hotkeys could not be mapped for resource3 and above.
Fixed the issue where mdg_ready and rdg_ready were not functioning properly (including mdg_ready_vs and rdg_ready_vs).
Fixed the issue where mdg_cd_vs and rdg_cd_vs were not functioning properly.
Fixed the issue where mdg_range_vs, rdg_range_vs, and minimal_range_vs were not working correctly.
Fixed a bug where units inside containers attacking external targets did not trigger hit sound effects.


1.3.8.1 - ultimate

After two months of hard work, I have improved SoundRTS, transforming it into a relatively open and highly flexible engine.
However, due to limited personal energy and the impossibility of covering all aspects on my own, I require the assistance of a large number of players to help with testing.
Additionally, I hope SoundMUD can provide guidance.
This version is far from being the final release, and I will continue to enhance it further—please stay tuned for future updates!
1. Major Improvements to Unit Properties
HP System:
hp_start: Allows you to set the initial HP of a unit.
hp_start_vs: Adjusts hp_start specifically for certain units (needs testing).
hp_max_vs: Adjusts hp_max specifically for certain units (needs testing).
Damage System:
The previous damage field has been replaced with the following damage types:
mdg (melee_damage): Specifies melee damage.
rdg (range_damage): Specifies ranged damage.
mdg_vs: Adjusts melee damage (mdg) specifically against certain units.
rdg_vs: Adjusts ranged damage (rdg) specifically against certain units.
New range-related fields:
mdg_range: Replaces the single range field for melee attacks.
rdg_range: The same functionality for ranged attacks.
mdg_minimal_range: Replaces the single minimal_range field for melee attacks.
rdg_minimal_range: The same functionality for ranged attacks.
mdg_range_vs: Adjusts melee range (mdg_range) specifically for certain units.
rdg_range_vs: Adjusts ranged range (rdg_range) specifically for certain units.
mdg_minimal_range_vs: Adjusts melee minimal range (mdg_minimal_range) specifically for certain units.
rdg_minimal_range_vs: Adjusts ranged minimal range (rdg_minimal_range) specifically for certain units.
New targeting-related fields:
mdg_targets: Replaces the previous target_types for melee attacks.
rdg_targets: Replaces the previous target_types for ranged attacks.
Attack delay and projectile simulation:
mdg_delay: Specifies the delay before a melee attack hits its target. For example, mdg_delay 0.2 means an attack takes 0.2 seconds to hit after being launched (a simulation of projectile travel time).
rdg_delay: The same functionality for ranged attacks.
mdg_blic/rdg_blic: Used to define projectile "arc" behavior (though not real projectiles, it's a simulation using hit delay).
Splash damage:
mdg_splash: Replaces the binary splash field with adjustable values (not just 0 or 1).
rdg_splash: The same functionality for ranged attacks.
mdg_radius: Replaces the single damage_radius field for melee splash damage.
rdg_radius: The same functionality for ranged splash damage.
mdg_splash_decay: Specifies splash damage falloff for melee attacks.
rdg_splash_decay: Specifies splash damage falloff for ranged attacks.
Defense System Improvements:
The previous armor field has been replaced with the following defense types:
mdf (melee_defense): Specifies melee defense.
rdf (range_defense): Specifies ranged defense.
mdf_vs: Adjusts melee defense (mdf) specifically for certain units.
rdf_vs: Adjusts ranged defense (rdf) specifically for certain units.
Attack Cooldowns and Pre-Hit Delays:
mdg_cd: Replaces the single cooldown field for melee attacks.
rdg_cd: The same for ranged attacks.
mdg_cd_vs: Adjusts mdg_cd specifically for certain units.
rdg_cd_vs: Adjusts rdg_cd specifically for certain units.
mdg_ready: Specifies melee attack preparation time.
rdg_ready: Specifies ranged attack preparation time.
mdg_ready_vs: Adjusts mdg_ready specifically for certain units.
rdg_ready_vs: Adjusts rdg_ready specifically for certain units.
Accuracy and Evasion:
mdg_cover: Specifies melee hit rate.
rdg_cover: Specifies ranged hit rate.
mdg_cover_vs: Adjusts mdg_cover specifically for certain units.
rdg_cover_vs: Adjusts rdg_cover specifically for certain units.
mdg_dodge: Specifies melee evasion rate.
rdg_dodge: Specifies ranged evasion rate.
mdg_dodge_vs: Adjusts mdg_dodge specifically for certain units.
rdg_dodge_vs: Adjusts rdg_dodge specifically for certain units.
Movement Speed:
speed: Specifies the base movement speed of a unit.
speed_vs: Adjusts speed specifically for certain units (needs testing).
Attack Sequence System:
For example:
mdg 12  
mdg_cd 1.5  
mdg_range 6  
damage_seq mdg 3 (damage 6 3 3) (interval 0.2)  
This configuration sets up a melee attack sequence that executes three melee attacks of 6, 3, and 3 damage (totaling mdg 12) over intervals of 0.2 seconds each.
2. Unit Behavior in Vehicles:
allow_units_attack: Allows specific units to attack external targets while inside a vehicle. For example:
allow_units_attack archer: Allows archers to attack from vehicles.
allow_units_attack archer footman: Allows multiple units (archer, footman) to attack from vehicles.
allow_units_attack all: Allows all units to attack from vehicles.
By default, units cannot attack from vehicles unless specified.
allow_units_add: Grants vehicles attribute bonuses when loading units.
For example:
allow_units_add speed 0.5: Each loaded unit adds 0.5 movement speed to the vehicle.
Multiple bonuses can be specified, such as:
allow_units_add speed 0.5 mdg 2 mdg_cd 1.5.
3. Upgrades System Enhancements:
Now, upgrades can be defined in a flexible way:
For example:
def melee_weapon_and_defense  
class upgrade  
cost 8 10  
time_cost 60  
effect bonus mdg 1 mdf 2  
Multi-level upgrades are also supported:
def lv1_melee_weapon  
class upgrade  
effect apply_bonus mdg  

def lv2_melee_weapon  
is_a lv1_melee_weapon  

def lv3_melee_weapon  
is_a lv2_melee_weapon  

def footman  
class soldier  
mdg_bonus 1 1 2  # Adds 1 `mdg` for the first two upgrades, and 2 `mdg` for the third.  
4. Skill System Enhancements:
Class definitions for skills now use class skill instead of class ability.
Skills support time_cost and cost parameters. For example:
def a_summon_dragon  
class skill  
requirements u_summon_dragon  
mana_cost 150  
cost 10 15  
time_cost 60  
effect summon 120 2 dragon  
5. Bug Fixes:
Fixed a bug where buildings loaded into transport units lost their meadow attribute.
6. New Gameplay Features:
Players can now enable or disable auto-retaliation mode for any unit during gameplay.
Added new "guard" and "chase" modes in addition to the existing "offensive" and "defensive" modes.
7. Resource System Update:
resource_type is now a string instead of 0 or 1. For example:
resource_type resource1; gold
resource_type resource2; wood
8. Sound System Improvements:
Added casting: Sound effects for skill preparation.
Replaced old fields with more specific ones:
mdg_missed and rdg_missed: Replace missed.
launch_matk and launch_ratk: Replace launch_attack.
matk_hit and ratk_hit: Replace attack_hit.
disappear: Plays when summoned units time out (different from death).

dropbox download
https://www.dropbox.com/scl/fi/o7w649jrtv2l1jcagzuol/soundrts-1.4.0.5-Ultimate-version-windows.zip?rlkey=6b7xpzdmxcv5pnwmo0kfiwebx&st=vdgcuenc&dl=1

lucia greco

unread,
Jun 19, 2025, 7:45:39 PMJun 19
to soundr...@googlegroups.com
 worning to all this seems to have a trojan in it if any one has the current download please let me know wair to get a safe version 
lucia Greco
http://accessaces.com
follow me on twitter @accessaces


--
You received this message because you are subscribed to the Google Groups "soundRTSChat" group.
To unsubscribe from this group and stop receiving emails from it, send an email to soundrtschat...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/soundrtschat/9a3c4280-90c2-4a97-a001-6bde29c1c40bn%40googlegroups.com.

修君

unread,
Jun 19, 2025, 9:05:53 PMJun 19
to soundRTSChat
There shouldn't be any problem; it might just be overdefending.
Reply all
Reply to author
Forward
0 new messages