mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Balance tweaks
This commit is contained in:
parent
967d151312
commit
aec866e5ec
@ -114,6 +114,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Creatures will now defend their pets
|
||||
- [WorldGen] Change path colors
|
||||
- Render item drops instead of placeholder textures
|
||||
- Arthropods are rebalanced
|
||||
- Slight hat item rebalance (hats are more specialized and befitting of their rarity rank)
|
||||
- Harvester boss buffed in stats
|
||||
|
||||
### Removed
|
||||
|
||||
|
@ -186,6 +186,8 @@
|
||||
secondary: "common.abilities.custom.tidalwarrior.totem_wave",
|
||||
abilities: [],
|
||||
),
|
||||
// Note: Consider making a ranking system once we get more entities
|
||||
// TODO: Make all purple item droppers have purple CR and a unique skillset
|
||||
Custom("Quad Med Quick"): (
|
||||
primary: "common.abilities.custom.quadmedquick.triplestrike",
|
||||
secondary: "common.abilities.custom.quadmedquick.dash",
|
||||
@ -279,30 +281,41 @@
|
||||
secondary: "common.abilities.custom.theropodbasic.dash",
|
||||
abilities: [],
|
||||
),
|
||||
Custom("Arthropod Basic"): (
|
||||
primary: "common.abilities.custom.arthropodbasic.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropodbasic.ensnaringweb",
|
||||
// Arthropods
|
||||
Custom("Antlion"): (
|
||||
primary: "common.abilities.custom.arthropods.antlion.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropods.antlion.charge",
|
||||
abilities: [],
|
||||
),
|
||||
Custom("Arthropod Leap"): (
|
||||
primary: "common.abilities.custom.arthropodbasic.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropodbasic.ensnaringweb",
|
||||
Custom("Black Widow"): (
|
||||
primary: "common.abilities.custom.arthropods.blackwidow.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropods.blackwidow.ensnaringwebs",
|
||||
abilities: [
|
||||
(None, "common.abilities.custom.arthropodbasic.leap"),
|
||||
(None, "common.abilities.custom.arthropods.blackwidow.poisonball"),
|
||||
],
|
||||
),
|
||||
Custom("Arthropod Ranged"): (
|
||||
primary: "common.abilities.custom.arthropodranged.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropodranged.ensnaringweb",
|
||||
Custom("Horn Beetle"): (
|
||||
primary: "common.abilities.custom.arthropods.hornbeetle.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropods.hornbeetle.harden",
|
||||
abilities: [
|
||||
(None, "common.abilities.custom.arthropodranged.poisonball"),
|
||||
(None, "common.abilities.custom.arthropods.hornbeetle.leap"),
|
||||
],
|
||||
),
|
||||
Custom("Arthropod Charge"): (
|
||||
primary: "common.abilities.custom.arthropodcharge.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropodcharge.charge",
|
||||
abilities: [],
|
||||
Custom("Tarantula"): (
|
||||
primary: "common.abilities.custom.arthropods.tarantula.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropods.tarantula.ensnaringwebs",
|
||||
abilities: [
|
||||
(None, "common.abilities.custom.arthropods.tarantula.leap"),
|
||||
],
|
||||
),
|
||||
Custom("Weevil"): (
|
||||
primary: "common.abilities.custom.arthropods.weevil.singlestrike",
|
||||
secondary: "common.abilities.custom.arthropods.weevil.harden",
|
||||
abilities: [
|
||||
(None, "common.abilities.custom.arthropods.weevil.threadshot"),
|
||||
],
|
||||
),
|
||||
/// TODO: Organize the rest into further catagories and give purple tier droppers+ custom skillsets
|
||||
Custom("Turret"): (
|
||||
primary: "common.abilities.custom.turret.arrows",
|
||||
secondary: "common.abilities.custom.turret.arrows",
|
||||
|
@ -2,27 +2,27 @@ DashMelee(
|
||||
energy_cost: 0,
|
||||
melee_constructor: (
|
||||
kind: Stab(
|
||||
damage: 12.0,
|
||||
poise: 25.0,
|
||||
damage: 15.0,
|
||||
poise: 20.0,
|
||||
knockback: 10.0,
|
||||
energy_regen: 0.0,
|
||||
),
|
||||
scaled: Some(Stab(
|
||||
damage: 50.0,
|
||||
poise: 100.0,
|
||||
knockback: 30.0,
|
||||
damage: 60.0,
|
||||
poise: 45.0,
|
||||
knockback: 25.0,
|
||||
energy_regen: 0.0,
|
||||
)),
|
||||
range: 5.0,
|
||||
angle: 90.0,
|
||||
),
|
||||
energy_drain: 0,
|
||||
forward_speed: 5.0,
|
||||
forward_speed: 3.0,
|
||||
buildup_duration: 0.3,
|
||||
charge_duration: 4.0,
|
||||
swing_duration: 0.1,
|
||||
recover_duration: 0.4,
|
||||
ori_modifier: 0.3,
|
||||
ori_modifier: 0.1,
|
||||
charge_through: false,
|
||||
is_interruptible: false,
|
||||
)
|
@ -0,0 +1,34 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 37,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 27.5,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 9.0,
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.7,
|
||||
base_swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Ensnared,
|
||||
dur_secs: 6.0,
|
||||
strength: DamageFraction(0.1),
|
||||
chance: 0.6,
|
||||
))),
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
is_interruptible: false,
|
||||
ori_modifier: 0.8,
|
||||
)
|
@ -1,8 +1,8 @@
|
||||
SpriteSummon(
|
||||
buildup_duration: 0.6,
|
||||
buildup_duration: 0.5,
|
||||
cast_duration: 0.4,
|
||||
recover_duration: 0.3,
|
||||
sprite: EnsnaringWeb,
|
||||
summon_distance: (0, 8),
|
||||
sparseness: 0.67,
|
||||
summon_distance: (0, 10),
|
||||
sparseness: 0.76,
|
||||
)
|
@ -1,19 +1,19 @@
|
||||
BasicRanged(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 0.8,
|
||||
buildup_duration: 0.6,
|
||||
recover_duration: 0.35,
|
||||
projectile: Poisonball(
|
||||
damage: 26.0,
|
||||
radius: 5.0,
|
||||
damage: 25.0,
|
||||
radius: 3.0,
|
||||
energy_regen: 0,
|
||||
min_falloff: 0.5,
|
||||
min_falloff: 0.2,
|
||||
),
|
||||
projectile_body: Object(SpitPoison),
|
||||
/*projectile_light: Some(LightEmitter {
|
||||
col: (1.0, 0.75, 0.11).into(),
|
||||
..Default::default()
|
||||
}),*/
|
||||
projectile_speed: 70.0,
|
||||
projectile_speed: 260.0,
|
||||
num_projectiles: 3,
|
||||
projectile_spread: 0.2,
|
||||
projectile_spread: 0.3,
|
||||
)
|
@ -2,11 +2,11 @@ ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 60,
|
||||
base_damage: 25,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 28,
|
||||
base_poise_damage: 16,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
knockback: 2.0,
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.4,
|
||||
@ -14,12 +14,12 @@ ComboMelee(
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
damage_kind: Piercing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Poisoned,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(1.0),
|
||||
chance: 1.0,
|
||||
dur_secs: 7.0,
|
||||
strength: DamageFraction(0.6),
|
||||
chance: 0.4,
|
||||
))),
|
||||
),
|
||||
],
|
||||
@ -30,5 +30,5 @@ ComboMelee(
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
is_interruptible: false,
|
||||
ori_modifier: 0.7,
|
||||
ori_modifier: 0.8,
|
||||
)
|
@ -0,0 +1,9 @@
|
||||
SelfBuff(
|
||||
buildup_duration: 0.4,
|
||||
cast_duration: 0.8,
|
||||
recover_duration: 0.3,
|
||||
buff_kind: ProtectingWard,
|
||||
buff_strength: 1.5,
|
||||
buff_duration: Some(10.0),
|
||||
energy_cost: 0,
|
||||
)
|
@ -6,8 +6,8 @@ LeapMelee(
|
||||
recover_duration: 0.2,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 120.0,
|
||||
poise: 60.0,
|
||||
damage: 30.0,
|
||||
poise: 20.0,
|
||||
knockback: 4.0,
|
||||
energy_regen: 0.0,
|
||||
),
|
||||
@ -15,5 +15,5 @@ LeapMelee(
|
||||
angle: 180.0,
|
||||
),
|
||||
forward_leap_strength: 40.0,
|
||||
vertical_leap_strength: 10.0,
|
||||
vertical_leap_strength: 7.5,
|
||||
)
|
@ -0,0 +1,28 @@
|
||||
ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 27,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 20,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 5.0,
|
||||
range: 3.0,
|
||||
angle: 60.0,
|
||||
base_buildup_duration: 0.4,
|
||||
base_swing_duration: 0.1,
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
max_energy_gain: 0,
|
||||
energy_increase: 0,
|
||||
speed_increase: 0.0,
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
is_interruptible: false,
|
||||
ori_modifier: 0.5,
|
||||
)
|
@ -1,8 +1,8 @@
|
||||
SpriteSummon(
|
||||
buildup_duration: 0.6,
|
||||
buildup_duration: 0.5,
|
||||
cast_duration: 0.4,
|
||||
recover_duration: 0.3,
|
||||
sprite: EnsnaringWeb,
|
||||
summon_distance: (0, 8),
|
||||
sparseness: 0.67,
|
||||
summon_distance: (0, 9),
|
||||
sparseness: 0.8,
|
||||
)
|
19
assets/common/abilities/custom/arthropods/tarantula/leap.ron
Normal file
19
assets/common/abilities/custom/arthropods/tarantula/leap.ron
Normal file
@ -0,0 +1,19 @@
|
||||
LeapMelee(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 0.5,
|
||||
movement_duration: 0.4,
|
||||
swing_duration: 0.075,
|
||||
recover_duration: 0.2,
|
||||
melee_constructor: (
|
||||
kind: Bash(
|
||||
damage: 35.0,
|
||||
poise: 30.0,
|
||||
knockback: 1.0,
|
||||
energy_regen: 0.0,
|
||||
),
|
||||
range: 4.5,
|
||||
angle: 180.0,
|
||||
),
|
||||
forward_leap_strength: 25.0,
|
||||
vertical_leap_strength: 10.0,
|
||||
)
|
@ -2,9 +2,9 @@ ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 70,
|
||||
base_damage: 30,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 28,
|
||||
base_poise_damage: 21,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.0,
|
||||
@ -14,12 +14,12 @@ ComboMelee(
|
||||
hit_timing: 0.5,
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
damage_kind: Piercing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Poisoned,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(1.0),
|
||||
chance: 1.0,
|
||||
dur_secs: 9.0,
|
||||
strength: DamageFraction(0.7),
|
||||
chance: 0.8,
|
||||
))),
|
||||
),
|
||||
],
|
||||
@ -30,5 +30,5 @@ ComboMelee(
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
is_interruptible: false,
|
||||
ori_modifier: 0.7,
|
||||
ori_modifier: 0.8,
|
||||
)
|
@ -0,0 +1,9 @@
|
||||
SelfBuff(
|
||||
buildup_duration: 0.4,
|
||||
cast_duration: 0.8,
|
||||
recover_duration: 0.3,
|
||||
buff_kind: ProtectingWard,
|
||||
buff_strength: 1.2,
|
||||
buff_duration: Some(10.0),
|
||||
energy_cost: 0,
|
||||
)
|
@ -2,9 +2,9 @@ ComboMelee(
|
||||
stage_data: [
|
||||
(
|
||||
stage: 1,
|
||||
base_damage: 40,
|
||||
base_damage: 22,
|
||||
damage_increase: 0,
|
||||
base_poise_damage: 15,
|
||||
base_poise_damage: 14,
|
||||
poise_damage_increase: 0,
|
||||
knockback: 3.0,
|
||||
range: 3.0,
|
||||
@ -15,12 +15,6 @@ ComboMelee(
|
||||
base_recover_duration: 0.4,
|
||||
forward_movement: 1.0,
|
||||
damage_kind: Crushing,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Poisoned,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(1.0),
|
||||
chance: 1.0,
|
||||
))),
|
||||
),
|
||||
],
|
||||
initial_energy_gain: 0,
|
||||
@ -30,5 +24,5 @@ ComboMelee(
|
||||
max_speed_increase: 0.0,
|
||||
scales_from_combo: 0,
|
||||
is_interruptible: false,
|
||||
ori_modifier: 0.7,
|
||||
ori_modifier: 0.6,
|
||||
)
|
@ -0,0 +1,19 @@
|
||||
BasicBeam(
|
||||
buildup_duration: 0.2,
|
||||
recover_duration: 0.2,
|
||||
beam_duration: 1.0,
|
||||
damage: 0.6,
|
||||
tick_rate: 15.0,
|
||||
range: 30.0,
|
||||
max_angle: 1.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Frozen,
|
||||
dur_secs: 4.0,
|
||||
strength: DamageFraction(1.0),
|
||||
chance: 1.0,
|
||||
))),
|
||||
energy_regen: 0.0,
|
||||
energy_drain: 0,
|
||||
ori_rate: 0.95,
|
||||
specifier: WebStrand,
|
||||
)
|
@ -3,7 +3,7 @@ BasicRanged(
|
||||
buildup_duration: 0.5,
|
||||
recover_duration: 0.8,
|
||||
projectile: ExplodingPumpkin(
|
||||
damage: 20.0,
|
||||
damage: 25.0,
|
||||
knockback: 25.0,
|
||||
radius: 5.0,
|
||||
min_falloff: 0.6,
|
||||
|
@ -1,19 +1,19 @@
|
||||
BasicBeam(
|
||||
buildup_duration: 0.5,
|
||||
recover_duration: 0.5,
|
||||
buildup_duration: 0.7,
|
||||
recover_duration: 0.6,
|
||||
beam_duration: 1.0,
|
||||
damage: 4.0,
|
||||
damage: 6.0,
|
||||
tick_rate: 1.5,
|
||||
range: 20.0,
|
||||
max_angle: 15.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Burning,
|
||||
dur_secs: 10.0,
|
||||
strength: DamageFraction(0.5),
|
||||
chance: 0.25,
|
||||
strength: DamageFraction(1.0),
|
||||
chance: 1.0,
|
||||
))),
|
||||
energy_regen: 0,
|
||||
energy_drain: 0,
|
||||
ori_rate: 0.2,
|
||||
ori_rate: 0.3,
|
||||
specifier: Flamethrower,
|
||||
)
|
||||
|
@ -1,11 +1,11 @@
|
||||
BasicMelee(
|
||||
energy_cost: 0,
|
||||
buildup_duration: 0.7,
|
||||
buildup_duration: 0.6,
|
||||
swing_duration: 0.1,
|
||||
recover_duration: 0.6,
|
||||
melee_constructor: (
|
||||
kind: Slash(
|
||||
damage: 7.0,
|
||||
damage: 14.0,
|
||||
poise: 10.0,
|
||||
knockback: 10.0,
|
||||
energy_regen: 0.0,
|
||||
|
@ -14,6 +14,6 @@ BasicBeam(
|
||||
))),
|
||||
energy_regen: 0,
|
||||
energy_drain: 0,
|
||||
ori_rate: 0.2,
|
||||
ori_rate: 0.5,
|
||||
specifier: Cultist,
|
||||
)
|
||||
|
@ -12,6 +12,12 @@ BasicMelee(
|
||||
),
|
||||
range: 5.0,
|
||||
angle: 60.0,
|
||||
damage_effect: Some(Buff((
|
||||
kind: Crippled,
|
||||
dur_secs: 10.0,
|
||||
strength: Value(0.5),
|
||||
chance: 1.0,
|
||||
))),
|
||||
),
|
||||
ori_modifier: 1.0,
|
||||
)
|
||||
|
@ -4,7 +4,7 @@
|
||||
name: Name("Gnarling Chieftain"),
|
||||
body: RandomWith("gnarling"),
|
||||
alignment: Alignment(Enemy),
|
||||
loot: LootTable("common.loot_tables.dungeon.tier-0.boss"),
|
||||
loot: LootTable("common.loot_tables.dungeon.tier-0.chieftain"),
|
||||
inventory: (
|
||||
loadout: Inline((
|
||||
inherit: Asset("common.loadout.dungeon.gnarling.chieftain"),
|
||||
|
@ -3,7 +3,7 @@
|
||||
name: Name("Harvester"),
|
||||
body: RandomWith("harvester"),
|
||||
alignment: Alignment(Enemy),
|
||||
loot: LootTable("common.loot_tables.dungeon.tier-0.boss"),
|
||||
loot: LootTable("common.loot_tables.dungeon.tier-0.harvester"),
|
||||
inventory: (
|
||||
loadout: FromBody,
|
||||
),
|
||||
|
@ -3,7 +3,7 @@
|
||||
name: Automatic,
|
||||
body: RandomWith("antlion"),
|
||||
alignment: Alignment(Enemy),
|
||||
loot: LootTable("common.loot_tables.creature.arthropod.carapace"),
|
||||
loot: LootTable("common.loot_tables.creature.arthropod.antlion"),
|
||||
inventory: (
|
||||
loadout: FromBody,
|
||||
),
|
||||
|
@ -6,7 +6,7 @@
|
||||
body_type: Male,
|
||||
))),
|
||||
alignment: Alignment(Enemy),
|
||||
loot: LootTable("common.loot_tables.creature.quad_medium.ice"),
|
||||
loot: LootTable("common.loot_tables.creature.quad_medium.roshwalr"),
|
||||
inventory: (
|
||||
loadout: FromBody,
|
||||
),
|
||||
|
@ -3,7 +3,7 @@
|
||||
name: Automatic,
|
||||
body: RandomWith("tarantula"),
|
||||
alignment: Alignment(Enemy),
|
||||
loot: LootTable("common.loot_tables.creature.arthropod.web"),
|
||||
loot: LootTable("common.loot_tables.creature.arthropod.tarantula"),
|
||||
inventory: (
|
||||
loadout: FromBody,
|
||||
),
|
||||
|
@ -4,11 +4,10 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("Merchant"),
|
||||
stats: (
|
||||
protection: Some(Normal(6.0)),
|
||||
poise_resilience: Some(Normal(4.0)),
|
||||
energy_max: Some(12.0),
|
||||
energy_reward: Some(0.25),
|
||||
crit_power: Some(0.015),
|
||||
protection: Some(Normal(5.0)),
|
||||
poise_resilience: Some(Normal(2.0)),
|
||||
energy_max: Some(11.0),
|
||||
energy_reward: Some(0.065),
|
||||
),
|
||||
)),
|
||||
quality: Epic,
|
||||
|
@ -4,9 +4,7 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("BambooTwig"),
|
||||
stats: (
|
||||
poise_resilience: Some(Normal(2.0)),
|
||||
energy_reward: Some(0.06),
|
||||
crit_power: Some(0.005),
|
||||
energy_reward: Some(0.033),
|
||||
),
|
||||
)),
|
||||
quality: Common,
|
||||
|
@ -4,7 +4,7 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("Red"),
|
||||
stats: (
|
||||
crit_power: Some(0.08),
|
||||
crit_power: Some(0.008),
|
||||
stealth: Some(0.15),
|
||||
),
|
||||
)),
|
||||
|
@ -4,7 +4,7 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("Thief"),
|
||||
stats: (
|
||||
crit_power: Some(0.07),
|
||||
crit_power: Some(0.006),
|
||||
stealth: Some(0.18),
|
||||
),
|
||||
)),
|
||||
|
@ -7,8 +7,7 @@ ItemDef(
|
||||
protection: Some(Normal(12.0)),
|
||||
poise_resilience: Some(Normal(2.0)),
|
||||
energy_max: Some(5.0),
|
||||
energy_reward: Some(0.05),
|
||||
crit_power: Some(0.01),
|
||||
crit_power: Some(0.03),
|
||||
),
|
||||
)),
|
||||
quality: Epic,
|
||||
|
@ -6,7 +6,7 @@ ItemDef(
|
||||
stats: (
|
||||
protection: Some(Normal(5.0)),
|
||||
poise_resilience: Some(Normal(-1.0)),
|
||||
crit_power: Some(0.007),
|
||||
crit_power: Some(0.014),
|
||||
stealth: Some(0.35),
|
||||
),
|
||||
)),
|
||||
|
@ -4,9 +4,8 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("Hood"),
|
||||
stats: (
|
||||
protection: Some(Normal(6.0)),
|
||||
poise_resilience: Some(Normal(1.0)),
|
||||
crit_power: Some(0.01),
|
||||
protection: Some(Normal(3.0)),
|
||||
crit_power: Some(0.021),
|
||||
stealth: Some(0.22),
|
||||
),
|
||||
)),
|
||||
|
@ -4,10 +4,9 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("DarkHood"),
|
||||
stats: (
|
||||
protection: Some(Normal(7.0)),
|
||||
protection: Some(Normal(6.0)),
|
||||
poise_resilience: Some(Normal(1.0)),
|
||||
crit_power: Some(0.008),
|
||||
stealth: Some(0.15),
|
||||
stealth: Some(0.2),
|
||||
),
|
||||
)),
|
||||
quality: Moderate,
|
||||
|
@ -4,10 +4,9 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("Mitre"),
|
||||
stats: (
|
||||
protection: Some(Normal(4.0)),
|
||||
energy_max: Some(8.0),
|
||||
energy_reward: Some(0.1),
|
||||
crit_power: Some(0.01),
|
||||
poise_resilience: Some(Normal(1.5)),
|
||||
energy_max: Some(7.0),
|
||||
energy_reward: Some(0.06),
|
||||
),
|
||||
)),
|
||||
quality: High,
|
||||
|
@ -6,7 +6,7 @@ ItemDef(
|
||||
stats: (
|
||||
protection: Some(Normal(9.0)),
|
||||
poise_resilience: Some(Normal(3.0)),
|
||||
crit_power: Some(0.01),
|
||||
crit_power: Some(0.073),
|
||||
stealth: Some(-0.5),
|
||||
),
|
||||
)),
|
||||
|
@ -5,7 +5,7 @@ ItemDef(
|
||||
kind: Head("Straw"),
|
||||
stats: (
|
||||
energy_max: Some(4.0),
|
||||
energy_reward: Some(0.04),
|
||||
energy_reward: Some(0.02),
|
||||
),
|
||||
)),
|
||||
quality: Common,
|
||||
|
@ -4,12 +4,9 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("WanderersHat"),
|
||||
stats: (
|
||||
protection: Some(Normal(3.0)),
|
||||
poise_resilience: Some(Normal(1.0)),
|
||||
energy_max: Some(1.0),
|
||||
energy_reward: Some(0.02),
|
||||
crit_power: Some(0.01),
|
||||
stealth: Some(0.05),
|
||||
crit_power: Some(0.033),
|
||||
stealth: Some(0.2),
|
||||
),
|
||||
)),
|
||||
quality: High,
|
||||
|
@ -5,11 +5,10 @@ ItemDef(
|
||||
kind: Head("WingedCoronet"),
|
||||
stats: (
|
||||
protection: Some(Normal(2.0)),
|
||||
poise_resilience: Some(Normal(0.0)),
|
||||
energy_max: Some(8.0),
|
||||
energy_reward: Some(0.05),
|
||||
energy_max: Some(4.0),
|
||||
energy_reward: Some(0.037),
|
||||
crit_power: Some(0.015),
|
||||
stealth: Some(0.5),
|
||||
stealth: Some(0.18),
|
||||
),
|
||||
)),
|
||||
quality: High,
|
||||
|
@ -5,10 +5,8 @@ ItemDef(
|
||||
kind: Head("Pirate"),
|
||||
stats: (
|
||||
protection: Some(Normal(4.0)),
|
||||
poise_resilience: Some(Normal(1.0)),
|
||||
energy_max: Some(1.0),
|
||||
energy_reward: Some(0.015),
|
||||
crit_power: Some(0.02),
|
||||
energy_reward: Some(0.025),
|
||||
crit_power: Some(0.1),
|
||||
),
|
||||
)),
|
||||
quality: High,
|
||||
|
@ -4,11 +4,10 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Head("Witch"),
|
||||
stats: (
|
||||
protection: Some(Normal(4.0)),
|
||||
poise_resilience: Some(Normal(3.0)),
|
||||
energy_max: Some(12.0),
|
||||
energy_reward: Some(0.4),
|
||||
crit_power: Some(0.01),
|
||||
protection: Some(Normal(2.0)),
|
||||
poise_resilience: Some(Normal(1.5)),
|
||||
energy_max: Some(8.0),
|
||||
energy_reward: Some(0.084),
|
||||
),
|
||||
)),
|
||||
quality: Epic,
|
||||
|
@ -9,6 +9,6 @@ ItemDef(
|
||||
flicker_thousandths: 600,
|
||||
),
|
||||
),
|
||||
quality: Legendary,
|
||||
quality: High,
|
||||
tags: [Utility],
|
||||
)
|
||||
|
@ -4,7 +4,7 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Chest("Arthropod"),
|
||||
stats: (
|
||||
protection: Some(Normal(100.0)),
|
||||
protection: Some(Normal(60.0)),
|
||||
poise_resilience: Some(Normal(1.0)),
|
||||
),
|
||||
)),
|
||||
|
@ -4,7 +4,7 @@ ItemDef(
|
||||
kind: Armor((
|
||||
kind: Chest("QuadrupedLowShell"),
|
||||
stats: (
|
||||
protection: Some(Normal(750.0)),
|
||||
protection: Some(Normal(320.0)),
|
||||
poise_resilience: Some(Normal(0.0)),
|
||||
),
|
||||
)),
|
||||
|
@ -1,5 +1,5 @@
|
||||
ItemDef(
|
||||
name: "Arthropod Leap",
|
||||
name: "Antlion",
|
||||
description: "testing123",
|
||||
kind: Tool((
|
||||
kind: Natural,
|
||||
@ -15,7 +15,7 @@ ItemDef(
|
||||
buff_strength: 1.0,
|
||||
)),
|
||||
)),
|
||||
quality: Low,
|
||||
quality: Epic,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Arthropod Leap")),
|
||||
ability_spec: Some(Custom("Antlion")),
|
||||
)
|
@ -1,5 +1,5 @@
|
||||
ItemDef(
|
||||
name: "Arthropod Basic",
|
||||
name: "Black Widow",
|
||||
description: "testing123",
|
||||
kind: Tool((
|
||||
kind: Natural,
|
||||
@ -15,7 +15,7 @@ ItemDef(
|
||||
buff_strength: 1.0,
|
||||
)),
|
||||
)),
|
||||
quality: Low,
|
||||
quality: Epic,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Arthropod Basic")),
|
||||
ability_spec: Some(Custom("Black Widow")),
|
||||
)
|
@ -0,0 +1,21 @@
|
||||
ItemDef(
|
||||
name: "Cave Spider",
|
||||
description: "testing123",
|
||||
kind: Tool((
|
||||
kind: Natural,
|
||||
hands: Two,
|
||||
stats: Direct((
|
||||
equip_time_secs: 0.01,
|
||||
power: 0.6,
|
||||
effect_power: 1.0,
|
||||
speed: 0.6,
|
||||
crit_chance: 0.1,
|
||||
range: 0.8,
|
||||
energy_efficiency: 1.0,
|
||||
buff_strength: 0.9,
|
||||
)),
|
||||
)),
|
||||
quality: Moderate,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Black Widow")),
|
||||
)
|
@ -1,5 +1,5 @@
|
||||
ItemDef(
|
||||
name: "Arthropod Charge",
|
||||
name: "Horn Beetle",
|
||||
description: "testing123",
|
||||
kind: Tool((
|
||||
kind: Natural,
|
||||
@ -15,7 +15,7 @@ ItemDef(
|
||||
buff_strength: 1.0,
|
||||
)),
|
||||
)),
|
||||
quality: Low,
|
||||
quality: High,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Arthropod Charge")),
|
||||
ability_spec: Some(Custom("Horn Beetle")),
|
||||
)
|
@ -0,0 +1,21 @@
|
||||
ItemDef(
|
||||
name: "Leaf Beetle",
|
||||
description: "testing123",
|
||||
kind: Tool((
|
||||
kind: Natural,
|
||||
hands: Two,
|
||||
stats: Direct((
|
||||
equip_time_secs: 0.01,
|
||||
power: 0.86,
|
||||
effect_power: 1.0,
|
||||
speed: 0.86,
|
||||
crit_chance: 0.1,
|
||||
range: 1.0,
|
||||
energy_efficiency: 1.0,
|
||||
buff_strength: 0.875,
|
||||
)),
|
||||
)),
|
||||
quality: High,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Antlion")),
|
||||
)
|
@ -0,0 +1,21 @@
|
||||
ItemDef(
|
||||
name: "Moss Crawler",
|
||||
description: "testing123",
|
||||
kind: Tool((
|
||||
kind: Natural,
|
||||
hands: Two,
|
||||
stats: Direct((
|
||||
equip_time_secs: 0.01,
|
||||
power: 0.72,
|
||||
effect_power: 1.0,
|
||||
speed: 0.72,
|
||||
crit_chance: 0.1,
|
||||
range: 0.8,
|
||||
energy_efficiency: 1.0,
|
||||
buff_strength: 0.6,
|
||||
)),
|
||||
)),
|
||||
quality: Moderate,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Weevil")),
|
||||
)
|
@ -1,5 +1,5 @@
|
||||
ItemDef(
|
||||
name: "Arthropod Ranged",
|
||||
name: "Tarantula",
|
||||
description: "testing123",
|
||||
kind: Tool((
|
||||
kind: Natural,
|
||||
@ -15,7 +15,7 @@ ItemDef(
|
||||
buff_strength: 1.0,
|
||||
)),
|
||||
)),
|
||||
quality: Low,
|
||||
quality: Epic,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Arthropod Ranged")),
|
||||
ability_spec: Some(Custom("Tarantula")),
|
||||
)
|
21
assets/common/items/npc_weapons/unique/arthropods/weevil.ron
Normal file
21
assets/common/items/npc_weapons/unique/arthropods/weevil.ron
Normal file
@ -0,0 +1,21 @@
|
||||
ItemDef(
|
||||
name: "Weevil",
|
||||
description: "testing123",
|
||||
kind: Tool((
|
||||
kind: Natural,
|
||||
hands: Two,
|
||||
stats: Direct((
|
||||
equip_time_secs: 0.01,
|
||||
power: 1.0,
|
||||
effect_power: 1.0,
|
||||
speed: 1.0,
|
||||
crit_chance: 0.1,
|
||||
range: 1.0,
|
||||
energy_efficiency: 1.0,
|
||||
buff_strength: 1.0,
|
||||
)),
|
||||
)),
|
||||
quality: High,
|
||||
tags: [],
|
||||
ability_spec: Some(Custom("Weevil")),
|
||||
)
|
3
assets/common/loot_tables/creature/arthropod/antlion.ron
Normal file
3
assets/common/loot_tables/creature/arthropod/antlion.ron
Normal file
@ -0,0 +1,3 @@
|
||||
[
|
||||
(1.0, ItemQuantity("common.items.crafting_ing.hide.carapace", 2, 5)),
|
||||
]
|
@ -0,0 +1,3 @@
|
||||
[
|
||||
(1.0, ItemQuantity("common.items.crafting_ing.sticky_thread", 2, 5)),
|
||||
]
|
@ -1,4 +1,4 @@
|
||||
[
|
||||
(1.0, Item("common.items.crafting_ing.hide.rugged_hide")),
|
||||
(1.0, Item("common.items.crafting_ing.animal_misc.icy_fang")),
|
||||
(1.0, Item("common.items.crafting_ing.hide.animal_hide")),
|
||||
(1.0, ItemQuantity("common.items.crafting_ing.animal_misc.icy_fang", 1, 2)),
|
||||
]
|
@ -0,0 +1,4 @@
|
||||
[
|
||||
(1.0, Item("common.items.crafting_ing.hide.rugged_hide")),
|
||||
(1.0, ItemQuantity("common.items.crafting_ing.animal_misc.icy_fang", 1, 2)),
|
||||
]
|
9
assets/common/loot_tables/dungeon/tier-0/harvester.ron
Normal file
9
assets/common/loot_tables/dungeon/tier-0/harvester.ron
Normal file
@ -0,0 +1,9 @@
|
||||
[
|
||||
// Weapons
|
||||
(5.0, LootTable("common.loot_tables.weapons.tier-3")),
|
||||
// Armor
|
||||
(5.0, LootTable("common.loot_tables.armor.tier-3")),
|
||||
// Misc
|
||||
(3.0, Item("common.items.armor.misc.neck.scratched")),
|
||||
(2.0, Item("common.items.lantern.pumpkin")),
|
||||
]
|
@ -6,5 +6,5 @@
|
||||
// Nothing
|
||||
(2.0, Nothing),
|
||||
// Placeholder Drop Location
|
||||
(1.0, Item("common.items.crafting_ing.sticky_thread")),
|
||||
(1.0, Item("common.items.crafting_ing.leather.simple_leather")),
|
||||
]
|
||||
|
@ -1233,7 +1233,7 @@
|
||||
),
|
||||
black_widow: (
|
||||
keyword: "black_widow",
|
||||
generic: "Blackwidow"
|
||||
generic: "Black Widow"
|
||||
),
|
||||
antlion: (
|
||||
keyword: "antlion",
|
||||
|
@ -74,6 +74,7 @@ const int DRIP = 32;
|
||||
const int TORNADO = 33;
|
||||
const int DEATH = 34;
|
||||
const int ENERGY_BUFFING = 35;
|
||||
const int WEB_STRAND = 36;
|
||||
|
||||
// meters per second squared (acceleration)
|
||||
const float earth_gravity = 9.807;
|
||||
@ -579,6 +580,16 @@ void main() {
|
||||
spin_in_axis(vec3(rand6, rand7, rand8), rand9 * 3)
|
||||
);
|
||||
break;
|
||||
case WEB_STRAND:
|
||||
f_reflect = 0.0;
|
||||
perp_axis = normalize(cross(inst_dir, vec3(0.0, 0.0, 1.0)));
|
||||
attr = Attr(
|
||||
inst_dir * percent(),
|
||||
vec3(1.0, 1.0, 50.0),
|
||||
vec4(vec3(2.0), 1),
|
||||
spin_in_axis(perp_axis, asin(inst_dir.z / length(inst_dir)) + PI / 2.0)
|
||||
);
|
||||
break;
|
||||
default:
|
||||
attr = Attr(
|
||||
linear_motion(
|
||||
|
@ -31,6 +31,7 @@ SpawnEntry (
|
||||
(2, (1, 1, "common.entity.wild.peaceful.hirdrasil")),
|
||||
(2, (1, 1, "common.entity.wild.peaceful.truffler")),
|
||||
(2, (1, 1, "common.entity.wild.peaceful.leaf_beetle")),
|
||||
(2, (1, 1, "common.entity.wild.aggressive.weevil")),
|
||||
],
|
||||
is_underwater: false,
|
||||
day_period: [Morning, Noon, Evening],
|
||||
|
@ -10,6 +10,7 @@ SpawnEntry (
|
||||
(1, (1, 1, "common.entity.wild.aggressive.deadwood")),
|
||||
(1, (1, 1, "common.entity.wild.aggressive.saber")),
|
||||
(1, (1, 1, "common.entity.wild.aggressive.weevil")),
|
||||
(1, (1, 1, "common.entity.wild.peaceful.leaf_beetle")),
|
||||
],
|
||||
is_underwater: false,
|
||||
day_period: [Night, Morning, Noon, Evening],
|
||||
|
@ -9,7 +9,7 @@ SpawnEntry (
|
||||
(1, (1, 1, "common.entity.wild.aggressive.icedrake")),
|
||||
(1, (1, 3, "common.entity.wild.aggressive.snow_raptor")),
|
||||
(1, (1, 3, "common.entity.wild.aggressive.roshwalr")),
|
||||
(5, (1, 5, "common.entity.wild.peaceful.penguin")),
|
||||
(5, (5, 20, "common.entity.wild.peaceful.penguin")),
|
||||
],
|
||||
is_underwater: false,
|
||||
day_period: [Night, Morning, Noon, Evening],
|
||||
|
@ -54,4 +54,5 @@ pub enum FrontendSpecifier {
|
||||
ClayGolem,
|
||||
Bubbles,
|
||||
Frost,
|
||||
WebStrand,
|
||||
}
|
||||
|
@ -687,7 +687,7 @@ impl Body {
|
||||
biped_large::Species::Tidalwarrior => 1600,
|
||||
biped_large::Species::Yeti => 1200,
|
||||
biped_large::Species::Minotaur => 3000,
|
||||
biped_large::Species::Harvester => 500,
|
||||
biped_large::Species::Harvester => 1500,
|
||||
biped_large::Species::Blueoni => 240,
|
||||
biped_large::Species::Redoni => 240,
|
||||
biped_large::Species::Huskbrute => 800,
|
||||
|
@ -596,19 +596,33 @@ fn default_main_tool(body: &Body) -> Item {
|
||||
)),
|
||||
},
|
||||
Body::Arthropod(arthropod) => match arthropod.species {
|
||||
arthropod::Species::Hornbeetle
|
||||
| arthropod::Species::Stagbeetle
|
||||
| arthropod::Species::Antlion => Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropodcharge",
|
||||
arthropod::Species::Hornbeetle | arthropod::Species::Stagbeetle => {
|
||||
Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropods.hornbeetle",
|
||||
))
|
||||
},
|
||||
arthropod::Species::Cavespider => Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropods.cavespider",
|
||||
)),
|
||||
arthropod::Species::Cavespider | arthropod::Species::Blackwidow => Some(
|
||||
Item::new_from_asset_expect("common.items.npc_weapons.unique.arthropodranged"),
|
||||
),
|
||||
arthropod::Species::Weevil | arthropod::Species::Tarantula => Some(
|
||||
Item::new_from_asset_expect("common.items.npc_weapons.unique.arthropodleap"),
|
||||
arthropod::Species::Sandcrawler | arthropod::Species::Mosscrawler => {
|
||||
Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropods.mosscrawler",
|
||||
))
|
||||
},
|
||||
arthropod::Species::Moltencrawler | arthropod::Species::Weevil => Some(
|
||||
Item::new_from_asset_expect("common.items.npc_weapons.unique.arthropods.weevil"),
|
||||
),
|
||||
arthropod::Species::Blackwidow => Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropods.blackwidow",
|
||||
)),
|
||||
arthropod::Species::Tarantula => Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropods.tarantula",
|
||||
)),
|
||||
arthropod::Species::Antlion => Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropods.antlion",
|
||||
)),
|
||||
_ => Some(Item::new_from_asset_expect(
|
||||
"common.items.npc_weapons.unique.arthropodbasic",
|
||||
"common.items.npc_weapons.unique.arthropods.leafbeetle",
|
||||
)),
|
||||
},
|
||||
Body::BipedLarge(biped_large) => match (biped_large.species, biped_large.body_type) {
|
||||
|
@ -238,7 +238,7 @@ impl ProjectileConstructor {
|
||||
CombatEffect::Buff(CombatBuff {
|
||||
kind: BuffKind::Poisoned,
|
||||
dur_secs: 5.0,
|
||||
strength: CombatBuffStrength::DamageFraction(0.2 * buff_strength),
|
||||
strength: CombatBuffStrength::DamageFraction(0.8 * buff_strength),
|
||||
chance: 1.0,
|
||||
}),
|
||||
)
|
||||
|
@ -1805,10 +1805,10 @@ impl<'a> AgentData<'a> {
|
||||
"Quad Low Quick" => Tactic::QuadLowQuick,
|
||||
"Quad Low Basic" => Tactic::QuadLowBasic,
|
||||
"Theropod Basic" | "Theropod Bird" => Tactic::Theropod,
|
||||
"Arthropod Basic" => Tactic::ArthropodBasic,
|
||||
"Arthropod Charge" => Tactic::ArthropodCharge,
|
||||
"Arthropod Ranged" => Tactic::ArthropodRanged,
|
||||
"Arthropod Leap" => Tactic::ArthropodLeap,
|
||||
// Arthropods
|
||||
"Antlion" => Tactic::ArthropodMelee,
|
||||
"Tarantula" | "Horn Beetle" => Tactic::ArthropodAmbush,
|
||||
"Weevil" | "Black Widow" => Tactic::ArthropodRanged,
|
||||
"Theropod Charge" => Tactic::CircleCharge {
|
||||
radius: 6,
|
||||
circle_time: 1,
|
||||
@ -2102,21 +2102,14 @@ impl<'a> AgentData<'a> {
|
||||
Tactic::Theropod => {
|
||||
self.handle_theropod_attack(agent, controller, &attack_data, tgt_data, read_data)
|
||||
},
|
||||
Tactic::ArthropodBasic => self.handle_arthropod_basic_attack(
|
||||
Tactic::ArthropodMelee => self.handle_arthropod_melee_attack(
|
||||
agent,
|
||||
controller,
|
||||
&attack_data,
|
||||
tgt_data,
|
||||
read_data,
|
||||
),
|
||||
Tactic::ArthropodCharge => self.handle_arthropod_charge_attack(
|
||||
agent,
|
||||
controller,
|
||||
&attack_data,
|
||||
tgt_data,
|
||||
read_data,
|
||||
),
|
||||
Tactic::ArthropodLeap => self.handle_arthropod_leap_attack(
|
||||
Tactic::ArthropodAmbush => self.handle_arthropod_ambush_attack(
|
||||
agent,
|
||||
controller,
|
||||
&attack_data,
|
||||
|
@ -10,7 +10,7 @@ use common::{
|
||||
InputKind,
|
||||
},
|
||||
path::TraversalConfig,
|
||||
states::utils::StageSection,
|
||||
states::{self_buff, sprite_summon, utils::StageSection},
|
||||
terrain::Block,
|
||||
util::Dir,
|
||||
vol::ReadVol,
|
||||
@ -1861,42 +1861,6 @@ impl<'a> AgentData<'a> {
|
||||
);
|
||||
}
|
||||
|
||||
pub fn handle_arthropod_basic_attack(
|
||||
&self,
|
||||
agent: &mut Agent,
|
||||
controller: &mut Controller,
|
||||
attack_data: &AttackData,
|
||||
tgt_data: &TargetData,
|
||||
read_data: &ReadData,
|
||||
) {
|
||||
agent.action_state.timer += read_data.dt.0;
|
||||
if agent.action_state.timer > 7.0
|
||||
&& attack_data.dist_sqrd < (2.0 * attack_data.min_attack_dist).powi(2)
|
||||
{
|
||||
controller.inputs.move_dir = Vec2::zero();
|
||||
controller.push_basic_input(InputKind::Secondary);
|
||||
// Reset timer
|
||||
if matches!(self.char_state, CharacterState::SpriteSummon(c) if matches!(c.stage_section, StageSection::Recover))
|
||||
{
|
||||
agent.action_state.timer = 0.0;
|
||||
}
|
||||
} else if attack_data.angle < 90.0
|
||||
&& attack_data.dist_sqrd < (1.5 * attack_data.min_attack_dist).powi(2)
|
||||
{
|
||||
controller.inputs.move_dir = Vec2::zero();
|
||||
controller.push_basic_input(InputKind::Primary);
|
||||
} else {
|
||||
self.path_toward_target(
|
||||
agent,
|
||||
controller,
|
||||
tgt_data.pos.0,
|
||||
read_data,
|
||||
Path::Partial,
|
||||
None,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_arthropod_ranged_attack(
|
||||
&self,
|
||||
agent: &mut Agent,
|
||||
@ -1907,16 +1871,19 @@ impl<'a> AgentData<'a> {
|
||||
) {
|
||||
agent.action_state.timer += read_data.dt.0;
|
||||
if agent.action_state.timer > 6.0
|
||||
&& attack_data.dist_sqrd < (2.0 * attack_data.min_attack_dist).powi(2)
|
||||
&& attack_data.dist_sqrd < (1.5 * attack_data.min_attack_dist).powi(2)
|
||||
{
|
||||
controller.inputs.move_dir = Vec2::zero();
|
||||
controller.push_basic_input(InputKind::Secondary);
|
||||
// Reset timer
|
||||
if matches!(self.char_state, CharacterState::SpriteSummon(c) if matches!(c.stage_section, StageSection::Recover))
|
||||
if matches!(self.char_state,
|
||||
CharacterState::SpriteSummon(sprite_summon::Data { stage_section, .. })
|
||||
| CharacterState::SelfBuff(self_buff::Data { stage_section, .. })
|
||||
if matches!(stage_section, StageSection::Recover))
|
||||
{
|
||||
agent.action_state.timer = 0.0;
|
||||
}
|
||||
} else if attack_data.dist_sqrd < (3.0 * attack_data.min_attack_dist).powi(2)
|
||||
} else if attack_data.dist_sqrd < (2.5 * attack_data.min_attack_dist).powi(2)
|
||||
&& attack_data.angle < 90.0
|
||||
{
|
||||
controller.inputs.move_dir = (tgt_data.pos.0 - self.pos.0)
|
||||
@ -1986,7 +1953,7 @@ impl<'a> AgentData<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_arthropod_leap_attack(
|
||||
pub fn handle_arthropod_ambush_attack(
|
||||
&self,
|
||||
agent: &mut Agent,
|
||||
controller: &mut Controller,
|
||||
@ -2002,18 +1969,21 @@ impl<'a> AgentData<'a> {
|
||||
controller.inputs.move_dir = Vec2::zero();
|
||||
controller.push_basic_input(InputKind::Secondary);
|
||||
// Reset timer
|
||||
if matches!(self.char_state, CharacterState::SpriteSummon(c) if matches!(c.stage_section, StageSection::Recover))
|
||||
if matches!(self.char_state,
|
||||
CharacterState::SpriteSummon(sprite_summon::Data { stage_section, .. })
|
||||
| CharacterState::SelfBuff(self_buff::Data { stage_section, .. })
|
||||
if matches!(stage_section, StageSection::Recover))
|
||||
{
|
||||
agent.action_state.timer = 0.0;
|
||||
}
|
||||
} else if attack_data.angle < 90.0
|
||||
&& attack_data.dist_sqrd < (1.5 * attack_data.min_attack_dist).powi(2)
|
||||
&& attack_data.dist_sqrd < attack_data.min_attack_dist.powi(2)
|
||||
{
|
||||
controller.inputs.move_dir = Vec2::zero();
|
||||
controller.push_basic_input(InputKind::Primary);
|
||||
} else if rng.gen_bool(0.01)
|
||||
&& attack_data.angle < 15.0
|
||||
&& attack_data.dist_sqrd < (6.0 * attack_data.min_attack_dist).powi(2)
|
||||
&& attack_data.angle < 60.0
|
||||
&& attack_data.dist_sqrd > (2.0 * attack_data.min_attack_dist).powi(2)
|
||||
{
|
||||
controller.push_basic_input(InputKind::Ability(0));
|
||||
} else {
|
||||
@ -2028,7 +1998,7 @@ impl<'a> AgentData<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_arthropod_charge_attack(
|
||||
pub fn handle_arthropod_melee_attack(
|
||||
&self,
|
||||
agent: &mut Agent,
|
||||
controller: &mut Controller,
|
||||
@ -2041,13 +2011,13 @@ impl<'a> AgentData<'a> {
|
||||
{
|
||||
// If already charging, keep charging if not in recover
|
||||
controller.push_basic_input(InputKind::Secondary);
|
||||
} else if attack_data.dist_sqrd > (5.0 * attack_data.min_attack_dist).powi(2) {
|
||||
} else if attack_data.dist_sqrd > (2.5 * attack_data.min_attack_dist).powi(2) {
|
||||
// Charges at target if they are far enough away
|
||||
if attack_data.angle < 60.0 {
|
||||
controller.push_basic_input(InputKind::Secondary);
|
||||
}
|
||||
} else if attack_data.angle < 90.0
|
||||
&& attack_data.dist_sqrd < (1.5 * attack_data.min_attack_dist).powi(2)
|
||||
&& attack_data.dist_sqrd < attack_data.min_attack_dist.powi(2)
|
||||
{
|
||||
controller.inputs.move_dir = Vec2::zero();
|
||||
controller.push_basic_input(InputKind::Primary);
|
||||
|
@ -101,10 +101,9 @@ pub enum Tactic {
|
||||
BirdLargeBreathe,
|
||||
BirdLargeFire,
|
||||
BirdLargeBasic,
|
||||
ArthropodCharge,
|
||||
ArthropodBasic,
|
||||
ArthropodMelee,
|
||||
ArthropodRanged,
|
||||
ArthropodLeap,
|
||||
ArthropodAmbush,
|
||||
|
||||
// Specific species tactics
|
||||
Mindflayer,
|
||||
|
@ -503,7 +503,8 @@ impl SfxMgr {
|
||||
},
|
||||
beam::FrontendSpecifier::ClayGolem
|
||||
| beam::FrontendSpecifier::Bubbles
|
||||
| beam::FrontendSpecifier::Frost => {},
|
||||
| beam::FrontendSpecifier::Frost
|
||||
| beam::FrontendSpecifier::WebStrand => {},
|
||||
},
|
||||
Outcome::BreakBlock { pos, .. } => {
|
||||
let sfx_trigger_item = triggers.get_key_value(&SfxEvent::BreakBlock);
|
||||
|
@ -86,6 +86,7 @@ pub enum ParticleMode {
|
||||
Tornado = 33,
|
||||
Death = 34,
|
||||
EnergyBuffing = 35,
|
||||
WebStrand = 36,
|
||||
}
|
||||
|
||||
impl ParticleMode {
|
||||
|
@ -842,6 +842,17 @@ impl ParticleMgr {
|
||||
)
|
||||
})
|
||||
},
|
||||
beam::FrontendSpecifier::WebStrand => {
|
||||
self.particles.resize_with(self.particles.len() + 1, || {
|
||||
Particle::new_directed(
|
||||
beam.properties.duration,
|
||||
time,
|
||||
ParticleMode::WebStrand,
|
||||
pos.0,
|
||||
pos.0 + *ori.look_dir() * range,
|
||||
)
|
||||
})
|
||||
},
|
||||
beam::FrontendSpecifier::Bubbles => {
|
||||
let mut rng = thread_rng();
|
||||
let (from, to) = (Vec3::<f32>::unit_z(), *ori.look_dir());
|
||||
|
@ -468,11 +468,10 @@ pub fn apply_caves_supplement<'a>(
|
||||
_ => "common.entity.wild.aggressive.batfox",
|
||||
}
|
||||
} else if cave_depth < 120.0 {
|
||||
match dynamic_rng.gen_range(0..6) {
|
||||
match dynamic_rng.gen_range(0..5) {
|
||||
0 => "common.entity.wild.aggressive.rocksnapper",
|
||||
1 => "common.entity.wild.aggressive.cave_salamander",
|
||||
2 => "common.entity.wild.aggressive.cave_spider",
|
||||
3 => "common.entity.wild.aggressive.antlion",
|
||||
4 => "common.entity.wild.peaceful.crawler_molten",
|
||||
_ => "common.entity.wild.aggressive.asp",
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user