2.5.0 - Farming, Fight Caves & Magic Carpets
Happy New Year all! Last year was a very strong year for Void with constant progress and large updates for both content and systems pretty much every single month.
Next week will mark 5 years since this project thread started and I've decided this year I want to focus more on playability and make sure that all the content, bosses and monsters players typically want are added.
The systems in place are getting quite stable now and only small refinements and optimisations here and there, with one exception; NPC Combat.
So that's what I've been addressing in January:
- Changing how combat is written to make it easier to add new monster
- Rewriting retreating, aggression, movement and range mechanics to be more accurate to the original
- Fixing a dozen or so combat related bugs
95% of combat "scripts" are now configs that look like this:
INI:
[banshee]
attack_speed = 4
retreat_range = 15
defend_anim = "banshee_defend"
defend_sound = "banshee_defend"
death_anim = "banshee_death"
death_sound = "banshee_death"
[banshee.attack]
condition = "earmuffs"
range = 1
anim = "banshee_attack"
target_sound = "banshee_attack"
target_hit = { offense = "melee", defence = "magic", max = 20 }
[banshee.scream]
condition = "no_earmuffs"
range = 1
impact_regardless = true
anim = "banshee_attack_scream"
target_sound = "banshee_attack_earmuffs"
target_anim = "ears_bleed"
projectile = { id = "banshee_scream" }
target_hit = { offense = "melee", defence = "magic", max = 80 }
impact_drains = [
{ skill = "attack", multiplier = 0.2 },
{ skill = "strength", multiplier = 0.2 },
{ skill = "defence", multiplier = 0.2 },
{ skill = "ranged", multiplier = 0.2 },
{ skill = "magic", multiplier = 0.2 },
{ skill = "prayer", multiplier = 0.1 },
{ skill = "agility", multiplier = 0.1 },
]
And occasionally some mechanics are needed in code for conditions, overriding attacks or doing something on impact (like moving a target):
Code:
class Banshee : Script {
init {
npcCondition("earmuffs") { target -> target is Player && Equipment.isEarmuffs(target.equipped(EquipSlot.Hat).id) }
npcCondition("no_earmuffs") { target -> target is Player && !Equipment.isEarmuffs(target.equipped(EquipSlot.Hat).id) }
}
}
What better way to test out the new system than by adding the TzHaar Fight Caves along with TzTok Jad and the Chaos Elemental .
Some other content I added over Christmas includes Farming, nearly all the patches, mechanics, gardeners, composting etc...
Shantay Pass and the Magic Carpets
And I noticed the hunting system was being a bit slow and tested with 2k players running around lumbridge to find a tick was back up at 480ms so a bit of player + npc lookup optimising got that back down to 175ms.





