[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.
This commit is contained in:
LordFowl
2018-07-22 19:17:03 +03:00
committed by Erki
parent b8fd0de694
commit 76372c4b15
84 changed files with 1315 additions and 178 deletions
+1 -1
View File
@@ -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
+1 -1
View File
@@ -152,7 +152,7 @@
/atom/proc/set_dir(new_dir)
. = new_dir != dir
dir = new_dir
// Lighting
if (.)
var/datum/light_source/L
+1 -6
View File
@@ -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
+28 -1
View File
@@ -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
+7 -2
View File
@@ -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
-2
View File
@@ -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)
+261 -4
View File
@@ -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
+3 -1
View File
@@ -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.
+38
View File
@@ -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."
+10
View File
@@ -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)
+43 -1
View File
@@ -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"
+6 -2
View File
@@ -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)
+6 -6
View File
@@ -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.
+2 -1
View File
@@ -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")
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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
+12
View File
@@ -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)
+2
View File
@@ -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
+3 -1
View File
@@ -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
+82 -12
View File
@@ -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)
+12
View File
@@ -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
+1 -1
View File
@@ -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
+43 -14
View File
@@ -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
+29 -2
View File
@@ -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>"
+28 -27
View File
@@ -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)
+48
View File
@@ -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."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 536 B

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 333 KiB

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 51 KiB