Vaurca Content 2 (#426)
Vaurca hivemind language added. Vaurca appropriate name generator added. Tied Vaurca language to their neural socket organ. Added a method for non-Vaurca to intercept the Vaurca hivenet so long as they construct the correct item. Sprites for Vaurca organs. Neutered all Vaurca. Cutting open a Vaurca for surgery now requires heavier equipment. Injecting a Vaurca with a syringe now will take time. Adds various Vaurca cosmetic items available via loadout. Adds a few new burst-fire weapons exploiting the burstfire fix - obtainable via research or adminbus. Ports the ability to stick heads on spears from Paradise-code. Added an error message when trying to bite someone before the cooldown expires. Removed spoken Vaurca language. Heavily nerfed K'ois' properties. Halved the nutrition value of nutriment, returning it to old-code state. Nerfed the damage dealt by bite, while reducing the cooldown. Fixed burstfire weapons spamming attack messages when fired, allowing for more automatic weapons. Fixed Vaurca player ability to select coloured eyes.
@@ -381,6 +381,20 @@
|
||||
|
||||
var/obj/machinery/machine
|
||||
|
||||
/obj/item/weapon/neuralbroke
|
||||
name = "fried neural socket"
|
||||
desc = "A Vaurca neural socket subjected to extreme heat. It's security chip appears to be fried."
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "neuralbroke"
|
||||
|
||||
/obj/item/weapon/neuralbroke/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/screwdriver))
|
||||
new /obj/item/device/encryptionkey/hivenet(user.loc)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "You bypass the fried security chip and extract the encryption key."
|
||||
user << "The fried neural socket crumbles away like dust."
|
||||
qdel(src)
|
||||
|
||||
///////////////////////////////////////Stock Parts /////////////////////////////////
|
||||
|
||||
/obj/item/weapon/storage/part_replacer
|
||||
@@ -410,6 +424,7 @@
|
||||
src.pixel_x = rand(-5.0, 5)
|
||||
src.pixel_y = rand(-5.0, 5)
|
||||
|
||||
|
||||
//Rank 1
|
||||
|
||||
/obj/item/weapon/stock_parts/console_screen
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
slot_flags = SLOT_EARS
|
||||
var/translate_binary = 0
|
||||
var/translate_hive = 0
|
||||
var/translate_hivenet = 0
|
||||
var/syndie = 0
|
||||
var/list/channels = list()
|
||||
|
||||
@@ -28,6 +29,13 @@
|
||||
translate_binary = 1
|
||||
origin_tech = "syndicate=3"
|
||||
|
||||
/obj/item/device/encryptionkey/hivenet
|
||||
name = "hivenet encryption chip"
|
||||
desc = "It appears to be a Vaurca hivenet encryption chip, for localized broadcasts."
|
||||
translate_hivenet = 1
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "neuralchip"
|
||||
|
||||
/obj/item/device/encryptionkey/headset_sec
|
||||
name = "security radio encryption key"
|
||||
icon_state = "sec_cypherkey"
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
slot_flags = SLOT_EARS
|
||||
var/translate_binary = 0
|
||||
var/translate_hive = 0
|
||||
var/translate_hivenet = 0
|
||||
var/obj/item/device/encryptionkey/keyslot1 = null
|
||||
var/obj/item/device/encryptionkey/keyslot2 = null
|
||||
maxf = 1489
|
||||
@@ -48,6 +49,9 @@
|
||||
if (translate_hive)
|
||||
var/datum/language/hivemind = all_languages["Hivemind"]
|
||||
hivemind.broadcast(M, message)
|
||||
if (translate_hivenet)
|
||||
var/datum/language/bug = all_languages["Hivenet"]
|
||||
bug.broadcast(M, message)
|
||||
return null
|
||||
|
||||
return ..()
|
||||
@@ -61,6 +65,10 @@
|
||||
return ..(freq, level)
|
||||
return -1
|
||||
|
||||
/obj/item/device/radio/headset/hivenet
|
||||
translate_hivenet = 1
|
||||
ks1type = /obj/item/device/encryptionkey/hivenet
|
||||
|
||||
/obj/item/device/radio/headset/syndicate
|
||||
origin_tech = "syndicate=3"
|
||||
syndie = 1
|
||||
@@ -279,6 +287,7 @@
|
||||
src.channels = list()
|
||||
src.translate_binary = 0
|
||||
src.translate_hive = 0
|
||||
src.translate_hivenet = 0
|
||||
src.syndie = 0
|
||||
|
||||
if(keyslot1)
|
||||
@@ -294,6 +303,9 @@
|
||||
if(keyslot1.translate_hive)
|
||||
src.translate_hive = 1
|
||||
|
||||
if(keyslot1.translate_hivenet)
|
||||
src.translate_hivenet = 1
|
||||
|
||||
if(keyslot1.syndie)
|
||||
src.syndie = 1
|
||||
|
||||
@@ -310,6 +322,9 @@
|
||||
if(keyslot2.translate_hive)
|
||||
src.translate_hive = 1
|
||||
|
||||
if(keyslot2.translate_hivenet)
|
||||
src.translate_hivenet = 1
|
||||
|
||||
if(keyslot2.syndie)
|
||||
src.syndie = 1
|
||||
|
||||
|
||||
@@ -68,6 +68,9 @@
|
||||
for (var/ch_name in channels)
|
||||
secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
|
||||
|
||||
/obj/item/device/radio/attack_self(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/radio/attack_self(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
@@ -649,4 +652,4 @@
|
||||
return
|
||||
|
||||
/obj/item/device/radio/off
|
||||
listening = 0
|
||||
listening = 0
|
||||
@@ -232,3 +232,49 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
|
||||
default_material = "glass"
|
||||
|
||||
//Putting heads on spears
|
||||
/*bj/item/organ/external/head/attackby(var/obj/item/weapon/W, var/mob/living/user, params)
|
||||
if(istype(W, /obj/item/weapon/material/twohanded/spear))
|
||||
user << "<span class='notice'>You stick the head onto the spear and stand it upright on the ground.</span>"
|
||||
var/obj/structure/headspear/HS = new /obj/structure/headspear(user.loc)
|
||||
var/matrix/M = matrix()
|
||||
src.transform = M
|
||||
user.drop_item()
|
||||
src.loc = HS
|
||||
var/image/IM = image(src.icon,src.icon_state)
|
||||
IM.overlays = src.overlays.Copy()
|
||||
HS.overlays += IM
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
return
|
||||
return ..()*/
|
||||
|
||||
/obj/item/weapon/material/twohanded/spear/attackby(var/obj/item/I, var/mob/living/user)
|
||||
if(istype(I, /obj/item/organ/external/head))
|
||||
user << "<span class='notice'>You stick the head onto the spear and stand it upright on the ground.</span>"
|
||||
var/obj/structure/headspear/HS = new /obj/structure/headspear(user.loc)
|
||||
var/matrix/M = matrix()
|
||||
I.transform = M
|
||||
usr.drop_item()
|
||||
I.loc = HS
|
||||
var/image/IM = image(I.icon,I.icon_state)
|
||||
IM.overlays = I.overlays.Copy()
|
||||
HS.overlays += IM
|
||||
qdel(src)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/structure/headspear
|
||||
name = "head on a spear"
|
||||
desc = "How barbaric."
|
||||
icon_state = "headspear"
|
||||
density = 0
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/headspear/attack_hand(mob/living/user)
|
||||
user.visible_message("<span class='warning'>[user] kicks over \the [src]!</span>", "<span class='danger'>You kick down \the [src]!</span>")
|
||||
new /obj/item/weapon/material/twohanded/spear(user.loc)
|
||||
for(var/obj/item/organ/external/head/H in src)
|
||||
H.loc = user.loc
|
||||
qdel(src)
|
||||
@@ -56,6 +56,35 @@
|
||||
"<span class='danger'>\The [user] is falling on the [src.name]! It looks like [tempgender] trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/energy/glaive
|
||||
name = "energy glaive"
|
||||
desc = "An energized glaive."
|
||||
icon_state = "eglaive0"
|
||||
active_force = 60
|
||||
active_throwforce = 60
|
||||
active_w_class = 5
|
||||
force = 20
|
||||
throwforce = 30
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
w_class = 5
|
||||
flags = CONDUCT | NOSHIELD | NOBLOODY
|
||||
origin_tech = "magnets=3;combat=4;syndicate=4"
|
||||
attack_verb = list("stabbed", "chopped", "sliced", "cleaved", "slashed", "cut")
|
||||
sharp = 1
|
||||
edge = 1
|
||||
slot_flags = SLOT_BACK
|
||||
|
||||
/obj/item/weapon/melee/energy/glaive/activate(mob/living/user)
|
||||
..()
|
||||
icon_state = "eglaive1"
|
||||
user << "\blue \The [src] is now energised."
|
||||
|
||||
/obj/item/weapon/melee/energy/glaive/deactivate(mob/living/user)
|
||||
..()
|
||||
icon_state = initial(icon_state)
|
||||
user << "\blue \The [src] is de-energised."
|
||||
|
||||
/*
|
||||
* Energy Axe
|
||||
*/
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
return
|
||||
*/
|
||||
..()
|
||||
|
||||
|
||||
//Please don't clutter the parent storage item with stupid hacks.
|
||||
can_be_inserted(obj/item/W as obj, stop_messages = 0)
|
||||
if(istype(W, /obj/item/weapon/storage/backpack/holding))
|
||||
@@ -166,6 +166,12 @@
|
||||
desc = "It's an orange backpack which was designed to hold beakers, pill bottles and bottles."
|
||||
icon_state = "chempack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/cloak
|
||||
name = "tunnel cloak"
|
||||
desc = "It's a Vaurca cloak, with paltry storage options."
|
||||
icon_state = "cape"
|
||||
max_storage_space = 12
|
||||
|
||||
/*
|
||||
* Satchel Types
|
||||
*/
|
||||
|
||||
@@ -1397,6 +1397,8 @@ datum/preferences
|
||||
ShowChoices(user)
|
||||
|
||||
if("eyes")
|
||||
if(species == "Vaurca")
|
||||
return
|
||||
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(r_eyes, g_eyes, b_eyes)) as color|null
|
||||
if(new_eyes)
|
||||
r_eyes = hex2num(copytext(new_eyes, 2, 4))
|
||||
|
||||
@@ -320,6 +320,12 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_glasses
|
||||
allowed_roles = list("Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain")
|
||||
|
||||
/datum/gear/blindfold
|
||||
display_name = "vaurca blindfold"
|
||||
path = /obj/item/clothing/glasses/sunglasses/blinders
|
||||
cost = 2
|
||||
slot = slot_glasses
|
||||
|
||||
// Mask
|
||||
|
||||
/datum/gear/sterilemask
|
||||
@@ -342,6 +348,12 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
|
||||
/datum/gear/gearharness
|
||||
display_name = "gear harness"
|
||||
path = /obj/item/clothing/under/gearharness
|
||||
slot = slot_w_uniform
|
||||
cost = 2
|
||||
|
||||
/datum/gear/kilt
|
||||
display_name = "kilt"
|
||||
path = /obj/item/clothing/under/kilt
|
||||
@@ -1241,6 +1253,12 @@ var/global/list/gear_datums = list()
|
||||
sort_category = "misc"
|
||||
cost = 1
|
||||
|
||||
/datum/gear/cape
|
||||
display_name = " tunnel cloak"
|
||||
path = /obj/item/weapon/storage/backpack/cloak
|
||||
sort_category = "misc"
|
||||
cost = 1
|
||||
|
||||
/datum/gear/zippo
|
||||
display_name = "zippo"
|
||||
path = /obj/item/weapon/flame/lighter/zippo
|
||||
|
||||
@@ -207,7 +207,12 @@
|
||||
desc = "Covers the eyes, preventing sight."
|
||||
icon_state = "blindfold"
|
||||
item_state = "blindfold"
|
||||
//vision_flags = BLIND // This flag is only supposed to be used if it causes permanent blindness, not temporary because of glasses
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/blinders
|
||||
name = "Vaurcae Blinders"
|
||||
desc = "Specially designed Vaurca blindfold, designed to let in just enough light to see."
|
||||
icon_state = "blinders"
|
||||
item_state = "blinders"
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/prescription
|
||||
name = "prescription sunglasses"
|
||||
|
||||
@@ -5,6 +5,13 @@
|
||||
worn_state = "red_pyjamas"
|
||||
item_state = "w_suit"
|
||||
|
||||
/obj/item/clothing/under/gearharness
|
||||
name = "gear harness"
|
||||
desc = "Tight fitting gear harness."
|
||||
icon_state = "harness"
|
||||
worn_state = "harness"
|
||||
item_state = "w_suit"
|
||||
|
||||
/obj/item/clothing/under/pj/blue
|
||||
name = "blue pj's"
|
||||
desc = "Sleepwear."
|
||||
@@ -513,7 +520,7 @@
|
||||
|
||||
/obj/item/clothing/under/blazer
|
||||
name = "blue blazer"
|
||||
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
|
||||
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
|
||||
icon_state = "blue_blazer"
|
||||
item_state = "blue_blazer"
|
||||
worn_state = "blue_blazer"
|
||||
worn_state = "blue_blazer"
|
||||
|
||||
@@ -1021,4 +1021,21 @@ I said no!
|
||||
|
||||
/datum/recipe/cake/brain
|
||||
items = list(/obj/item/organ/brain)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
|
||||
|
||||
/datum/recipe/vaurca/friedkois
|
||||
fruit = list("koisspore" = 1)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/friedkois
|
||||
|
||||
/datum/recipe/vaurca/koiswaffles
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/koissoup)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/koiswaffles
|
||||
|
||||
/datum/recipe/vaurca/koisjelly
|
||||
fruit = list("koisspore" = 2)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/koissoup)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/koisjelly
|
||||
|
||||
/datum/recipe/vaurca/neuralbroke
|
||||
items = list(/obj/item/organ/vaurca/neuralsocket)
|
||||
result = /obj/item/weapon/neuralbroke
|
||||
@@ -2,4 +2,7 @@
|
||||
plantname = "ambrosia"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
|
||||
plantname = "ambrosiadeus"
|
||||
plantname = "ambrosiadeus"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/kois
|
||||
plantname = "koisspore"
|
||||
@@ -328,22 +328,22 @@
|
||||
seed_noun = "spores"
|
||||
display_name = "k'ois spores"
|
||||
mutants = null
|
||||
chems = list("koispaste" = list(25))
|
||||
chems = list("koispaste" = list(5))
|
||||
splat_type = /obj/effect/plant
|
||||
kitchen_tag = "koisspore"
|
||||
|
||||
/datum/seed/koisspore/New()
|
||||
..()
|
||||
set_trait(TRAIT_SPREAD,1) //remove!
|
||||
set_trait(TRAIT_MATURATION,5)
|
||||
set_trait(TRAIT_PRODUCTION,1)
|
||||
set_trait(TRAIT_YIELD,8)
|
||||
set_trait(TRAIT_POTENCY,60)
|
||||
set_trait(TRAIT_BIOLUM,1)
|
||||
set_trait(TRAIT_CARNIVOROUS,1)
|
||||
set_trait(TRAIT_BIOLUM_COLOUR,"#94b21c")
|
||||
set_trait(TRAIT_PRODUCT_ICON,"mushroom11")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#94b21c")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#94b21c")
|
||||
set_trait(TRAIT_BIOLUM_COLOUR,"#E6E600")
|
||||
set_trait(TRAIT_PRODUCT_ICON,"alien3")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#E6E600")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#E6E600")
|
||||
set_trait(TRAIT_PLANT_ICON,"mushroom6")
|
||||
|
||||
/datum/seed/mushroom/mold
|
||||
|
||||
@@ -66,14 +66,56 @@
|
||||
flags = WHITELISTED
|
||||
syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
|
||||
|
||||
/datum/language/vaurcese
|
||||
name = "Vaurcese"
|
||||
desc = "Vaurca native language made of clicks and sputters, \"It's a bugs life.\""
|
||||
speech_verb = "clicks"
|
||||
/datum/language/bug
|
||||
name = "Hivenet"
|
||||
desc = "Complex Vaurcesian language comprised of rapid mandible-clicking, \"It's a bugs life.\""
|
||||
speech_verb = "broadcasts"
|
||||
colour = "vaurca"
|
||||
key = "9"
|
||||
flags = WHITELISTED
|
||||
syllables = list("kic","klic","\'tic","kit","lit","xic","vil","xrit","tshh","qix","qlit","zix","\'","!")
|
||||
flags = WHITELISTED | HIVEMIND
|
||||
syllables = list("vaur","uyek","uyit","avek","sc'theth","k'ztak","teth","wre'ge","lii","dra'","zo'","ra'","k'lax'","zz","vh","ik","ak",
|
||||
"uhk","zir","sc'orth","sc'er","thc'yek","th'zirk","th'esk","k'ayek","ka'mil","sc'","ik'yir","yol","kig","k'zit","'","'","zrk","krg","isk'yet","na'k",
|
||||
"sc'azz","th'sc","nil","n'ahk","sc'yeth","aur'sk","iy'it","azzg","a'","i'","o'","u'","a","i","o","u","zz","kr","ak","nrk")
|
||||
|
||||
/datum/language/bug/get_random_name()
|
||||
var/new_name = "[pick(list("Ka'","Za'","Ka'"))]"
|
||||
new_name += "[pick(list("Akaix'","Viax'"))]"
|
||||
new_name += "[pick(list("Uyek","Uyit","Avek","Theth","Ztak","Teth","Zir","Yek","Zirk","Ayek","Yir","Kig","Yol","'Zrk","Nazgr","Yet","Nak","Kiihr","Gruz","Guurz","Nagr","Zkk","Zohd","Norc","Agraz","Yizgr","Yinzr","Nuurg","Iii","Lix","Nhagh","Xir","Z'zit","Zhul","Zgr","Na'k","Isk'yet","Aaaa"))]"
|
||||
new_name += " [pick(list("Zo'ra","Zo'ra","Zo'ra","K'lax"))]"
|
||||
return new_name
|
||||
|
||||
/datum/language/bug/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
|
||||
log_say("[key_name(speaker)] : ([name]) [message]")
|
||||
|
||||
if(!speaker_mask)
|
||||
speaker_mask = speaker.name
|
||||
var/msg = "<i><span class='game say'>[name], <span class='name'>[speaker_mask]</span> [format_message(message, get_spoken_verb(message))]</span></i>"
|
||||
|
||||
for(var/mob/player in player_list)
|
||||
if(istype(player,/mob/dead) || ((src in player.languages) || check_special_condition(player)))
|
||||
player << msg
|
||||
|
||||
/datum/language/bug/check_special_condition(var/mob/other)
|
||||
|
||||
var/mob/living/carbon/human/M = other
|
||||
if(!istype(M))
|
||||
return 1
|
||||
if(locate(/obj/item/organ/vaurca/neuralsocket) in M.internal_organs)
|
||||
return 1
|
||||
|
||||
if (M.l_ear || M.r_ear)
|
||||
var/obj/item/device/radio/headset/dongle
|
||||
if(istype(M.l_ear,/obj/item/device/radio/headset))
|
||||
dongle = M.l_ear
|
||||
else
|
||||
dongle = M.r_ear
|
||||
|
||||
if(!istype(dongle))
|
||||
return 0
|
||||
if(dongle.translate_hivenet)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/datum/language/human
|
||||
name = "Sol Common"
|
||||
|
||||
@@ -264,6 +264,7 @@
|
||||
set desc = "While grabbing someone aggressively, tear into them with your mandibles."
|
||||
|
||||
if(last_special > world.time)
|
||||
src << "\red Your mandibles still ache!"
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying)
|
||||
@@ -279,18 +280,18 @@
|
||||
src << "\red You must have an aggressive grab to gut your prey!"
|
||||
return
|
||||
|
||||
last_special = world.time + 50
|
||||
last_special = world.time + 35
|
||||
|
||||
visible_message("<span class='warning'><b>\The [src]</b> rips viciously at \the [G.affecting]'s flesh with its mandibles!</span>")
|
||||
|
||||
if(istype(G.affecting,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = G.affecting
|
||||
H.apply_damage(30,BRUTE)
|
||||
H.apply_damage(25,BRUTE)
|
||||
// if(H.stat == 2) //no gibbing humans but i'll let you gib like a mouse or something that's cool
|
||||
// H.gib()
|
||||
else
|
||||
var/mob/living/M = G.affecting
|
||||
if(!istype(M)) return //wut
|
||||
M.apply_damage(30,BRUTE)
|
||||
M.apply_damage(25,BRUTE)
|
||||
// if(M.stat == 2)
|
||||
// M.gib()
|
||||
// M.gib()
|
||||
@@ -440,13 +440,12 @@
|
||||
var/failed_inhale = 0
|
||||
var/failed_exhale = 0
|
||||
|
||||
if(species.has_organ["breathing apparatus"])
|
||||
if(species.has_organ["breathing apparatus"] && src.get_species() == "Vaurca")
|
||||
var/obj/item/organ/vaurca/breathingapparatus/L = internal_organs_by_name["breathing apparatus"]
|
||||
if(isnull(L))
|
||||
poison_type = null
|
||||
else if(L.is_broken())
|
||||
poison_type = "oxygen" //if Vaurca breathing apparatus breaks, oxygen becomes poisonous.
|
||||
|
||||
if(species.breath_type)
|
||||
breath_type = species.breath_type
|
||||
else
|
||||
@@ -1402,6 +1401,8 @@
|
||||
var/obj/item/clothing/glasses/welding/O = glasses
|
||||
if(!O.up)
|
||||
found_welder = 1
|
||||
if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blinders))
|
||||
found_welder = 1
|
||||
if(!found_welder && istype(head, /obj/item/clothing/head/welding))
|
||||
var/obj/item/clothing/head/welding/O = head
|
||||
if(!O.up)
|
||||
|
||||
@@ -270,10 +270,9 @@
|
||||
/datum/species/bug
|
||||
name = "Vaurca"
|
||||
name_plural = "Vaurcae"
|
||||
|
||||
language = "Hivenet"
|
||||
icobase = 'icons/mob/human_races/r_vaurca.dmi'
|
||||
deform = 'icons/mob/human_races/r_vaurca.dmi'
|
||||
language = "Vaurcese"
|
||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
|
||||
rarity_value = 2
|
||||
slowdown = 0 //may become a bonus if vaurca gain more legs.
|
||||
@@ -300,21 +299,21 @@
|
||||
heat_level_1 = 330 //Default 360
|
||||
heat_level_2 = 380 //Default 400
|
||||
heat_level_3 = 600 //Default 1000
|
||||
flags = CAN_JOIN | NO_SLIP | NO_SCAN | HAS_SKIN_COLOR | IS_WHITELISTED
|
||||
flags = CAN_JOIN | NO_SCAN | HAS_SKIN_COLOR | IS_WHITELISTED | NO_SLIP
|
||||
blood_color = "#E6E600" // dark yellow
|
||||
flesh_color = "#E6E600"
|
||||
base_color = "#575757"
|
||||
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/bugbite //weaker version of gut.
|
||||
/mob/living/carbon/human/proc/bugbite, //weaker version of gut.
|
||||
)
|
||||
|
||||
|
||||
has_organ = list(
|
||||
"neural socket" = /obj/item/organ/vaurca/neuralsocket,
|
||||
"neural socket" = /obj/item/organ/vaurca/neuralsocket,
|
||||
"breathing apparatus" = /obj/item/organ/vaurca/breathingapparatus,
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"second heart" = /obj/item/organ/heart,
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"second heart" = /obj/item/organ/heart,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/brain,
|
||||
@@ -323,4 +322,8 @@
|
||||
|
||||
/datum/species/bug/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
|
||||
|
||||
/datum/species/bug/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.gender = NEUTER
|
||||
return ..()
|
||||
@@ -144,7 +144,7 @@ var/list/ai_verbs_default = list(
|
||||
add_language("Skrellian", 0)
|
||||
add_language("Tradeband", 1)
|
||||
add_language("Gutter", 0)
|
||||
add_language("Vaurcese", 0)
|
||||
add_language("Hivenet", 0)
|
||||
add_language("Rootspeak", 0)
|
||||
|
||||
if(!safety)//Only used by AIize() to successfully spawn an AI.
|
||||
|
||||
@@ -477,7 +477,7 @@
|
||||
user.remove_language("Sinta'unathi")
|
||||
user.remove_language("Siik'tajr")
|
||||
user.remove_language("Skrellian")
|
||||
user.add_language("Vaurcese")
|
||||
//user.add_language("Hivenet") //I can buy an AI core and its cyborgs having access to the local hivenet for security reasons, but a pAI?
|
||||
user.add_language("Rootspeak")
|
||||
|
||||
is_active(mob/living/silicon/pai/user)
|
||||
|
||||
@@ -380,8 +380,7 @@
|
||||
cannot_break = 1
|
||||
dislocated = -1
|
||||
|
||||
|
||||
//VAURCA ORGANS
|
||||
/*//VAURCA ORGANS
|
||||
/obj/item/organ/vaurca/neuralsocket
|
||||
name = "neural socket"
|
||||
organ_tag = "neural socket"
|
||||
@@ -406,4 +405,4 @@
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "tracheae"
|
||||
/obj/item/organ/vaurca/tracheae/removed()
|
||||
return
|
||||
return */
|
||||
@@ -167,17 +167,51 @@
|
||||
..()
|
||||
|
||||
//VAURCA ORGANS
|
||||
/obj/item/organ/vaurca/neuralsocket
|
||||
name = "neural socket"
|
||||
parent_organ = "head"
|
||||
robotic = 2
|
||||
|
||||
|
||||
/obj/item/organ/vaurca/breathingapparatus
|
||||
name = "breathing apparatus"
|
||||
parent_organ = "chest"
|
||||
robotic = 2
|
||||
|
||||
|
||||
/obj/item/organ/internal/vaurca/process()
|
||||
return
|
||||
|
||||
/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
|
||||
|
||||
obj/item/organ/vaurca/neuralsocket/process()
|
||||
if (is_broken())
|
||||
if (all_languages["Hivenet"] in owner.languages)
|
||||
owner.remove_language(all_languages["Hivenet"])
|
||||
owner << "\red Your mind suddenly grows dark as the unity of the Hive is torn from you."
|
||||
else
|
||||
if (!(all_languages["Hivenet"] in owner.languages))
|
||||
owner.add_language(all_languages["Hivenet"])
|
||||
owner << "\blue Your mind expands, and your thoughts join the unity of the Hivenet."
|
||||
..()
|
||||
|
||||
/obj/item/organ/vaurca/neuralsocket/replaced(var/mob/living/carbon/human/target)
|
||||
if (!(all_languages["Hivenet"] in owner.languages))
|
||||
owner.add_language(all_languages["Hivenet"])
|
||||
owner << "\blue Your mind expands, and your thoughts join the unity of the Hivenet."
|
||||
..()
|
||||
|
||||
/obj/item/organ/vaurca/neuralsocket/removed(var/mob/living/carbon/human/target)
|
||||
if(all_languages["Hivenet"] in target.languages)
|
||||
target.remove_language(all_languages["Hivenet"])
|
||||
target << "\red Your mind suddenly grows dark as the unity of the Hive is torn from you."
|
||||
..()
|
||||
|
||||
/obj/item/organ/vaurca/breathingapparatus
|
||||
name = "breathing apparatus"
|
||||
organ_tag = "breathing apparatus"
|
||||
parent_organ = "chest"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "breathing_app"
|
||||
robotic = 2
|
||||
|
||||
obj/item/organ/vaurca/breathingapparatus/process()
|
||||
return
|
||||
|
||||
/obj/item/organ/vaurca/breathingapparatus/removed()
|
||||
return
|
||||
|
||||
@@ -168,6 +168,19 @@
|
||||
/obj/item/ammo_magazine/a75/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/trodpack
|
||||
name = "tungsten rod pack"
|
||||
icon_state = "trodpack"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "trod"
|
||||
ammo_type = /obj/item/ammo_casing/trod
|
||||
multiple_sprites = 1
|
||||
max_ammo = 2
|
||||
|
||||
/obj/item/ammo_magazine/trodpack/empty
|
||||
initial_ammo = 0
|
||||
|
||||
|
||||
/obj/item/ammo_magazine/a762
|
||||
name = "magazine box (7.62mm)"
|
||||
icon_state = "a762"
|
||||
|
||||
@@ -18,6 +18,12 @@
|
||||
caliber = "38"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol
|
||||
|
||||
/obj/item/ammo_casing/trod
|
||||
desc = "Hyperdense tungsten rod residue."
|
||||
icon_state = "trod"
|
||||
caliber = "trod"
|
||||
projectile_type = /obj/item/projectile/bullet/trod
|
||||
|
||||
/obj/item/ammo_casing/c38r
|
||||
desc = "A .38 rubber bullet casing."
|
||||
caliber = "38"
|
||||
@@ -69,7 +75,6 @@
|
||||
caliber = "12mm"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/medium
|
||||
|
||||
|
||||
/obj/item/ammo_casing/shotgun
|
||||
name = "shotgun slug"
|
||||
desc = "A 12 gauge slug."
|
||||
|
||||
@@ -199,7 +199,25 @@
|
||||
if(!(target && target.loc))
|
||||
target = targloc
|
||||
pointblank = 0
|
||||
|
||||
var/obj/projectile = consume_next_projectile(user)
|
||||
if(!projectile)
|
||||
return
|
||||
else
|
||||
if(silenced)
|
||||
return
|
||||
else
|
||||
if(reflex)
|
||||
user.visible_message(
|
||||
"<span class='reflex_shoot'><b>\The [user] fires \the [src][pointblank ? " point blank at \the [target]":""] by reflex!<b></span>",
|
||||
"<span class='reflex_shoot'>You fire \the [src] by reflex!</span>",
|
||||
"You hear a [fire_sound_text]!"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='danger'>\The [user] fires \the [src][pointblank ? " point blank at \the [target]":""]!</span>",
|
||||
"<span class='warning'>You fire \the [src]!</span>",
|
||||
"You hear a [fire_sound_text]!"
|
||||
)
|
||||
update_held_icon()
|
||||
|
||||
//update timing
|
||||
@@ -236,26 +254,12 @@
|
||||
playsound(user, fire_sound, 10, 1)
|
||||
else
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
|
||||
if(reflex)
|
||||
user.visible_message(
|
||||
"<span class='reflex_shoot'><b>\The [user] fires \the [src][pointblank ? " point blank at \the [target]":""] by reflex!<b></span>",
|
||||
"<span class='reflex_shoot'>You fire \the [src] by reflex!</span>",
|
||||
"You hear a [fire_sound_text]!"
|
||||
)
|
||||
else
|
||||
user.visible_message(
|
||||
"<span class='danger'>\The [user] fires \the [src][pointblank ? " point blank at \the [target]":""]!</span>",
|
||||
"<span class='warning'>You fire \the [src]!</span>",
|
||||
"You hear a [fire_sound_text]!"
|
||||
)
|
||||
|
||||
if(muzzle_flash)
|
||||
set_light(muzzle_flash)
|
||||
if(muzzle_flash)
|
||||
set_light(muzzle_flash)
|
||||
|
||||
if(recoil)
|
||||
spawn()
|
||||
shake_camera(user, recoil+1, recoil)
|
||||
shake_camera(user, recoil+1, recoil)
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
@@ -98,6 +98,85 @@
|
||||
origin_tech = "combat=5;phorontech=4"
|
||||
projectile_type = /obj/item/projectile/energy/phoron
|
||||
|
||||
/* Vaurca Weapons */
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca
|
||||
name = "Alien Firearm"
|
||||
desc = "Vaurcae weapons tend to be specialized and highly lethal. This one doesn't do much"
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/bfg
|
||||
name = "BFG 9000"
|
||||
desc = "'Bio-Force Gun'. Yeah, right."
|
||||
icon_state = "bfg"
|
||||
item_state = "bfg"
|
||||
charge_meter = 0
|
||||
w_class = 3
|
||||
fire_sound = 'sound/magic/LightningShock.ogg'
|
||||
force = 30
|
||||
projectile_type = /obj/item/projectile/energy/sonic
|
||||
slot_flags = SLOT_BACK
|
||||
max_shots = 40
|
||||
|
||||
firemodes = list(
|
||||
list(name="EXTERMINATE", burst=20, burst_delay = 1, move_delay = 20, fire_delay = 40, dispersion = list(3.0, 3.25, 3.5, 3.75, 4.0, 4.25, 4.5, 4.75, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6.0, 6.25)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/gatlinglaser
|
||||
name = "Gatling Laser"
|
||||
desc = "A highly sophisticated rapid fire laser weapon."
|
||||
icon_state = "gatling"
|
||||
item_state = "gatling"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
origin_tech = "combat=5;materials=2"
|
||||
charge_meter = 0
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 3
|
||||
force = 10
|
||||
projectile_type = /obj/item/projectile/beam/gatlinglaser
|
||||
max_shots = 80
|
||||
|
||||
firemodes = list(
|
||||
list(name="concentrated burst", burst=10, burst_delay = 1, fire_delay = 10, dispersion = list(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)),
|
||||
list(name="spray", burst=20, burst_delay = 1, move_delay = 5, fire_delay = 30, dispersion = list(0.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.0, 3.25)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/vaurca/blaster
|
||||
name = "Zo'ra Blaster"
|
||||
desc = "An elegant weapon for a more civilized time."
|
||||
icon_state = "blaster"
|
||||
item_state = "blaster"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 3
|
||||
force = 10
|
||||
projectile_type = /obj/item/projectile/energy/blaster
|
||||
max_shots = 30
|
||||
|
||||
firemodes = list(
|
||||
list(name="single shot", burst=1, burst_delay = 1, fire_delay = 0),
|
||||
list(name="concentrated burst", burst=3, burst_delay = 1, fire_delay = 5),
|
||||
)
|
||||
|
||||
/*/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(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)),
|
||||
)*/
|
||||
|
||||
/* Staves */
|
||||
|
||||
/obj/item/weapon/gun/energy/staff
|
||||
|
||||
@@ -282,3 +282,24 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/tommygun/update_icon()
|
||||
..()
|
||||
icon_state = (ammo_magazine)? "tommygun" : "tommygun-empty"
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/railgun
|
||||
name = "Railgun"
|
||||
desc = "An advanced rifle that magnetically propels hyperdense rods at breakneck speeds to devastating effect."
|
||||
icon_state = "railgun"
|
||||
item_state = "arifle"
|
||||
w_class = 3
|
||||
force = 10
|
||||
caliber = "trod"
|
||||
origin_tech = "combat=5;materials=2"
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
fire_sound = 'sound/effects/Explosion2.ogg'
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/trodpack
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
firemodes = list(
|
||||
list(name="single coil", burst=1, move_delay=6, accuracy = list(0)),
|
||||
list(name="dual coil", burst=2, move_delay=8, accuracy = list(-2,-3), dispersion = list(2.0, 3.0)),
|
||||
)
|
||||
@@ -143,3 +143,13 @@
|
||||
muzzle_type = /obj/effect/projectile/stun/muzzle
|
||||
tracer_type = /obj/effect/projectile/stun/tracer
|
||||
impact_type = /obj/effect/projectile/stun/impact
|
||||
|
||||
/obj/item/projectile/beam/gatlinglaser
|
||||
name = "heavy laser"
|
||||
icon_state = "heavylaser"
|
||||
damage = 5
|
||||
|
||||
muzzle_type = /obj/effect/projectile/laser_omni/muzzle
|
||||
tracer_type = /obj/effect/projectile/laser_omni/tracer
|
||||
impact_type = /obj/effect/projectile/laser_omni/impact
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
//snap pop
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
src.visible_message("<span class='warning'>\The [src] explodes in a bright flash!</span>")
|
||||
|
||||
|
||||
new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
|
||||
new /obj/effect/effect/sparks(T)
|
||||
new /obj/effect/effect/smoke/illumination(T, brightness=max(flash_range*2, brightness), lifetime=light_duration)
|
||||
@@ -99,3 +99,49 @@
|
||||
damage = 20
|
||||
damage_type = TOX
|
||||
irradiate = 20
|
||||
|
||||
/obj/item/projectile/energy/sonic
|
||||
name = "distortion"
|
||||
icon = 'icons/obj/machines/particle_accelerator2.dmi'
|
||||
icon_state = "particle"
|
||||
check_armour = "bomb"
|
||||
damage = 60
|
||||
damage_type = BRUTE
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
kill_count = 100
|
||||
embed = 0
|
||||
incinerate = 40
|
||||
weaken = 5
|
||||
stun = 5
|
||||
|
||||
/obj/item/projectile/energy/sonic/on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/M = target
|
||||
if(isturf(target))
|
||||
target.ex_act(0)
|
||||
if(ismob(target))
|
||||
explosion(target, -1, 0, 2)
|
||||
M.gib()
|
||||
..()
|
||||
|
||||
/obj/item/projectile/energy/blaster
|
||||
name = "blaster bolt"
|
||||
icon_state = "laser"
|
||||
check_armour = "laser"
|
||||
damage = 10
|
||||
damage_type = BURN
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
embed = 0
|
||||
incinerate = 5
|
||||
|
||||
/*/obj/item/projectile/energy/flamer
|
||||
name = "promethium"
|
||||
icon_state = "fire"
|
||||
check_armour = "energy"
|
||||
kill_count = 25
|
||||
damage = 10
|
||||
damage_type = BURN
|
||||
pass_flags = PASSTABLE
|
||||
step_delay = 2
|
||||
kill_count = 75
|
||||
embed = 0
|
||||
incinerate = 10*/
|
||||
@@ -150,3 +150,15 @@
|
||||
var/mob/living/carbon/human/M = target
|
||||
M.adjustBrainLoss(20)
|
||||
M.hallucination += 20
|
||||
|
||||
/obj/item/projectile/bullet/trod
|
||||
name ="tungsten rod"
|
||||
icon_state= "gauss"
|
||||
damage = 75
|
||||
check_armour = "bomb"
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
explosion(target, 0, 0, 4)
|
||||
return 1
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
id = "koispaste"
|
||||
description = "A thick goopy substance, rich in K'ois nutrients."
|
||||
metabolism = REM * 4
|
||||
var/nutriment_factor = 40
|
||||
var/nutriment_factor = 10
|
||||
var/injectable = 0
|
||||
color = "#dcd9cd"
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
description = "All the vitamins, minerals, and carbohydrates the body needs in pure form."
|
||||
reagent_state = SOLID
|
||||
metabolism = REM * 4
|
||||
var/nutriment_factor = 30 // Per unit
|
||||
var/nutriment_factor = 15 // Per unit
|
||||
var/blood_factor = 6
|
||||
var/regen_factor = 0.8
|
||||
var/injectable = 0
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("kois", 20)
|
||||
reagents.add_reagent("koispaste", 20)
|
||||
bitesize = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/aesirsalad
|
||||
@@ -3033,3 +3033,113 @@
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 10)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/friedkois
|
||||
name = "Fried K'ois"
|
||||
desc = "K'ois, freshly bathed in the radiation of a microwave."
|
||||
icon_state = "friedkois"
|
||||
filling_color = "#E6E600"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("koispaste", 6)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/friedkois/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/stack/rods))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/koiskebab1(src)
|
||||
user << "You skewer the fried k'ois."
|
||||
qdel(src)
|
||||
qdel(W)
|
||||
if(istype(W,/obj/item/weapon/material/kitchen/rollingpin))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/koissoup(src)
|
||||
user << "You crush the fried K'ois into a paste, and pour it into a bowl."
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/koiskebab1
|
||||
name = "K'ois on a Stick"
|
||||
desc = "It's K'ois. On a stick. It looks like you could fit more."
|
||||
icon_state = "koisbab1"
|
||||
trash = /obj/item/stack/rods
|
||||
filling_color = "#E6E600"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("koispaste", 12)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/koiskebab1/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/friedkois))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/koiskebab2(src)
|
||||
user << "You add fried K'ois to the kebab."
|
||||
qdel(src)
|
||||
qdel(W)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/koiskebab2
|
||||
name = "K'ois on a Stick"
|
||||
desc = "It's K'ois. On a stick. It looks like you could fit more."
|
||||
icon_state = "koisbab2"
|
||||
trash = /obj/item/stack/rods
|
||||
filling_color = "#E6E600"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("koispaste", 18)
|
||||
bitesize = 6
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/koiskebab2/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/friedkois))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/koiskebab3(src)
|
||||
user << "You add fried K'ois to the kebab."
|
||||
qdel(src)
|
||||
qdel(W)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/koiskebab3
|
||||
name = "K'ois on a Stick"
|
||||
desc = "It's K'ois. On a stick. It doesn't look like you can fit anymore."
|
||||
icon_state = "koisbab3"
|
||||
trash = /obj/item/stack/rods
|
||||
filling_color = "#E6E600"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("koispaste", 24)
|
||||
bitesize = 9
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/koissoup
|
||||
name = "K'ois Paste"
|
||||
desc = "A thick K'ois goop, piled into a bowl."
|
||||
icon_state = "koissoup"
|
||||
trash = /obj/item/trash/snack_bowl
|
||||
filling_color = "#4E6E600"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("koispaste", 15)
|
||||
bitesize = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/koiswaffles
|
||||
name = "K'ois Waffles"
|
||||
desc = "Rock-hard 'waffles' composed entirely of microwaved K'ois goop."
|
||||
icon_state = "koiswaffles"
|
||||
trash = /obj/item/trash/waffles
|
||||
filling_color = "#E6E600"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("koispaste", 25)
|
||||
bitesize = 5
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/koisjelly
|
||||
name = "K'ois Jelly"
|
||||
desc = "Enriched K'ois paste, filled to the brim with the good stuff."
|
||||
icon_state = "koisjelly"
|
||||
filling_color = "#E6E600"
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("koispaste", 25)
|
||||
reagents.add_reagent("imidazoline", 20)
|
||||
reagents.add_reagent("hyperzine", 5)
|
||||
bitesize = 5
|
||||
@@ -156,6 +156,8 @@
|
||||
injtime = injtime * 2
|
||||
else if(!H.can_inject(user, 1))
|
||||
return
|
||||
if(H.get_species() == "Vaurca")
|
||||
injtime = injtime * 2
|
||||
|
||||
else if(isliving(target))
|
||||
|
||||
@@ -166,7 +168,11 @@
|
||||
if(injtime == time)
|
||||
user.visible_message("<span class='warning'>[user] is trying to inject [target] with [visible_name]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s suit!</span>")
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.get_species() == "Vaurca")
|
||||
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s carapace!</span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins hunting for an injection port on [target]'s suit!</span>")
|
||||
|
||||
if(!do_mob(user, target, injtime))
|
||||
return
|
||||
|
||||
@@ -118,9 +118,13 @@
|
||||
max_duration = 110
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != "mouth"
|
||||
if(target.get_species() == "Vaurca")
|
||||
return 0
|
||||
else
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != "mouth"
|
||||
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -146,6 +150,47 @@
|
||||
"\red Your hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!")
|
||||
affected.createwound(CUT, 10)
|
||||
|
||||
/datum/surgery_step/generic/cut_openvaurca
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgicaldrill = 85, \
|
||||
/obj/item/weapon/pickaxe/ = 15, \
|
||||
)
|
||||
|
||||
min_duration = 110
|
||||
max_duration = 130
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(target.get_species() != "Vaurca")
|
||||
return 0
|
||||
else
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != "mouth"
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts drilling into [target]'s [affected.name] carapace with \the [tool].", \
|
||||
"You start drilling into [target]'s [affected.name] carapace with \the [tool].")
|
||||
target.custom_pain("You feel a horrible pain as if from a jackhammer in your [affected.name]!",1)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\blue [user] has drilled into [target]'s [affected.name] carapace with \the [tool].", \
|
||||
"\blue You have drilled into [target]'s [affected.name] carapace with \the [tool].",)
|
||||
affected.open = 1
|
||||
|
||||
if(istype(target) && !(target.species.flags & NO_BLOOD))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, cracking [target]'s [affected.name] carapace in the wrong place with \the [tool]!", \
|
||||
"\red Your hand slips, cracking [target]'s [affected.name] carapace in the wrong place with \the [tool]!")
|
||||
affected.createwound(CUT, 15)
|
||||
|
||||
/datum/surgery_step/generic/clamp_bleeders
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/hemostat = 100, \
|
||||
|
||||
@@ -983,7 +983,7 @@ var/list/be_special_flags = list(
|
||||
#define LANGUAGE_SKRELLIAN "Skrellian"
|
||||
#define LANGUAGE_ROOTSPEAK "Rootspeak"
|
||||
#define LANGUAGE_TRADEBAND "Tradeband"
|
||||
#define LANGUAGE_VAURCESE "Vaurcese"
|
||||
#define LANGUAGE_VAURCESE "Hivenet"
|
||||
#define LANGUAGE_GUTTER "Gutter"
|
||||
|
||||
#define WALL_CAN_OPEN 1
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
################################
|
||||
# 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
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: LordFowl
|
||||
|
||||
# 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: "Vaurca hivemind language added."
|
||||
- rscadd: "Vaurca appropriate name generator added."
|
||||
- rscadd: "Tied Vaurca language to their neural socket organ."
|
||||
- rscadd: "Added a method for non-Vaurca to intercept the Vaurca hivenet so long as they construct the correct item."
|
||||
- rscadd: "Sprites for Vaurca organs."
|
||||
- rscadd: "Neutered all Vaurca."
|
||||
- rscadd: "Cutting open a Vaurca for surgery now requires heavier equipment."
|
||||
- rscadd: "Injecting a Vaurca with a syringe now will take time."
|
||||
- rscadd: "Adds various Vaurca cosmetic items available via loadout."
|
||||
- rscadd: "Adds a few new burst-fire weapons exploiting the burstfire fix - obtainable via research or adminbus."
|
||||
- rscadd: "Ports the ability to stick heads on spears from Paradise-code."
|
||||
- rscadd: "Added an error message when trying to bite someone before the cooldown expires."
|
||||
- rscdel: "Removed spoken Vaurca language."
|
||||
- tweak: "Heavily nerfed K'ois' properties."
|
||||
- tweak: "Halved the nutrition value of nutriment, returning it to old-code state."
|
||||
- tweak: "Nerfed the damage dealt by bite, while reducing the cooldown."
|
||||
- bugfix: "Fixed burstfire weapons spamming attack messages when fired, allowing for more automatic weapons."
|
||||
- bugfix: "Fixed Vaurca player ability to select coloured eyes."
|
||||
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 195 KiB After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 284 KiB After Width: | Height: | Size: 286 KiB |
|
Before Width: | Height: | Size: 248 KiB After Width: | Height: | Size: 249 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |