This commit is contained in:
flo 2023-01-28 21:25:17 +00:00 committed by Marcel
parent 6070bd6538
commit 5e1fd02095
56 changed files with 1215 additions and 125 deletions

View File

@ -464,6 +464,46 @@
Simple(None, "common.abilities.custom.birdlargefire.fireshockwave"),
],
),
Custom("Flame Wyvern"): (
primary: "common.abilities.custom.flamewyvern.firebomb",
secondary: "common.abilities.custom.flamewyvern.fireshockwave",
abilities: [
Simple(None, "common.abilities.custom.flamewyvern.triplestrike"),
Simple(None, "common.abilities.custom.flamewyvern.flamethrower"),
],
),
Custom("Frost Wyvern"): (
primary: "common.abilities.custom.frostwyvern.frostbomb",
secondary: "common.abilities.custom.frostwyvern.iceshockwave",
abilities: [
Simple(None, "common.abilities.custom.frostwyvern.triplestrike"),
Simple(None, "common.abilities.custom.frostwyvern.frostthrower"),
],
),
Custom("Cloud Wyvern"): (
primary: "common.abilities.custom.cloudwyvern.windbomb",
secondary: "common.abilities.custom.cloudwyvern.windshockwave",
abilities: [
Simple(None, "common.abilities.custom.cloudwyvern.triplestrike"),
Simple(None, "common.abilities.custom.cloudwyvern.windthrower"),
],
),
Custom("Sea Wyvern"): (
primary: "common.abilities.custom.seawyvern.seabomb",
secondary: "common.abilities.custom.seawyvern.seashockwave",
abilities: [
Simple(None, "common.abilities.custom.seawyvern.triplestrike"),
Simple(None, "common.abilities.custom.seawyvern.bubblethrower"),
],
),
Custom("Weald Wyvern"): (
primary: "common.abilities.custom.wealdwyvern.firebomb",
secondary: "common.abilities.custom.wealdwyvern.fireshockwave",
abilities: [
Simple(None, "common.abilities.custom.wealdwyvern.triplestrike"),
Simple(None, "common.abilities.custom.wealdwyvern.flamethrower"),
],
),
Custom("Bird Large Basic"): (
primary: "common.abilities.custom.birdlargebasic.triplestrike",
secondary: "common.abilities.custom.birdlargebasic.summontornadoes",

View File

@ -0,0 +1,77 @@
ComboMelee(
stage_data: [
(
stage: 1,
base_damage: 20.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 4.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 2.0,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 2,
base_damage: 16.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 3,
base_damage: 26.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 10.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.375,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
],
initial_energy_gain: 0,
max_energy_gain: 0,
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 0.0,
scales_from_combo: 0,
ori_modifier: 0.7,
)

View File

@ -0,0 +1,19 @@
BasicRanged(
energy_cost: 0,
buildup_duration: 1.0,
recover_duration: 0.7,
projectile: WindBomb(
damage: 20.0,
radius: 5.0,
energy_regen: 5.0,
min_falloff: 0.5,
),
projectile_body: Object(BoltFire),
/*projectile_light: Some(LightEmitter {
col: (1.0, 0.75, 0.11).into(),
..Default::default()
}),*/
projectile_speed: 60.0,
num_projectiles: 1,
projectile_spread: 0.0,
)

View File

@ -0,0 +1,17 @@
Shockwave(
energy_cost: 60.0,
buildup_duration: 1.4,
swing_duration: 0.1,
recover_duration: 0.4,
damage: 40.0,
poise_damage: 0,
knockback: ( strength: 25.0, direction: Away),
shockwave_angle: 360.0,
shockwave_vertical_angle: 90.0,
shockwave_speed: 20.0,
shockwave_duration: 0.5,
requires_ground: false,
move_efficiency: 0.1,
damage_kind: Energy,
specifier: Water,
)

View File

@ -0,0 +1,19 @@
BasicBeam(
buildup_duration: 0.8,
recover_duration: 0.5,
beam_duration: 0.5,
damage: 10.0,
tick_rate: 3.0,
range: 15.0,
max_angle: 22.5,
damage_effect: Some(Buff((
kind: Burning,
dur_secs: 10.0,
strength: DamageFraction(0.5),
chance: 0.25,
))),
energy_regen: 0,
energy_drain: 0,
ori_rate: 0.3,
specifier: Bubbles,
)

View File

@ -0,0 +1,19 @@
BasicRanged(
energy_cost: 0,
buildup_duration: 1.0,
recover_duration: 0.7,
projectile: Fireball(
damage: 20.0,
radius: 5.0,
energy_regen: 5.0,
min_falloff: 0.5,
),
projectile_body: Object(BoltFire),
/*projectile_light: Some(LightEmitter {
col: (1.0, 0.75, 0.11).into(),
..Default::default()
}),*/
projectile_speed: 60.0,
num_projectiles: 1,
projectile_spread: 0.0,
)

View File

@ -0,0 +1,17 @@
Shockwave(
energy_cost: 60.0,
buildup_duration: 1.4,
swing_duration: 0.1,
recover_duration: 0.4,
damage: 40.0,
poise_damage: 0,
knockback: ( strength: 25.0, direction: Away),
shockwave_angle: 360.0,
shockwave_vertical_angle: 90.0,
shockwave_speed: 20.0,
shockwave_duration: 0.5,
requires_ground: false,
move_efficiency: 0.1,
damage_kind: Energy,
specifier: Fire,
)

View File

@ -0,0 +1,19 @@
BasicBeam(
buildup_duration: 0.8,
recover_duration: 0.5,
beam_duration: 0.5,
damage: 10.0,
tick_rate: 3.0,
range: 15.0,
max_angle: 22.5,
damage_effect: Some(Buff((
kind: Burning,
dur_secs: 10.0,
strength: DamageFraction(0.5),
chance: 0.25,
))),
energy_regen: 0,
energy_drain: 0,
ori_rate: 0.3,
specifier: Flamethrower,
)

View File

@ -0,0 +1,77 @@
ComboMelee(
stage_data: [
(
stage: 1,
base_damage: 20.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 4.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 2.0,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 2,
base_damage: 16.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 3,
base_damage: 26.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 10.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.375,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
],
initial_energy_gain: 0,
max_energy_gain: 0,
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 0.0,
scales_from_combo: 0,
ori_modifier: 0.7,
)

View File

@ -0,0 +1,19 @@
BasicRanged(
energy_cost: 0,
buildup_duration: 1.0,
recover_duration: 0.7,
projectile: Frostball(
damage: 20.0,
radius: 5.0,
energy_regen: 5.0,
min_falloff: 0.5,
),
projectile_body: Object(BoltNature),
/*projectile_light: Some(LightEmitter {
col: (1.0, 0.75, 0.11).into(),
..Default::default()
}),*/
projectile_speed: 60.0,
num_projectiles: 1,
projectile_spread: 0.0,
)

View File

@ -0,0 +1,19 @@
BasicBeam(
buildup_duration: 0.8,
recover_duration: 0.5,
beam_duration: 0.5,
damage: 10.0,
tick_rate: 3.0,
range: 15.0,
max_angle: 22.5,
damage_effect: Some(Buff((
kind: Burning,
dur_secs: 10.0,
strength: DamageFraction(0.5),
chance: 0.25,
))),
energy_regen: 0,
energy_drain: 0,
ori_rate: 0.3,
specifier: Frost,
)

View File

@ -0,0 +1,17 @@
Shockwave(
energy_cost: 60.0,
buildup_duration: 1.4,
swing_duration: 0.1,
recover_duration: 0.4,
damage: 40.0,
poise_damage: 0,
knockback: ( strength: 25.0, direction: Away),
shockwave_angle: 360.0,
shockwave_vertical_angle: 90.0,
shockwave_speed: 20.0,
shockwave_duration: 0.5,
requires_ground: false,
move_efficiency: 0.1,
damage_kind: Energy,
specifier: IceSpikes,
)

View File

@ -0,0 +1,77 @@
ComboMelee(
stage_data: [
(
stage: 1,
base_damage: 20.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 4.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 2.0,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 2,
base_damage: 16.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 3,
base_damage: 26.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 10.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.375,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
],
initial_energy_gain: 0,
max_energy_gain: 0,
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 0.0,
scales_from_combo: 0,
ori_modifier: 0.7,
)

View File

@ -0,0 +1,19 @@
BasicBeam(
buildup_duration: 0.8,
recover_duration: 0.5,
beam_duration: 0.5,
damage: 10.0,
tick_rate: 3.0,
range: 15.0,
max_angle: 22.5,
damage_effect: Some(Buff((
kind: Burning,
dur_secs: 10.0,
strength: DamageFraction(0.5),
chance: 0.25,
))),
energy_regen: 0,
energy_drain: 0,
ori_rate: 0.3,
specifier: Bubbles,
)

View File

@ -0,0 +1,19 @@
BasicRanged(
energy_cost: 0,
buildup_duration: 1.0,
recover_duration: 0.7,
projectile: SeaBomb(
damage: 20.0,
radius: 5.0,
energy_regen: 5.0,
min_falloff: 0.5,
),
projectile_body: Object(BoltFire),
/*projectile_light: Some(LightEmitter {
col: (1.0, 0.75, 0.11).into(),
..Default::default()
}),*/
projectile_speed: 60.0,
num_projectiles: 1,
projectile_spread: 0.0,
)

View File

@ -0,0 +1,17 @@
Shockwave(
energy_cost: 60.0,
buildup_duration: 1.4,
swing_duration: 0.1,
recover_duration: 0.4,
damage: 40.0,
poise_damage: 0,
knockback: ( strength: 25.0, direction: Away),
shockwave_angle: 360.0,
shockwave_vertical_angle: 90.0,
shockwave_speed: 20.0,
shockwave_duration: 0.5,
requires_ground: false,
move_efficiency: 0.1,
damage_kind: Energy,
specifier: Water,
)

View File

@ -0,0 +1,77 @@
ComboMelee(
stage_data: [
(
stage: 1,
base_damage: 20.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 4.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 2.0,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 2,
base_damage: 16.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 3,
base_damage: 26.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 10.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.375,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
],
initial_energy_gain: 0,
max_energy_gain: 0,
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 0.0,
scales_from_combo: 0,
ori_modifier: 0.7,
)

View File

@ -0,0 +1,19 @@
BasicRanged(
energy_cost: 0,
buildup_duration: 1.0,
recover_duration: 0.7,
projectile: Fireball(
damage: 20.0,
radius: 5.0,
energy_regen: 5.0,
min_falloff: 0.5,
),
projectile_body: Object(BoltFire),
/*projectile_light: Some(LightEmitter {
col: (1.0, 0.75, 0.11).into(),
..Default::default()
}),*/
projectile_speed: 60.0,
num_projectiles: 1,
projectile_spread: 0.0,
)

View File

@ -0,0 +1,17 @@
Shockwave(
energy_cost: 60.0,
buildup_duration: 1.4,
swing_duration: 0.1,
recover_duration: 0.4,
damage: 40.0,
poise_damage: 0,
knockback: ( strength: 25.0, direction: Away),
shockwave_angle: 360.0,
shockwave_vertical_angle: 90.0,
shockwave_speed: 20.0,
shockwave_duration: 0.5,
requires_ground: false,
move_efficiency: 0.1,
damage_kind: Energy,
specifier: Fire,
)

View File

@ -0,0 +1,19 @@
BasicBeam(
buildup_duration: 0.8,
recover_duration: 0.5,
beam_duration: 0.5,
damage: 10.0,
tick_rate: 3.0,
range: 15.0,
max_angle: 22.5,
damage_effect: Some(Buff((
kind: Burning,
dur_secs: 10.0,
strength: DamageFraction(0.5),
chance: 0.25,
))),
energy_regen: 0,
energy_drain: 0,
ori_rate: 0.3,
specifier: Flamethrower,
)

View File

@ -0,0 +1,77 @@
ComboMelee(
stage_data: [
(
stage: 1,
base_damage: 20.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 4.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 2.0,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 2,
base_damage: 16.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 5.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.8,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
(
stage: 3,
base_damage: 26.0,
damage_increase: 0,
base_poise_damage: 0,
poise_damage_increase: 0,
knockback: 10.0,
range: 3.5,
angle: 30.0,
base_buildup_duration: 0.375,
base_swing_duration: 0.1,
hit_timing: 0.5,
base_recover_duration: 0.6,
forward_movement: 1.5,
damage_kind: Slashing,
damage_effect: Some(Buff((
kind: Bleeding,
dur_secs: 10.0,
strength: DamageFraction(0.1),
chance: 0.1,
))),
),
],
initial_energy_gain: 0,
max_energy_gain: 0,
energy_increase: 0,
speed_increase: 0.0,
max_speed_increase: 0.0,
scales_from_combo: 0,
ori_modifier: 0.7,
)

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("wyvern_cloud"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.creature.bird_large.wyvern"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("wyvern_flame"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.creature.bird_large.wyvern"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("wyvern_frost"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.creature.bird_large.wyvern"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("wyvern_sea"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.creature.bird_large.wyvern"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -0,0 +1,11 @@
#![enable(implicit_some)]
(
name: Automatic,
body: RandomWith("wyvern_weald"),
alignment: Alignment(Enemy),
loot: LootTable("common.loot_tables.creature.bird_large.wyvern"),
inventory: (
loadout: FromBody,
),
meta: [],
)

View File

@ -0,0 +1,13 @@
ItemDef(
name: "Wyvern Armor",
description: "Generic Protection.",
kind: Armor((
kind: Chest,
stats: Direct((
protection: Some(Normal(150.0)),
poise_resilience: Some(Normal(5.0)),
)),
)),
quality: Epic,
tags: [],
)

View File

@ -0,0 +1,21 @@
ItemDef(
name: "Cloud Wyvern",
description: "testing123",
kind: Tool((
kind: Natural,
hands: Two,
stats: (
equip_time_secs: 0.01,
power: 1.0,
effect_power: 1.0,
speed: 1.0,
crit_chance: 0.0625,
range: 1.0,
energy_efficiency: 1.0,
buff_strength: 1.0,
),
)),
quality: Low,
tags: [],
ability_spec: Some(Custom("Cloud Wyvern")),
)

View File

@ -0,0 +1,21 @@
ItemDef(
name: "Flame Wyvern",
description: "testing123",
kind: Tool((
kind: Natural,
hands: Two,
stats: (
equip_time_secs: 0.01,
power: 1.0,
effect_power: 1.0,
speed: 1.0,
crit_chance: 0.0625,
range: 1.0,
energy_efficiency: 1.0,
buff_strength: 1.0,
),
)),
quality: Low,
tags: [],
ability_spec: Some(Custom("Flame Wyvern")),
)

View File

@ -0,0 +1,21 @@
ItemDef(
name: "Frost Wyvern",
description: "testing123",
kind: Tool((
kind: Natural,
hands: Two,
stats: (
equip_time_secs: 0.01,
power: 1.0,
effect_power: 1.0,
speed: 1.0,
crit_chance: 0.0625,
range: 1.0,
energy_efficiency: 1.0,
buff_strength: 1.0,
),
)),
quality: Low,
tags: [],
ability_spec: Some(Custom("Frost Wyvern")),
)

View File

@ -0,0 +1,21 @@
ItemDef(
name: "Sea Wyvern",
description: "testing123",
kind: Tool((
kind: Natural,
hands: Two,
stats: (
equip_time_secs: 0.01,
power: 1.0,
effect_power: 1.0,
speed: 1.0,
crit_chance: 0.0625,
range: 1.0,
energy_efficiency: 1.0,
buff_strength: 1.0,
),
)),
quality: Low,
tags: [],
ability_spec: Some(Custom("Sea Wyvern")),
)

View File

@ -0,0 +1,21 @@
ItemDef(
name: "Weald Wyvern",
description: "testing123",
kind: Tool((
kind: Natural,
hands: Two,
stats: (
equip_time_secs: 0.01,
power: 1.0,
effect_power: 1.0,
speed: 1.0,
crit_chance: 0.0625,
range: 1.0,
energy_efficiency: 1.0,
buff_strength: 1.0,
),
)),
quality: Low,
tags: [],
ability_spec: Some(Custom("Weald Wyvern")),
)

View File

@ -0,0 +1,6 @@
[
(1.0, ItemQuantity("common.items.food.meat.bird_large_raw", 1, 2)),
(1.0, ItemQuantity("common.items.food.meat.beast_large_raw", 2, 2)),
(2.0, ItemQuantity("common.items.crafting_ing.animal_misc.elegant_crest", 1, 3)),
(1.0, ItemQuantity("common.items.crafting_ing.hide.scales", 2, 6)),
]

View File

@ -313,11 +313,11 @@
),
(SeaWyvern, Male): (
head: (
offset: (-3.5, -2.0, 4.0),
offset: (-3.5, 1.0, 3.0),
central: ("npc.wyvern_sea.male.head"),
),
beak: (
offset: (-3.5, 3.0, -3.0),
offset: (-3.5, 4.0, -4.0),
central: ("npc.wyvern_sea.male.beak"),
),
neck: (
@ -339,11 +339,11 @@
),
(SeaWyvern, Female): (
head: (
offset: (-3.5, -2.0, 4.0),
offset: (-3.5, 1.0, 3.0),
central: ("npc.wyvern_sea.male.head"),
),
beak: (
offset: (-3.5, 3.0, -3.0),
offset: (-3.5, 4.0, -4.0),
central: ("npc.wyvern_sea.male.beak"),
),
neck: (

View File

@ -253,27 +253,27 @@
),
(FlameWyvern, Male): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_flame.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_flame.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -26.5, -2.0),
offset: (-17.0, -30.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -26.5, -2.0),
offset: (0.0, -30.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_mid_r"),
),
wing_out_l: (
offset: (-24.0, -26.5, -2.0),
offset: (-22.0, -32.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_out_r"),
),
wing_out_r: (
offset: (-9.0, -26.5, -2.0),
offset: (-3.0, -32.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_out_r"),
),
leg_l: (
@ -295,27 +295,27 @@
),
(FlameWyvern, Female): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_flame.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_flame.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -26.5, -2.0),
offset: (-16.0, -30.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -26.5, -2.0),
offset: (0.0, -30.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_mid_r"),
),
wing_out_l: (
offset: (-24.0, -26.5, -2.0),
offset: (-22.0, -32.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_out_r"),
),
wing_out_r: (
offset: (-9.0, -26.5, -2.0),
offset: (-3.0, -32.0, -4.0),
lateral: ("npc.wyvern_flame.male.wing_out_r"),
),
leg_l: (
@ -337,27 +337,27 @@
),
(CloudWyvern, Male): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_cloud.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_cloud.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -26.5, -2.0),
offset: (-17.0, -29.0, -4.0),
lateral: ("npc.wyvern_cloud.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -26.5, -2.0),
offset: (0.0, -29.0, -4.0),
lateral: ("npc.wyvern_cloud.male.wing_mid_r"),
),
wing_out_l: (
offset: (-24.0, -26.5, -2.0),
offset: (-23.0, -31.0, -3.0),
lateral: ("npc.wyvern_cloud.male.wing_out_r"),
),
wing_out_r: (
offset: (-9.0, -26.5, -2.0),
offset: (0.0, -31.0, -3.0),
lateral: ("npc.wyvern_cloud.male.wing_out_r"),
),
leg_l: (
@ -379,27 +379,27 @@
),
(CloudWyvern, Female): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_cloud.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_cloud.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -26.5, -2.0),
offset: (-17.0, -29.0, -4.0),
lateral: ("npc.wyvern_cloud.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -26.5, -2.0),
offset: (0.0, -29.0, -4.0),
lateral: ("npc.wyvern_cloud.male.wing_mid_r"),
),
wing_out_l: (
offset: (-24.0, -26.5, -2.0),
offset: (-23.0, -31.0, -3.0),
lateral: ("npc.wyvern_cloud.male.wing_out_r"),
),
wing_out_r: (
offset: (-9.0, -26.5, -2.0),
offset: (0.0, -31.0, -3.0),
lateral: ("npc.wyvern_cloud.male.wing_out_r"),
),
leg_l: (
@ -421,27 +421,27 @@
),
(FrostWyvern, Male): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_frost.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_frost.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -26.5, -2.0),
offset: (-17.0, -30.0, -4.0),
lateral: ("npc.wyvern_frost.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -26.5, -2.0),
offset: (0.0, -30.0, -4.0),
lateral: ("npc.wyvern_frost.male.wing_mid_r"),
),
wing_out_l: (
offset: (-24.0, -26.5, -2.0),
offset: (-24.0, -32.0, -4.0),
lateral: ("npc.wyvern_frost.male.wing_out_r"),
),
wing_out_r: (
offset: (-9.0, -26.5, -2.0),
offset: (0.0, -32.0, -4.0),
lateral: ("npc.wyvern_frost.male.wing_out_r"),
),
leg_l: (
@ -463,27 +463,27 @@
),
(FrostWyvern, Female): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_frost.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_frost.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -26.5, -2.0),
offset: (-17.0, -30.0, -4.0),
lateral: ("npc.wyvern_frost.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -26.5, -2.0),
offset: (0.0, -30.0, -4.0),
lateral: ("npc.wyvern_frost.male.wing_mid_r"),
),
wing_out_l: (
offset: (-24.0, -26.5, -2.0),
offset: (-24.0, -32.0, -4.0),
lateral: ("npc.wyvern_frost.male.wing_out_r"),
),
wing_out_r: (
offset: (-9.0, -26.5, -2.0),
offset: (0.0, -32.0, -4.0),
lateral: ("npc.wyvern_frost.male.wing_out_r"),
),
leg_l: (
@ -505,27 +505,27 @@
),
(SeaWyvern, Male): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_sea.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_sea.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -26.5, -2.0),
offset: (-17.0, -30.0, -4.0),
lateral: ("npc.wyvern_sea.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -26.5, -2.0),
offset: (0.0, -30.0, -4.0),
lateral: ("npc.wyvern_sea.male.wing_mid_r"),
),
wing_out_l: (
offset: (-24.0, -26.5, -2.0),
offset: (-21.0, -31.0, -4.0),
lateral: ("npc.wyvern_sea.male.wing_out_r"),
),
wing_out_r: (
offset: (-9.0, -26.5, -2.0),
offset: (-3.0, -31.0, -4.0),
lateral: ("npc.wyvern_sea.male.wing_out_r"),
),
leg_l: (
@ -547,27 +547,27 @@
),
(SeaWyvern, Female): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_sea.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_sea.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -26.5, -2.0),
offset: (-17.0, -30.0, -4.0),
lateral: ("npc.wyvern_sea.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -26.5, -2.0),
offset: (0.0, -30.0, -4.0),
lateral: ("npc.wyvern_sea.male.wing_mid_r"),
),
wing_out_l: (
offset: (-24.0, -26.5, -2.0),
offset: (-21.0, -31.0, -4.0),
lateral: ("npc.wyvern_sea.male.wing_out_r"),
),
wing_out_r: (
offset: (-9.0, -26.5, -2.0),
offset: (-3.0, -31.0, -4.0),
lateral: ("npc.wyvern_sea.male.wing_out_r"),
),
leg_l: (
@ -589,27 +589,27 @@
),
(WealdWyvern, Male): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_weald.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_weald.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -27.0, -2.0),
offset: (-17.0, -34.0, -4.0),
lateral: ("npc.wyvern_weald.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -27.0, -2.0),
offset: (0.0, -34.0, -4.0),
lateral: ("npc.wyvern_weald.male.wing_mid_r"),
),
wing_out_l: (
offset: (-18.0, -23.0, -2.0),
offset: (-18.0, -29.0, -3.0),
lateral: ("npc.wyvern_weald.male.wing_out_r"),
),
wing_out_r: (
offset: (0.0, -23.0, -2.0),
offset: (0.0, -29.0, -3.0),
lateral: ("npc.wyvern_weald.male.wing_out_r"),
),
leg_l: (
@ -631,27 +631,27 @@
),
(WealdWyvern, Female): (
wing_in_l: (
offset: (-24.0, -9.0, -4.0),
offset: (-24.0, -15.5, -4.5),
lateral: ("npc.wyvern_weald.male.wing_in_r"),
),
wing_in_r: (
offset: (0.0, -9.0, -4.0),
offset: (0.0, -15.5, -4.5),
lateral: ("npc.wyvern_weald.male.wing_in_r"),
),
wing_mid_l: (
offset: (-17.0, -27.0, -2.0),
offset: (-17.0, -34.0, -4.0),
lateral: ("npc.wyvern_weald.male.wing_mid_r"),
),
wing_mid_r: (
offset: (0.0, -27.0, -2.0),
offset: (0.0, -34.0, -4.0),
lateral: ("npc.wyvern_weald.male.wing_mid_r"),
),
wing_out_l: (
offset: (-18.0, -23.0, -2.0),
offset: (-18.0, -29.0, -3.0),
lateral: ("npc.wyvern_weald.male.wing_out_r"),
),
wing_out_r: (
offset: (0.0, -23.0, -2.0),
offset: (0.0, -29.0, -3.0),
lateral: ("npc.wyvern_weald.male.wing_out_r"),
),
leg_l: (

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -431,6 +431,11 @@ impl Body {
Body::BirdLarge(body) => match body.species {
bird_large::Species::Cockatrice => Vec3::new(2.5, 5.5, 3.5),
bird_large::Species::Roc => Vec3::new(2.2, 7.5, 4.0),
bird_large::Species::FlameWyvern
| bird_large::Species::FrostWyvern
| bird_large::Species::CloudWyvern
| bird_large::Species::SeaWyvern
| bird_large::Species::WealdWyvern => Vec3::new(4.0, 9.0, 4.5),
_ => Vec3::new(2.0, 6.0, 3.5),
},
Body::Dragon(_) => Vec3::new(16.0, 10.0, 16.0),
@ -724,6 +729,11 @@ impl Body {
Body::Dragon(_) => 500,
Body::BirdLarge(bird_large) => match bird_large.species {
bird_large::Species::Roc => 280,
bird_large::Species::FlameWyvern
| bird_large::Species::CloudWyvern
| bird_large::Species::FrostWyvern
| bird_large::Species::SeaWyvern
| bird_large::Species::WealdWyvern => 1000,
_ => 300,
},
Body::FishSmall(_) => 3,

View File

@ -762,15 +762,7 @@ fn default_main_tool(body: &Body) -> Item {
)),
},
Body::BirdLarge(bird_large) => match (bird_large.species, bird_large.body_type) {
(
bird_large::Species::Cockatrice
| bird_large::Species::FlameWyvern
| bird_large::Species::CloudWyvern
| bird_large::Species::FrostWyvern
| bird_large::Species::SeaWyvern
| bird_large::Species::WealdWyvern,
_,
) => Some(Item::new_from_asset_expect(
(bird_large::Species::Cockatrice, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.birdlargebreathe",
)),
(bird_large::Species::Phoenix, _) => Some(Item::new_from_asset_expect(
@ -779,6 +771,21 @@ fn default_main_tool(body: &Body) -> Item {
(bird_large::Species::Roc, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.birdlargebasic",
)),
(bird_large::Species::FlameWyvern, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.flamewyvern",
)),
(bird_large::Species::FrostWyvern, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.frostwyvern",
)),
(bird_large::Species::CloudWyvern, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.cloudwyvern",
)),
(bird_large::Species::SeaWyvern, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.seawyvern",
)),
(bird_large::Species::WealdWyvern, _) => Some(Item::new_from_asset_expect(
"common.items.npc_weapons.unique.wealdwyvern",
)),
},
Body::BirdMedium(bird_medium) => match bird_medium.species {
bird_medium::Species::Bat => Some(Item::new_from_asset_expect(
@ -901,6 +908,16 @@ impl LoadoutBuilder {
},
_ => None,
},
Body::BirdLarge(body) => match body.species {
bird_large::Species::FlameWyvern
| bird_large::Species::FrostWyvern
| bird_large::Species::CloudWyvern
| bird_large::Species::SeaWyvern
| bird_large::Species::WealdWyvern => {
Some("common.items.npc_armor.bird_large.wyvern")
},
_ => None,
},
Body::Golem(body) => match body.species {
golem::Species::ClayGolem => Some("common.items.npc_armor.golem.claygolem"),
golem::Species::WoodGolem => Some("common.items.npc_armor.golem.woodgolem"),

View File

@ -77,6 +77,16 @@ pub enum ProjectileConstructor {
knockback: f32,
min_falloff: f32,
},
SeaBomb {
damage: f32,
radius: f32,
min_falloff: f32,
},
WindBomb {
damage: f32,
radius: f32,
min_falloff: f32,
},
Snowball {
damage: f32,
radius: f32,
@ -373,6 +383,74 @@ impl ProjectileConstructor {
is_point: true,
}
},
SeaBomb {
damage,
radius,
min_falloff,
} => {
let damage = AttackDamage::new(
Damage {
source: DamageSource::Explosion,
kind: DamageKind::Energy,
value: damage,
},
Some(GroupTarget::OutOfGroup),
instance,
);
let attack = Attack::default()
.with_damage(damage)
.with_crit(crit_chance, crit_mult)
.with_combo_increment();
let explosion = Explosion {
effects: vec![RadiusEffect::Attack(attack)],
radius,
reagent: Some(Reagent::Blue),
min_falloff,
};
Projectile {
hit_solid: vec![Effect::Explode(explosion.clone()), Effect::Vanish],
hit_entity: vec![Effect::Explode(explosion), Effect::Vanish],
time_left: Duration::from_secs(10),
owner,
ignore_group: true,
is_sticky: true,
is_point: true,
}
},
WindBomb {
damage,
radius,
min_falloff,
} => {
let damage = AttackDamage::new(
Damage {
source: DamageSource::Explosion,
kind: DamageKind::Energy,
value: damage,
},
Some(GroupTarget::OutOfGroup),
instance,
);
let attack = Attack::default()
.with_damage(damage)
.with_crit(crit_chance, crit_mult)
.with_combo_increment();
let explosion = Explosion {
effects: vec![RadiusEffect::Attack(attack)],
radius,
reagent: Some(Reagent::White),
min_falloff,
};
Projectile {
hit_solid: vec![Effect::Explode(explosion.clone()), Effect::Vanish],
hit_entity: vec![Effect::Explode(explosion), Effect::Vanish],
time_left: Duration::from_secs(10),
owner,
ignore_group: true,
is_sticky: true,
is_point: true,
}
},
Snowball {
damage,
radius,
@ -579,6 +657,22 @@ impl ProjectileConstructor {
*damage *= power;
*radius *= range;
},
SeaBomb {
ref mut damage,
ref mut radius,
..
} => {
*damage *= power;
*radius *= range;
},
WindBomb {
ref mut damage,
ref mut radius,
..
} => {
*damage *= power;
*radius *= range;
},
Snowball {
ref mut damage,
ref mut radius,

View File

@ -340,7 +340,15 @@ impl<'a> AgentData<'a> {
.map_or(false, |item| {
item.ability_spec().map_or(false, |a_s| match &*a_s {
AbilitySpec::Custom(spec) => {
matches!(spec.as_str(), "Simple Flying Melee")
matches!(
spec.as_str(),
"Simple Flying Melee"
| "Flame Wyvern"
| "Frost Wyvern"
| "Cloud Wyvern"
| "Sea Wyvern"
| "Weald Wyvern"
)
},
_ => false,
})
@ -850,6 +858,8 @@ impl<'a> AgentData<'a> {
"Bird Large Breathe" => Tactic::BirdLargeBreathe,
"Bird Large Fire" => Tactic::BirdLargeFire,
"Bird Large Basic" => Tactic::BirdLargeBasic,
"Flame Wyvern" | "Frost Wyvern" | "Cloud Wyvern" | "Sea Wyvern"
| "Weald Wyvern" => Tactic::Wyvern,
"Mindflayer" => Tactic::Mindflayer,
"Minotaur" => Tactic::Minotaur,
"Clay Golem" => Tactic::ClayGolem,
@ -1224,6 +1234,9 @@ impl<'a> AgentData<'a> {
tgt_data,
read_data,
),
Tactic::Wyvern => {
self.handle_wyvern_attack(agent, controller, &attack_data, tgt_data, read_data, rng)
},
Tactic::Minotaur => {
self.handle_minotaur_attack(agent, controller, &attack_data, tgt_data, read_data)
},

View File

@ -110,6 +110,68 @@ impl<'a> AgentData<'a> {
}
}
pub fn handle_wyvern_attack(
&self,
_agent: &mut Agent,
controller: &mut Controller,
attack_data: &AttackData,
tgt_data: &TargetData,
read_data: &ReadData,
_rng: &mut impl Rng,
) {
// Fly to target
let dir_to_target = ((tgt_data.pos.0 + Vec3::unit_z() * 1.5) - self.pos.0)
.try_normalized()
.unwrap_or_else(Vec3::zero);
let speed = 1.0;
controller.inputs.move_dir = dir_to_target.xy() * speed;
// Always fly! If the floor can't touch you, it can't hurt you...
controller.push_basic_input(InputKind::Fly);
// Flee from the ground! The internet told me it was lava!
// If on the ground, jump with every last ounce of energy, holding onto all that
// is dear in life and straining for the wide open skies.
if self.physics_state.on_ground.is_some() {
controller.push_basic_input(InputKind::Jump);
} else {
// Only fly down if close enough to target in the xy plane
// Otherwise fly towards the target bouncing around a 5 block altitude
let mut maintain_altitude = |altitude| {
if read_data
.terrain
.ray(self.pos.0, self.pos.0 - (Vec3::unit_z() * altitude))
.until(Block::is_solid)
.cast()
.1
.map_or(true, |b| b.is_some())
{
// Fly up
controller.inputs.move_z = 1.0;
} else {
// Fly down
controller.inputs.move_z = -1.0;
}
};
if (tgt_data.pos.0 - self.pos.0).xy().magnitude_squared() > (30.0_f32).powi(2) {
// If above 30 blocks, fly down and attack
maintain_altitude(30.0);
// Shoot bombs
controller.push_basic_input(InputKind::Primary);
} else {
maintain_altitude(2.0);
// Attack if in range
if attack_data.dist_sqrd < 6.0_f32.powi(2) && attack_data.angle < 150.0 {
controller.push_basic_input(InputKind::Ability(0));
} else if attack_data.dist_sqrd < 8.0_f32.powi(2) && attack_data.angle < 150.0 {
controller.push_basic_input(InputKind::Ability(1));
} else if attack_data.dist_sqrd < 12.0_f32.powi(2) && attack_data.angle < 150.0 {
controller.push_basic_input(InputKind::Secondary);
}
}
}
}
// Intended for any agent that has one attack, that attack is a melee attack,
// the agent is able to freely walk around, and the agent is trying to attack
// from behind its target

View File

@ -119,6 +119,7 @@ pub enum Tactic {
BirdLargeBreathe,
BirdLargeFire,
BirdLargeBasic,
Wyvern,
ArthropodMelee,
ArthropodRanged,
ArthropodAmbush,

View File

@ -48,7 +48,7 @@ const BIRD_MEDIUM_ROSTER: &[comp::bird_medium::Species] = &[
];
const BIRD_LARGE_ROSTER: &[comp::bird_large::Species] = &[
// Flame Wyvern not included until proper introduction
// Wyverns not included until proper introduction
comp::bird_large::Species::Phoenix,
comp::bird_large::Species::Cockatrice,
comp::bird_large::Species::Roc,

View File

@ -85,10 +85,15 @@ impl Animation for FlyAnimation {
next.chest.orientation = Quaternion::rotation_x(
(0.8 - 0.8 * velocity.xy().magnitude() / 5.0).max(-0.2) - flap1 * 0.2,
) * Quaternion::rotation_y(tilt * 1.8 + fast * 0.01);
next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
if s_a.wyvern {
next.wing_in_l.position =
Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2 + 2.0);
next.wing_in_r.position =
Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2 + 2.0);
} else {
next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
}
next.wing_in_l.orientation =
Quaternion::rotation_y(-flap1 * 1.9 + 0.2) * Quaternion::rotation_x(0.4);
next.wing_in_r.orientation =
@ -135,9 +140,15 @@ impl Animation for FlyAnimation {
next.chest.orientation =
Quaternion::rotation_x(-0.2 + slow * 0.05 + (0.8 * velocity.z / 80.0).min(0.8))
* Quaternion::rotation_y(tilt * 1.8 + fast * 0.01);
next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
if s_a.wyvern {
next.wing_in_l.position =
Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2 + 2.0);
next.wing_in_r.position =
Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2 + 2.0);
} else {
next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
}
next.wing_in_l.orientation =
Quaternion::rotation_y(0.1 + slow * 0.04 + (0.8 * velocity.z / 80.0).min(0.8))

View File

@ -230,31 +230,31 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Phoenix, _) => (3.0, 2.5, 2.0),
(Cockatrice, _) => (3.5, 7.0, 3.5),
(Roc, _) => (5.5, 7.5, -1.0),
(FlameWyvern, _) => (6.5, 5.0, -2.0),
(CloudWyvern, _) => (4.5, 5.0, -4.0),
(FrostWyvern, _) => (6.5, 5.0, -2.0),
(SeaWyvern, _) => (6.5, 5.0, -2.0),
(WealdWyvern, _) => (5.0, 5.0, -2.0),
(FlameWyvern, _) => (6.5, 11.5, -2.0),
(CloudWyvern, _) => (3.5, 11.5, -1.5),
(FrostWyvern, _) => (5.0, 10.5, -1.5),
(SeaWyvern, _) => (4.0, 11.5, -0.0),
(WealdWyvern, _) => (5.0, 11.5, -1.0),
},
wing_mid: match (body.species, body.body_type) {
(Phoenix, _) => (10.0, 1.0, 0.0),
(Cockatrice, _) => (6.0, 0.0, 0.0),
(Roc, _) => (12.0, 1.0, -0.5),
(FlameWyvern, _) => (19.0, 15.0, -1.0),
(CloudWyvern, _) => (19.0, 15.0, -1.0),
(FrostWyvern, _) => (19.0, 15.0, -1.0),
(SeaWyvern, _) => (19.0, 15.0, -1.0),
(WealdWyvern, _) => (19.0, 15.0, -1.0),
(FlameWyvern, _) => (19.0, 11.5, 1.0),
(CloudWyvern, _) => (19.0, 10.5, 1.0),
(FrostWyvern, _) => (18.5, 11.5, 0.5),
(SeaWyvern, _) => (19.0, 11.5, 0.5),
(WealdWyvern, _) => (19.0, 11.5, 0.0),
},
wing_out: match (body.species, body.body_type) {
(Phoenix, _) => (7.0, 2.0, 1.5),
(Cockatrice, _) => (4.0, -1.0, 1.0),
(Roc, _) => (10.0, -2.0, 0.0),
(FlameWyvern, _) => (10.0, -3.0, 0.0),
(CloudWyvern, _) => (10.0, -3.0, 0.0),
(FrostWyvern, _) => (10.0, -3.0, 0.0),
(SeaWyvern, _) => (10.0, -3.0, 0.0),
(WealdWyvern, _) => (16.0, -3.0, 0.0),
(FlameWyvern, _) => (11.0, -1.0, 0.0),
(CloudWyvern, _) => (11.0, -2.0, 0.0),
(FrostWyvern, _) => (10.0, -1.5, 0.5),
(SeaWyvern, _) => (12.0, -1.0, 0.0),
(WealdWyvern, _) => (16.0, -4.0, -1.0),
},
leg: match (body.species, body.body_type) {
(Phoenix, _) => (4.0, 1.5, 12.0),

View File

@ -126,18 +126,18 @@ impl Animation for RunAnimation {
Quaternion::rotation_x(-0.1 + short * -0.1) * Quaternion::rotation_z(tilt * 0.8);
next.wing_in_l.position = Vec3::new(
-s_a.wing_in.0,
-s_a.wing_in.0 + 1.5,
s_a.wing_in.1 + foot1a * 2.0,
s_a.wing_in.2 + speednorm * 1.0 + foot1b * 1.0,
s_a.wing_in.2 + speednorm * 1.0 + foot1b * 1.0 - 3.0,
);
next.wing_in_r.position = Vec3::new(
s_a.wing_in.0,
s_a.wing_in.0 - 1.5,
s_a.wing_in.1 + foot2a * 2.0,
s_a.wing_in.2 + speednorm * 1.0 + foot2b * 1.0,
s_a.wing_in.2 + speednorm * 1.0 + foot2b * 1.0 - 3.0,
);
next.wing_in_l.orientation = Quaternion::rotation_x(foot2a * -0.05 + speednorm * -0.3)
* Quaternion::rotation_y(-0.8 + speednorm * 0.55 + foot2b * -0.2)
* Quaternion::rotation_y(-0.8 + speednorm * 0.5 + foot2b * -0.2)
* Quaternion::rotation_z(0.2 + foot2a * 0.6);
next.wing_in_r.orientation = Quaternion::rotation_x(foot1a * -0.05 + speednorm * -0.3)
* Quaternion::rotation_y(0.8 + speednorm * -0.55 + foot1b * 0.2)

View File

@ -51,10 +51,13 @@ impl Animation for StunnedAnimation {
next.tail_front.position = Vec3::new(0.0, s_a.tail_front.0, s_a.tail_front.1);
next.tail_rear.position = Vec3::new(0.0, s_a.tail_rear.0, s_a.tail_rear.1);
next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
if s_a.wyvern {
next.wing_in_l.position = Vec3::new(-s_a.wing_in.0 + 3.5, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_r.position = Vec3::new(s_a.wing_in.0 - 3.5, s_a.wing_in.1, s_a.wing_in.2);
} else {
next.wing_in_l.position = Vec3::new(-s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
next.wing_in_r.position = Vec3::new(s_a.wing_in.0, s_a.wing_in.1, s_a.wing_in.2);
}
next.wing_in_l.orientation = Quaternion::rotation_y(wave_slow_cos * 0.06 + twitch2 * 0.8)
* Quaternion::rotation_z(0.2 - movement1abs);
next.wing_in_r.orientation = Quaternion::rotation_y(wave_slow_cos * 0.06 - twitch2 * 0.8)