[Ready for Review] Unapologetic Vaurca Buffs III: Revenge of the Buffs (#4885)
Implements various changes at the behest of lore-dev BygoneHero, namely: Vaurca can now wear specially modified softsuits. Vaurca now have their own special rigsuit a la the breacher: the combat exoskeleton. It comes with various special modules, including a boring laser that allows them to dig below themselves rapidly, a vaurca variant of the combat injector which includes phoron and k'ois paste, and a neural lattice which reduces halloss by sharing it with everyone else wearing a neural lattice. Vaurca also have received various other currently unavailable event items, including a variant of the tactical mask that filters out nitrogen and allows the Vaurca wearing it to eat, tachyon rifles and carbines which penetrate up to three layers of walls and possess other fringe benefits, the gauss rifle which is a semi-automatic variant of the crossbow with greater power and a 6 rod magazine, the energy zweihander, commando armor and scout armor. Introduces a general climbing mechanic. Climbing can be initiated by clicking on a wall or an open turf, and it is a percentage chance that is modified by the amount of stable/large items beneath you, and decreased by the amount of unstable/small items. Vaurca are naturally proficient and always succeed at climbing. Changes Vaurca to see in blue-green vision. Their vision is generally brighter and reddish colors are converted to a blue-green color. Adds the Sedantis flag, an interhive flag that celebrates the universal longing for Sedantis and is a symbol of the Vaurca diaspora.
@@ -21,7 +21,7 @@
|
||||
var/parallax_speed = 0
|
||||
|
||||
/obj/screen/plane_master
|
||||
appearance_flags = PLANE_MASTER
|
||||
appearance_flags = PLANE_MASTER | NO_CLIENT_COLOR
|
||||
screen_loc = "CENTER,CENTER"
|
||||
|
||||
/obj/screen/plane_master/parallax_master
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
/atom/proc/set_dir(new_dir)
|
||||
. = new_dir != dir
|
||||
dir = new_dir
|
||||
|
||||
|
||||
// Lighting
|
||||
if (.)
|
||||
var/datum/light_source/L
|
||||
|
||||
@@ -595,7 +595,7 @@
|
||||
//Departments that the cycler can paint suits to look like.
|
||||
var/list/departments = list("Engineering","Mining","Medical","Security","Atmos")
|
||||
//Species that the suits can be configured to fit.
|
||||
var/list/species = list("Human","Skrell","Unathi","Tajara")
|
||||
var/list/species = list("Human","Skrell","Unathi","Tajara", "Vaurca")
|
||||
|
||||
var/target_department
|
||||
var/target_species
|
||||
@@ -624,35 +624,30 @@
|
||||
model_text = "Engineering"
|
||||
req_access = list(access_construction)
|
||||
departments = list("Engineering","Atmos")
|
||||
species = list("Human","Tajara","Skrell","Unathi") //Add Unathi when sprites exist for their suits.
|
||||
|
||||
/obj/machinery/suit_cycler/mining
|
||||
name = "Mining suit cycler"
|
||||
model_text = "Mining"
|
||||
req_access = list(access_mining)
|
||||
departments = list("Mining")
|
||||
species = list("Human","Tajara","Skrell","Unathi")
|
||||
|
||||
/obj/machinery/suit_cycler/security
|
||||
name = "Security suit cycler"
|
||||
model_text = "Security"
|
||||
req_access = list(access_security)
|
||||
departments = list("Security")
|
||||
species = list("Human","Tajara","Skrell","Unathi")
|
||||
|
||||
/obj/machinery/suit_cycler/medical
|
||||
name = "Medical suit cycler"
|
||||
model_text = "Medical"
|
||||
req_access = list(access_medical)
|
||||
departments = list("Medical")
|
||||
species = list("Human","Tajara","Skrell","Unathi")
|
||||
|
||||
/obj/machinery/suit_cycler/syndicate
|
||||
name = "Nonstandard suit cycler"
|
||||
model_text = "Nonstandard"
|
||||
req_access = list(access_syndicate)
|
||||
departments = list("Mercenary")
|
||||
species = list("Human","Tajara","Skrell","Unathi")
|
||||
can_repair = 1
|
||||
|
||||
/obj/machinery/suit_cycler/wizard
|
||||
|
||||
@@ -82,4 +82,31 @@
|
||||
..()
|
||||
if (isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.set_light(0)
|
||||
L.set_light(0)
|
||||
|
||||
//Doubleburn napalm modifier. Applied by Zo'rane Fire
|
||||
//Increases damage dealt by burn sources
|
||||
/datum/modifier/napalm
|
||||
var/added_burn_mod
|
||||
var/delta
|
||||
|
||||
/datum/modifier/napalm/activate()
|
||||
..()
|
||||
delta = strength
|
||||
if (isliving(target))
|
||||
var/mob/living/L = target
|
||||
added_burn_mod = L.burn_mod * delta - L.burn_mod
|
||||
L.burn_mod += added_burn_mod
|
||||
|
||||
/datum/modifier/napalm/deactivate()
|
||||
..()
|
||||
if (isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.burn_mod -= added_burn_mod
|
||||
|
||||
/datum/modifier/napalm/custom_validity()
|
||||
if(istype(target, /mob/living))
|
||||
var/mob/living/L = target
|
||||
if(L.fire_stacks)
|
||||
return 1
|
||||
return 0
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/effect/effect/water/proc/set_color() // Call it after you move reagents to it
|
||||
icon += reagents.get_color()
|
||||
|
||||
/obj/effect/effect/water/proc/set_up(var/turf/target, var/step_count = 5, var/delay = 5)
|
||||
/obj/effect/effect/water/proc/set_up(var/turf/target, var/step_count = 5, var/delay = 5, var/lifespan = 10)
|
||||
if(!target)
|
||||
return
|
||||
for(var/i = 1 to step_count)
|
||||
@@ -28,7 +28,7 @@
|
||||
if(T == get_turf(target))
|
||||
break
|
||||
sleep(delay)
|
||||
sleep(10)
|
||||
sleep(lifespan)
|
||||
qdel(src)
|
||||
|
||||
//Wets everything in the tile
|
||||
@@ -75,3 +75,8 @@
|
||||
name = "chemicals"
|
||||
icon = 'icons/obj/chempuff.dmi'
|
||||
icon_state = ""
|
||||
|
||||
//used by evil things
|
||||
/obj/effect/effect/water/firewater
|
||||
name = "napalm gel"
|
||||
icon_state = "mustard"
|
||||
@@ -6,66 +6,105 @@
|
||||
anchored = 1
|
||||
var/amount = 1
|
||||
|
||||
Initialize(mapload, amt = 1, nologs = 0)
|
||||
. = ..()
|
||||
if(!nologs && !mapload)
|
||||
message_admins("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>JMP</a>)")
|
||||
log_game("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z])")
|
||||
src.amount = amt
|
||||
/obj/effect/decal/cleanable/liquid_fuel/Initialize(mapload, amt = 1, nologs = 0)
|
||||
. = ..()
|
||||
if(!nologs && !mapload)
|
||||
message_admins("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>JMP</a>)")
|
||||
log_game("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z])")
|
||||
src.amount = amt
|
||||
|
||||
var/has_spread = 0
|
||||
//Be absorbed by any other liquid fuel in the tile.
|
||||
for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc)
|
||||
if(other != src)
|
||||
other.amount += src.amount
|
||||
other.Spread()
|
||||
has_spread = 1
|
||||
break
|
||||
|
||||
if(!has_spread)
|
||||
Spread()
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
proc/Spread(exclude=list())
|
||||
//Allows liquid fuels to sometimes flow into other tiles.
|
||||
if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate.
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/target = get_step(src,d)
|
||||
var/turf/simulated/origin = get_turf(src)
|
||||
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
|
||||
if(other_fuel)
|
||||
other_fuel.amount += amount*0.25
|
||||
if(!(other_fuel in exclude))
|
||||
exclude += src
|
||||
other_fuel.Spread(exclude)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1)
|
||||
amount *= 0.75
|
||||
|
||||
|
||||
flamethrower_fuel
|
||||
icon_state = "mustard"
|
||||
anchored = 0
|
||||
Initialize(mapload, amt = 1, d = 0)
|
||||
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
|
||||
. = ..()
|
||||
var/has_spread = 0
|
||||
//Be absorbed by any other liquid fuel in the tile.
|
||||
for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc)
|
||||
if(other != src)
|
||||
other.amount += src.amount
|
||||
other.Spread()
|
||||
has_spread = 1
|
||||
break
|
||||
|
||||
if(!has_spread)
|
||||
Spread()
|
||||
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
|
||||
if(amount < 0.1) return
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
for(var/d in list(turn(dir,90),turn(dir,-90), dir))
|
||||
var/turf/simulated/O = get_step(S,d)
|
||||
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
|
||||
continue
|
||||
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
|
||||
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
|
||||
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
|
||||
/obj/effect/decal/cleanable/liquid_fuel/proc/Spread(exclude=list())
|
||||
//Allows liquid fuels to sometimes flow into other tiles.
|
||||
if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate.
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/target = get_step(src,d)
|
||||
var/turf/simulated/origin = get_turf(src)
|
||||
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
|
||||
if(other_fuel)
|
||||
other_fuel.amount += amount*0.25
|
||||
if(!(other_fuel in exclude))
|
||||
exclude += src
|
||||
other_fuel.Spread(exclude)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1)
|
||||
amount *= 0.75
|
||||
|
||||
amount *= 0.25
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel
|
||||
icon_state = "mustard"
|
||||
anchored = 0
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Initialize(mapload, amt = 1, d = 0)
|
||||
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
|
||||
. = ..()
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Spread()
|
||||
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
|
||||
if(amount < 0.1) return
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
|
||||
for(var/d in list(turn(dir,90),turn(dir,-90), dir))
|
||||
var/turf/simulated/O = get_step(S,d)
|
||||
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
|
||||
continue
|
||||
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
|
||||
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
|
||||
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
|
||||
|
||||
amount *= 0.25
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/napalm
|
||||
name = "napalm gel"
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/napalm/Initialize(mapload, amt = 1, nologs = 0)
|
||||
. = ..()
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/napalm/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/napalm/Spread()
|
||||
if(amount < 100)
|
||||
return
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S))
|
||||
return
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/target = get_step(src,d)
|
||||
var/turf/simulated/origin = get_turf(src)
|
||||
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/napalm/other_fuel = locate() in target
|
||||
if(other_fuel)
|
||||
other_fuel.amount += amount*0.5
|
||||
target.hotspot_expose(2000, 400)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/liquid_fuel/napalm(target, amount*0.5,1)
|
||||
target.hotspot_expose(2000, 400)
|
||||
amount *= 0.5
|
||||
origin.hotspot_expose(2000, 400) //immediately ignite. its napalm bitch
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/napalm/process()
|
||||
for(var/mob/living/L in get_turf(src))
|
||||
var/sticky = min(rand(5,25), amount)
|
||||
if(sticky > 1)
|
||||
L.adjust_fire_stacks(sticky)
|
||||
amount = max(1, amount - sticky)
|
||||
@@ -66,3 +66,8 @@
|
||||
/obj/effect/projectile/impact/emitter
|
||||
icon_state = "impact_emitter"
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/effect/projectile/impact/tachyon
|
||||
name = "xray impact"
|
||||
icon_state = "impact_tachyon"
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
@@ -60,3 +60,7 @@
|
||||
|
||||
/obj/effect/projectile/muzzle/bullet
|
||||
icon_state = "muzzle_bullet"
|
||||
|
||||
/obj/effect/projectile/muzzle/tachyon
|
||||
icon_state = "muzzle_pulse"
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
@@ -77,3 +77,8 @@
|
||||
/obj/effect/projectile/tracer/emitter
|
||||
icon_state = "emitter"
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/effect/projectile/tracer/tachyon
|
||||
name = "particle beam"
|
||||
icon_state = "invisible"
|
||||
light_color = LIGHT_COLOR_VIOLET
|
||||
|
||||
@@ -686,8 +686,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
if(!cannotzoom)
|
||||
M.visible_message("[zoomdevicename ? "[M] looks up from the [src.name]" : "[M] lowers the [src.name]"].")
|
||||
|
||||
return
|
||||
|
||||
/obj/item/proc/pwr_drain()
|
||||
return 0 // Process Kill
|
||||
|
||||
|
||||
@@ -149,6 +149,15 @@
|
||||
icon_state = initial(icon_state)
|
||||
user << "<span class='notice'>\The [src] is de-energised.</span>"
|
||||
|
||||
/obj/item/weapon/melee/energy/glaive/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
user.setClickCooldown(16)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/energy/glaive/pre_attack(var/mob/living/target, var/mob/living/user)
|
||||
if(istype(target))
|
||||
cleave(user, target)
|
||||
..()
|
||||
|
||||
/*
|
||||
* Energy Axe
|
||||
*/
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
slot_flags = SLOT_BACK
|
||||
max_w_class = 3
|
||||
max_storage_space = 28
|
||||
var/species_restricted = list("exclude","Vaurca Breeder")
|
||||
var/species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
|
||||
|
||||
/obj/item/weapon/storage/backpack/mob_can_equip(M as mob, slot)
|
||||
|
||||
|
||||
@@ -39,7 +39,10 @@
|
||||
icon_state = "eknife1"
|
||||
item_state = icon_state
|
||||
damtype = "fire"
|
||||
user.regenerate_icons()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
user << "<span class='notice'>\The [src] is now energised.</span>"
|
||||
|
||||
/obj/item/weapon/melee/energy/vaurca/deactivate(mob/living/user)
|
||||
@@ -47,7 +50,10 @@
|
||||
icon_state = "eknife0"
|
||||
item_state = icon_state
|
||||
damtype = "brute"
|
||||
user.regenerate_icons()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
user << "<span class='notice'>\The [src] is de-energised.</span>"
|
||||
|
||||
/obj/item/vaurca/box
|
||||
@@ -172,7 +178,8 @@
|
||||
|
||||
species_restricted = list("Vaurca")
|
||||
|
||||
light_overlay = "helmet_light"
|
||||
light_overlay = "helmet_light_dual_green"
|
||||
light_color = "#3e7c3e"
|
||||
|
||||
/obj/item/clothing/shoes/magboots/vox/vaurca
|
||||
|
||||
@@ -183,7 +190,257 @@
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
|
||||
species_restricted = list("Vaurca")
|
||||
species_restricted = list("Vaurca","Vaurca Warform")
|
||||
sprite_sheets = list(
|
||||
"Vaurca Warform" = 'icons/mob/species/warriorform/shoes.dmi'
|
||||
)
|
||||
|
||||
action_button_name = "Toggle the magclaws"
|
||||
|
||||
/obj/item/clothing/suit/space/void/scout
|
||||
name = "scout armor"
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "scout"
|
||||
item_state = "scout"
|
||||
desc = "Armor designed for K'laxan scouts, made of lightweight sturdy material that does not restrict movement."
|
||||
slowdown = -1
|
||||
|
||||
species_restricted = list("Vaurca")
|
||||
armor = list(melee = 50, bullet = 20, laser = 50, energy = 30, bomb = 45, bio = 100, rad = 10)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/scout
|
||||
name = "scout helmet"
|
||||
desc = "A helmet designed for K'laxan scouts, made of lightweight sturdy material that does not restrict movement."
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "helm_scout"
|
||||
item_state = "helm_scout"
|
||||
|
||||
species_restricted = list("Vaurca")
|
||||
armor = list(melee = 40, bullet = 20, laser = 40, energy = 30, bomb = 45, bio = 100, rad = 10)
|
||||
|
||||
light_overlay = "helmet_light_dual_green"
|
||||
light_color = "#3e7c3e"
|
||||
|
||||
/obj/item/clothing/suit/space/void/commando
|
||||
name = "commando armor"
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "commando"
|
||||
item_state = "commando"
|
||||
desc = "A design perfected by the Zo'ra, this helmet is commonly used by frontline warriors of a hive. Ablative design deflects lasers away from the body while providing moderate physical protection."
|
||||
|
||||
species_restricted = list("Vaurca")
|
||||
armor = list(melee = 40, bullet = 40, laser = 60, energy = 50, bomb = 45, bio = 100, rad = 10)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/commando
|
||||
name = "commando helmet"
|
||||
desc = "A design perfected by the Zo'ra, this helmet is commonly used by frontline warriors of a hive. Ablative design deflects lasers away from the body while providing moderate physical protection."
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "helm_commando"
|
||||
item_state = "helm_commando"
|
||||
|
||||
species_restricted = list("Vaurca")
|
||||
armor = list(melee = 30, bullet = 30, laser = 60, energy = 50, bomb = 45, bio = 100, rad = 10)
|
||||
|
||||
light_overlay = "helmet_light_dual_green"
|
||||
light_color = "#3e7c3e"
|
||||
|
||||
/obj/item/clothing/mask/gas/vaurca
|
||||
name = "tactical garment"
|
||||
desc = "A tactical mandible garment with state of the art air filtration."
|
||||
item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | FLEXIBLEMATERIAL | THICKMATERIAL
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
|
||||
body_parts_covered = FACE|EYES
|
||||
gas_filter_strength = 3
|
||||
w_class = 2.0
|
||||
filtered_gases = list("nitrogen", "sleeping_agent")
|
||||
armor = list(melee = 25, bullet = 10, laser = 25, energy = 25, bomb = 0, bio = 50, rad = 15)
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "m_metalg"
|
||||
item_state = "m_metalg"
|
||||
contained_sprite = 1
|
||||
|
||||
/obj/item/weapon/melee/energy/vaurca_zweihander
|
||||
name = "thermal greatblade"
|
||||
desc = "An infamous execution blade of the Zo'ra, due to its size, only the largest Za were able to carry it in active combat."
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "greatblade0"
|
||||
item_state = "greatblade0"
|
||||
active_force = 30
|
||||
armor_penetration = 30
|
||||
active_throwforce = 20
|
||||
active_w_class = 5
|
||||
force = 10
|
||||
throwforce = 10
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
w_class = 4.0
|
||||
flags = CONDUCT | NOBLOODY
|
||||
attack_verb = list("stabbed", "chopped", "sliced", "cleaved", "slashed", "cut")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
contained_sprite = 1
|
||||
base_reflectchance = 40
|
||||
base_block_chance = 60
|
||||
shield_power = 150
|
||||
|
||||
/obj/item/weapon/melee/energy/vaurca_zweihander/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
user.setClickCooldown(16)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/energy/vaurca_zweihander/pre_attack(var/mob/living/target, var/mob/living/user)
|
||||
if(istype(target))
|
||||
cleave(user, target)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/energy/vaurca_zweihander/activate(mob/living/user)
|
||||
..()
|
||||
icon_state = "greatblade1"
|
||||
item_state = icon_state
|
||||
damtype = "fire"
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
user << "<span class='notice'>\The [src] is now energised.</span>"
|
||||
|
||||
/obj/item/weapon/melee/energy/vaurca_zweihander/deactivate(mob/living/user)
|
||||
..()
|
||||
icon_state = "greatblade0"
|
||||
item_state = icon_state
|
||||
damtype = "brute"
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
user << "<span class='notice'>\The [src] is de-energised.</span>"
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca
|
||||
name = "gauss rifle"
|
||||
desc = "An unwieldy, heavy weapon that propels metal projectiles with magnetic coils that run its length."
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "gaussrifle"
|
||||
item_state = "gaussrifle"
|
||||
fire_sound = 'sound/effects/Explosion2.ogg'
|
||||
fire_sound_text = "a subdued boom"
|
||||
fire_delay = 12
|
||||
slot_flags = SLOT_BACK
|
||||
needspin = TRUE
|
||||
recoil = 6
|
||||
|
||||
|
||||
release_speed = 15
|
||||
var/list/belt = new/list()
|
||||
var/belt_size = 12 //holds this + one in the chamber
|
||||
recoil_wielded = 2
|
||||
accuracy_wielded = -1
|
||||
fire_delay_wielded = 1
|
||||
|
||||
//action button for wielding
|
||||
action_button_name = "Wield rifle"
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/can_wield()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/ui_action_click()
|
||||
if(src in usr)
|
||||
toggle_wield(usr)
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/verb/wield_rifle()
|
||||
set name = "Wield rifle"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
toggle_wield(usr)
|
||||
if(istype(usr,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/update_icon()
|
||||
if(wielded)
|
||||
item_state = "gaussrifle-wielded"
|
||||
else
|
||||
item_state = "gaussrifle"
|
||||
update_held_icon()
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/consume_next_projectile(mob/user=null)
|
||||
return bolt
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/handle_post_fire(mob/user, atom/target)
|
||||
bolt = null
|
||||
tension = 1
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/attack_self(mob/living/user as mob)
|
||||
pump(user)
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/proc/pump(mob/M as mob)
|
||||
playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
|
||||
|
||||
if(bolt)
|
||||
if(tension < max_tension)
|
||||
M << "<span class='warning'>You pump [src], charging the magnetic coils.</span>"
|
||||
tension++
|
||||
else
|
||||
M << "<span class='notice'>\The [src]'s magnetic coils are at maximum charge.</span>"
|
||||
return
|
||||
var/obj/item/next
|
||||
if(belt.len)
|
||||
next = belt[1]
|
||||
if(next)
|
||||
belt -= next //Remove grenade from loaded list.
|
||||
bolt = next
|
||||
M << "<span class='warning'>You pump [src], loading \a [next] into the chamber.</span>"
|
||||
else
|
||||
M << "<span class='warning'>You pump [src], but the magazine is empty.</span>"
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/proc/load(obj/item/W, mob/user)
|
||||
if(belt.len >= belt_size)
|
||||
user << "<span class='warning'>[src] is full.</span>"
|
||||
return
|
||||
user.remove_from_mob(W)
|
||||
W.forceMove(src)
|
||||
belt.Insert(1, W) //add to the head of the list, so that it is loaded on the next pump
|
||||
user.visible_message("[user] inserts \a [W] into [src].", "<span class='notice'>You insert \a [W] into [src].</span>")
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/proc/unload(mob/user)
|
||||
if(belt.len)
|
||||
var/obj/item/weapon/arrow/rod/R = belt[belt.len]
|
||||
belt.len--
|
||||
user.put_in_hands(R)
|
||||
user.visible_message("[user] removes \a [R] from [src].", "<span class='notice'>You remove \a [R] from [src].</span>")
|
||||
else
|
||||
user << "<span class='warning'>[src] is empty.</span>"
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/weapon/arrow))
|
||||
load(I, user)
|
||||
if(istype(I, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/R = I
|
||||
if (R.use(1))
|
||||
var/obj/item/weapon/arrow/rod/ROD = new /obj/item/weapon/arrow/rod(src)
|
||||
load(ROD, user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/attack_hand(mob/user)
|
||||
if(user.get_inactive_hand() == src)
|
||||
unload(user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/superheat_rod(mob/user)
|
||||
if(!user || !bolt) return
|
||||
if(bolt.throwforce >= 25) return
|
||||
if(!istype(bolt,/obj/item/weapon/arrow/rod)) return
|
||||
|
||||
bolt.throwforce = 25
|
||||
bolt.icon_state = "metal-rod-superheated"
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/vaurca/update_icon()
|
||||
return
|
||||
|
||||
@@ -907,7 +907,9 @@
|
||||
/obj/item/ammo_casing/c45/rubber = 0.5,
|
||||
/obj/item/ammo_casing/c9mm/rubber = 0.5,
|
||||
/obj/item/ammo_casing/c45/flash = 0.5,
|
||||
/obj/item/ammo_casing/shotgun/beanbag = 0.5
|
||||
/obj/item/ammo_casing/shotgun/beanbag = 0.5,
|
||||
/obj/item/weapon/flag/america = 1,
|
||||
/obj/item/weapon/flag/america/l = 1
|
||||
)
|
||||
|
||||
//Sometimes the chef will have spare oil in storage.
|
||||
|
||||
@@ -416,6 +416,44 @@
|
||||
/obj/item/weapon/flag/eridani/l
|
||||
flag_size = 1
|
||||
|
||||
/obj/structure/sign/flag/vaurca
|
||||
name = "Sedantis flag"
|
||||
desc = "The emblem of Sedantis on a flag, emblematic of Vaurca longing."
|
||||
icon_state = "sedantis"
|
||||
|
||||
/obj/structure/sign/flag/vaurca/left
|
||||
icon_state = "sedantis_l"
|
||||
|
||||
/obj/structure/sign/flag/vaurca/right
|
||||
icon_state = "sedantis_r"
|
||||
|
||||
/obj/item/weapon/flag/vaurca
|
||||
name = "Sedantis flag"
|
||||
desc = "The emblem of Sedantis on a flag, emblematic of Vaurca longing."
|
||||
flag_path = "sedantis"
|
||||
|
||||
/obj/item/weapon/flag/vaurca/l
|
||||
flag_size = 1
|
||||
|
||||
/obj/structure/sign/flag/america
|
||||
name = "Old World flag"
|
||||
desc = "The banner of an ancient nation, its glory old."
|
||||
icon_state = "oldglory"
|
||||
|
||||
/obj/structure/sign/flag/america/left
|
||||
icon_state = "oldglory_l"
|
||||
|
||||
/obj/structure/sign/flag/america/right
|
||||
icon_state = "oldglory_r"
|
||||
|
||||
/obj/item/weapon/flag/america
|
||||
name = "Old World flag"
|
||||
desc = "The banner of an ancient nation, its glory old."
|
||||
flag_path = "soldglory"
|
||||
|
||||
/obj/item/weapon/flag/america/l
|
||||
flag_size = 1
|
||||
|
||||
/obj/item/weapon/flag
|
||||
name = "boxed flag"
|
||||
desc = "A flag neatly folded into a wooden container."
|
||||
|
||||
@@ -71,6 +71,16 @@
|
||||
fail_smash(user, 2)
|
||||
return 1
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/turf/destination = GetAbove(H)
|
||||
|
||||
if(destination)
|
||||
var/turf/start = get_turf(H)
|
||||
if(start.CanZPass(H, UP) && destination.CanZPass(H, UP))
|
||||
H.climb(UP, src)
|
||||
return
|
||||
|
||||
try_touch(user, rotting)
|
||||
|
||||
/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker)
|
||||
|
||||
@@ -218,7 +218,8 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/cmd_ss_panic,
|
||||
/client/proc/reset_openturf,
|
||||
/datum/admins/proc/capture_map,
|
||||
/client/proc/global_ao_regenerate
|
||||
/client/proc/global_ao_regenerate,
|
||||
/client/proc/add_client_color
|
||||
)
|
||||
|
||||
var/list/admin_verbs_paranoid_debug = list(
|
||||
@@ -1160,6 +1161,47 @@ var/list/admin_verbs_cciaa = list(
|
||||
|
||||
SSzcopy.hard_reset()
|
||||
|
||||
/client/proc/add_client_color(mob/T as mob in mob_list)
|
||||
set category = "Debug"
|
||||
set name = "Add Client Color"
|
||||
set desc = "Adds a client color to a given mob"
|
||||
|
||||
if(!check_rights(R_DEV))
|
||||
return
|
||||
|
||||
if(!ishuman(T))
|
||||
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/C = T
|
||||
|
||||
var/rr = input("Enter color value", "Red-Red") as num|null
|
||||
var/rg = input("Enter color value", "Red-Green") as num|null
|
||||
var/rb = input("Enter color value", "Red-Blue") as num|null
|
||||
var/gr = input("Enter color value", "Green-Red") as num|null
|
||||
var/gg = input("Enter color value", "Green-Green") as num|null
|
||||
var/gb = input("Enter color value", "Green-Blue") as num|null
|
||||
var/br = input("Enter color value", "Blue-Red") as num|null
|
||||
var/bg = input("Enter color value", "Blue-Green") as num|null
|
||||
var/bb = input("Enter color value", "Blue-Blue") as num|null
|
||||
var/priority = input("Enter priority value.", "Priority") as num|null
|
||||
if(!usr)
|
||||
return
|
||||
if(!C)
|
||||
to_chat(usr, "Mob doesn't exist anymore")
|
||||
return
|
||||
|
||||
if(priority)
|
||||
var/datum/client_color/CC = new /datum/client_color()
|
||||
CC.client_color = list(rr,rg,rb, gr,gg,gb, br,bg,bb)
|
||||
CC.priority = priority
|
||||
C.client_colors |= CC
|
||||
sortTim(C.client_colors, /proc/cmp_clientcolor_priority)
|
||||
C.update_client_color()
|
||||
|
||||
log_and_message_admins("<span class='notice'>gave [key_name(C)] a new client color.</span>")
|
||||
feedback_add_details("admin_verb","CR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
#ifdef ENABLE_SUNLIGHT
|
||||
/client/proc/apply_sunstate()
|
||||
set category = "Fun"
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
/mob/proc/update_client_color()
|
||||
if(!client)
|
||||
return
|
||||
client.color = ""
|
||||
client.color = null
|
||||
if(!client_colors.len)
|
||||
return
|
||||
var/datum/client_color/CC = client_colors[1]
|
||||
@@ -68,4 +68,8 @@
|
||||
|
||||
/datum/client_color/tritanopia
|
||||
client_color = list(0.95,0.07,0, 0,0.44,0.52, 0.05,0.49,0.48)
|
||||
priority = 100
|
||||
priority = 100
|
||||
|
||||
/datum/client_color/vaurca
|
||||
client_color = list(0.3,0,0, 0,0.5,0, 0.5,0,1.5)
|
||||
priority = 101
|
||||
@@ -77,6 +77,7 @@
|
||||
banners["banner, Jargon"] = /obj/item/weapon/flag/jargon
|
||||
banners["banner, NanoTrasen"] = /obj/item/weapon/flag/nanotrasen
|
||||
banners["banner, Eridani Fed"] = /obj/item/weapon/flag/eridani
|
||||
banners["banner, Sedantis"] = /obj/item/weapon/flag/vaurca
|
||||
gear_tweaks += new/datum/gear_tweak/path(banners)
|
||||
|
||||
/datum/gear/flag
|
||||
@@ -94,6 +95,7 @@
|
||||
flags["flag, Jargon"] = /obj/item/weapon/flag/jargon/l
|
||||
flags["flag, NanoTrasen"] = /obj/item/weapon/flag/nanotrasen/l
|
||||
flags["flag, Eridani Fed"] = /obj/item/weapon/flag/eridani/l
|
||||
flags["flag, Sedantis"] = /obj/item/weapon/flag/vaurca/l
|
||||
gear_tweaks += new/datum/gear_tweak/path(flags)
|
||||
|
||||
|
||||
|
||||
@@ -335,7 +335,7 @@
|
||||
body_parts_covered = HANDS
|
||||
slot_flags = SLOT_GLOVES
|
||||
attack_verb = list("challenged")
|
||||
species_restricted = list("exclude","Unathi","Tajara","Vaurca", "Golem","Vaurca Breeder")
|
||||
species_restricted = list("exclude","Unathi","Tajara","Vaurca", "Golem","Vaurca Breeder","Vaurca Warform")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi',
|
||||
"Resomi" = 'icons/mob/species/resomi/gloves.dmi'
|
||||
@@ -435,7 +435,7 @@
|
||||
slot_flags = SLOT_HEAD
|
||||
w_class = 2.0
|
||||
uv_intensity = 50 //Light emitted by this object or creature has limited interaction with diona
|
||||
species_restricted = list("exclude","Vaurca Breeder")
|
||||
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
|
||||
|
||||
var/light_overlay = "helmet_light"
|
||||
var/light_applied
|
||||
@@ -543,7 +543,7 @@
|
||||
"Resomi" = 'icons/mob/species/resomi/masks.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi')
|
||||
species_restricted = list("exclude","Vaurca Breeder")
|
||||
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
|
||||
|
||||
var/voicechange = 0
|
||||
var/list/say_messages
|
||||
@@ -575,7 +575,7 @@
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
force = 0
|
||||
var/overshoes = 0
|
||||
species_restricted = list("exclude","Unathi","Tajara","Vox","Vaurca","Vaurca Breeder")
|
||||
species_restricted = list("exclude","Unathi","Tajara","Vox","Vaurca","Vaurca Breeder","Vaurca Warform")
|
||||
sprite_sheets = list("Vox" = 'icons/mob/species/vox/shoes.dmi')
|
||||
var/silent = 0
|
||||
sprite_sheets = list(
|
||||
@@ -650,7 +650,7 @@
|
||||
var/blood_overlay_type = "suit"
|
||||
siemens_coefficient = 0.9
|
||||
w_class = 3
|
||||
species_restricted = list("exclude","Vaurca Breeder")
|
||||
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi',
|
||||
@@ -690,7 +690,7 @@
|
||||
"Vox" = 'icons/mob/species/vox/uniform.dmi',
|
||||
"Golem" = 'icons/mob/uniform_fat.dmi',
|
||||
"Resomi" = 'icons/mob/species/resomi/uniform.dmi')
|
||||
species_restricted = list("exclude","Vaurca Breeder")
|
||||
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
|
||||
|
||||
//convenience var for defining the icon state for the overlay used when the clothing is worn.
|
||||
//Also used by rolling/unrolling.
|
||||
|
||||
@@ -28,7 +28,8 @@ BLIND // can't see anything
|
||||
var/activated_color = null
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Resomi" = 'icons/mob/species/resomi/eyes.dmi'
|
||||
"Resomi" = 'icons/mob/species/resomi/eyes.dmi',
|
||||
"Vaurca Warform" = 'icons/mob/species/warriorform/eyes.dmi'
|
||||
)
|
||||
species_restricted = list("exclude","Vaurca Breeder")
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Because you really needed another excuse to punch your crewmates."
|
||||
icon_state = "boxing"
|
||||
item_state = "boxing"
|
||||
species_restricted = list("exclude","Vaurca Breeder")
|
||||
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
|
||||
|
||||
/obj/item/clothing/gloves/boxing/attackby(obj/item/weapon/W, mob/user)
|
||||
if(iswirecutter(W) || istype(W, /obj/item/weapon/scalpel))
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
force = 5
|
||||
punch_force = 10
|
||||
clipped = 1
|
||||
species_restricted = list("exclude","Golem","Vaurca Breeder")
|
||||
species_restricted = list("exclude","Golem","Vaurca Breeder","Vaurca Warform")
|
||||
|
||||
/obj/item/clothing/gloves/powerfist/Touch(atom/A, mob/living/user, proximity)
|
||||
if(!proximity)
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
item_state = "magboots"
|
||||
icon_state = "magboots"
|
||||
|
||||
species_restricted = list("Vaurca Breeder")
|
||||
species_restricted = list("Vaurca Breeder","Vaurca Warform")
|
||||
sprite_sheets = list(
|
||||
"Vaurca Breeder" = 'icons/mob/species/breeder/shoes.dmi'
|
||||
)
|
||||
@@ -281,7 +281,7 @@
|
||||
//ZZODDAA
|
||||
/obj/item/clothing/gloves/yellow/typec
|
||||
icon = 'icons/mob/species/breeder/inventory/items.dmi'
|
||||
desc = "A set of form-fitting carapace gauntlets. They appear to be fitted with some robust hydralics."
|
||||
desc = "A set of form-fitting carapace gauntlets. They appear to be fitted with some robust hydraulics."
|
||||
name = "carapace gauntlets"
|
||||
w_class = 5.0
|
||||
icon_state = "forceglove"
|
||||
|
||||
@@ -272,6 +272,21 @@
|
||||
interface_name = "combat chem dispenser"
|
||||
interface_desc = "Dispenses loaded chemicals directly into the bloodstream."
|
||||
|
||||
/obj/item/rig_module/chem_dispenser/vaurca
|
||||
|
||||
name = "vaurca combat chemical injector"
|
||||
desc = "A complex web of tubing and needles suitable for vaurcan hardsuit use."
|
||||
|
||||
charges = list(
|
||||
list("synaptizine", "synaptizine", 0, 30),
|
||||
list("hyperzine", "hyperzine", 0, 30),
|
||||
list("oxycodone", "oxycodone", 0, 30),
|
||||
list("phoron", "phoron", 0, 60),
|
||||
list("kois", "k'ois paste", 0, 80)
|
||||
)
|
||||
|
||||
interface_name = "vaurca combat chem dispenser"
|
||||
interface_desc = "Dispenses loaded chemicals directly into the bloodstream."
|
||||
|
||||
/obj/item/rig_module/chem_dispenser/injector
|
||||
|
||||
@@ -636,6 +651,7 @@
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/rig_module/cooling_unit
|
||||
name = "mounted cooling unit"
|
||||
toggleable = 1
|
||||
@@ -660,4 +676,64 @@
|
||||
|
||||
H.bodytemperature -= temp_adj
|
||||
active_power_cost = round((temp_adj/max_cooling)*charge_consumption)
|
||||
return active_power_cost
|
||||
return active_power_cost
|
||||
|
||||
/obj/item/rig_module/boring
|
||||
name = "burrowing lasers"
|
||||
desc = "A set of precise boring lasers designed to carve a hole beneath the user."
|
||||
icon_state = "actuators"
|
||||
interface_name = "boring laser"
|
||||
interface_desc = "Allows you to burrow to the z-level below."
|
||||
|
||||
disruptive = 1
|
||||
|
||||
use_power_cost = 5
|
||||
module_cooldown = 25
|
||||
|
||||
usable = 1
|
||||
|
||||
/obj/item/rig_module/boring/engage()
|
||||
if (!..())
|
||||
return 0
|
||||
|
||||
playsound(src,'sound/magic/lightningbolt.ogg',60,1)
|
||||
var/turf/T = get_turf(holder.wearer)
|
||||
if(istype(T, /turf/simulated))
|
||||
if(istype(T, /turf/simulated/mineral) || istype(T, /turf/simulated/wall) || istype(T, /turf/simulated/shuttle))
|
||||
T.ChangeTurf(T.baseturf)
|
||||
else
|
||||
T.ChangeTurf(/turf/space)
|
||||
|
||||
|
||||
|
||||
var/global/list/lattice_users = list()
|
||||
|
||||
/obj/item/rig_module/lattice
|
||||
name = "neural lattice"
|
||||
desc = "A probing mind collar that synchronizes the subject's pain receptors with all other neural lattices on the local grid."
|
||||
icon_state = "actuators"
|
||||
interface_name = "neural lattice"
|
||||
interface_desc = "Synchronize neural lattice to reduce pain."
|
||||
|
||||
disruptive = 0
|
||||
|
||||
toggleable = 1
|
||||
confined_use = 1
|
||||
|
||||
|
||||
/obj/item/rig_module/lattice/activate()
|
||||
if (!..())
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/H = holder.wearer
|
||||
H << "<span class='notice'>Neural lattice engaged. Pain receptors altered.</span>"
|
||||
lattice_users.Add(H)
|
||||
|
||||
/obj/item/rig_module/lattice/deactivate()
|
||||
if (!..())
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/H = holder.wearer
|
||||
H << "<span class='notice'>Neural lattice disengaged. Pain receptors restored.</span>"
|
||||
lattice_users.Remove(H)
|
||||
|
||||
|
||||
@@ -51,7 +51,8 @@
|
||||
resilience = 0.2
|
||||
can_breach = 1
|
||||
sprite_sheets = list("Tajara" = 'icons/mob/species/tajaran/suit.dmi',"Unathi" = 'icons/mob/species/unathi/suit.dmi')
|
||||
species_restricted = list("exclude","Diona","Xenomorph","Vaurca","Golem", "Vox")
|
||||
species_restricted = list("exclude","Diona","Xenomorph","Golem","Vaurca","Vox")
|
||||
|
||||
supporting_limbs = list()
|
||||
|
||||
//TODO: move this to modules
|
||||
|
||||
@@ -35,3 +35,43 @@
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/unathi
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/rig/vaurca
|
||||
name = "combat exoskeleton control module"
|
||||
desc = "An ancient piece of equipment from a bygone age, This highly advanced Vaurcan technology rarely sees use outside of a battlefield."
|
||||
suit_type = "combat exoskeleton"
|
||||
icon_state = "vaurca_rig"
|
||||
armor = list(melee = 65, bullet = 65, laser = 100, energy = 100, bomb = 90, bio = 100, rad = 80)
|
||||
vision_restriction = 0
|
||||
slowdown = 2
|
||||
offline_slowdown = 3
|
||||
|
||||
chest_type = /obj/item/clothing/suit/space/rig/vaurca
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/vaurca
|
||||
boot_type = /obj/item/clothing/shoes/magboots/rig/vaurca
|
||||
air_type = /obj/item/weapon/tank/phoron
|
||||
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy)
|
||||
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/actuators/combat,
|
||||
/obj/item/rig_module/vision/thermal,
|
||||
/obj/item/rig_module/device/flash,
|
||||
/obj/item/rig_module/chem_dispenser/vaurca,
|
||||
/obj/item/rig_module/boring,
|
||||
/obj/item/rig_module/lattice
|
||||
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/vaurca
|
||||
species_restricted = list("Vaurca")
|
||||
light_overlay = "helmet_light_dual_green"
|
||||
light_color = "#3e7c3e"
|
||||
|
||||
/obj/item/clothing/suit/space/rig/vaurca
|
||||
species_restricted = list("Vaurca")
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/vaurca
|
||||
species_restricted = list("Vaurca")
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
sprite_sheets_refit = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/helmet.dmi'
|
||||
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
|
||||
"Vaurca" = 'icons/mob/species/vaurca/helmet.dmi'
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi',
|
||||
@@ -40,7 +41,8 @@
|
||||
sprite_sheets_refit = list(
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/suit.dmi'
|
||||
"Skrell" = 'icons/mob/species/skrell/suit.dmi',
|
||||
"Vaurca" = 'icons/mob/species/vaurca/suit.dmi'
|
||||
)
|
||||
sprite_sheets_obj = list(
|
||||
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi',
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
simulated = 0
|
||||
blend_mode = BLEND_MULTIPLY
|
||||
appearance_flags = NO_CLIENT_COLOR
|
||||
|
||||
var/needs_update = FALSE
|
||||
|
||||
|
||||
@@ -513,7 +513,19 @@ var/list/mineral_can_smooth_with = list(
|
||||
)
|
||||
mineralChance = 75
|
||||
|
||||
/turf/simulated/mineral/attack_hand(var/mob/user)
|
||||
add_fingerprint(user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H
|
||||
var/turf/destination = GetAbove(H)
|
||||
|
||||
if(destination)
|
||||
var/turf/start = get_turf(H)
|
||||
if(start.CanZPass(H, UP))
|
||||
if(destination.CanZPass(H, UP))
|
||||
H.climb(UP, src, 20)
|
||||
|
||||
/**********************Asteroid**************************/
|
||||
|
||||
|
||||
@@ -1296,6 +1296,9 @@
|
||||
if (src.is_diona())
|
||||
setup_gestalt(1)
|
||||
|
||||
burn_mod = species.burn_mod
|
||||
brute_mod = species.brute_mod
|
||||
|
||||
max_stamina = species.stamina
|
||||
stamina = max_stamina
|
||||
sprint_speed_factor = species.sprint_speed_factor
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/adjustBruteLoss(var/amount)
|
||||
amount = amount*species.brute_mod
|
||||
amount *= brute_mod
|
||||
if(amount > 0)
|
||||
take_overall_damage(amount, 0)
|
||||
else
|
||||
@@ -110,7 +110,7 @@
|
||||
BITSET(hud_updateflag, HEALTH_HUD)
|
||||
|
||||
/mob/living/carbon/human/adjustFireLoss(var/amount)
|
||||
amount = amount*species.burn_mod
|
||||
amount *= burn_mod
|
||||
if(amount > 0)
|
||||
take_overall_damage(0, amount)
|
||||
else
|
||||
@@ -118,7 +118,7 @@
|
||||
BITSET(hud_updateflag, HEALTH_HUD)
|
||||
|
||||
/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
|
||||
amount = amount*species.brute_mod
|
||||
amount *= brute_mod
|
||||
if (organ_name in organs_by_name)
|
||||
var/obj/item/organ/external/O = get_organ(organ_name)
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
BITSET(hud_updateflag, HEALTH_HUD)
|
||||
|
||||
/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
|
||||
amount = amount*species.burn_mod
|
||||
amount *= burn_mod
|
||||
if (organ_name in organs_by_name)
|
||||
var/obj/item/organ/external/O = get_organ(organ_name)
|
||||
|
||||
@@ -245,6 +245,23 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/adjustHalLoss(var/amount, var/ignoreImmunity = 0)//An inherited version so this doesnt affect cyborgs
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
if(!ignoreImmunity)//Adjusting how hallloss works. Species with the NO_PAIN flag will suffer most of the effects of halloss, but will be immune to most conventional sources of accumulating it
|
||||
if (species && species.flags & NO_PAIN)//Species with this flag will only gather halloss through species-specific mechanics, which apply it with the ignoreImmunity flag
|
||||
return 0
|
||||
|
||||
if(wearing_rig) //I don't know if this is the best way, but I'm hard-pressed to think of a different way. Thanks Vaurca.
|
||||
for(var/obj/item/rig_module/lattice/L in wearing_rig.installed_modules)
|
||||
if(L.active && lattice_users.len)
|
||||
amount = amount / (lattice_users.len + 1)
|
||||
for(var/mob/living/carbon/human/H in lattice_users)
|
||||
if(H != src)
|
||||
H.setHalLoss(min(max(H.getHalLoss() + amount, 0),(H.maxHealth*2)))
|
||||
H << "<span class='danger'>Your neural lattice buzzes, filling your mind with pain!</span>"
|
||||
|
||||
halloss = min(max(halloss + amount, 0),(maxHealth*2))
|
||||
|
||||
////////////////////////////////////////////
|
||||
|
||||
//Returns a list of damaged organs
|
||||
|
||||
@@ -566,3 +566,189 @@
|
||||
G.affecting.forceMove(locate(T.x + rand(-1,1), T.y + rand(-1,1), T.z))
|
||||
else
|
||||
qdel(G)
|
||||
|
||||
/mob/living/carbon/human/proc/trample()
|
||||
set category = "Abilities"
|
||||
set name = "Trample"
|
||||
set desc = "Charge forward, trampling anything in your path until you hit something more stubborn than you are."
|
||||
|
||||
if(last_special > world.time)
|
||||
to_chat(src, "<span class='danger'>You are too tired to charge!.</span>")
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
to_chat(src, "<span class='danger'>You cannot charge in your current state!.</span>")
|
||||
return
|
||||
|
||||
last_special = world.time
|
||||
|
||||
src.visible_message("<span class='warning'>\The [src] takes a step backwards and rears up.</span>",
|
||||
"<span class='notice'>You take a step backwards and then...</span>")
|
||||
if(do_after(src,5))
|
||||
playsound(loc, 'sound/species/shadow/grue_screech.ogg', 100, 1)
|
||||
src.visible_message("<span class='danger'>\The [src] charges!</span>")
|
||||
trampling()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/trampling()
|
||||
|
||||
var/brokesomething = 0//true if we break anything
|
||||
var/done = 0//Set true if we fail to break something. We won't try to break anything for the rest of the proc
|
||||
|
||||
var/turf/target = get_step(src, dir)
|
||||
|
||||
for(var/obj/obstacle in get_turf(src))
|
||||
if((obstacle.flags & ON_BORDER) && (src != obstacle))
|
||||
if(!obstacle.CheckExit(src, target))
|
||||
brokesomething++
|
||||
if (!crash_into(obstacle))
|
||||
done = 1
|
||||
|
||||
if (!done && !target.CanPass(src, target))
|
||||
crash_into(target)
|
||||
brokesomething++
|
||||
if (!target.CanPass(src, target))
|
||||
done = 1
|
||||
|
||||
if (!done)
|
||||
for (var/atom/A in target)
|
||||
if (A.density && A != src && A.loc != src)
|
||||
brokesomething++
|
||||
if (!crash_into(A))
|
||||
done = 1
|
||||
if(istype(A, /mob/living) && !A.density)
|
||||
brokesomething++
|
||||
crash_into(A)
|
||||
|
||||
if (brokesomething)
|
||||
playsound(get_turf(target), 'sound/weapons/heavysmash.ogg', 100, 1)
|
||||
attack_log += "\[[time_stamp()]\]<font color='red'>crashed into [brokesomething] objects at ([target.x];[target.y];[target.z]) </font>"
|
||||
msg_admin_attack("[key_name(src)] crashed into [brokesomething] objects at (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>)" )
|
||||
|
||||
if (!done && target.Enter(src, null))
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
return 0
|
||||
|
||||
step(src, dir)
|
||||
playsound(src,'sound/mecha/mechstep.ogg',25,1)
|
||||
if (brokesomething)
|
||||
src.visible_message("<span class='danger'>[src.name] breaks through!</span>")
|
||||
addtimer(CALLBACK(src, .proc/trampling), 1)
|
||||
|
||||
else
|
||||
target = get_step(src, dir)
|
||||
do_attack_animation(target)
|
||||
|
||||
/mob/living/carbon/human/proc/crash_into(var/atom/A)
|
||||
var/aname = A.name
|
||||
var/oldtype = A.type
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
return 0
|
||||
|
||||
if (istype(A, /mob/living))
|
||||
var/mob/living/M = A
|
||||
attack_log += "\[[time_stamp()]\]<font color='red'> Crashed into [key_name(M)]</font>"
|
||||
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Was rammed by [key_name(src)]</font>"
|
||||
msg_admin_attack("[key_name(src)] crashed into [key_name(M)] at (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>)" )
|
||||
|
||||
A.ex_act(2)
|
||||
|
||||
sleep(1)
|
||||
if (A && !(A.gcDestroyed) && A.type == oldtype)
|
||||
src.visible_message("<span class='danger'>[src.name] plows into \the [aname]!</span>")
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/rebel_yell()
|
||||
set category = "Abilities"
|
||||
set name = "Screech"
|
||||
set desc = "Emit a powerful screech which stuns hearers in a two-tile radius."
|
||||
|
||||
if(last_special > world.time)
|
||||
to_chat(src, "<span class='danger'>You are too tired to screech!.</span>")
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened)
|
||||
to_chat(src, "<span class='danger'>You cannot screech in your current state!.</span>")
|
||||
return
|
||||
|
||||
last_special = world.time
|
||||
|
||||
visible_message("<span class='danger'>[src.name] lets out an ear piercing shriek!</span>",
|
||||
"<span class='danger'>You let out an ear-shattering shriek!</span>",
|
||||
"<span class='danger'>You hear a painfully loud shriek!</span>")
|
||||
|
||||
var/list/victims = list()
|
||||
|
||||
for (var/mob/living/carbon/human/T in hearers(2, src))
|
||||
if (T == src)
|
||||
continue
|
||||
|
||||
if (istype(T) && (T:l_ear || T:r_ear) && istype((T:l_ear || T:r_ear), /obj/item/clothing/ears/earmuffs))
|
||||
continue
|
||||
|
||||
if (!vampire_can_affect_target(T, 0))
|
||||
continue
|
||||
|
||||
to_chat(T, "<span class='danger'>You hear an ear piercing shriek and feel your senses go dull!</span>")
|
||||
T.Weaken(5)
|
||||
T.ear_deaf = 20
|
||||
T.stuttering = 20
|
||||
T.Stun(5)
|
||||
|
||||
victims += T
|
||||
|
||||
for (var/obj/structure/window/W in view(2))
|
||||
W.shatter()
|
||||
|
||||
for (var/obj/machinery/light/L in view(4))
|
||||
L.broken()
|
||||
|
||||
playsound(loc, 'sound/voice/shriek1.ogg', 100, 1)
|
||||
|
||||
if (victims.len)
|
||||
admin_attacker_log_many_victims(src, victims, "used rebel yell to stun", "was stunned by [key_name(src)] using rebel yell", "used rebel yell to stun")
|
||||
|
||||
/mob/living/carbon/human/proc/formic_spray()
|
||||
set category = "Abilities"
|
||||
set name = "Napalm"
|
||||
set desc = "Spew a cone of ignited napalm in front of you"
|
||||
|
||||
if(last_special > world.time)
|
||||
to_chat(src,"<span class='notice'>You are too tired to spray napalm.</span>")
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
to_chat(src,"<span class='notice'>You cannot spray napalm in your current state.</span>")
|
||||
return
|
||||
|
||||
last_special = world.time
|
||||
playsound(loc, 'sound/species/shadow/grue_screech.ogg', 100, 1)
|
||||
visible_message("<span class='danger'>\The [src] unleashes a torrent of raging flame!</span>",
|
||||
"<span class='danger'>You unleash a gust of fire!</span>",
|
||||
"<span class='danger'>You hear the roar of an inferno!</span>")
|
||||
|
||||
var/turf/T = get_step(get_step(src, dir), dir)
|
||||
var/turf/T1 = get_step(T, dir)
|
||||
var/turf/T2 = get_step(T1,turn(dir, 90))
|
||||
var/turf/T3 = get_step(T1,turn(dir, -90))
|
||||
var/turf/T4 = get_step(T1, dir)
|
||||
var/turf/T5 = get_step(T2, dir)
|
||||
var/turf/T6 = get_step(T3, dir)
|
||||
var/turf/T7 = get_step(T5,turn(dir, 90))
|
||||
var/turf/T8 = get_step(T6,turn(dir, -90))
|
||||
var/list/the_targets = list(T,T1,T2,T3,T4,T5,T6,T7,T8)
|
||||
|
||||
playsound(src.loc, 'sound/magic/Fireball.ogg', 200, 1)
|
||||
for(var/turf/FuelSpot in the_targets)
|
||||
spawn(0)
|
||||
var/obj/effect/effect/water/firewater/D = new/obj/effect/effect/water/firewater(get_turf(get_step(src, dir)))
|
||||
var/turf/my_target = FuelSpot
|
||||
D.create_reagents(200)
|
||||
if(!src)
|
||||
return
|
||||
D.reagents.add_reagent("greekfire", 200)
|
||||
D.set_color()
|
||||
D.set_up(my_target, rand(6,8), 1, 50)
|
||||
return
|
||||
|
||||
@@ -78,6 +78,14 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
|
||||
/mob/living/carbon/human/type_c
|
||||
layer = 5
|
||||
|
||||
/mob/living/carbon/human/type_big/Initialize(mapload)
|
||||
. = ..(mapload, "Vaurca Warform")
|
||||
src.gender = NEUTER
|
||||
src.mutations.Add(HULK)
|
||||
|
||||
/mob/living/carbon/human/type_big
|
||||
layer = 5
|
||||
|
||||
/mob/living/carbon/human/msai_tajara/Initialize(mapload)
|
||||
h_style = "Tajaran Ears"
|
||||
. = ..(mapload, "M'sai Tajara")
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
var/icon_x_offset = 0
|
||||
var/icon_y_offset = 0
|
||||
var/eyes = "eyes_s" // Icon for eyes.
|
||||
var/eyes_icons = 'icons/mob/human_face/eyes.dmi' // DMI file for eyes, mostly for none 32x32 species.
|
||||
var/has_floating_eyes // Eyes will overlay over darkness (glow)
|
||||
var/eyes_icon_blend = ICON_ADD // The icon blending mode to use for eyes.
|
||||
var/blood_color = "#A10808" // Red.
|
||||
@@ -70,11 +71,12 @@
|
||||
var/radiation_mod = 1 // Radiation modifier
|
||||
var/flash_mod = 1 // Stun from blindness modifier.
|
||||
var/fall_mod = 1 // Fall damage modifier, further modified by brute damage modifier
|
||||
var/vision_flags = DEFAULT_SIGHT // Same flags as glasses.
|
||||
var/vision_flags = DEFAULT_SIGHT // Same flags as glasses.
|
||||
var/inherent_eye_protection // If set, this species has this level of inherent eye protection.
|
||||
var/eyes_are_impermeable = FALSE // If TRUE, this species' eyes are not damaged by phoron.
|
||||
var/list/breakcuffs = list() //used in resist.dm to check if they can break hand/leg cuffs
|
||||
|
||||
var/list/breakcuffs = list() //used in resist.dm to check if they can break hand/leg cuffs
|
||||
var/natural_climbing = FALSE //If true, the species always succeeds at climbing.
|
||||
var/climb_coeff = 1.25 //The coefficient to the climbing speed of the individual = 60 SECONDS * climb_coeff
|
||||
// Death vars.
|
||||
var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
|
||||
var/gibber_type = /obj/effect/gibspawner/human
|
||||
|
||||
@@ -115,3 +115,36 @@
|
||||
step_away(target,user,15)
|
||||
sleep(1)
|
||||
target.apply_effect(attack_damage * 0.4, WEAKEN, armour)
|
||||
|
||||
/datum/unarmed_attack/claws/cleave
|
||||
attack_verb = list("cleaved", "plowed", "swiped")
|
||||
attack_noun = list("massive claws")
|
||||
damage = 25
|
||||
sharp = 1
|
||||
edge = 1
|
||||
attack_name = "massive claws"
|
||||
shredding = 1
|
||||
|
||||
/datum/unarmed_attack/claws/cleave/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone)
|
||||
..()
|
||||
var/hit_mobs = 0
|
||||
for(var/mob/living/L in orange(1,user))
|
||||
if(L == user)
|
||||
continue
|
||||
if(L == target)
|
||||
continue
|
||||
L.apply_damage(rand(5,20), BRUTE, zone, armour)
|
||||
to_chat(L, "<span class='danger'>\The [user] [pick(attack_verb)] you with its [attack_noun]!</span>")
|
||||
hit_mobs++
|
||||
if(hit_mobs)
|
||||
to_chat(user, "<span class='danger'>You used \the [attack_noun] to attack [hit_mobs] other target\s!</span>")
|
||||
|
||||
|
||||
/datum/unarmed_attack/bite/mandibles
|
||||
attack_verb = list("mauled","gored","perforated")
|
||||
attack_noun = list("mandibles")
|
||||
damage = 35
|
||||
shredding = 1
|
||||
sharp = 1
|
||||
edge = 1
|
||||
attack_name = "mandibles"
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
fall_mod = 0.5
|
||||
natural_climbing = 1
|
||||
|
||||
spawn_flags = IS_RESTRICTED
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
sprint_speed_factor = 0.9
|
||||
sprint_cost_factor = 0.5
|
||||
|
||||
climb_coeff = 1
|
||||
|
||||
/datum/species/unathi
|
||||
name = "Unathi"
|
||||
short_name = "una"
|
||||
@@ -69,6 +71,7 @@
|
||||
rarity_value = 3
|
||||
breakcuffs = list(MALE)
|
||||
mob_size = 10
|
||||
climb_coeff = 1.35
|
||||
|
||||
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the Uuosa-Eso \
|
||||
system, which roughly translates to 'burning mother'. A relatively recent addition to the galactic stage, they \
|
||||
@@ -326,6 +329,7 @@
|
||||
stamina = -1 // Diona sprinting uses energy instead of stamina
|
||||
sprint_speed_factor = 0.5 //Speed gained is minor
|
||||
sprint_cost_factor = 0.8
|
||||
climb_coeff = 1.3
|
||||
|
||||
/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost)
|
||||
var/datum/dionastats/DS = H.get_dionastats()
|
||||
@@ -657,6 +661,8 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
breath_type = "phoron"
|
||||
poison_type = "nitrogen" //a species that breathes plasma shouldn't be poisoned by it.
|
||||
mob_size = 13 //their half an inch thick exoskeleton and impressive height, plus all of their mechanical organs.
|
||||
natural_climbing = TRUE
|
||||
climb_coeff = 0.75
|
||||
|
||||
blurb = "Type A are the most common type of Vaurca and can be seen as the 'backbone' of Vaurcae societies. Their most prevalent feature is their hardened exoskeleton, varying in colors \
|
||||
in accordance to their hive. It is approximately half an inch thick among all Type A Vaurca. The carapace provides protection against harsh radiation, solar \
|
||||
@@ -701,15 +707,15 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
has_organ = list(
|
||||
"neural socket" = /obj/item/organ/vaurca/neuralsocket,
|
||||
"lungs" = /obj/item/organ/lungs,
|
||||
"lungs" = /obj/item/organ/lungs/vaurca,
|
||||
"filtration bit" = /obj/item/organ/vaurca/filtrationbit,
|
||||
"right heart" = /obj/item/organ/heart/right,
|
||||
"left heart" = /obj/item/organ/heart/left,
|
||||
"phoron reserve tank" = /obj/item/organ/vaurca/preserve,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/brain,
|
||||
"eyes" = /obj/item/organ/eyes
|
||||
"liver" = /obj/item/organ/liver/vaurca,
|
||||
"kidneys" = /obj/item/organ/kidneys/vaurca,
|
||||
"brain" = /obj/item/organ/brain/vaurca,
|
||||
"eyes" = /obj/item/organ/eyes/vaurca
|
||||
)
|
||||
|
||||
/datum/species/bug/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
@@ -723,8 +729,8 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
var/obj/item/clothing/mask/breath/M = new /obj/item/clothing/mask/breath(H)
|
||||
if(H.equip_to_slot_or_del(M, slot_wear_mask))
|
||||
M.autodrobe_no_remove = 1
|
||||
H.gender = NEUTER
|
||||
|
||||
/datum/species/bug/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.gender = NEUTER
|
||||
H.add_client_color(/datum/client_color/vaurca)
|
||||
return ..()
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
stamina = 100 // As opposed to 90
|
||||
brute_mod = 1.1 // Less Brute Damage
|
||||
ethanol_resistance = 1 // Default value
|
||||
climb_coeff = 1.1
|
||||
|
||||
cold_level_1 = 160 //RaceDefault 200 Default 260
|
||||
cold_level_2 = 100 //RaceDefault 140 Default 200
|
||||
|
||||
@@ -47,8 +47,9 @@
|
||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong)
|
||||
rarity_value = 10
|
||||
slowdown = 2
|
||||
eyes = "blank_eyes" //makes it so that eye colour is not changed when skin colour is.
|
||||
brute_mod = 0.2 //note to self: remove is_synthetic checks for brmod and burnmod
|
||||
eyes = "breeder_eyes" //makes it so that eye colour is not changed when skin colour is.
|
||||
eyes_icons = 'icons/mob/human_face/eyes48x48.dmi'
|
||||
brute_mod = 0.1 //note to self: remove is_synthetic checks for brmod and burnmod
|
||||
burn_mod = 0.8 //2x was a bit too much. we'll see how this goes.
|
||||
toxins_mod = 1 //they're not used to all our weird human bacteria.
|
||||
breakcuffs = list(MALE,FEMALE,NEUTER)
|
||||
@@ -58,9 +59,9 @@
|
||||
speech_chance = 100
|
||||
|
||||
death_sound = 'sound/voice/hiss6.ogg'
|
||||
damage_overlays = 'icons/mob/human_races/masks/dam_breeder.dmi'
|
||||
damage_mask = 'icons/mob/human_races/masks/dam_mask_breeder.dmi'
|
||||
blood_mask = 'icons/mob/human_races/masks/blood_breeder.dmi'
|
||||
damage_overlays = 'icons/mob/human_races/masks/dam_mask_warform.dmi'
|
||||
damage_mask = 'icons/mob/human_races/masks/dam_mask_warform.dmi'
|
||||
blood_mask = 'icons/mob/human_races/masks/dam_mask_warform.dmi'
|
||||
|
||||
stamina = 175
|
||||
sprint_speed_factor = 1
|
||||
@@ -80,5 +81,79 @@
|
||||
return
|
||||
|
||||
/datum/species/bug/type_c/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.gender = FEMALE
|
||||
return ..()
|
||||
return
|
||||
|
||||
/datum/species/bug/type_big
|
||||
name = "Vaurca Warform"
|
||||
short_name = "vam"
|
||||
name_plural = "Type BA"
|
||||
bodytype = "Vaurca Warform"
|
||||
primitive_form = "Vaurca Warrior"
|
||||
icon_template = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
|
||||
icobase = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
|
||||
deform = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
|
||||
default_language = LANGUAGE_GIBBERING
|
||||
language = LANGUAGE_VAURCA
|
||||
icon_x_offset = -8
|
||||
unarmed_types = list(/datum/unarmed_attack/claws/cleave, /datum/unarmed_attack/bite/strong)
|
||||
rarity_value = 10
|
||||
slowdown = 0
|
||||
eyes = "warform_eyes"
|
||||
eyes_icons = 'icons/mob/human_face/warform_eyes.dmi'
|
||||
brute_mod = 0.5
|
||||
burn_mod = 0.1
|
||||
toxins_mod = 1
|
||||
total_health = 200
|
||||
breakcuffs = list(MALE,FEMALE,NEUTER)
|
||||
mob_size = 30
|
||||
|
||||
speech_sounds = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
|
||||
speech_chance = 100
|
||||
|
||||
death_sound = 'sound/voice/hiss6.ogg'
|
||||
damage_overlays = 'icons/mob/human_races/masks/dam_breeder.dmi'
|
||||
damage_mask = 'icons/mob/human_races/masks/dam_mask_breeder.dmi'
|
||||
blood_mask = 'icons/mob/human_races/masks/blood_breeder.dmi'
|
||||
|
||||
stamina = 200
|
||||
stamina_recovery = 5
|
||||
sprint_speed_factor = 0.9
|
||||
sprint_cost_factor = 0.5
|
||||
|
||||
heat_level_1 = 1000 //Default 360
|
||||
heat_level_2 = 4000 //Default 400
|
||||
heat_level_3 = 16000 //Default 1000
|
||||
hazard_high_pressure = 55000 //Default 550
|
||||
warning_high_pressure = 3250 //Default 325
|
||||
|
||||
spawn_flags = IS_RESTRICTED
|
||||
flags = NO_SCAN | NO_SLIP | NO_PAIN | NO_BREATHE
|
||||
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/rebel_yell,
|
||||
/mob/living/carbon/human/proc/devour_head,
|
||||
/mob/living/carbon/human/proc/formic_spray,
|
||||
/mob/living/carbon/human/proc/trample
|
||||
)
|
||||
|
||||
has_organ = list(
|
||||
"neural socket" = /obj/item/organ/vaurca/neuralsocket,
|
||||
"lungs" = /obj/item/organ/lungs/vaurca,
|
||||
"right heart" = /obj/item/organ/heart/right,
|
||||
"left heart" = /obj/item/organ/heart/left,
|
||||
"phoron reservoir" = /obj/item/organ/vaurca/reservoir,
|
||||
"mechanical liver" = /obj/item/organ/liver/vaurca/robo,
|
||||
"mechanical kidneys" = /obj/item/organ/kidneys/vaurca/robo,
|
||||
"brain" = /obj/item/organ/brain/vaurca,
|
||||
"eyes" = /obj/item/organ/eyes/vaurca,
|
||||
"filtration bit" = /obj/item/organ/vaurca/filtrationbit
|
||||
)
|
||||
|
||||
/datum/species/bug/type_big/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
return
|
||||
|
||||
/datum/species/bug/type_big/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.mutations.Add(HULK)
|
||||
return ..()
|
||||
@@ -37,6 +37,8 @@
|
||||
sprint_speed_factor = 2
|
||||
sprint_cost_factor = 0.80
|
||||
stamina_recovery = 5
|
||||
natural_climbing = 1
|
||||
climb_coeff = 0.1
|
||||
|
||||
virus_immune = 1
|
||||
|
||||
|
||||
@@ -279,7 +279,7 @@ There are several things that need to be remembered:
|
||||
else
|
||||
base_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
if(!skeleton)
|
||||
if(!(species.flags & NO_SCAN))
|
||||
if(husk)
|
||||
base_icon.ColorTone(husk_color_mod)
|
||||
else if(hulk)
|
||||
|
||||
@@ -250,6 +250,7 @@ default behaviour is:
|
||||
|
||||
/mob/living/proc/adjustBruteLoss(var/amount)
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
amount *= brute_mod
|
||||
bruteloss = min(max(bruteloss + amount, 0),(maxHealth*2))
|
||||
|
||||
/mob/living/proc/getOxyLoss()
|
||||
@@ -279,6 +280,7 @@ default behaviour is:
|
||||
|
||||
/mob/living/proc/adjustFireLoss(var/amount)
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
amount *= burn_mod
|
||||
fireloss = min(max(fireloss + amount, 0),(maxHealth*2))
|
||||
|
||||
/mob/living/proc/getCloneLoss()
|
||||
|
||||
@@ -75,3 +75,6 @@
|
||||
var/tesla_ignore = 0 // If true, mob is not affected by tesla bolts.
|
||||
|
||||
var/stop_sight_update = 0 //If true, it won't reset the mob vision flags
|
||||
|
||||
var/burn_mod = 1
|
||||
var/brute_mod = 1
|
||||
|
||||
@@ -60,12 +60,14 @@
|
||||
/proc/isvaurca(A)
|
||||
if(istype(A, /mob/living/carbon/human))
|
||||
switch(A:get_species())
|
||||
if ("Vaurca Worker")
|
||||
if("Vaurca Worker")
|
||||
return 1
|
||||
if("Vaurca Warrior")
|
||||
return 1
|
||||
if("Vaurca Breeder")
|
||||
return 1
|
||||
if("Vaurca Warform")
|
||||
return 1
|
||||
if("V'krexi")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -126,11 +126,81 @@
|
||||
if(Allow_Spacemove())
|
||||
return TRUE
|
||||
|
||||
if(Check_Shoegrip()) //scaling hull with magboots
|
||||
for(var/turf/simulated/T in RANGE_TURFS(1,src))
|
||||
if(T.density)
|
||||
for(var/turf/simulated/T in RANGE_TURFS(1,src))
|
||||
if(T.density)
|
||||
if(Check_Shoegrip(FALSE))
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/climb(var/direction, var/turf/source, var/climb_bonus)
|
||||
var/turf/destination
|
||||
if(direction == UP)
|
||||
destination = GetAbove(source)
|
||||
else
|
||||
destination = GetBelow(source)
|
||||
|
||||
if(!destination)
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
return
|
||||
|
||||
if(destination.density)
|
||||
return
|
||||
|
||||
visible_message("<span class='notice'>The [src] begins to climb [(direction == UP) ? "upwards" : "downwards"].</span>",
|
||||
"<span class='notice'>You begin to climb [(direction == UP) ? "upwards" : "downwards"].</span>")
|
||||
var/climb_chance = 50
|
||||
var/climb_speed = 45 SECONDS
|
||||
var/will_succeed = FALSE
|
||||
var/turf/stack_turf = get_turf(src) //turf upon which obejcts must be stacked upon to gain vantage
|
||||
var/speed_bonus = 0
|
||||
if(direction == DOWN)
|
||||
stack_turf = destination
|
||||
|
||||
if(species && !species.natural_climbing)
|
||||
for(var/obj/O in stack_turf)
|
||||
if(O.w_class >= 4.0 || O.anchored) //if an object is anchored it's stable footing
|
||||
climb_chance = min(100, climb_chance + O.w_class) //large items increase your reach
|
||||
speed_bonus = min(15, speed_bonus + 1)
|
||||
else
|
||||
climb_chance = max(0, climb_chance - O.w_class) //small items destabilize your footing
|
||||
speed_bonus = max(0, speed_bonus - 1)
|
||||
if(climb_bonus)
|
||||
climb_chance = min(100, climb_chance + climb_bonus)
|
||||
else
|
||||
climb_chance = 100
|
||||
|
||||
if(species && species.climb_coeff)
|
||||
climb_speed = round(max(1, (species.climb_coeff * climb_speed) - speed_bonus), 1)
|
||||
|
||||
if(prob(climb_chance))
|
||||
will_succeed = TRUE
|
||||
|
||||
if(do_after(src, climb_speed, extra_checks = CALLBACK(src, .proc/climb_check, will_succeed, climb_chance, climb_speed, direction, destination)))
|
||||
if(will_succeed)
|
||||
visible_message("<span class='noticed'>\The [src] climbs [(direction == UP) ? "upwards" : "downwards"].</span>",
|
||||
"<span class='noticed'>You climb [(direction == UP) ? "upwards" : "downwards"].</span>")
|
||||
forceMove(destination)
|
||||
return
|
||||
else
|
||||
visible_message("<span class='warning'>\The [src] slips and falls as they climb [(direction == UP) ? "upwards" : "downwards"]!</span>",
|
||||
"<span class='danger'>You slip and fall as you climb [(direction == UP) ? "upwards" : "downwards"]!</span>")
|
||||
if(direction == DOWN)
|
||||
Move(destination)
|
||||
fall_impact(1, damage_mod = min(1, max(0.2, ((100-climb_chance)/100) - 0.2)))
|
||||
|
||||
/mob/living/carbon/human/proc/climb_check(var/success, var/climb_chance, var/speed, var/direction, var/turf/destination) //purely for immersion and variety
|
||||
if((last_special < world.time) && !success) //if you will succeed you can't fail
|
||||
last_special = world.time + speed/10
|
||||
if(prob(100 - climb_chance)) //The worse you are the sooner you'll fail.
|
||||
visible_message("<span class='warning'>\The [src] slips and falls as they climb [(direction == UP) ? "upwards" : "downwards"]!</span>",
|
||||
"<span class='danger'>You slip and fall as you climb [(direction == UP) ? "upwards" : "downwards"]!</span>")
|
||||
if(direction == DOWN)
|
||||
Move(destination)
|
||||
fall_impact(1, damage_mod = min(1, max(0.2, ((100-climb_chance)/100) - 0.2)))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/robot/can_ztravel(var/direction)
|
||||
if(incapacitated() || is_dead())
|
||||
return FALSE
|
||||
@@ -311,7 +381,7 @@
|
||||
* @return TRUE if the proc ran completely. FALSE otherwise. Used to determine
|
||||
* if child procs should continue running or not, really.
|
||||
*/
|
||||
/atom/movable/proc/fall_impact(levels_fallen, stopped_early = FALSE)
|
||||
/atom/movable/proc/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
|
||||
// No gravity, stop falling into spess!
|
||||
var/area/area = get_area(src)
|
||||
if (istype(loc, /turf/space) || (area && !area.has_gravity()))
|
||||
@@ -322,7 +392,7 @@
|
||||
return TRUE
|
||||
|
||||
// Mobs take damage if they fall!
|
||||
/mob/living/fall_impact(levels_fallen, stopped_early = FALSE)
|
||||
/mob/living/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
|
||||
// No gravity, stop falling into spess!
|
||||
var/area/area = get_area(src)
|
||||
if (istype(loc, /turf/space) || (area && !area.has_gravity()))
|
||||
@@ -332,7 +402,7 @@
|
||||
"With a loud thud, you land on \the [loc]!", "You hear a thud!")
|
||||
|
||||
var/z_velocity = 5*(levels_fallen**2)
|
||||
var/damage = ((60 + z_velocity) + rand(-20,20))
|
||||
var/damage = ((60 + z_velocity) + rand(-20,20)) * damage_mod
|
||||
apply_damage(damage, BRUTE)
|
||||
|
||||
// The only piece of duplicate code. I was so close. Soooo close. :ree:
|
||||
@@ -351,7 +421,7 @@
|
||||
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/fall_impact(levels_fallen, stopped_early = FALSE)
|
||||
/mob/living/carbon/human/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
|
||||
// No gravity, stop falling into spess!
|
||||
var/area/area = get_area(src)
|
||||
if (istype(loc, /turf/space) || (area && !area.has_gravity()))
|
||||
@@ -374,7 +444,7 @@
|
||||
"<span class='notice'>You tuck into a roll as you hit \the [loc], minimizing damage!</span>")
|
||||
|
||||
var/z_velocity = 5*(levels_fallen**2)
|
||||
var/damage = (((60 * species.fall_mod) + z_velocity) + rand(-20,20)) * combat_roll
|
||||
var/damage = (((60 * species.fall_mod) + z_velocity) + rand(-20,20)) * combat_roll * damage_mod
|
||||
var/limb_damage = rand(0,damage/2)
|
||||
|
||||
if(prob(30) && combat_roll >= 1) //landed on their head
|
||||
@@ -463,25 +533,25 @@
|
||||
/mob/living/carbon/human/bst/fall_impact()
|
||||
return FALSE
|
||||
|
||||
/obj/mecha/fall_impact(levels_fallen, stopped_early = FALSE)
|
||||
/obj/mecha/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
|
||||
. = ..()
|
||||
if (!.)
|
||||
return
|
||||
|
||||
var/z_velocity = 5*(levels_fallen**2)
|
||||
var/damage = ((60 + z_velocity) + rand(-20,20))
|
||||
var/damage = ((60 + z_velocity) + rand(-20,20)) * damage_mod
|
||||
take_damage(damage)
|
||||
|
||||
playsound(loc, "sound/effects/bang.ogg", 100, 1)
|
||||
playsound(loc, "sound/effects/bamf.ogg", 100, 1)
|
||||
|
||||
/obj/vehicle/fall_impact(levels_fallen, stopped_early = FALSE)
|
||||
/obj/vehicle/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
|
||||
. = ..()
|
||||
if (!.)
|
||||
return
|
||||
|
||||
var/z_velocity = 5*(levels_fallen**2)
|
||||
var/damage = ((60 + z_velocity) + rand(-20,20))
|
||||
var/damage = ((60 + z_velocity) + rand(-20,20)) * damage_mod
|
||||
health -= (damage * brute_dam_coeff)
|
||||
|
||||
playsound(loc, "sound/effects/clang.ogg", 75, 1)
|
||||
|
||||
@@ -206,6 +206,18 @@
|
||||
return
|
||||
return
|
||||
|
||||
/turf/simulated/open/attack_hand(var/mob/user)
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/turf/climbing_wall = GetBelow(H)
|
||||
var/climb_bonus = 0
|
||||
if(istype(climbing_wall, /turf/simulated/mineral))
|
||||
climb_bonus = 20
|
||||
else
|
||||
climb_bonus = 0
|
||||
H.climb(DOWN, src, climb_bonus)
|
||||
|
||||
//Most things use is_plating to test if there is a cover tile on top (like regular floors)
|
||||
/turf/simulated/open/is_plating()
|
||||
return TRUE
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
var/icon/eyes_icon = SSicon_cache.human_eye_cache[cache_key]
|
||||
if (!eyes_icon)
|
||||
eyes_icon = new/icon('icons/mob/human_face/eyes.dmi', species.eyes)
|
||||
eyes_icon = new/icon(species.eyes_icons, species.eyes)
|
||||
if(eyecolor)
|
||||
eyes_icon.Blend(eyecolor, species.eyes_icon_blend)
|
||||
else
|
||||
|
||||
@@ -1,21 +1,59 @@
|
||||
/obj/item/organ/heart/left
|
||||
name = "heart"
|
||||
icon_state = "heart-on"
|
||||
icon_state = "vaurca_heart_l-on"
|
||||
organ_tag = "left heart"
|
||||
parent_organ = "chest"
|
||||
dead_icon = "heart-off"
|
||||
dead_icon = "vaurca_heart_l-off"
|
||||
|
||||
/obj/item/organ/heart/right
|
||||
name = "heart"
|
||||
icon_state = "heart-on"
|
||||
icon_state = "vaurca_heart_r-on"
|
||||
organ_tag = "right heart"
|
||||
parent_organ = "chest"
|
||||
dead_icon = "heart-off"
|
||||
dead_icon = "vaurca_heart_r-off"
|
||||
|
||||
/obj/item/organ/lungs/vaurca
|
||||
icon_state = "lungs_vaurca"
|
||||
|
||||
/obj/item/organ/kidneys/vaurca
|
||||
icon_state = "kidney_vaurca"
|
||||
|
||||
/obj/item/organ/eyes/vaurca
|
||||
icon_state = "eyes_vaurca"
|
||||
|
||||
/obj/item/organ/kidneys/vaurca/robo
|
||||
icon_state = "kidney_vaurca"
|
||||
organ_tag = "mechanical kidneys"
|
||||
robotic = 2
|
||||
|
||||
/obj/item/organ/liver/vaurca/robo
|
||||
icon_state = "liver_vaurca"
|
||||
organ_tag = "mechanical liver"
|
||||
robotic = 2
|
||||
|
||||
/obj/item/organ/liver/vaurca
|
||||
icon_state = "liver_vaurca"
|
||||
|
||||
/obj/item/organ/brain/vaurca
|
||||
icon_state = "brain_vaurca"
|
||||
|
||||
/obj/item/organ/vaurca/reservoir
|
||||
name = "phoron reservoir"
|
||||
organ_tag = "phoron reservoir"
|
||||
parent_organ = "chest"
|
||||
icon_state = "phoron_reservoir"
|
||||
robotic = 1
|
||||
|
||||
/obj/item/organ/vaurca/filtrationbit
|
||||
name = "filtration bit"
|
||||
organ_tag = "filtration bit"
|
||||
parent_organ = "head"
|
||||
icon_state = "filter"
|
||||
robotic = 2
|
||||
|
||||
/obj/item/organ/vaurca/neuralsocket
|
||||
name = "neural socket"
|
||||
organ_tag = "neural socket"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "neural_socket"
|
||||
parent_organ = "head"
|
||||
robotic = 2
|
||||
@@ -43,19 +81,10 @@ obj/item/organ/vaurca/neuralsocket/process()
|
||||
target << "<span class='warning'>Your mind suddenly grows dark as the unity of the Hive is torn from you.</span>"
|
||||
..()
|
||||
|
||||
/obj/item/organ/vaurca/filtrationbit
|
||||
name = "filtration bit"
|
||||
organ_tag = "filtration bit"
|
||||
parent_organ = "head"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "filter"
|
||||
robotic = 2
|
||||
|
||||
/obj/item/organ/vaurca/preserve
|
||||
name = "phoron reserve tank"
|
||||
organ_tag = "phoron reserve tank"
|
||||
parent_organ = "chest"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "breathing_app"
|
||||
robotic = 1
|
||||
var/datum/gas_mixture/air_contents = null
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
can_switch_modes = 0
|
||||
turret_sprite_set = "xray"
|
||||
turret_is_lethal = 1
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/rifle/pulse
|
||||
name = "pulse rifle"
|
||||
desc = "A weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. Because of its complexity and cost, it is rarely seen in use except by specialists."
|
||||
@@ -116,7 +116,7 @@
|
||||
can_switch_modes = 0
|
||||
turret_sprite_set = "pulse"
|
||||
turret_is_lethal = 1
|
||||
|
||||
|
||||
modifystate = null
|
||||
|
||||
firemodes = list(
|
||||
@@ -138,3 +138,30 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/rifle/pulse/destroyer/attack_self(mob/living/user as mob)
|
||||
user << "<span class='warning'>[src.name] has three settings, and they are all DESTROY.</span>"
|
||||
|
||||
/obj/item/weapon/gun/energy/rifle/laser/tachyon
|
||||
name = "tachyon rifle"
|
||||
desc = "A Vaurcan rifle that fires a beam of concentrated faster than light particles, capable of passing through most forms of matter."
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "tachyonrifle"
|
||||
item_state = "tachyonrifle"
|
||||
fire_sound = 'sound/weapons/laser3.ogg'
|
||||
projectile_type = /obj/item/projectile/beam/tachyon
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
|
||||
secondary_projectile_type = null
|
||||
secondary_fire_sound = null
|
||||
can_switch_modes = 0
|
||||
can_turret = 0
|
||||
zoomdevicename = "rifle scope"
|
||||
var/obj/screen/overlay = null
|
||||
|
||||
/obj/item/weapon/gun/energy/rifle/laser/tachyon/verb/scope()
|
||||
set category = "Object"
|
||||
set name = "Use Rifle Scope"
|
||||
set popup_menu = 1
|
||||
|
||||
if(wielded)
|
||||
toggle_scope(2.0, usr)
|
||||
else
|
||||
usr << "<span class='warning'>You can't look through the scope without stabilizing the rifle!</span>"
|
||||
@@ -343,8 +343,14 @@
|
||||
|
||||
toggle_wield(usr)
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/typec/attack(atom/A, mob/living/user, def_zone)
|
||||
return ..() //Pistolwhippin'
|
||||
/obj/item/weapon/gun/energy/vaurca/typec/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
user.setClickCooldown(16)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/typec/pre_attack(var/mob/living/target, var/mob/living/user)
|
||||
if(istype(target))
|
||||
cleave(user, target)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/typec/special_check(var/mob/user)
|
||||
if(is_charging)
|
||||
@@ -371,14 +377,13 @@
|
||||
/obj/item/weapon/gun/energy/vaurca/typec/attack_hand(mob/user as mob)
|
||||
if(loc != user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(H))
|
||||
if(H.species.name == "Vaurca Breeder")
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
|
||||
anchored = 1
|
||||
user << "<span class='notice'>\The [src] is now energised.</span>"
|
||||
icon_state = "megaglaive1"
|
||||
..()
|
||||
return
|
||||
if(H.mob_size >= 30)
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
|
||||
anchored = 1
|
||||
user << "<span class='notice'>\The [src] is now energised.</span>"
|
||||
icon_state = "megaglaive1"
|
||||
..()
|
||||
return
|
||||
user << "<span class='warning'>\The [src] is far too large for you to pick up.</span>"
|
||||
return
|
||||
|
||||
@@ -503,23 +508,19 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/*/obj/item/weapon/gun/energy/vaurca/flamer
|
||||
name = "Vaurcae Incinerator"
|
||||
desc = "A devious flamethrower device that procedurally converts atmosphere to fuel for a virtually unlimited tank."
|
||||
icon_state = "incinerator"
|
||||
item_state = "incinerator"
|
||||
fire_sound = 'sound/effects/extinguish.ogg'
|
||||
charge_meter = 0
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 3
|
||||
force = 10
|
||||
projectile_type = /obj/item/projectile/energy/flamer
|
||||
self_recharge = 1
|
||||
recharge_time = 2
|
||||
max_shots = 80
|
||||
firemodes = list(
|
||||
list(mode_name="spray", burst = 20, burst_delay = -1, fire_delay = 10, dispersion = list(0.5, 0.5, 1.0, 1.0, 1.5, 1.5, 2.0, 2.0, 2.5, 2.5, 3.0, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.0, 6.0)),
|
||||
)*/
|
||||
/obj/item/weapon/gun/energy/vaurca/tachyon
|
||||
name = "tachyon carbine"
|
||||
desc = "A Vaurcan carbine that fires a beam of concentrated faster than light particles, capable of passing through most forms of matter."
|
||||
contained_sprite = 1
|
||||
icon = 'icons/obj/vaurca_items.dmi'
|
||||
icon_state = "tachyoncarbine"
|
||||
item_state = "tachyoncarbine"
|
||||
fire_sound = 'sound/weapons/laser3.ogg'
|
||||
projectile_type = /obj/item/projectile/beam/tachyon
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
|
||||
max_shots = 10
|
||||
fire_delay = 1
|
||||
can_turret = 0
|
||||
|
||||
/obj/item/weapon/gun/energy/tesla
|
||||
name = "tesla gun"
|
||||
|
||||
@@ -339,3 +339,18 @@
|
||||
/obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M)
|
||||
var/obj/item/weapon/energy_net/net = new (get_turf(M))
|
||||
net.throw_impact(M)
|
||||
|
||||
/obj/item/projectile/beam/tachyon
|
||||
name = "particle beam"
|
||||
icon_state = "xray"
|
||||
damage = 25
|
||||
armor_penetration = 65
|
||||
penetrating = 1
|
||||
maiming = 1
|
||||
maim_rate = 5
|
||||
clean_cut = 1
|
||||
maim_type = DROPLIMB_BURN
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/tachyon
|
||||
tracer_type = /obj/effect/projectile/tracer/tachyon
|
||||
impact_type = /obj/effect/projectile/impact/tachyon
|
||||
@@ -234,7 +234,7 @@
|
||||
/datum/reagent/fuel
|
||||
name = "Welding fuel"
|
||||
id = "fuel"
|
||||
description = "Required for welders. Flamable."
|
||||
description = "Required for welders. Flammable."
|
||||
reagent_state = LIQUID
|
||||
color = "#660000"
|
||||
touch_met = 5
|
||||
@@ -256,3 +256,27 @@
|
||||
if(istype(L))
|
||||
L.adjust_fire_stacks(amount / 10) // Splashing people with welding fuel to make them easy to ignite!
|
||||
|
||||
/datum/reagent/fuel/napalm
|
||||
name = "Zo'rane Fire"
|
||||
id = "greekfire"
|
||||
description = "A highly flammable and cohesive gel once used commonly in the tunnels of Sedantis. Napalm sticks to kids."
|
||||
reagent_state = LIQUID
|
||||
color = "#D35908"
|
||||
touch_met = 50
|
||||
taste_description = "fiery death"
|
||||
|
||||
/datum/reagent/fuel/napalm/touch_turf(var/turf/T)
|
||||
new /obj/effect/decal/cleanable/liquid_fuel/napalm(T, volume/3)
|
||||
for(var/mob/living/L in T)
|
||||
L.adjust_fire_stacks(volume / 10)
|
||||
L.add_modifier(/datum/modifier/napalm, MODIFIER_CUSTOM, _strength = 2)
|
||||
remove_self(volume)
|
||||
return
|
||||
|
||||
/datum/reagent/fuel/touch_mob(var/mob/living/L, var/amount)
|
||||
if(istype(L))
|
||||
L.adjust_fire_stacks(amount / 10) // Splashing people with welding fuel to make them easy to ignite!
|
||||
new /obj/effect/decal/cleanable/liquid_fuel/napalm(get_turf(L), amount/3)
|
||||
L.adjustFireLoss(amount / 10)
|
||||
remove_self(volume)
|
||||
L.add_modifier(/datum/modifier/napalm, MODIFIER_CUSTOM, _strength = 2)
|
||||
|
||||
@@ -123,11 +123,6 @@
|
||||
conflicting_reagent = /datum/reagent/toxin/phoron
|
||||
strength = 1
|
||||
|
||||
/datum/reagent/toxin/cardox/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
.. ()
|
||||
if(alien == IS_VAURCA)
|
||||
affect_blood(M, alien, removed * 0.25)
|
||||
|
||||
/datum/reagent/toxin/cardox/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(alien == IS_VAURCA)
|
||||
M.adjustToxLoss(removed * strength*2)
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
# balance
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: LordFowl, BygoneHero, Kyres1
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Added the Sedantis flag."
|
||||
- rscadd: "Added Vaurca variants of softsuits."
|
||||
- rscadd: "Changed Vaurca vision to use client colors."
|
||||
- rscadd: "Added climbing. Click on a wall/open turf to climb. Large and/or anchored items increase your ability to climb. Small items decrease your ability to climb."
|
||||
- rscadd: "Humans and Vaurca are fastest at climbing, and Unathi and Dionaea are the slowest at climbing."
|
||||
- rscadd: "Made Vaurca natural climbers, meaning they can never fail."
|
||||
- rscadd: "Added various event-orientated Vaurca items."
|
||||
- balance: "Vaurca can now wear specially modified softsuits."
|
||||
- rscadd: "Added cleave to energy glaives."
|
||||
- imageadd: "Changes the sprites of all organs in Vaurca to be more alien."
|
||||
- bugfix: "Tweaked client colors, fixing inaccuracies in colorblindedness."
|
||||
- tweak: "Cardox no longer acts as an acid, no longer affecting mobs on touch."
|
||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 342 B |
|
After Width: | Height: | Size: 405 B |
|
After Width: | Height: | Size: 214 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 214 B |
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 538 B |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 233 B |
|
Before Width: | Height: | Size: 333 KiB After Width: | Height: | Size: 335 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 51 KiB |