mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-12 15:47:04 +01:00
Merge branch 'master' into SILENCEDMP5A5_FLUFF
This commit is contained in:
@@ -6,6 +6,10 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
|
||||
|
||||
var/previous_rights = 0
|
||||
|
||||
//Clear profile access
|
||||
for(var/A in world.GetConfig("admin"))
|
||||
world.SetConfig("APP/admin", A, null)
|
||||
|
||||
//load text from file
|
||||
var/list/Lines = file2list("config/admin_ranks.txt")
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ var/list/admin_datums = list()
|
||||
rank = initial_rank
|
||||
rights = initial_rights
|
||||
admin_datums[ckey] = src
|
||||
if(rights & R_DEBUG) //grant profile access
|
||||
world.SetConfig("APP/admin", ckey, "role=admin")
|
||||
|
||||
/datum/admins/proc/associate(client/C)
|
||||
if(istype(C))
|
||||
|
||||
@@ -425,6 +425,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
//For logging later
|
||||
var/admin = key_name_admin(src)
|
||||
var/player_key = picked_client.key
|
||||
//VOREStation Add - Needed for persistence
|
||||
var/picked_ckey = picked_client.ckey
|
||||
var/picked_slot = picked_client.prefs.default_slot
|
||||
//VOREStation Add End
|
||||
|
||||
var/mob/living/carbon/human/new_character
|
||||
var/spawnloc
|
||||
@@ -471,6 +475,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
antag_data.add_antagonist(new_character.mind)
|
||||
antag_data.place_mob(new_character)
|
||||
|
||||
//VOREStation Add - Required for persistence
|
||||
if(new_character.mind)
|
||||
new_character.mind.loaded_from_ckey = picked_ckey
|
||||
new_character.mind.loaded_from_slot = picked_slot
|
||||
//VOREStation Add End
|
||||
|
||||
//If desired, apply equipment.
|
||||
if(equipment)
|
||||
if(charjob)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/datum/gear/gloves/goldring
|
||||
display_name = "wedding ring, gold"
|
||||
path = /obj/item/clothing/gloves/weddingring
|
||||
path = /obj/item/clothing/gloves/ring/wedding
|
||||
|
||||
/datum/gear/gloves/silverring
|
||||
display_name = "wedding ring, silver"
|
||||
path = /obj/item/clothing/gloves/weddingring/silver
|
||||
path = /obj/item/clothing/gloves/ring/wedding/silver
|
||||
|
||||
/datum/gear/gloves/colored
|
||||
display_name = "gloves, colorable"
|
||||
|
||||
@@ -1,20 +1,3 @@
|
||||
/obj/item/clothing/gloves/weddingring
|
||||
name = "golden wedding ring"
|
||||
desc = "For showing your devotion to another person. It has a golden glimmer to it."
|
||||
icon = 'icons/obj/clothing/gloves_vr.dmi'
|
||||
icon_state = "wedring_g"
|
||||
item_state = "wedring_g"
|
||||
var/partnername = ""
|
||||
|
||||
/obj/item/clothing/gloves/weddingring/attack_self(mob/user)
|
||||
partnername = copytext(sanitize(input(user, "Would you like to change the holoengraving on the ring?", "Name your betrothed", "Bae") as null|text),1,MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [partnername]"
|
||||
|
||||
/obj/item/clothing/gloves/weddingring/silver
|
||||
name = "silver wedding ring"
|
||||
icon_state = "wedring_s"
|
||||
item_state = "wedring_s"
|
||||
|
||||
/obj/item/clothing/gloves/color
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/obj/item/clothing/gloves/ring/wedding
|
||||
name = "golden wedding ring"
|
||||
desc = "For showing your devotion to another person. It has a golden glimmer to it."
|
||||
icon = 'icons/obj/clothing/gloves_vr.dmi'
|
||||
icon_state = "wedring_g"
|
||||
item_state = "wedring_g"
|
||||
var/partnername = ""
|
||||
|
||||
/obj/item/clothing/gloves/ring/wedding/attack_self(mob/user)
|
||||
partnername = copytext(sanitize(input(user, "Would you like to change the holoengraving on the ring?", "Name your spouse", "Bae") as null|text),1,MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [partnername]"
|
||||
|
||||
/obj/item/clothing/gloves/ring/wedding/silver
|
||||
name = "silver wedding ring"
|
||||
desc = "For showing your devotion to another person. It has a silver glimmer to it."
|
||||
icon_state = "wedring_s"
|
||||
item_state = "wedring_s"
|
||||
@@ -26,7 +26,9 @@
|
||||
if(icon_override)
|
||||
if("[tmp_icon_state]_tie" in icon_states(icon_override))
|
||||
tmp_icon_state = "[tmp_icon_state]_tie"
|
||||
inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH)
|
||||
inv_overlay = image(icon = icon_override, icon_state = tmp_icon_state, dir = SOUTH)
|
||||
else
|
||||
inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH)
|
||||
return inv_overlay
|
||||
|
||||
/obj/item/clothing/accessory/proc/get_mob_overlay()
|
||||
@@ -387,4 +389,4 @@
|
||||
/obj/item/clothing/accessory/bracelet/material/glass/New(var/newloc)
|
||||
..(newloc, "glass")
|
||||
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -13,6 +13,7 @@ var/list/global/map_templates = list()
|
||||
/datum/map_template
|
||||
var/name = "Default Template Name"
|
||||
var/desc = "Some text should go here. Maybe."
|
||||
var/template_group = null // If this is set, no more than one template in the same group will be spawned, per submap seeding.
|
||||
var/width = 0
|
||||
var/height = 0
|
||||
var/mappath = null
|
||||
@@ -67,7 +68,7 @@ var/list/global/map_templates = list()
|
||||
|
||||
admin_notice("<span class='danger'>Initializing newly created atom(s) in submap.</span>", R_DEBUG)
|
||||
SSatoms.InitializeAtoms(atoms)
|
||||
|
||||
|
||||
admin_notice("<span class='danger'>Initializing atmos pipenets and machinery in submap.</span>", R_DEBUG)
|
||||
SSmachines.setup_atmos_machinery(atmos_machines)
|
||||
|
||||
@@ -190,6 +191,7 @@ var/list/global/map_templates = list()
|
||||
CHECK_TICK
|
||||
|
||||
var/list/loaded_submap_names = list()
|
||||
var/list/template_groups_used = list() // Used to avoid spawning three seperate versions of the same PoI.
|
||||
|
||||
// Now lets start choosing some.
|
||||
while(budget > 0 && overall_sanity > 0)
|
||||
@@ -210,6 +212,14 @@ var/list/global/map_templates = list()
|
||||
|
||||
// Can we afford it?
|
||||
if(chosen_template.cost > budget)
|
||||
priority_submaps -= chosen_template
|
||||
potential_submaps -= chosen_template
|
||||
continue
|
||||
|
||||
// Did we already place down a very similar submap?
|
||||
if(chosen_template.template_group && chosen_template.template_group in template_groups_used)
|
||||
priority_submaps -= chosen_template
|
||||
potential_submaps -= chosen_template
|
||||
continue
|
||||
|
||||
// If so, try to place it.
|
||||
@@ -242,14 +252,21 @@ var/list/global/map_templates = list()
|
||||
|
||||
CHECK_TICK
|
||||
|
||||
// For pretty maploading statistics.
|
||||
if(loaded_submap_names[chosen_template.name])
|
||||
loaded_submap_names[chosen_template.name] += 1
|
||||
else
|
||||
loaded_submap_names[chosen_template.name] = 1
|
||||
|
||||
// To avoid two 'related' similar submaps existing at the same time.
|
||||
if(chosen_template.template_group)
|
||||
template_groups_used += chosen_template.template_group
|
||||
|
||||
// To deduct the cost.
|
||||
if(chosen_template.cost >= 0)
|
||||
budget -= chosen_template.cost
|
||||
|
||||
// Remove the submap from our options.
|
||||
if(chosen_template in priority_submaps) // Always remove priority submaps.
|
||||
priority_submaps -= chosen_template
|
||||
else if(!chosen_template.allow_duplicates)
|
||||
|
||||
@@ -399,12 +399,9 @@
|
||||
|
||||
var/modified = 0
|
||||
var/perpname = "wot"
|
||||
if(wear_id)
|
||||
var/obj/item/weapon/card/id/I = wear_id.GetID()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = name
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = name
|
||||
|
||||
@@ -438,14 +435,11 @@
|
||||
var/perpname = "wot"
|
||||
var/read = 0
|
||||
|
||||
if(wear_id)
|
||||
if(istype(wear_id,/obj/item/weapon/card/id))
|
||||
perpname = wear_id:registered_name
|
||||
else if(istype(wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = src.name
|
||||
perpname = name
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
@@ -468,14 +462,11 @@
|
||||
var/perpname = "wot"
|
||||
var/read = 0
|
||||
|
||||
if(wear_id)
|
||||
if(istype(wear_id,/obj/item/weapon/card/id))
|
||||
perpname = wear_id:registered_name
|
||||
else if(istype(wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = src.name
|
||||
perpname = name
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
@@ -496,14 +487,11 @@
|
||||
if (href_list["secrecordadd"])
|
||||
if(hasHUD(usr,"security"))
|
||||
var/perpname = "wot"
|
||||
if(wear_id)
|
||||
if(istype(wear_id,/obj/item/weapon/card/id))
|
||||
perpname = wear_id:registered_name
|
||||
else if(istype(wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = src.name
|
||||
perpname = name
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
@@ -527,14 +515,11 @@
|
||||
var/perpname = "wot"
|
||||
var/modified = 0
|
||||
|
||||
if(wear_id)
|
||||
if(istype(wear_id,/obj/item/weapon/card/id))
|
||||
perpname = wear_id:registered_name
|
||||
else if(istype(wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = src.name
|
||||
perpname = name
|
||||
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
@@ -566,14 +551,11 @@
|
||||
var/perpname = "wot"
|
||||
var/read = 0
|
||||
|
||||
if(wear_id)
|
||||
if(istype(wear_id,/obj/item/weapon/card/id))
|
||||
perpname = wear_id:registered_name
|
||||
else if(istype(wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = src.name
|
||||
perpname = name
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.medical)
|
||||
@@ -597,14 +579,11 @@
|
||||
var/perpname = "wot"
|
||||
var/read = 0
|
||||
|
||||
if(wear_id)
|
||||
if(istype(wear_id,/obj/item/weapon/card/id))
|
||||
perpname = wear_id:registered_name
|
||||
else if(istype(wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = src.name
|
||||
perpname = name
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.medical)
|
||||
@@ -625,14 +604,11 @@
|
||||
if (href_list["medrecordadd"])
|
||||
if(hasHUD(usr,"medical"))
|
||||
var/perpname = "wot"
|
||||
if(wear_id)
|
||||
if(istype(wear_id,/obj/item/weapon/card/id))
|
||||
perpname = wear_id:registered_name
|
||||
else if(istype(wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = src.name
|
||||
perpname = name
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.medical)
|
||||
@@ -1184,7 +1160,7 @@
|
||||
if(!(gender in species.genders))
|
||||
gender = species.genders[1]
|
||||
|
||||
icon_state = lowertext(species.name)
|
||||
//icon_state = lowertext(species.name) //Necessary?
|
||||
|
||||
species.create_organs(src)
|
||||
|
||||
@@ -1615,12 +1591,9 @@
|
||||
if(hasHUD(user,"security"))
|
||||
//Try to find their name
|
||||
var/perpname
|
||||
if(wear_id)
|
||||
var/obj/item/weapon/card/id/I = wear_id.GetID()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = name
|
||||
var/obj/item/weapon/card/id/I = GetIdCard()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = name
|
||||
//Try to find their record
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
humanform = H
|
||||
updatehealth()
|
||||
refactory = locate() in humanform.internal_organs
|
||||
verbs |= /mob/living/proc/nano_set_size
|
||||
verbs |= /mob/living/proc/ventcrawl
|
||||
verbs |= /mob/living/proc/hide
|
||||
else
|
||||
|
||||
@@ -196,10 +196,14 @@
|
||||
var/substance = matstack.material.name
|
||||
var/actually_added = refactory.add_stored_material(substance,howmuch*matstack.perunit)
|
||||
matstack.use(Ceiling(actually_added/matstack.perunit))
|
||||
if(actually_added < howmuch)
|
||||
if(actually_added && actually_added < howmuch)
|
||||
to_chat(src,"<span class='warning'>Your refactory module is now full, so only [actually_added] units were stored.</span>")
|
||||
else
|
||||
visible_message(src,"<span class='notice'>[src] nibbles some of the [substance] right off the stack!</span>")
|
||||
else if(actually_added)
|
||||
to_chat(src,"<span class='notice'>You store [actually_added] units of [substance].</span>")
|
||||
visible_message(src,"<span class='notice'>[src] devours some of the [substance] right off the stack!</span>")
|
||||
else
|
||||
to_chat(src,"<span class='notice'>You're completely capped out on [substance]!</span>")
|
||||
|
||||
////
|
||||
// Blob Form
|
||||
@@ -247,26 +251,28 @@
|
||||
////
|
||||
// Change size
|
||||
////
|
||||
/mob/living/proc/nano_set_size()
|
||||
/mob/living/carbon/human/proc/nano_set_size()
|
||||
set name = "Adjust Volume"
|
||||
set category = "Abilities"
|
||||
set hidden = TRUE
|
||||
|
||||
var/mob/living/user = temporary_form || src
|
||||
|
||||
var/obj/item/organ/internal/nano/refactory/refactory = nano_get_refactory()
|
||||
//Missing the organ that does this
|
||||
if(!istype(refactory))
|
||||
to_chat(src,"<span class='warning'>You don't have a working refactory module!</span>")
|
||||
to_chat(user,"<span class='warning'>You don't have a working refactory module!</span>")
|
||||
return
|
||||
|
||||
var/nagmessage = "Adjust your mass to be a size between 25 to 200%. Up-sizing consumes metal, downsizing returns metal."
|
||||
var/new_size = input(src, nagmessage, "Pick a Size", size_multiplier*100) as num|null
|
||||
var/new_size = input(user, nagmessage, "Pick a Size", user.size_multiplier*100) as num|null
|
||||
if(!new_size || !IsInRange(new_size,25,200))
|
||||
return
|
||||
|
||||
var/size_factor = new_size/100
|
||||
|
||||
//Will be: -1.75 for 200->25, and 1.75 for 25->200
|
||||
var/sizediff = size_factor - size_multiplier
|
||||
var/sizediff = size_factor - user.size_multiplier
|
||||
|
||||
//Negative if shrinking, positive if growing
|
||||
//Will be (PLSC*2)*-1.75 to 1.75
|
||||
@@ -276,17 +282,19 @@
|
||||
//Sizing up
|
||||
if(cost > 0)
|
||||
if(refactory.use_stored_material("steel",cost))
|
||||
resize(size_factor)
|
||||
user.resize(size_factor)
|
||||
else
|
||||
to_chat(src,"<span class='warning'>That size change would cost [cost] steel, which you don't have.</span>")
|
||||
to_chat(user,"<span class='warning'>That size change would cost [cost] steel, which you don't have.</span>")
|
||||
return
|
||||
//Sizing down (or not at all)
|
||||
if(cost <= 0)
|
||||
cost = abs(cost)
|
||||
var/actually_added = refactory.add_stored_material("steel",cost)
|
||||
resize(size_factor)
|
||||
user.resize(size_factor)
|
||||
if(actually_added != cost)
|
||||
to_chat(src,"<span class='warning'>Unfortunately, [cost-actually_added] steel was lost due to lack of storage space.</span>")
|
||||
to_chat(user,"<span class='warning'>Unfortunately, [cost-actually_added] steel was lost due to lack of storage space.</span>")
|
||||
|
||||
user.visible_message("<span class='notice'>Black mist swirls around [user] as they change size.</span>")
|
||||
|
||||
/// /// /// A helper to reuse
|
||||
/mob/living/proc/nano_get_refactory(obj/item/organ/internal/nano/refactory/R)
|
||||
@@ -350,7 +358,7 @@
|
||||
ability_name = "Change Volume"
|
||||
desc = "Alter your size by consuming steel to produce additional nanites, or regain steel by reducing your size and reclaiming them."
|
||||
icon_state = "volume"
|
||||
to_call = /mob/living/proc/nano_set_size
|
||||
to_call = /mob/living/carbon/human/proc/nano_set_size
|
||||
|
||||
/obj/effect/protean_ability/reform_limb
|
||||
ability_name = "Ref - Single Limb"
|
||||
|
||||
@@ -86,12 +86,13 @@
|
||||
/mob/living/carbon/human/proc/nano_partswap,
|
||||
/mob/living/carbon/human/proc/nano_metalnom,
|
||||
/mob/living/carbon/human/proc/nano_blobform,
|
||||
/mob/living/proc/nano_set_size,
|
||||
/mob/living/carbon/human/proc/nano_set_size,
|
||||
/mob/living/carbon/human/proc/nano_change_fitting, //These verbs are displayed normally,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_hair,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_hair_colors,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_colour,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_eye_colour
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_eye_colour,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_gender
|
||||
)
|
||||
|
||||
var/global/list/abilities = list()
|
||||
@@ -204,7 +205,7 @@
|
||||
// Various modifiers
|
||||
/datum/modifier/protean
|
||||
stacks = MODIFIER_STACK_FORBID
|
||||
var/material_use = 100
|
||||
var/material_use = 150
|
||||
var/material_name = DEFAULT_WALL_MATERIAL
|
||||
|
||||
/datum/modifier/protean/on_applied()
|
||||
@@ -217,7 +218,7 @@
|
||||
if(holder.temporary_form)
|
||||
to_chat(holder.temporary_form,on_expired_text)
|
||||
|
||||
/datum/modifier/protean/tick()
|
||||
/datum/modifier/protean/check_if_valid()
|
||||
//No origin set
|
||||
if(!istype(origin))
|
||||
expire()
|
||||
@@ -238,7 +239,6 @@
|
||||
on_created_text = "<span class='notice'>You feel yourself accelerate, the metallic hydrogen increasing your speed temporarily.</span>"
|
||||
on_expired_text = "<span class='notice'>Your refactory finishes consuming the metallic hydrogen, and you return to normal speed.</span>"
|
||||
|
||||
material_use = 100
|
||||
material_name = "mhydrogen"
|
||||
|
||||
slowdown = -1
|
||||
@@ -250,7 +250,6 @@
|
||||
on_created_text = "<span class='notice'>You feel yourself become nearly impervious to physical attacks as plasteel nanites are made.</span>"
|
||||
on_expired_text = "<span class='notice'>Your refactory finishes consuming the plasteel, and you return to your normal nanites.</span>"
|
||||
|
||||
material_use = 100
|
||||
material_name = "plasteel"
|
||||
|
||||
incoming_brute_damage_percent = 0.5
|
||||
@@ -262,7 +261,6 @@
|
||||
on_created_text = "<span class='notice'>You feel yourself become more reflective, able to resist heat and fire better for a time.</span>"
|
||||
on_expired_text = "<span class='notice'>Your refactory finishes consuming the diamond, and you return to your normal nanites.</span>"
|
||||
|
||||
material_use = 100
|
||||
material_name = "diamond"
|
||||
|
||||
incoming_fire_damage_percent = 0.2
|
||||
@@ -274,7 +272,6 @@
|
||||
on_created_text = "<span class='notice'>You feel new nanites being produced from your stockpile of steel, healing you slowly.</span>"
|
||||
on_expired_text = "<span class='notice'>Your steel supply has either run out, or is no longer needed, and your healing stops.</span>"
|
||||
|
||||
material_use = 100
|
||||
material_name = "steel"
|
||||
|
||||
/datum/modifier/protean/steel/tick()
|
||||
@@ -303,4 +300,4 @@
|
||||
src.name += " ([new_name])"
|
||||
desc += "\nVALID THROUGH END OF: [time2text(world.timeofday, "Month") +" "+ num2text(text2num(time2text(world.timeofday, "YYYY"))+544)]\nREGISTRANT: [new_name]"
|
||||
|
||||
#undef DAM_SCALE_FACTOR
|
||||
#undef DAM_SCALE_FACTOR
|
||||
|
||||
@@ -6,11 +6,12 @@
|
||||
|
||||
if (transforming)
|
||||
return
|
||||
handle_modifiers() //VOREStation Edit - Needs to be done even if in nullspace.
|
||||
if(!loc)
|
||||
return
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
handle_modifiers() // Do this early since it might affect other things later.
|
||||
//handle_modifiers() // Do this early since it might affect other things later. //VOREStation Edit
|
||||
|
||||
handle_light()
|
||||
|
||||
|
||||
@@ -1060,7 +1060,7 @@ default behaviour is:
|
||||
if(lying != lying_prev)
|
||||
lying_prev = lying
|
||||
update_transform()
|
||||
|
||||
|
||||
return canmove
|
||||
|
||||
// Adds overlays for specific modifiers.
|
||||
@@ -1088,10 +1088,10 @@ default behaviour is:
|
||||
/mob/living/proc/is_sentient()
|
||||
return TRUE
|
||||
|
||||
/* //VOREStation Edit. We have a better system in place.
|
||||
|
||||
/mob/living/update_transform()
|
||||
// First, get the correct size.
|
||||
var/desired_scale = icon_scale
|
||||
var/desired_scale = size_multiplier //VOREStation edit
|
||||
for(var/datum/modifier/M in modifiers)
|
||||
if(!isnull(M.icon_scale_percent))
|
||||
desired_scale *= M.icon_scale_percent
|
||||
@@ -1101,8 +1101,8 @@ default behaviour is:
|
||||
M.Scale(desired_scale)
|
||||
M.Translate(0, 16*(desired_scale-1))
|
||||
src.transform = M
|
||||
animate(src, transform = M, time = 10)
|
||||
*/ //VOREStation Edit
|
||||
//animate(src, transform = M, time = 10) //VOREStation edit
|
||||
|
||||
|
||||
// This handles setting the client's color variable, which makes everything look a specific color.
|
||||
// This proc is here so it can be called without needing to check if the client exists, or if the client relogs.
|
||||
|
||||
@@ -314,6 +314,12 @@
|
||||
else
|
||||
ma.icon_state = initial(icon_state)
|
||||
|
||||
//VOREStation edit start
|
||||
var/vore_icon_state = update_vore_icon()
|
||||
if(vore_icon_state)
|
||||
ma.icon_state = vore_icon_state
|
||||
//VOREStation edit end
|
||||
|
||||
if(has_hands)
|
||||
if(r_hand_sprite)
|
||||
ma.overlays += r_hand_sprite
|
||||
|
||||
@@ -44,21 +44,21 @@
|
||||
var/obj/belly/B = belly
|
||||
for(var/mob/living/M in B)
|
||||
new_fullness += M.size_multiplier
|
||||
new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry.
|
||||
new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry.
|
||||
vore_fullness = min(vore_capacity, new_fullness)
|
||||
|
||||
/mob/living/simple_animal/update_icon()
|
||||
. = ..() // Call sideways "parent" to decide state
|
||||
if(vore_active)
|
||||
update_fullness()
|
||||
if(!vore_fullness)
|
||||
return
|
||||
else if(icon_state == icon_living && (vore_icons & SA_ICON_LIVING))
|
||||
icon_state = "[icon_state]-[vore_fullness]"
|
||||
else if(icon_state == icon_dead && (vore_icons & SA_ICON_DEAD))
|
||||
icon_state = "[icon_state]-[vore_fullness]"
|
||||
else if(icon_state == icon_rest && (vore_icons & SA_ICON_REST))
|
||||
icon_state = "[icon_state]-[vore_fullness]"
|
||||
/mob/living/simple_animal/proc/update_vore_icon()
|
||||
if(!vore_active)
|
||||
return 0
|
||||
update_fullness()
|
||||
if(!vore_fullness)
|
||||
return 0
|
||||
else if((stat == CONSCIOUS) && (!icon_rest || !resting || !incapacitated(INCAPACITATION_DISABLED)) && (vore_icons & SA_ICON_LIVING))
|
||||
return "[icon_living]-[vore_fullness]"
|
||||
else if(stat >= DEAD && (vore_icons & SA_ICON_DEAD))
|
||||
return "[icon_dead]-[vore_fullness]"
|
||||
else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest && (vore_icons & SA_ICON_REST))
|
||||
return "[icon_rest]-[vore_fullness]"
|
||||
|
||||
/mob/living/simple_animal/proc/will_eat(var/mob/living/M)
|
||||
if(client) //You do this yourself, dick!
|
||||
|
||||
@@ -5,9 +5,46 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/slime/Found(mob/living/L)
|
||||
if(isliving(L))
|
||||
if(SA_attackable(L))
|
||||
if(L.faction == faction && !attack_same)
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too.
|
||||
return H // Monkeys are always food.
|
||||
else
|
||||
return
|
||||
|
||||
if(L in friends)
|
||||
return
|
||||
|
||||
if(istype(L, /mob/living/simple_animal/slime))
|
||||
var/mob/living/simple_animal/slime/buddy = L
|
||||
if(buddy.slime_color == src.slime_color || discipline || unity || buddy.unity)
|
||||
return // Don't hurt same colored slimes.
|
||||
else
|
||||
return buddy //do hurt others
|
||||
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too.
|
||||
return H // Monkeys are always food.
|
||||
|
||||
if(issilicon(L) || isbot(L))
|
||||
if(discipline && !rabid)
|
||||
return // We're a good slime. For now at least.
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/slime/special_target_check(mob/living/L)
|
||||
if(L.faction == faction && !attack_same)
|
||||
return FALSE
|
||||
if(L.faction == faction && !attack_same && !istype(L, /mob/living/simple_animal/slime))
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too.
|
||||
return TRUE // Monkeys are always food.
|
||||
else
|
||||
return FALSE
|
||||
if(L in friends)
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -112,6 +112,11 @@
|
||||
if(!speaker.client)
|
||||
return
|
||||
|
||||
//Are all slimes being referred to?
|
||||
var/mass_order = 0
|
||||
if(findtext(message, "slimes"))
|
||||
mass_order = 1
|
||||
|
||||
// Say hello back.
|
||||
if(findtext(message, "hello") || findtext(message, "hi") || findtext(message, "greetings"))
|
||||
delayed_say(pick("Hello...", "Hi..."), speaker)
|
||||
@@ -165,13 +170,14 @@
|
||||
var/list/valid_names = splittext(L.name, " ") // Should output list("John", "Doe") as an example.
|
||||
for(var/line in valid_names) // Check each part of someone's name.
|
||||
if(findtext(message, lowertext(line))) // If part of someone's name is in the command, the slime targets them if allowed to.
|
||||
if(special_target_check(L))
|
||||
delayed_say("Okay... I attack \the [L]...", speaker)
|
||||
LoseFollow()
|
||||
set_target(L)
|
||||
return
|
||||
else
|
||||
delayed_say("No... I won't attack \the [L].", speaker)
|
||||
return
|
||||
// If we're here, it couldn't find anyone with that name.
|
||||
delayed_say("No... I don't know who to attack...", speaker)
|
||||
if(!(mass_order && line == "slime")) //don't think random other slimes are target
|
||||
if(special_target_check(L))
|
||||
delayed_say("Okay... I attack \the [L]...", speaker)
|
||||
LoseFollow()
|
||||
set_target(L, 1)
|
||||
return
|
||||
else
|
||||
delayed_say("No... I won't attack \the [L].", speaker)
|
||||
return
|
||||
// If we're here, it couldn't find anyone with that name.
|
||||
delayed_say("No... I don't know who to attack...", speaker)
|
||||
|
||||
@@ -356,10 +356,13 @@
|
||||
baby.mutation_chance = mutation_chance
|
||||
baby.power_charge = round(power_charge / 4)
|
||||
baby.resentment = max(resentment - 1, 0)
|
||||
baby.discipline = max(discipline - 1, 0)
|
||||
baby.obedience = max(obedience - 1, 0)
|
||||
baby.unity = unity
|
||||
if(!istype(baby, /mob/living/simple_animal/slime/light_pink))
|
||||
baby.discipline = max(discipline - 1, 0)
|
||||
baby.obedience = max(obedience - 1, 0)
|
||||
if(!istype(baby, /mob/living/simple_animal/slime/rainbow))
|
||||
baby.unity = unity
|
||||
baby.faction = faction
|
||||
baby.attack_same = attack_same
|
||||
baby.friends = friends.Copy()
|
||||
if(rabid)
|
||||
baby.enrage()
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
|
||||
/mob/living/simple_animal/slime/dark_purple
|
||||
desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it."
|
||||
color = "#CC23FF"
|
||||
color = "#660088"
|
||||
slime_color = "dark purple"
|
||||
coretype = /obj/item/slime_extract/dark_purple
|
||||
reagent_injected = "phoron"
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
vore_active = TRUE
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 30
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
vore_stomach_name = "fuel processor"
|
||||
vore_stomach_flavor = "You have ended up in the fuel processor of this corrupted machine. This place was definitely not designed with safety and comfort in mind. The heated and cramped surroundings oozing potent fluids all over your form, eager to do nothing less than breaking you apart to fuel its rampage for the next few days... hours... minutes? Oh dear..."
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 20
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
|
||||
/mob/living/simple_animal/otie/feral //gets the pet2tame feature. starts out hostile tho so get gamblin'
|
||||
name = "mutated feral otie"
|
||||
|
||||
@@ -32,4 +32,4 @@
|
||||
vore_active = 1
|
||||
vore_capacity = 2
|
||||
vore_pounce_chance = 10
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
icon_state = "queen_s"
|
||||
icon_living = "queen_s"
|
||||
icon_dead = "queen_dead"
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
@@ -77,6 +77,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/sentinel/praetorian
|
||||
icon = 'icons/mob/vore64x64.dmi'
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/queen/empress/mother
|
||||
vore_icons = 0 // NO VORE SPRITES
|
||||
@@ -226,11 +227,20 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/holodeck
|
||||
vore_icons = 0 // NO VORE SPRITES
|
||||
vore_digest_chance = 0
|
||||
vore_absorb_chance = 0
|
||||
|
||||
// Override stuff for holodeck carp to make them not digest when set to safe!
|
||||
/mob/living/simple_animal/hostile/carp/holodeck/init_vore()
|
||||
. = ..()
|
||||
var/safe = (faction == "neutral")
|
||||
for(var/belly in vore_organs)
|
||||
var/obj/belly/B = belly
|
||||
B.digest_mode = safe ? DM_HOLD : vore_default_mode
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/holodeck/set_safety(var/safe)
|
||||
. = ..()
|
||||
for(var/belly in vore_organs)
|
||||
var/obj/belly/B = belly
|
||||
B.digest_mode = safe ? DM_HOLD : vore_default_mode
|
||||
B.digestchance = safe ? 0 : vore_digest_chance
|
||||
B.absorbchance = safe ? 0 : vore_absorb_chance
|
||||
|
||||
@@ -201,7 +201,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/scrubbers
|
||||
desc = "A scrubbers pipe segment to connect upwards."
|
||||
connect_types = CONNECT_TYPE_SCRUBBER
|
||||
piping_layer = PIPING_LAYER_SCRUBBER
|
||||
layer = 2.38
|
||||
layer = PIPES_SCRUBBER_LAYER
|
||||
icon_connect_type = "-scrubbers"
|
||||
color = PIPE_COLOR_RED
|
||||
|
||||
@@ -211,7 +211,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/supply
|
||||
desc = "A supply pipe segment to connect upwards."
|
||||
connect_types = CONNECT_TYPE_SUPPLY
|
||||
piping_layer = PIPING_LAYER_SUPPLY
|
||||
layer = 2.39
|
||||
layer = PIPES_SUPPLY_LAYER
|
||||
icon_connect_type = "-supply"
|
||||
color = PIPE_COLOR_BLUE
|
||||
|
||||
@@ -221,7 +221,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/scrubbers
|
||||
desc = "A scrubbers pipe segment to connect downwards."
|
||||
connect_types = CONNECT_TYPE_SCRUBBER
|
||||
piping_layer = PIPING_LAYER_SCRUBBER
|
||||
layer = 2.38
|
||||
layer = PIPES_SCRUBBER_LAYER
|
||||
icon_connect_type = "-scrubbers"
|
||||
color = PIPE_COLOR_RED
|
||||
|
||||
@@ -231,6 +231,6 @@ obj/machinery/atmospherics/pipe/zpipe/down/supply
|
||||
desc = "A supply pipe segment to connect downwards."
|
||||
connect_types = CONNECT_TYPE_SUPPLY
|
||||
piping_layer = PIPING_LAYER_SUPPLY
|
||||
layer = 2.39
|
||||
layer = PIPES_SUPPLY_LAYER
|
||||
icon_connect_type = "-supply"
|
||||
color = PIPE_COLOR_BLUE
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
a_drain = 0.1
|
||||
access = access_engine
|
||||
tick_flags = NIF_ACTIVETICK
|
||||
planes_enabled = list(VIS_FULLBRIGHT)
|
||||
planes_enabled = list(VIS_FULLBRIGHT, VIS_MESONS)
|
||||
vision_flags = (NIF_V_MESONS)
|
||||
incompatible_with = list(NIF_MATERIAL,NIF_THERMALS,NIF_NIGHTVIS)
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
/obj/item/organ/external/diona/arm
|
||||
name = "left upper tendril"
|
||||
organ_tag = "l_arm"
|
||||
organ_tag = BP_L_ARM
|
||||
icon_name = "l_arm"
|
||||
max_damage = 30
|
||||
min_broken_damage = 20
|
||||
@@ -61,13 +61,13 @@
|
||||
|
||||
/obj/item/organ/external/diona/arm/right
|
||||
name = "right upper tendril"
|
||||
organ_tag = "r_arm"
|
||||
organ_tag = BP_R_ARM
|
||||
icon_name = "r_arm"
|
||||
body_part = ARM_RIGHT
|
||||
|
||||
/obj/item/organ/external/diona/leg
|
||||
name = "left lower tendril"
|
||||
organ_tag = "l_leg"
|
||||
organ_tag = BP_L_LEG
|
||||
icon_name = "l_leg"
|
||||
max_damage = 30
|
||||
min_broken_damage = 20
|
||||
@@ -79,50 +79,50 @@
|
||||
|
||||
/obj/item/organ/external/diona/leg/right
|
||||
name = "right lower tendril"
|
||||
organ_tag = "r_leg"
|
||||
organ_tag = BP_R_LEG
|
||||
icon_name = "r_leg"
|
||||
body_part = LEG_RIGHT
|
||||
icon_position = RIGHT
|
||||
|
||||
/obj/item/organ/external/diona/foot
|
||||
name = "left foot"
|
||||
organ_tag = "l_foot"
|
||||
organ_tag = BP_L_FOOT
|
||||
icon_name = "l_foot"
|
||||
max_damage = 25
|
||||
min_broken_damage = 10
|
||||
w_class = ITEMSIZE_SMALL
|
||||
body_part = FOOT_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = "l_leg"
|
||||
parent_organ = BP_R_LEG
|
||||
can_stand = 1
|
||||
|
||||
/obj/item/organ/external/diona/foot/right
|
||||
name = "right foot"
|
||||
organ_tag = "r_foot"
|
||||
organ_tag = BP_R_FOOT
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
icon_position = RIGHT
|
||||
parent_organ = "r_leg"
|
||||
parent_organ = BP_R_LEG
|
||||
joint = "right ankle"
|
||||
amputation_point = "right ankle"
|
||||
|
||||
/obj/item/organ/external/diona/hand
|
||||
name = "left grasper"
|
||||
organ_tag = "l_hand"
|
||||
organ_tag = BP_L_HAND
|
||||
icon_name = "l_hand"
|
||||
max_damage = 25
|
||||
min_broken_damage = 15
|
||||
w_class = ITEMSIZE_SMALL
|
||||
body_part = HAND_LEFT
|
||||
parent_organ = "l_arm"
|
||||
parent_organ = BP_L_ARM
|
||||
can_grasp = 1
|
||||
|
||||
/obj/item/organ/external/diona/hand/right
|
||||
name = "right grasper"
|
||||
organ_tag = "r_hand"
|
||||
organ_tag = BP_R_HAND
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
parent_organ = "r_arm"
|
||||
parent_organ = BP_R_ARM
|
||||
|
||||
//DIONA ORGANS.
|
||||
/obj/item/organ/external/diona/removed()
|
||||
@@ -157,26 +157,32 @@
|
||||
/obj/item/organ/internal/diona/strata
|
||||
name = "neural strata"
|
||||
parent_organ = BP_TORSO
|
||||
organ_tag = O_STRATA
|
||||
|
||||
/obj/item/organ/internal/diona/bladder
|
||||
name = "gas bladder"
|
||||
parent_organ = BP_HEAD
|
||||
organ_tag = O_GBLADDER
|
||||
|
||||
/obj/item/organ/internal/diona/polyp
|
||||
name = "polyp segment"
|
||||
parent_organ = BP_GROIN
|
||||
organ_tag = O_POLYP
|
||||
|
||||
/obj/item/organ/internal/diona/ligament
|
||||
name = "anchoring ligament"
|
||||
parent_organ = BP_GROIN
|
||||
organ_tag = O_ANCHOR
|
||||
|
||||
/obj/item/organ/internal/diona/node
|
||||
name = "receptor node"
|
||||
parent_organ = BP_HEAD
|
||||
organ_tag = O_RESPONSE
|
||||
|
||||
/obj/item/organ/internal/diona/nutrients
|
||||
name = O_NUTRIENT
|
||||
parent_organ = BP_TORSO
|
||||
organ_tag = O_NUTRIENT
|
||||
|
||||
// These are different to the standard diona organs as they have a purpose in other
|
||||
// species (absorbing radiation and light respectively)
|
||||
@@ -191,8 +197,8 @@
|
||||
|
||||
/obj/item/organ/internal/diona/node
|
||||
name = "response node"
|
||||
parent_organ = "head"
|
||||
organ_tag = "receptor node"
|
||||
parent_organ = BP_HEAD
|
||||
organ_tag = O_RESPONSE
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "claw"
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
|
||||
/obj/item/organ/external/arm
|
||||
organ_tag = "l_arm"
|
||||
organ_tag = BP_L_ARM
|
||||
name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 80
|
||||
@@ -98,13 +98,13 @@
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
if(organ_tag == "l_arm") //Specific level 2 'feature
|
||||
if(organ_tag == BP_L_ARM) //Specific level 2 'feature
|
||||
owner.drop_l_hand()
|
||||
else if(organ_tag == "r_arm")
|
||||
else if(organ_tag == BP_R_ARM)
|
||||
owner.drop_r_hand()
|
||||
|
||||
/obj/item/organ/external/arm/right
|
||||
organ_tag = "r_arm"
|
||||
organ_tag = BP_R_ARM
|
||||
name = "right arm"
|
||||
icon_name = "r_arm"
|
||||
body_part = ARM_RIGHT
|
||||
@@ -112,7 +112,7 @@
|
||||
amputation_point = "right shoulder"
|
||||
|
||||
/obj/item/organ/external/leg
|
||||
organ_tag = "l_leg"
|
||||
organ_tag = BP_L_LEG
|
||||
name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 80
|
||||
@@ -142,7 +142,7 @@
|
||||
owner.Weaken(5)
|
||||
|
||||
/obj/item/organ/external/leg/right
|
||||
organ_tag = "r_leg"
|
||||
organ_tag = BP_R_LEG
|
||||
name = "right leg"
|
||||
icon_name = "r_leg"
|
||||
body_part = LEG_RIGHT
|
||||
@@ -151,7 +151,7 @@
|
||||
amputation_point = "right hip"
|
||||
|
||||
/obj/item/organ/external/foot
|
||||
organ_tag = "l_foot"
|
||||
organ_tag = BP_L_FOOT
|
||||
name = "left foot"
|
||||
icon_name = "l_foot"
|
||||
max_damage = 50
|
||||
@@ -159,7 +159,7 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
body_part = FOOT_LEFT
|
||||
icon_position = LEFT
|
||||
parent_organ = "l_leg"
|
||||
parent_organ = BP_L_LEG
|
||||
joint = "left ankle"
|
||||
amputation_point = "left ankle"
|
||||
can_stand = 1
|
||||
@@ -186,24 +186,24 @@
|
||||
owner.Weaken(5)
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
organ_tag = "r_foot"
|
||||
organ_tag = BP_R_FOOT
|
||||
name = "right foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
icon_position = RIGHT
|
||||
parent_organ = "r_leg"
|
||||
parent_organ = BP_R_LEG
|
||||
joint = "right ankle"
|
||||
amputation_point = "right ankle"
|
||||
|
||||
/obj/item/organ/external/hand
|
||||
organ_tag = "l_hand"
|
||||
organ_tag = BP_L_HAND
|
||||
name = "left hand"
|
||||
icon_name = "l_hand"
|
||||
max_damage = 50
|
||||
min_broken_damage = 15
|
||||
w_class = ITEMSIZE_SMALL
|
||||
body_part = HAND_LEFT
|
||||
parent_organ = "l_arm"
|
||||
parent_organ = BP_L_ARM
|
||||
joint = "left wrist"
|
||||
amputation_point = "left wrist"
|
||||
can_grasp = 1
|
||||
@@ -229,17 +229,17 @@
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
if(organ_tag == "l_hand") //Specific level 2 'feature
|
||||
if(organ_tag == BP_L_HAND) //Specific level 2 'feature
|
||||
owner.drop_l_hand()
|
||||
else if(organ_tag == "r_hand")
|
||||
else if(organ_tag == BP_R_HAND)
|
||||
owner.drop_r_hand()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
organ_tag = "r_hand"
|
||||
organ_tag = BP_R_HAND
|
||||
name = "right hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
parent_organ = "r_arm"
|
||||
parent_organ = BP_R_ARM
|
||||
joint = "right wrist"
|
||||
amputation_point = "right wrist"
|
||||
|
||||
|
||||
@@ -53,7 +53,8 @@ var/list/possible_cable_coil_colours = list(
|
||||
icon_state = "0-1"
|
||||
var/d1 = 0
|
||||
var/d2 = 1
|
||||
layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4
|
||||
plane = PLATING_PLANE
|
||||
layer = WIRES_LAYER
|
||||
color = COLOR_RED
|
||||
var/obj/machinery/power/breakerbox/breaker_box
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
icon = 'icons/obj/power_cond_heavy.dmi'
|
||||
name = "large power cable"
|
||||
desc = "This cable is tough. It cannot be cut with simple hand tools."
|
||||
layer = 2.39 //Just below pipes, which are at 2.4
|
||||
plane = PLATING_PLANE
|
||||
layer = PIPES_LAYER - 0.05 //Just below pipes
|
||||
color = null
|
||||
unacidable = 1
|
||||
var/id = null
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
icon = 'icons/obj/power_cond_heavy.dmi'
|
||||
name = "large power cable"
|
||||
desc = "This cable is tough. It cannot be cut with simple hand tools."
|
||||
layer = 2.39 //Just below pipes, which are at 2.4
|
||||
plane = PLATING_PLANE
|
||||
layer = PIPES_LAYER - 0.05 //Just below pipes
|
||||
color = null
|
||||
|
||||
/obj/structure/cable/heavyduty/attackby(obj/item/W, mob/user)
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
|
||||
/obj/item/ammo_magazine/s38/rubber
|
||||
name = "speedloader (.38 rubber)"
|
||||
icon_state = "T38"
|
||||
ammo_type = /obj/item/ammo_casing/a38r
|
||||
|
||||
/obj/item/ammo_magazine/s38/emp
|
||||
@@ -493,6 +494,23 @@
|
||||
max_ammo = 9
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/s44
|
||||
name = "speedloader (.44)"
|
||||
icon_state = "44"
|
||||
ammo_type = /obj/item/ammo_casing/a44
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1260) //metal costs are very roughly based around 1 .45 casing = 75 metal
|
||||
caliber = ".44"
|
||||
max_ammo = 6
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/s44/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/s44/rubber
|
||||
name = "speedloader (.44 rubber)"
|
||||
icon_state = "R44"
|
||||
ammo_type = /obj/item/ammo_casing/a44r
|
||||
|
||||
///////// 7.62mm /////////
|
||||
|
||||
/obj/item/ammo_magazine/m762
|
||||
|
||||
@@ -59,6 +59,12 @@
|
||||
caliber = ".44"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/strong
|
||||
|
||||
/obj/item/ammo_casing/a44r
|
||||
icon_state = "r-casing"
|
||||
desc = "A .44 rubber bullet casing."
|
||||
caliber = ".44"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong
|
||||
|
||||
/*
|
||||
* .75 (aka Gyrojet Rockets, aka admin abuse)
|
||||
*/
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
var/move_delay = 1
|
||||
var/fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
var/fire_sound_text = "gunshot"
|
||||
var/fire_anim = null
|
||||
var/recoil = 0 //screen shake
|
||||
var/silenced = 0
|
||||
var/muzzle_flash = 3
|
||||
@@ -492,7 +493,7 @@
|
||||
if(!(target && target.loc))
|
||||
target = targloc
|
||||
//pointblank = 0
|
||||
|
||||
|
||||
var/target_for_log
|
||||
if(ismob(target))
|
||||
target_for_log = target
|
||||
@@ -533,6 +534,9 @@
|
||||
|
||||
//called after successfully firing
|
||||
/obj/item/weapon/gun/proc/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0)
|
||||
if(fire_anim)
|
||||
flick(fire_anim, src)
|
||||
|
||||
if(silenced)
|
||||
if(reflex)
|
||||
user.visible_message(
|
||||
|
||||
@@ -118,7 +118,6 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
// Blade Runner pistol.
|
||||
/obj/item/weapon/gun/projectile/revolver/deckard
|
||||
name = "\improper Deckard .38"
|
||||
@@ -259,3 +258,24 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
|
||||
to_chat(user, "\The [src] has a secondary barrel loaded with \a [to_print]")
|
||||
else
|
||||
to_chat(user, "\The [src] has a secondary barrel that is empty.")
|
||||
|
||||
|
||||
//Ported from Bay
|
||||
/obj/item/weapon/gun/projectile/revolver/webley
|
||||
name = "service revolver"
|
||||
desc = "A rugged top break revolver based on the Webley Mk. VI model, with modern improvements. Uses .44 magnum rounds."
|
||||
icon_state = "webley2"
|
||||
item_state = "webley2"
|
||||
caliber = ".44"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
handle_casings = CYCLE_CASINGS
|
||||
max_shells = 6
|
||||
ammo_type = /obj/item/ammo_casing/a44
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/webley/auto
|
||||
name = "autorevolver"
|
||||
icon_state = "mosley"
|
||||
desc = "A shiny Mosley Autococker automatic revolver, with black accents. Marketed as the 'Revolver for the Modern Era'. Uses .44 magnum rounds."
|
||||
fire_delay = 5.7 //Autorevolver. Also synced with the animation
|
||||
fire_anim = "mosley_fire"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
|
||||
@@ -147,6 +147,14 @@
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
|
||||
damage = 60
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber/strong //"rubber" bullets for revolvers and matebas
|
||||
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
|
||||
damage = 10
|
||||
agony = 60
|
||||
embed_chance = 0
|
||||
sharp = 0
|
||||
check_armour = "melee"
|
||||
|
||||
/obj/item/projectile/bullet/pistol/rubber //"rubber" bullets
|
||||
name = "rubber bullet"
|
||||
damage = 5
|
||||
|
||||
@@ -663,6 +663,7 @@
|
||||
var/dpdir = 0 // bitmask of pipe directions
|
||||
dir = 0 // dir will contain dominant direction for junction pipes
|
||||
var/health = 10 // health points 0-10
|
||||
plane = PLATING_PLANE
|
||||
layer = DISPOSAL_LAYER // slightly lower than wires and other pipes
|
||||
var/base_icon_state // initial icon state on map
|
||||
var/sortType = ""
|
||||
|
||||
@@ -1,11 +1,3 @@
|
||||
/datum/design/excavationdrill
|
||||
name = "Excavation Drill"
|
||||
desc = "Advanced archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The silver tip is adjustable from 1 to 30 cm."
|
||||
id = "excavationdrill"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_POWER = 3, TECH_ENGINEERING = 3, TECH_BLUESPACE = 3) //They were never used before. Now they'll be used. Hopefully.
|
||||
build_type = PROTOLATHE
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 1000, "silver" = 1000)
|
||||
build_path = /obj/item/weapon/pickaxe/excavationdrill
|
||||
/* Make language great again
|
||||
/datum/design/item/implant/language
|
||||
name = "Language implant"
|
||||
|
||||
@@ -976,7 +976,8 @@
|
||||
/datum/sprite_accessory/tail/special/seromitailfeathered
|
||||
name = "seromi tail w/ feathers"
|
||||
desc = ""
|
||||
icon_state = "seromitail_feathers_s"
|
||||
icon_state = "seromitail_s"
|
||||
extra_overlay = "seromitail_feathers_s"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
|
||||
@@ -1448,24 +1448,27 @@
|
||||
|
||||
//Destination beacon vore checking
|
||||
var/atom/real_dest = dT
|
||||
var/televored = FALSE //UR GONNA GET VORED
|
||||
|
||||
var/atom/real_loc = destination.loc
|
||||
if(isbelly(real_loc))
|
||||
real_dest = real_loc
|
||||
televored = TRUE
|
||||
if(isliving(real_loc))
|
||||
var/mob/living/L = real_loc
|
||||
if(L.vore_selected)
|
||||
real_dest = L.vore_selected
|
||||
televored = TRUE
|
||||
else if(L.vore_organs.len)
|
||||
real_dest = pick(L.vore_organs)
|
||||
televored = TRUE
|
||||
|
||||
//Televore fluff stuff
|
||||
if(televored)
|
||||
to_chat(target,"<span class='warning'>\The [src] teleports you right into \a [lowertext(real_dest.name)]!</span>")
|
||||
//Confirm televore
|
||||
var/televored = FALSE
|
||||
if(isbelly(real_dest))
|
||||
var/obj/belly/B = real_dest
|
||||
if(!target.can_be_drop_prey && B.owner != user)
|
||||
to_chat(target,"<span class='warning'>\The [src] narrowly avoids teleporting you right into \a [lowertext(real_dest.name)]!</span>")
|
||||
real_dest = dT //Nevermind!
|
||||
else
|
||||
televored = TRUE
|
||||
to_chat(target,"<span class='warning'>\The [src] teleports you right into \a [lowertext(real_dest.name)]!</span>")
|
||||
|
||||
//Phase-out effect
|
||||
phase_out(target,get_turf(target))
|
||||
@@ -1496,7 +1499,7 @@
|
||||
ready = 1
|
||||
update_icon()
|
||||
|
||||
logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [televored ? "(Belly: [lowertext(real_loc.name)])" : null]"
|
||||
logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [televored ? "(Belly: [lowertext(real_dest.name)])" : null]"
|
||||
|
||||
/obj/item/device/perfect_tele/proc/phase_out(var/mob/M,var/turf/T)
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
/mob/living/proc/resize(var/new_size, var/animate = TRUE)
|
||||
if(size_multiplier == new_size)
|
||||
return 1
|
||||
|
||||
|
||||
size_multiplier = new_size //Change size_multiplier so that other items can interact with them
|
||||
if(animate)
|
||||
var/change = new_size - size_multiplier
|
||||
|
||||
@@ -21,47 +21,3 @@
|
||||
|
||||
/obj/item/weapon/pickaxe/hand
|
||||
icon = 'icons/obj/xenoarchaeology_vr.dmi'
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill
|
||||
name = "excavation drill"
|
||||
icon = 'icons/obj/xenoarchaeology_vr.dmi'
|
||||
icon_state = "excavationdrill0"
|
||||
item_state = "syringe_0"
|
||||
excavation_amount = 15
|
||||
digspeed = 30
|
||||
desc = "Advanced archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The diamond tip is adjustable from 1 to 30 cms."
|
||||
drill_sound = 'sound/weapons/thudswoosh.ogg'
|
||||
drill_verb = "drilling"
|
||||
force = 15.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("drilled")
|
||||
hitsound = 'sound/weapons/circsawhit.ogg'
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill/attack_self(mob/user as mob)
|
||||
var/depth = input("Put the desired depth (1-30 centimeters).", "Set Depth", 30) as num
|
||||
if(depth>30 || depth<1)
|
||||
user << "<span class='notice'>Invalid depth.</span>"
|
||||
return
|
||||
excavation_amount = depth
|
||||
user << "<span class='notice'>You set the depth to [depth]cm.</span>"
|
||||
if (depth<4)
|
||||
icon_state = "excavationdrill0"
|
||||
else if (depth >=4 && depth <8)
|
||||
icon_state = "excavationdrill1"
|
||||
else if (depth >=8 && depth <12)
|
||||
icon_state = "excavationdrill2"
|
||||
else if (depth >=12 && depth <16)
|
||||
icon_state = "excavationdrill3"
|
||||
else if (depth >=16 && depth <20)
|
||||
icon_state = "excavationdrill4"
|
||||
else if (depth >=20 && depth <24)
|
||||
icon_state = "excavationdrill5"
|
||||
else if (depth >=24 && depth <28)
|
||||
icon_state = "excavationdrill6"
|
||||
else
|
||||
icon_state = "excavationdrill7"
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill/examine(mob/user)
|
||||
..()
|
||||
var/depth = excavation_amount
|
||||
user << "<span class='info'>It is currently set at [depth]cms.</span>"
|
||||
|
||||
Reference in New Issue
Block a user