mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-29 23:16:21 +01:00
Merge branch 'master' of https://github.com/CHOMPstation/CHOMPstation into shadekin
# Conflicts: # code/modules/mob/living/simple_animal/vore/shadekin/types.dm # icons/mob/vore_shadekin.dmi # icons/mob/vore_shadekin64.dmi
This commit is contained in:
@@ -30,7 +30,8 @@
|
||||
H.drop_from_inventory(W)
|
||||
//teleport person to cell
|
||||
H.loc = pick(prisonwarp)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(H), slot_w_uniform)
|
||||
//CHOMPStation edit TFF 22/9/19 - refactor of prison jumpsuit
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes)
|
||||
else
|
||||
//teleport security person
|
||||
|
||||
@@ -1011,7 +1011,8 @@
|
||||
M.loc = prison_cell
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/prisoner = M
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
|
||||
//CHOMPStation edit TFF 22/9/19 - refactor of prison jumpsuit
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(prisoner), slot_w_uniform)
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
|
||||
|
||||
M << "<font color='red'>You have been sent to the prison station!</font>"
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
M.loc = pick(prisonwarp)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/prisoner = M
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
|
||||
//CHOMPStation edit TFF 22/9/19 - refactor of prison jumpsuit
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(prisoner), slot_w_uniform)
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
|
||||
spawn(50)
|
||||
M << "<font color='red'>You have been sent to the prison station!</font>"
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
/datum/gear/accessory/webbing
|
||||
display_name = "webbing, simple"
|
||||
path = /obj/item/clothing/accessory/storage/webbing
|
||||
cost = 2
|
||||
// cost = 2 //CHOMPStation Removal TFF 26/9/19 - Down to 1 point. No discernable reason for requiring two points instead.
|
||||
|
||||
/datum/gear/accessory/chaps
|
||||
display_name = "chaps, brown"
|
||||
|
||||
@@ -241,6 +241,46 @@ datum/gear/suit/duster
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/hop
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/cargo
|
||||
display_name = "cloak, cargo"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/cargo
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/mining
|
||||
display_name = "cloak, mining"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/mining
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/security
|
||||
display_name = "cloak, security"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/security
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/service
|
||||
display_name = "cloak, service"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/service
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/engineer
|
||||
display_name = "cloak, engineer"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/engineer
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/atmos
|
||||
display_name = "cloak, atmos"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/atmos
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/research
|
||||
display_name = "cloak, science"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/research
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/medical
|
||||
display_name = "cloak, medical"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/medical
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/custom //A colorable cloak
|
||||
display_name = "cloak (colorable)"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/custom/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/suit/unathi_robe
|
||||
display_name = "roughspun robe"
|
||||
path = /obj/item/clothing/suit/unathi/robe
|
||||
|
||||
@@ -214,7 +214,9 @@ datum/preferences
|
||||
dat += "<a href='?src=\ref[src];load=1'>Load slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];save=1'>Save slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];reload=1'>Reload slot</a> - "
|
||||
dat += "<a href='?src=\ref[src];resetslot=1'>Reset slot</a>"
|
||||
dat += "<a href='?src=\ref[src];resetslot=1'>Reset slot</a> - "
|
||||
//CHOMPStation Edit - TFF 20/9/19 - Port Polaris slot Copying for Char Setup
|
||||
dat += "<a href='?src=\ref[src];copy=1'>Copy slot</a>"
|
||||
|
||||
else
|
||||
dat += "Please create an account to save your preferences."
|
||||
@@ -270,6 +272,15 @@ datum/preferences
|
||||
return 0
|
||||
load_character(SAVE_RESET)
|
||||
sanitize_preferences()
|
||||
//CHOMPStation Edit - TFF 20/9/19 - Port Polaris slot Copying for Char Setup
|
||||
else if(href_list["copy"])
|
||||
if(!IsGuestKey(usr.key))
|
||||
open_copy_dialog(usr)
|
||||
return 1
|
||||
else if(href_list["overwrite"])
|
||||
overwrite_character(text2num(href_list["overwrite"]))
|
||||
sanitize_preferences()
|
||||
close_load_dialog(usr)
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -325,3 +336,27 @@ datum/preferences
|
||||
/datum/preferences/proc/close_load_dialog(mob/user)
|
||||
//user << browse(null, "window=saves")
|
||||
panel.close()
|
||||
|
||||
//CHOMPStation Edit - TFF 20/9/19 - Port Polaris slot Copying for Char Setup
|
||||
/datum/preferences/proc/open_copy_dialog(mob/user)
|
||||
var/dat = "<body>"
|
||||
dat += "<tt><center>"
|
||||
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(S)
|
||||
dat += "<b>Select a character slot to overwrite</b><br>"
|
||||
dat += "<b>You will then need to save to confirm</b><hr>"
|
||||
var/name
|
||||
for(var/i=1, i<= config.character_slots, i++)
|
||||
S.cd = "/character[i]"
|
||||
S["real_name"] >> name
|
||||
if(!name) name = "Character[i]"
|
||||
if(i==default_slot)
|
||||
name = "<b>[name]</b>"
|
||||
dat += "<a href='?src=\ref[src];overwrite=[i]'>[name]</a><br>"
|
||||
|
||||
dat += "<hr>"
|
||||
dat += "</center></tt>"
|
||||
panel = new(user, "Character Slots", "Character Slots", 300, 390, src)
|
||||
panel.set_content(dat)
|
||||
panel.open()
|
||||
@@ -93,6 +93,22 @@
|
||||
|
||||
player_setup.save_character(S)
|
||||
return 1
|
||||
//CHOMPStation Edit - TFF 20/9/19 - Port Polaris slot Copying for Char Setup
|
||||
/datum/preferences/proc/overwrite_character(slot)
|
||||
if(!path) return 0
|
||||
if(!fexists(path)) return 0
|
||||
var/savefile/S = new /savefile(path)
|
||||
if(!S) return 0
|
||||
if(!slot) slot = default_slot
|
||||
if(slot != SAVE_RESET)
|
||||
slot = sanitize_integer(slot, 1, config.character_slots, initial(default_slot))
|
||||
if(slot != default_slot)
|
||||
default_slot = slot
|
||||
S["default_slot"] << slot
|
||||
else
|
||||
S["default_slot"] << default_slot
|
||||
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/sanitize_preferences()
|
||||
player_setup.sanitize_setup()
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
name = "display monitor"
|
||||
desc = "A rather clunky old CRT-style display screen, fit for mounting on an optical output."
|
||||
body_parts_covered = FACE
|
||||
body_parts_covered = FACE|EYES
|
||||
dir = SOUTH
|
||||
|
||||
icon = 'icons/mob/monitor_icons.dmi'
|
||||
@@ -73,7 +73,7 @@
|
||||
/obj/item/clothing/mask/synthfacemask
|
||||
name = "Synth Face"
|
||||
desc = "A round dark muzzle made of LEDs."
|
||||
body_parts_covered = FACE
|
||||
body_parts_covered = FACE|EYES
|
||||
icon = 'icons/mob/species/seromi/synth_facemask.dmi'
|
||||
icon_override = 'icons/mob/species/seromi/synth_facemask.dmi'
|
||||
icon_state = "synth_facemask"
|
||||
@@ -98,5 +98,6 @@
|
||||
return 0
|
||||
update_icon()
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(istype(H)) H.update_inv_wear_mask()
|
||||
if (H.stat == DEAD) icon_state = "synth_facemask_dead"
|
||||
if(istype(H)) H.update_inv_wear_mask()
|
||||
|
||||
|
||||
@@ -149,10 +149,9 @@
|
||||
|
||||
//Chief Engineer's rig. This is sort of a halfway point between the old hardsuits (voidsuits) and the rig class.
|
||||
/obj/item/weapon/rig/ce
|
||||
|
||||
name = "advanced voidsuit control module"
|
||||
suit_type = "advanced voidsuit"
|
||||
desc = "An advanced voidsuit that protects against hazardous, low pressure environments. Shines with a high polish."
|
||||
name = "advanced hardsuit control module"
|
||||
suit_type = "advanced hardsuit"
|
||||
desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish."
|
||||
icon_state = "ce_rig"
|
||||
armor = list(melee = 40, bullet = 10, laser = 30,energy = 25, bomb = 40, bio = 100, rad = 100)
|
||||
slowdown = 0
|
||||
@@ -334,13 +333,14 @@
|
||||
/obj/item/weapon/storage/backpack,
|
||||
)
|
||||
|
||||
req_access = list()
|
||||
req_access = list(access_hos)
|
||||
req_one_access = list()
|
||||
|
||||
|
||||
/obj/item/weapon/rig/pursuit/equipped
|
||||
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/maneuvering_jets,
|
||||
/obj/item/rig_module/vision/sechud,
|
||||
/obj/item/rig_module/sprinter/pursuit,
|
||||
/obj/item/rig_module/grenade_launcher/nerfed,
|
||||
|
||||
@@ -148,3 +148,10 @@
|
||||
new /obj/item/clothing/accessory/badge/holo/cord(src)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/clothing/accessory/badge/belly
|
||||
name = "bellybrig holobadge"
|
||||
desc = "This glowing blue badge marks the holder as a designated bellybrig."
|
||||
icon_state = "vorebadge"
|
||||
badge_string = "Certified Bellybrig"
|
||||
@@ -181,6 +181,61 @@
|
||||
icon_state = "capcloak"
|
||||
item_state = "capcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/cargo
|
||||
name = "brown cloak"
|
||||
desc = "A simple brown and black cloak."
|
||||
icon_state = "cargocloak"
|
||||
item_state = "cargocloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mining
|
||||
name = "trimmed purple cloak"
|
||||
desc = "A trimmed purple and brown cloak."
|
||||
icon_state = "miningcloak"
|
||||
item_state = "miningcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/security
|
||||
name = "red cloak"
|
||||
desc = "A simple red and black cloak."
|
||||
icon_state = "seccloak"
|
||||
item_state = "seccloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/service
|
||||
name = "green cloak"
|
||||
desc = "A simple green and blue cloak."
|
||||
icon_state = "servicecloak"
|
||||
item_state = "servicecloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/engineer
|
||||
name = "gold cloak"
|
||||
desc = "A simple gold and brown cloak."
|
||||
icon_state = "engicloak"
|
||||
item_state = "engicloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/atmos
|
||||
name = "yellow cloak"
|
||||
desc = "A trimmed yellow and blue cloak."
|
||||
icon_state = "atmoscloak"
|
||||
item_state = "atmoscloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/research
|
||||
name = "purple cloak"
|
||||
desc = "A simple purple and white cloak."
|
||||
icon_state = "scicloak"
|
||||
item_state = "scicloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/medical
|
||||
name = "blue cloak"
|
||||
desc = "A simple blue and white cloak."
|
||||
icon_state = "medcloak"
|
||||
item_state = "medcloak"
|
||||
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/custom //A colorable cloak
|
||||
name = "cloak"
|
||||
desc = "A simple, bland cloak."
|
||||
icon_state = "colorcloak"
|
||||
item_state = "colorcloak"
|
||||
|
||||
/obj/item/clothing/accessory/hawaii
|
||||
name = "flower-pattern shirt"
|
||||
desc = "You probably need some welder googles to look at this."
|
||||
|
||||
@@ -30,13 +30,18 @@
|
||||
icon_state = "grey"
|
||||
rolled_sleeves = 0
|
||||
|
||||
//TFF 21/9/19 - add a different icon_state to both jumpsuits, orange and prison. Refactors orange and prison jumpsuit slightly.
|
||||
/obj/item/clothing/under/color/orange
|
||||
name = "orange jumpsuit"
|
||||
desc = "It's standardized prisoner-wear. Its suit sensors are permanently set to the \"Tracking\" position."
|
||||
icon_state = "orange"
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/prison
|
||||
name = "prison jumpsuit"
|
||||
desc = "It's standardized prisoner-wear. Its suit sensors are permanently set to the \"Tracking\" position."
|
||||
icon_state = "prison"
|
||||
has_sensor = 2
|
||||
sensor_mode = 3
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/color/pink
|
||||
name = "pink jumpsuit"
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
/obj/item/weapon/spacecasinocash/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/spacecasinocash))
|
||||
if(istype(W, /obj/item/weapon/spacecasinocash/ewallet)) return 0
|
||||
|
||||
var/obj/item/weapon/spacecasinocash/SC = W
|
||||
|
||||
@@ -144,25 +143,12 @@ proc/spawn_casinochips(var/sum, spawnloc, mob/living/carbon/human/human_user as
|
||||
human_user.put_in_hands(SC)
|
||||
return
|
||||
|
||||
/obj/item/weapon/spacecasinocash/ewallet
|
||||
name = "Casino chip card"
|
||||
icon_state = "efundcard"
|
||||
desc = "A casino card that can hold credits."
|
||||
var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions.
|
||||
attack_self() return //Don't act
|
||||
attackby() return //like actual
|
||||
update_icon() return //space cash
|
||||
|
||||
/obj/item/weapon/spacecasinocash/ewallet/examine(mob/user)
|
||||
..(user)
|
||||
if (!(user in view(2)) && user!=src.loc) return
|
||||
user << "<font color='#6F6FE2'>Casino chip card's owner: [src.owner_name]. credits remaining: [src.worth].</font>"
|
||||
|
||||
/obj/item/weapon/casin_platinum_chip
|
||||
/obj/item/weapon/casino_platinum_chip
|
||||
name = "platinum chip"
|
||||
desc = "Ringa-a-Ding-Ding!"
|
||||
icon = 'icons/obj/casino.dmi'
|
||||
icon_state = "platinum_chip"
|
||||
var/sides = 2
|
||||
opacity = 0
|
||||
density = 0
|
||||
anchored = 0.0
|
||||
@@ -170,4 +156,14 @@ proc/spawn_casinochips(var/sum, spawnloc, mob/living/carbon/human/human_user as
|
||||
throwforce = 1.0
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
w_class = ITEMSIZE_SMALL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
/obj/item/weapon/casino_platinum_chip/attack_self(mob/user as mob)
|
||||
var/result = rand(1, sides)
|
||||
var/comment = ""
|
||||
if(result == 1)
|
||||
comment = "Ace"
|
||||
else if(result == 2)
|
||||
comment = "Joker"
|
||||
user.visible_message("<span class='notice'>[user] has thrown \the [src]. It lands on [comment]! </span>", \
|
||||
"<span class='notice'>You throw \the [src]. It lands on [comment]! </span>")
|
||||
@@ -48,6 +48,8 @@
|
||||
teleport(user)
|
||||
|
||||
/obj/effect/portal/worm/teleport(atom/movable/M)
|
||||
if(istype(M, /mob/observer))
|
||||
return
|
||||
if(istype(M, /obj/effect)) //sparks don't teleport
|
||||
return
|
||||
if(M.anchored && istype(M, /obj/mecha))
|
||||
|
||||
@@ -430,9 +430,22 @@
|
||||
|
||||
if(additional_chems)
|
||||
|
||||
var/list/banned_chems = list(
|
||||
var/list/banned_chems = list( //expanding this list on request - Skits
|
||||
"adminordrazine",
|
||||
"nutriment"
|
||||
"nutriment",
|
||||
"spideregg",
|
||||
"bloodburn",
|
||||
"eden_snake",
|
||||
"aphrodisiac",
|
||||
"change_drug",
|
||||
"change_drug_male",
|
||||
"change_drug_female",
|
||||
"change_drug_intersex",
|
||||
"macrocillin",
|
||||
"microcillin",
|
||||
"normalcillin",
|
||||
"fakesynxchem",
|
||||
"clownsynxchem"
|
||||
)
|
||||
|
||||
for(var/x=1;x<=additional_chems;x++)
|
||||
@@ -565,7 +578,7 @@
|
||||
banned_chems += new_chem
|
||||
chems[new_chem] = list(rand(1,10),rand(10,20))
|
||||
source_turf.visible_message("<span class='notice'>\The [display_name] produce seems to be different!</span>")
|
||||
|
||||
|
||||
if(7)
|
||||
if(get_trait(TRAIT_YIELD) != -1)
|
||||
set_trait(TRAIT_YIELD, get_trait(TRAIT_YIELD)+(rand(-2,2)*degree),10,0)
|
||||
|
||||
@@ -98,6 +98,7 @@
|
||||
mob_swap_flags = ~HEAVY
|
||||
|
||||
var/identifying_gender // In case the human identifies as another gender than it's biological
|
||||
var/gender_change_cooldown = 0 // A cooldown for gender and gender indentify changing procs to make it easy to avoid spam of gender change
|
||||
|
||||
var/step_count = 0 // Track how many footsteps have been taken to know when to play footstep sounds
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/datum/trait/transformer
|
||||
name = "Transformer"
|
||||
desc = "Allows you to change your body at will!"
|
||||
cost = 4
|
||||
|
||||
/datum/trait/transformer/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_shape
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_colour
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_hair
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_eye_colour
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_hair_colors
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_gender
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_wings
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_tail
|
||||
H.verbs |= /mob/living/carbon/human/proc/transform_select_ears
|
||||
+380
@@ -0,0 +1,380 @@
|
||||
// Procs for the prometh- COUGH- I mean, traits are here.
|
||||
// Contains procs on transforming hair and such, mostly ripped from shape shifters however adjusted for a trait.
|
||||
//
|
||||
// I should recycle and use the existing promethean code and do no edits, however I put the code here so that people
|
||||
// can make edits to the actual trait compared to prometheans, such as giving them a longer cooldown or something if it ever has a need.
|
||||
|
||||
// - Jon
|
||||
|
||||
|
||||
// Species stuff.
|
||||
/datum/species
|
||||
var/valid_trait_transform_species = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_DIONA, SPECIES_TESHARI, SPECIES_MONKEY)
|
||||
|
||||
/datum/species/proc/get_valid_transform_forms(var/mob/living/carbon/human/H)
|
||||
return valid_trait_transform_species
|
||||
|
||||
// Verbs
|
||||
/mob/living/carbon/human/proc/transform_select_hair()
|
||||
|
||||
set name = "Select Hair"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 10
|
||||
|
||||
var/list/valid_hairstyles = list()
|
||||
var/list/valid_facialhairstyles = list()
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(!(species.get_bodytype(src) in S.species_allowed))
|
||||
continue
|
||||
valid_hairstyles += hairstyle
|
||||
for(var/facialhairstyle in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(!(species.get_bodytype(src) in S.species_allowed))
|
||||
continue
|
||||
valid_facialhairstyles += facialhairstyle
|
||||
|
||||
|
||||
visible_message("<span class='notice'>\The [src]'s form contorts subtly.</span>")
|
||||
if(valid_hairstyles.len)
|
||||
var/new_hair = input("Select a hairstyle.", "Transform Hair") as null|anything in valid_hairstyles
|
||||
change_hair(new_hair ? new_hair : "Bald")
|
||||
if(valid_facialhairstyles.len)
|
||||
var/new_hair = input("Select a facial hair style.", "Transform Hair") as null|anything in valid_facialhairstyles
|
||||
change_facial_hair(new_hair ? new_hair : "Shaved")
|
||||
|
||||
/mob/living/carbon/human/proc/transform_select_gender()
|
||||
|
||||
set name = "Select Gender"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 50
|
||||
|
||||
var/new_gender = input("Please select a gender.", "Transform Gender") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL)
|
||||
if(!new_gender)
|
||||
return
|
||||
|
||||
var/new_gender_identity = input("Please select a gender Identity.", "Transform Gender Identity") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL, HERM) //VOREStation Edit
|
||||
if(!new_gender_identity)
|
||||
return
|
||||
|
||||
visible_message("<span class='notice'>\The [src]'s form contorts subtly.</span>")
|
||||
change_gender(new_gender)
|
||||
change_gender_identity(new_gender_identity)
|
||||
|
||||
/mob/living/carbon/human/proc/transform_select_shape()
|
||||
|
||||
set name = "Select Body Shape"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 50
|
||||
|
||||
var/new_species = null
|
||||
new_species = input("Please select a species to emulate.", "Transform Body") as null|anything in species.get_valid_transform_forms(src)
|
||||
|
||||
if(!new_species || !all_species[new_species] || wrapped_species_by_ref["\ref[src]"] == new_species)
|
||||
return
|
||||
transform_change_shape(new_species)
|
||||
|
||||
/mob/living/carbon/human/proc/transform_change_shape(var/new_species = null)
|
||||
if(!new_species)
|
||||
return
|
||||
|
||||
wrapped_species_by_ref["\ref[src]"] = new_species
|
||||
visible_message("<span class='notice'>\The [src] shifts and contorts, taking the form of \a [new_species]!</span>")
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/carbon/human/proc/transform_select_colour()
|
||||
|
||||
set name = "Select Body Colour"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 50
|
||||
|
||||
var/new_skin = input("Please select a new body color.", "Change Colour") as color
|
||||
if(!new_skin)
|
||||
return
|
||||
transform_set_colour(new_skin)
|
||||
|
||||
/mob/living/carbon/human/proc/transform_set_colour(var/new_skin)
|
||||
|
||||
r_skin = hex2num(copytext(new_skin, 2, 4))
|
||||
g_skin = hex2num(copytext(new_skin, 4, 6))
|
||||
b_skin = hex2num(copytext(new_skin, 6, 8))
|
||||
r_synth = r_skin
|
||||
g_synth = g_skin
|
||||
b_synth = b_skin
|
||||
|
||||
for(var/obj/item/organ/external/E in organs)
|
||||
E.sync_colour_to_human(src)
|
||||
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/carbon/human/proc/transform_select_hair_colors()
|
||||
|
||||
set name = "Select Hair Colors"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 50
|
||||
|
||||
var/new_hair = input("Please select a new hair color.", "Hair Colour") as color
|
||||
if(!new_hair)
|
||||
return
|
||||
transform_set_hair_color(new_hair)
|
||||
var/new_fhair = input("Please select a new facial hair color.", "Facial Hair Color") as color
|
||||
if(!new_fhair)
|
||||
return
|
||||
transform_set_facial_color(new_fhair)
|
||||
|
||||
/mob/living/carbon/human/proc/transform_set_hair_color(var/new_hair)
|
||||
|
||||
change_hair_color(hex2num(copytext(new_hair, 2, 4)), hex2num(copytext(new_hair, 4, 6)), hex2num(copytext(new_hair, 6, 8)))
|
||||
|
||||
/mob/living/carbon/human/proc/transform_set_facial_color(var/new_fhair)
|
||||
|
||||
change_facial_hair_color(hex2num(copytext(new_fhair, 2, 4)), hex2num(copytext(new_fhair, 4, 6)), hex2num(copytext(new_fhair, 6, 8)))
|
||||
|
||||
// Replaces limbs and copies wounds
|
||||
/mob/living/carbon/human/proc/transform_change_species(var/new_species)
|
||||
if(!species)
|
||||
return
|
||||
|
||||
dna.species = new_species
|
||||
|
||||
var/list/limb_exists = list(
|
||||
BP_TORSO = 0,
|
||||
BP_GROIN = 0,
|
||||
BP_HEAD = 0,
|
||||
BP_L_ARM = 0,
|
||||
BP_R_ARM = 0,
|
||||
BP_L_LEG = 0,
|
||||
BP_R_LEG = 0,
|
||||
BP_L_HAND = 0,
|
||||
BP_R_HAND = 0,
|
||||
BP_L_FOOT = 0,
|
||||
BP_R_FOOT = 0
|
||||
)
|
||||
var/list/wounds_by_limb = list(
|
||||
BP_TORSO = new/list(),
|
||||
BP_GROIN = new/list(),
|
||||
BP_HEAD = new/list(),
|
||||
BP_L_ARM = new/list(),
|
||||
BP_R_ARM = new/list(),
|
||||
BP_L_LEG = new/list(),
|
||||
BP_R_LEG = new/list(),
|
||||
BP_L_HAND = new/list(),
|
||||
BP_R_HAND = new/list(),
|
||||
BP_L_FOOT = new/list(),
|
||||
BP_R_FOOT = new/list()
|
||||
)
|
||||
|
||||
// Copy damage values
|
||||
for(var/limb in organs_by_name)
|
||||
var/obj/item/organ/external/O = organs_by_name[limb]
|
||||
limb_exists[O.organ_tag] = 1
|
||||
wounds_by_limb[O.organ_tag] = O.wounds
|
||||
|
||||
species = all_species[new_species]
|
||||
species.create_organs(src)
|
||||
// species.handle_post_spawn(src)
|
||||
|
||||
for(var/limb in organs_by_name)
|
||||
var/obj/item/organ/external/O = organs_by_name[limb]
|
||||
if(limb_exists[O.organ_tag])
|
||||
O.species = all_species[new_species]
|
||||
O.wounds = wounds_by_limb[O.organ_tag]
|
||||
// sync the organ's damage with its wounds
|
||||
O.update_damages()
|
||||
O.owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called
|
||||
else
|
||||
organs.Remove(O)
|
||||
organs_by_name.Remove(O)
|
||||
|
||||
spawn(0)
|
||||
regenerate_icons()
|
||||
/* VOREStation Edit - Our own trait system, sorry.
|
||||
if(species && mind)
|
||||
apply_traits()
|
||||
*/
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/transform_select_eye_colour()
|
||||
|
||||
set name = "Select Eye Color"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 50
|
||||
|
||||
var/current_color = rgb(r_eyes,g_eyes,b_eyes)
|
||||
var/new_eyes = input("Pick a new color for your eyes.","Eye Color", current_color) as null|color
|
||||
if(!new_eyes)
|
||||
return
|
||||
|
||||
transform_set_eye_color(new_eyes)
|
||||
|
||||
/mob/living/carbon/human/proc/transform_set_eye_color(var/new_eyes)
|
||||
|
||||
var/list/new_color_rgb_list = hex2rgb(new_eyes)
|
||||
// First, update mob vars.
|
||||
r_eyes = new_color_rgb_list[1]
|
||||
g_eyes = new_color_rgb_list[2]
|
||||
b_eyes = new_color_rgb_list[3]
|
||||
// Now sync the organ's eye_colour list, if possible
|
||||
var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[O_EYES]
|
||||
if(istype(eyes))
|
||||
eyes.update_colour()
|
||||
|
||||
update_icons_body()
|
||||
update_eyes()
|
||||
|
||||
/mob/living/carbon/human/proc/transform_select_ears()
|
||||
set name = "Select Ears"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 10
|
||||
// Construct the list of names allowed for this user.
|
||||
var/list/pretty_ear_styles = list("Normal" = null)
|
||||
for(var/path in ear_styles_list)
|
||||
var/datum/sprite_accessory/ears/instance = ear_styles_list[path]
|
||||
if((!instance.ckeys_allowed) || (ckey in instance.ckeys_allowed))
|
||||
pretty_ear_styles[instance.name] = path
|
||||
|
||||
// Present choice to user
|
||||
var/new_ear_style = input(src, "Pick some ears!", "Character Preference", ear_style ? ear_style.name : null) as null|anything in pretty_ear_styles
|
||||
if(!new_ear_style)
|
||||
return
|
||||
|
||||
//Set new style
|
||||
ear_style = ear_styles_list[pretty_ear_styles[new_ear_style]]
|
||||
|
||||
//Allow color picks
|
||||
var/current_pri_color = rgb(r_ears,g_ears,b_ears)
|
||||
|
||||
var/new_pri_color = input("Pick primary ear color:","Ear Color (Pri)", current_pri_color) as null|color
|
||||
if(new_pri_color)
|
||||
var/list/new_color_rgb_list = hex2rgb(new_pri_color)
|
||||
r_ears = new_color_rgb_list[1]
|
||||
g_ears = new_color_rgb_list[2]
|
||||
b_ears = new_color_rgb_list[3]
|
||||
|
||||
//Indented inside positive primary color choice, don't bother if they clicked cancel
|
||||
var/current_sec_color = rgb(r_ears2,g_ears2,b_ears2)
|
||||
|
||||
var/new_sec_color = input("Pick secondary ear color (only applies to some ears):","Ear Color (sec)", current_sec_color) as null|color
|
||||
if(new_sec_color)
|
||||
new_color_rgb_list = hex2rgb(new_sec_color)
|
||||
r_ears2 = new_color_rgb_list[1]
|
||||
g_ears2 = new_color_rgb_list[2]
|
||||
b_ears2 = new_color_rgb_list[3]
|
||||
|
||||
update_hair() //Includes Virgo ears
|
||||
|
||||
/mob/living/carbon/human/proc/transform_select_tail()
|
||||
set name = "Select Tail"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 10
|
||||
// Construct the list of names allowed for this user.
|
||||
var/list/pretty_tail_styles = list("Normal" = null)
|
||||
for(var/path in tail_styles_list)
|
||||
var/datum/sprite_accessory/tail/instance = tail_styles_list[path]
|
||||
if((!instance.ckeys_allowed) || (ckey in instance.ckeys_allowed))
|
||||
pretty_tail_styles[instance.name] = path
|
||||
|
||||
// Present choice to user
|
||||
var/new_tail_style = input(src, "Pick a tail!", "Character Preference", tail_style ? tail_style.name : null) as null|anything in pretty_tail_styles
|
||||
if(!new_tail_style)
|
||||
return
|
||||
|
||||
//Set new style
|
||||
tail_style = tail_styles_list[pretty_tail_styles[new_tail_style]]
|
||||
|
||||
//Allow color picks
|
||||
var/current_pri_color = rgb(r_tail,g_tail,b_tail)
|
||||
|
||||
var/new_pri_color = input("Pick primary tail color:","Tail Color (Pri)", current_pri_color) as null|color
|
||||
if(new_pri_color)
|
||||
var/list/new_color_rgb_list = hex2rgb(new_pri_color)
|
||||
r_tail = new_color_rgb_list[1]
|
||||
g_tail = new_color_rgb_list[2]
|
||||
b_tail = new_color_rgb_list[3]
|
||||
|
||||
//Indented inside positive primary color choice, don't bother if they clicked cancel
|
||||
var/current_sec_color = rgb(r_tail2,g_tail2,b_tail2)
|
||||
|
||||
var/new_sec_color = input("Pick secondary tail color (only applies to some tails):","Tail Color (sec)", current_sec_color) as null|color
|
||||
if(new_sec_color)
|
||||
new_color_rgb_list = hex2rgb(new_sec_color)
|
||||
r_tail2 = new_color_rgb_list[1]
|
||||
g_tail2 = new_color_rgb_list[2]
|
||||
b_tail2 = new_color_rgb_list[3]
|
||||
|
||||
update_tail_showing()
|
||||
|
||||
/mob/living/carbon/human/proc/transform_select_wings()
|
||||
set name = "Select Wings"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 10
|
||||
// Construct the list of names allowed for this user.
|
||||
var/list/pretty_wing_styles = list("None" = null)
|
||||
for(var/path in wing_styles_list)
|
||||
var/datum/sprite_accessory/wing/instance = wing_styles_list[path]
|
||||
if((!instance.ckeys_allowed) || (ckey in instance.ckeys_allowed))
|
||||
pretty_wing_styles[instance.name] = path
|
||||
|
||||
// Present choice to user
|
||||
var/new_wing_style = input(src, "Pick some wings!", "Character Preference", wing_style ? wing_style.name : null) as null|anything in pretty_wing_styles
|
||||
if(!new_wing_style)
|
||||
return
|
||||
|
||||
//Set new style
|
||||
wing_style = wing_styles_list[pretty_wing_styles[new_wing_style]]
|
||||
|
||||
//Allow color picks
|
||||
var/current_color = rgb(r_wing,g_wing,b_wing)
|
||||
|
||||
var/new_color = input("Pick wing color:","Wing Color", current_color) as null|color
|
||||
if(new_color)
|
||||
var/list/new_color_rgb_list = hex2rgb(new_color)
|
||||
r_wing = new_color_rgb_list[1]
|
||||
g_wing = new_color_rgb_list[2]
|
||||
b_wing = new_color_rgb_list[3]
|
||||
|
||||
update_wing_showing()
|
||||
@@ -380,32 +380,33 @@
|
||||
return
|
||||
|
||||
/mob/living/silicon/pai/attack_hand(mob/user as mob)
|
||||
//Chompstation edit
|
||||
if(user.a_intent == I_HELP)
|
||||
visible_message("<span class='notice'>[user.name] [rand("pets","pats")] [src].</span>")
|
||||
else if(user.a_intent == I_GRAB)
|
||||
if(user == src || anchored)
|
||||
return 0
|
||||
for(var/obj/item/weapon/grab/G in src.grabbed_by)
|
||||
if(G.assailant == user)
|
||||
user << "<span class='notice'>You already grabbed [src].</span>"
|
||||
//Chompstation edit
|
||||
switch(user.a_intent)
|
||||
if(I_HELP)
|
||||
visible_message("<span class='notice'>[user.name] [pick("pets","pats")] [src].</span>")
|
||||
if(I_GRAB)
|
||||
if(user == src || anchored)
|
||||
return
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(user, src)
|
||||
if(buckled)
|
||||
user << "<span class='notice'>You cannot grab [src], they're buckled in!</span>"
|
||||
if(!G) //the grab will delete itself in New if affecting is anchored
|
||||
return
|
||||
user.put_in_active_hand(G)
|
||||
G.synch()
|
||||
LAssailant = user
|
||||
for(var/obj/item/weapon/grab/G in src.grabbed_by)
|
||||
if(G.assailant == user)
|
||||
user << "<span class='notice'>You already grabbed [src].</span>"
|
||||
return
|
||||
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(user, src)
|
||||
if(buckled)
|
||||
user << "<span class='notice'>You cannot grab [src], they're buckled in!</span>"
|
||||
if(!G) //the grab will delete itself in New if affecting is anchored
|
||||
return
|
||||
user.put_in_active_hand(G)
|
||||
G.synch()
|
||||
LAssailant = user
|
||||
user.do_attack_animation(src)
|
||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
visible_message("<span class='warning'>[user] has grabbed [src] passively!</span>")
|
||||
|
||||
user.do_attack_animation(src)
|
||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
visible_message("<span class='warning'>[user] has grabbed [src] passively!</span>")
|
||||
//End Chompstation edit
|
||||
else
|
||||
visible_message("<span class='danger'>[user.name] boops [src] on the head.</span>")
|
||||
close_up()
|
||||
else
|
||||
visible_message("<span class='danger'>[user.name] boops [src] on the head.</span>")
|
||||
close_up()
|
||||
//End Chompstation edit
|
||||
|
||||
//I'm not sure how much of this is necessary, but I would rather avoid issues.
|
||||
/mob/living/silicon/pai/proc/close_up()
|
||||
|
||||
@@ -673,6 +673,17 @@
|
||||
max_item_count = 10
|
||||
decompiler = TRUE
|
||||
|
||||
/obj/item/device/dogborg/sleeper/general //generic stomach for borgs
|
||||
name = "Robotic Stomach"
|
||||
desc = "A stretchy stomach for a vore enabled borg, it can hold and digest items and crew."
|
||||
icon_state = "belly-standard"
|
||||
injection_chems = null
|
||||
max_item_count = 10
|
||||
|
||||
/obj/item/device/dogborg/sleeper/medical
|
||||
name = "Borg Mounted Sleeper"
|
||||
desc = "A stretchy stomach for a vore enabled medical borg, it can hold crew for healing or as emergency power."
|
||||
icon_state = "belly-medical"
|
||||
|
||||
/obj/item/device/dogborg/sleeper/compactor/brewer //Boozehound gut.
|
||||
name = "Brew Belly"
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
/obj/item/weapon/service_fab
|
||||
name = "\improper Service item disepencer"
|
||||
desc = "A device used to dispence service items."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "rcd"
|
||||
var/obj/product
|
||||
var/mode = 1
|
||||
|
||||
/obj/item/weapon/service_fab/attack_self(mob/user as mob)
|
||||
var/mob/M = usr
|
||||
var/list/options = list()
|
||||
options["Drinking Glass, Pint"] = 1
|
||||
options["Coffee Cup"] = 2
|
||||
options["Paper"] = 3
|
||||
options["Pen"] = 4
|
||||
options["Dice Bag"] = 5
|
||||
options["Cigarette"] = 6
|
||||
var/choice = input(M,"Choose your item!") in options
|
||||
if(src && choice && !M.stat && in_range(M,src))
|
||||
mode = options[choice]
|
||||
M << "You will now dispence [choice]"
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/service_fab/afterattack(atom/A, mob/user as mob, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.stat || !R.cell || R.cell.charge <= 0)
|
||||
return
|
||||
// else
|
||||
// if(stored_matter <= 0)
|
||||
// return
|
||||
|
||||
if(!istype(A, /obj/structure/table) && !istype(A, /turf/simulated/floor))
|
||||
return
|
||||
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
|
||||
var/used_energy = 30
|
||||
// var/obj/product
|
||||
|
||||
switch(mode)
|
||||
if(1)
|
||||
product = new /obj/item/weapon/reagent_containers/food/drinks/glass2/pint()
|
||||
if(2)
|
||||
product = new /obj/item/weapon/reagent_containers/food/drinks/cup()
|
||||
if(3)
|
||||
product = new /obj/item/weapon/paper()
|
||||
if(4)
|
||||
product = new /obj/item/weapon/pen()
|
||||
if(5)
|
||||
product = new /obj/item/weapon/storage/pill_bottle/dice()
|
||||
if(6)
|
||||
product = new /obj/item/clothing/mask/smokable/cigarette()
|
||||
|
||||
user << "Dispensing [product ? product : "product"]..."
|
||||
product.loc = get_turf(A)
|
||||
|
||||
// if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell)
|
||||
R.cell.use(used_energy)
|
||||
@@ -0,0 +1,140 @@
|
||||
/obj/item/weapon/robot_module/robot/servore
|
||||
name = "vore services module"
|
||||
can_buckle = 1
|
||||
sprites = list(
|
||||
"Service BootyBot" = "servoregreen",
|
||||
"BoootyBlue" = "servore"
|
||||
)
|
||||
channels = list("Service" = 1)
|
||||
can_be_pushed = 0
|
||||
|
||||
languages = list(
|
||||
LANGUAGE_SOL_COMMON = 1,
|
||||
LANGUAGE_UNATHI = 1,
|
||||
LANGUAGE_SIIK = 1,
|
||||
LANGUAGE_AKHANI = 1,
|
||||
LANGUAGE_SKRELLIAN = 1,
|
||||
LANGUAGE_SKRELLIANFAR = 0,
|
||||
LANGUAGE_ROOTLOCAL = 0,
|
||||
LANGUAGE_TRADEBAND = 1,
|
||||
LANGUAGE_GUTTER = 0,
|
||||
LANGUAGE_SCHECHI = 1,
|
||||
LANGUAGE_EAL = 1,
|
||||
LANGUAGE_TERMINUS = 1,
|
||||
LANGUAGE_SIGN = 0
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/servore/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/gripper/service(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
|
||||
src.modules += new /obj/item/weapon/material/minihoe(src)
|
||||
src.modules += new /obj/item/weapon/material/knife/machete/hatchet(src)
|
||||
src.modules += new /obj/item/device/analyzer/plant_analyzer(src)
|
||||
src.modules += new /obj/item/weapon/storage/bag/plants(src)
|
||||
src.modules += new /obj/item/weapon/robot_harvester(src)
|
||||
src.modules += new /obj/item/weapon/material/knife(src)
|
||||
src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src)
|
||||
src.modules += new /obj/item/device/multitool(src) //to freeze trays
|
||||
src.modules += new /obj/item/device/dogborg/sleeper/general(src)
|
||||
src.modules += new /obj/item/weapon/service_fab(src)
|
||||
|
||||
//var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src)
|
||||
//M.stored_matter = 30
|
||||
//src.modules += M
|
||||
|
||||
src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
|
||||
|
||||
var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src)
|
||||
L.lit = 1
|
||||
src.modules += L
|
||||
|
||||
src.modules += new /obj/item/weapon/tray/robotray(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
|
||||
|
||||
var/datum/reagents/N = new/datum/reagents(50)
|
||||
src.emag.reagents = N
|
||||
N.my_atom = src.emag
|
||||
N.add_reagent("beer2", 50)
|
||||
src.emag.name = "Mickey Finn's Special Brew"
|
||||
|
||||
R.icon = 'icons/mob/robots_ch.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
// R.pixel_x = -16
|
||||
// R.old_x = -16
|
||||
// R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.resticon = FALSE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/vore
|
||||
name = "crisis robot vore module"
|
||||
sprites = list(
|
||||
"Medical BootyBot" = "medvore"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/vore/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/device/healthanalyzer(src)
|
||||
src.modules += new /obj/item/device/reagent_scanner/adv(src)
|
||||
src.modules += new /obj/item/roller_holder(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
|
||||
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
|
||||
src.modules += new /obj/item/weapon/gripper/medical(src)
|
||||
src.modules += new /obj/item/weapon/shockpaddles/robot(src)
|
||||
src.modules += new /obj/item/device/dogborg/sleeper/medical(src)
|
||||
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
|
||||
src.emag.reagents.add_reagent("pacid", 250)
|
||||
src.emag.name = "Polyacid spray"
|
||||
|
||||
var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000)
|
||||
synths += medicine
|
||||
|
||||
var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src)
|
||||
var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
|
||||
var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src)
|
||||
O.uses_charge = 1
|
||||
O.charge_costs = list(1000)
|
||||
O.synths = list(medicine)
|
||||
B.uses_charge = 1
|
||||
B.charge_costs = list(1000)
|
||||
B.synths = list(medicine)
|
||||
S.uses_charge = 1
|
||||
S.charge_costs = list(1000)
|
||||
S.synths = list(medicine)
|
||||
src.modules += O
|
||||
src.modules += B
|
||||
src.modules += S
|
||||
|
||||
R.icon = 'icons/mob/robots_ch.dmi'
|
||||
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
|
||||
R.ui_style_vr = TRUE
|
||||
// R.pixel_x = -16
|
||||
// R.old_x = -16
|
||||
// R.default_pixel_x = -16
|
||||
R.dogborg = TRUE
|
||||
R.wideborg = TRUE
|
||||
R.resticon = FALSE
|
||||
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
|
||||
..()
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/vore/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
|
||||
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
|
||||
if(S.mode == 2)
|
||||
S.reagents.clear_reagents()
|
||||
S.mode = initial(S.mode)
|
||||
S.desc = initial(S.desc)
|
||||
S.update_icon()
|
||||
|
||||
if(src.emag)
|
||||
var/obj/item/weapon/reagent_containers/spray/PS = src.emag
|
||||
PS.reagents.add_reagent("pacid", 2 * amount)
|
||||
|
||||
..()
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
robot_modules["Pupdozer"] = /obj/item/weapon/robot_module/robot/engiedog
|
||||
robot_modules["BoozeHound"] = /obj/item/weapon/robot_module/robot/booze
|
||||
robot_modules["Service-borg"] = /obj/item/weapon/robot_module/robot/servborg
|
||||
robot_modules["Vore Services"] = /obj/item/weapon/robot_module/robot/servore//edit chompers
|
||||
robot_modules["Medivore"] = /obj/item/weapon/robot_module/robot/medical/vore
|
||||
return 1
|
||||
|
||||
//Just add a new proc with the robot_module type if you wish to run some other vore code
|
||||
@@ -509,11 +511,11 @@
|
||||
water.energy = 0
|
||||
R.water_res = water
|
||||
synths += water
|
||||
|
||||
|
||||
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
|
||||
T.water = water
|
||||
src.modules += T
|
||||
|
||||
|
||||
|
||||
src.modules += new /obj/item/weapon/tray/robotray(src)
|
||||
src.modules += new /obj/item/weapon/reagent_containers/borghypo/service/booze(src)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
var/leap_at
|
||||
var/dogborg = FALSE //Dogborg special features (overlays etc.)
|
||||
var/wideborg = FALSE //When the borg simply doesn't use standard 32p size.
|
||||
var/resticon = TRUE //does nothing without dogborg and when false makes it use a similar method to default borgs
|
||||
var/scrubbing = FALSE //Floor cleaning enabled
|
||||
var/datum/matter_synth/water_res = null
|
||||
var/notransform
|
||||
@@ -56,9 +57,12 @@
|
||||
add_overlay("taser")
|
||||
if(lights_on)
|
||||
add_overlay("eyes-[module_sprites[icontype]]-lights")
|
||||
if(resting)
|
||||
if(resting && resticon == FALSE)
|
||||
cut_overlay("eyes-[module_sprites[icontype]]")
|
||||
if(resting && resticon == TRUE)
|
||||
cut_overlays() // Hide that gut for it has no ground sprite yo.
|
||||
icon_state = "[module_sprites[icontype]]-rest"
|
||||
|
||||
else
|
||||
icon_state = "[module_sprites[icontype]]"
|
||||
if(dogborg == TRUE && stat == DEAD)
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
icon_state = "goose"
|
||||
icon_living = "goose"
|
||||
icon_dead = "goose_dead"
|
||||
|
||||
|
||||
has_hands = 1
|
||||
|
||||
faction = "geese"
|
||||
intelligence_level = SA_ANIMAL
|
||||
|
||||
@@ -50,6 +52,29 @@
|
||||
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
var/honking = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/goose/New()
|
||||
..()
|
||||
if (prob(10))
|
||||
name = "Untitled Goose"
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 1
|
||||
hostile = 0
|
||||
retaliate = 1
|
||||
cooperative = 1
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
honk()
|
||||
honking = 1
|
||||
humanoid_hands = 1
|
||||
new /mob/living/simple_animal/hostile/goose(loc)
|
||||
new /mob/living/simple_animal/hostile/goose(loc)
|
||||
|
||||
/mob/living/simple_animal/hostile/goose/Life()
|
||||
..()
|
||||
if(honking && prob(1))
|
||||
honk()
|
||||
|
||||
/mob/living/simple_animal/hostile/goose/set_target()
|
||||
. = ..()
|
||||
@@ -58,3 +83,22 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/goose/Process_Spacemove(var/check_drift = 0)
|
||||
return 1 // VOREStation Edit No drifting in space!
|
||||
|
||||
/mob/living/simple_animal/hostile/goose/proc/honk()
|
||||
playsound(loc, 'sound/effects/honk.ogg', 50, 1) //playceholder, will be actual honk later
|
||||
|
||||
/mob/living/simple_animal/hostile/goose/DoPunch(var/atom/A)
|
||||
. = ..()
|
||||
|
||||
if(.) // If we succeeded in hitting.
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(prob(2) && honking)
|
||||
L.drop_from_inventory(l_hand)
|
||||
L.drop_from_inventory(r_hand)
|
||||
|
||||
/mob/living/simple_animal/hostile/goose/tooluser
|
||||
name="goose with"
|
||||
|
||||
/mob/living/simple_animal/hostile/goose/tooluser/knife
|
||||
name="goose with knife"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/mob/living/simple_animal/retaliate/synx
|
||||
//on inteligence https://synx.fandom.com/wiki/Behavior/Intelligence //keeping this here for player controlled synxes.
|
||||
name = "Synx"
|
||||
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Plain, white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration."
|
||||
tt_desc = "synxus pergulus"
|
||||
@@ -68,6 +69,18 @@
|
||||
vore_icons = 0 //no vore icons
|
||||
swallowTime = 6 SECONDS //Enter the eel you nerd
|
||||
|
||||
//Shouldn't be affected by lack of atmos, it's a space eel.
|
||||
min_oxy = 0
|
||||
max_oxy = 0 //Maybe add a max
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0 //Maybe add a max
|
||||
min_n2 = 0
|
||||
max_n2 = 0 //Maybe add a max
|
||||
minbodytemp = 0
|
||||
// TODO: Set a max temperature of about 20-30 above room temperatures. Synx don't like the heat.
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
@@ -96,17 +109,29 @@
|
||||
"The synx lets out an audible belch, the last of your air going with it, and with a few audible crunches from the outside, the stomach claims you as food for the parasite."
|
||||
)
|
||||
|
||||
//Shouldn't be affected by lack of atmos, it's a space eel.
|
||||
min_oxy = 0
|
||||
max_oxy = 0 //Maybe add a max
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0 //Maybe add a max
|
||||
min_n2 = 0
|
||||
max_n2 = 0 //Maybe add a max
|
||||
minbodytemp = 0
|
||||
// TODO: Set a max temperature of about 20-30 above room temperatures. Synx don't like the heat.
|
||||
/mob/living/simple_animal/retaliate/synx/pet/asteri/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.desc = "The synx eagerly swallows you, taking you from its gullet into its long, serpentine stomach. The internals around you greedily press into your from all sides, keeping you coated in a slick coat of numbing fluids..."
|
||||
B.digest_burn = 1
|
||||
B.digest_brute = 1
|
||||
B.emote_lists[DM_HOLD] = list(
|
||||
"Your taut prison presses and pads into your body, the synx squeezing around you almost constrictingly tight while the rolling pulses of muscle around you keep your squirms well-contained.",
|
||||
"You can feel parts of you sink and press into the squishy stomach walls as the synx's gut seems to relax, the wet ambience of its stomach muffling the parasite's various heartbeats.",
|
||||
"You can hear the synx teasingly mimic the sounds you've made while it's eaten you, the stomach walls practically massaging more of numbing fluid into you as its innards do their best to tire you out.",
|
||||
)
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"The stomach gives a crushing squeeze around your frame, its body restraining your movements and pressing digestive fluids deeper into you with overwhelming pressure from all sides..",
|
||||
"The synx's insides greedily press into you all over, kneading around your body and softening you up for the slurry of numbing acid that's pooled around your melting frame.",
|
||||
"You can hear a cacophony of wet churns and gurgles from the synx's body as it works on breaking you down, the parasite eagerly awaiting your final moments.",
|
||||
"The tight, fleshy tunnel constricts around you, making it even harder to breathe the already thin air as the digestive cocktail around you wears you out.",
|
||||
)
|
||||
B.digest_messages_prey = list(
|
||||
"You finally give in to the constricting pressure, softened up enough for the acids around you to turn your entire being into a gooey slop to be pumped through its body.",
|
||||
"Slipping past the point of saving, your body gives out on you as the stomach walls grind your goopy remains into a chunky sludge, leaving behind only a few acid-soaked bones for it to stash in the vents.",
|
||||
"The constant fatal massage pulls you under, your conciousness fading away as you're drawn into a numb, permanent sleep. The body you leave behind is put to good use as a few extra pounds on the synx's frame, its now-wider hips making it just a little harder to squeeze through the vents it's so fond of.",
|
||||
"The synx's body gleefully takes what's left of your life, Asteri's usually-repressed sadism overwhelmed with a sinister satisfaction in snuffing you out as your liquefied remains gush into a bit more heft on the parasite's emaciated frame.",
|
||||
)
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/New()
|
||||
..()
|
||||
@@ -463,6 +488,66 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
vore_bump_chance = 2 //lowered bump chance
|
||||
vore_escape_chance = 5 //Multivore allows for people to shove eachother out so lower normal escape chance.
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/greed/synth
|
||||
/*
|
||||
▓███▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓███▓
|
||||
▓▓ ▓▓▓█ ▓▓ ▓▓█ ▓▓ ▓▓█ ▓▓ ▓▓█ ▓▓ ▓▓█ ▓▓ ▓▓▓█
|
||||
▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓▓
|
||||
▓ █▓▓▓ █▓▓ █▓▓ █▓▓ █▓▓ █▓▓▓
|
||||
▓ █▓▓▓▓█ █▓▓ ▓█ █▓▓ ▓█ █▓▓█▓█ █▓▓▓ █▓▓▓
|
||||
▓ █▓▓▓ ▓█▓ █▓█▓█ █▓█▓█ ▓▓█ ▓█ █▓▓▓
|
||||
▓█ █▓▓▓ ▓▓▓ ▓▓▓ ▓▓ █▓▓▓
|
||||
▓▓ █▓▓ ▓ ▓ ▓ █▓▓▓
|
||||
▓ █▓▓ ▓█ █▓▓
|
||||
▓ ▓▓▓ ▓▓ █▓▓
|
||||
█\ ▓▓ ▓▓ ▓█ ▓ █▓▓
|
||||
▓█\ ▓█ ▓█▓ ▓▓▓ █▓ █▓▓
|
||||
▓▓▓█ ▓ ▓▓▓▓ ▓ ▓▓ ▓ █▓▓
|
||||
▓█▓ ▓▓█▓▓ ▓ ▓▓ ▓▓▓
|
||||
▓▓ █▓▓█ █▓ █▓▓
|
||||
▓▓ ▓▓▓ ▓▓ █▓▓
|
||||
▓ ▓▓▓ ▓ █▓▓
|
||||
▓▓ █▓▓█ █▓ █▓▓▓
|
||||
▓ █▓▓▓ ▓▓█ █▓█ ▓▓ █▓▓▓
|
||||
▓ █▓▓▓▓▓ ▓▓█ ▓▓ ▓▓█▓ █▓▓▓
|
||||
▓ █▓▓▓ ▓▓▓ ▓▓▓ █▓▓▓
|
||||
▓ █▓▓▓ ▓▓▓ ▓▓▓ █▓▓▓
|
||||
▓█▓██▓▓▓█▓█▓█▓▓▓█▓█▓█▓▓▓█▓█▓██▓▓▓
|
||||
*/
|
||||
icon_state = "synx_C_living"
|
||||
icon_living = "synx_C_living"
|
||||
icon_dead = "synx_C_dead"
|
||||
hostile = 1
|
||||
name = "SYN-KinC"
|
||||
desc = "A robotic recreation of a an Alien parasite. The metal plates seem quite thick."
|
||||
humanoid_hands = 1
|
||||
health = 200 //Metally
|
||||
player_msg = "All systems nominal."
|
||||
/////////////////////ARMOR
|
||||
armor = list(
|
||||
"melee" = 50,
|
||||
"bullet" = 50,
|
||||
"laser" = -50,
|
||||
"energy" = -50,
|
||||
"bomb" = 50,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
////////////////////////////MED INJECTOR
|
||||
poison_type = "oxycodone" //OD effects, eye_blurry | Confuse + for slimes | stuttering
|
||||
poison_chance = 77 //high but not guranteed.
|
||||
poison_per_bite = 9 //OD for oxyc is 20
|
||||
//////////////////////////////////////////////FACTION
|
||||
faction = "SYN"
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
name = "SYN-KinC-([rand(100,999)])"
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/greed/synth/goodboy
|
||||
hostile = 0
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/diablo
|
||||
//var/diablo_LIVING = "synx_diablo_living"
|
||||
//var/diablo_DEAD = "synx_diablo_dead"
|
||||
@@ -475,16 +560,24 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
//Vore Section
|
||||
vore_capacity = 2
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/diablo/sicsempertyrannis
|
||||
name = "grins"
|
||||
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. grey, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration.. This one has a small shock collar on it that reads 'grins'."
|
||||
icon_state = "synx_diablo_living"
|
||||
icon_living = "synx_diablo_living"
|
||||
icon_dead = "synx_diablo_dead"
|
||||
speak = list( )
|
||||
/mob/living/simple_animal/retaliate/synx/pet/asteri
|
||||
name = "Asteri"
|
||||
desc = "A cold blooded, genderless, parasitic eel from the more distant and stranger areas of the cosmos. Bleak white, perpetually grinning and possessing a hunger as enthusiastic and endless as humanity's sense of exploration.. This one has distinctive markings over its face forming the shape of a star, and its back holds a sizeable scar leading up to a small implanted device just above its waist, the name 'Asteri' scribed across the metal."
|
||||
//icon= //icon= would just set what DMI we are using, we already have our special one set.
|
||||
icon_state = "synx_asteri_living"
|
||||
icon_living = "synx_asteri_living"
|
||||
icon_dead = "synx_asteri_dead"
|
||||
speak = list("Who is there?")//preset unique words Asteri remembers, to be defined more
|
||||
player_msg = "SCREAMING NOISES."
|
||||
health = 100//Slightly lower health due to being damaged permanently.
|
||||
speak_chance = 5
|
||||
//Vore Section
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_capacity = 2
|
||||
|
||||
vore_digest_chance = 50
|
||||
vore_pounce_chance = 40
|
||||
vore_bump_chance = 2
|
||||
vore_escape_chance = 5
|
||||
|
||||
/mob/living/simple_animal/retaliate/synx/pet/clown
|
||||
hostile = 1
|
||||
@@ -548,9 +641,9 @@ mob/living/simple_animal/synx/PunchTarget()
|
||||
/obj/random/mob/synx/item_to_spawn()
|
||||
if(Holiday == "April Fool's Day") //WE WISH YOU A MERRY CLOWNMAS
|
||||
return /mob/living/simple_animal/retaliate/synx/pet/clown
|
||||
else return pick(prob(50);/mob/living/simple_animal/retaliate/synx/pet/greed,
|
||||
prob(50);/mob/living/simple_animal/retaliate/synx/pet/diablo,
|
||||
prob(50);/mob/living/simple_animal/retaliate/synx/pet/holo,)
|
||||
else return pick(prob(70);/mob/living/simple_animal/retaliate/synx/pet/greed,
|
||||
prob(50);/mob/living/simple_animal/retaliate/synx/pet/asteri,
|
||||
prob(20);/mob/living/simple_animal/retaliate/synx/pet/holo,)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////NOT A SYNX///////but looks kinda like one/////////
|
||||
|
||||
@@ -172,9 +172,17 @@
|
||||
var/obj/belly/B = vore_selected
|
||||
B.vore_verb = "chomp up"
|
||||
B.name = "stomach"
|
||||
B.desc = "You're pulled into the tight stomach of the plant. The walls knead weakly around you, coating you in thick, viscous fluids that cling to your body, that soon starts to tingle and burn..."
|
||||
B.desc = "You're pulled into the tight mouth of the plant. The teeth and walls gnash harshly on you!"
|
||||
B.digest_burn = 0
|
||||
B.digest_brute = 12
|
||||
B.digest_brute = 5
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/spitter/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.vore_verb = "slurped up"
|
||||
B.desc = "You're pulled into the tight mouth of the plant. The tongue mulls you about and squishes you around, coating you in a slurry of digestive fluides that burn hotly and smell foul."
|
||||
B.digest_burn = 5
|
||||
B.digest_brute = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher
|
||||
icon_state = "pitcher-plant"
|
||||
@@ -220,6 +228,7 @@
|
||||
/mob/living/simple_animal/hostile/piranhaplant/pitcher/init_vore()
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.desc = "You're pulled into the tight stomach of the plant. The walls knead weakly around you, coating you in thick, viscous fluids that cling to your body, that soon starts to tingle and burn..."
|
||||
B.digest_burn = 0.5
|
||||
B.digest_brute = 0
|
||||
B.vore_verb = "slurp up"
|
||||
|
||||
@@ -87,6 +87,9 @@
|
||||
if(vore_capacity != 0 && (vore_fullness >= vore_capacity)) // We're too full to fit them
|
||||
ai_log("vr/wont eat [M] because I am too full", 3)
|
||||
return 0
|
||||
if(!M.isEdible)//Don't eat mobs that can't be eaten.
|
||||
ai_log("vr/wont eat [M] because they aren't edible", 3)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/PunchTarget()
|
||||
|
||||
@@ -46,7 +46,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
|
||||
speak_chance = 2
|
||||
emote_hear = list("makes a wooshing sound")
|
||||
emote_see = list("SKREE's")
|
||||
emote_see = list("SKREEs")
|
||||
|
||||
meat_type = /obj/item/toy/figure/samus
|
||||
|
||||
@@ -57,6 +57,33 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
var/evo_limit = 0
|
||||
var/next = null
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/init_vore() //graciously ~stolen~ inspired from the Synx code
|
||||
..()
|
||||
var/obj/belly/B = vore_selected
|
||||
B.vore_verb = "swallow"
|
||||
B.name = "membrane"
|
||||
B.desc = "The metroid positions itself above you and swoops down, lazily enveloping you through its tight mouth and sending you straight to its bulbous membrane for all to see."
|
||||
B.emote_lists[DM_HOLD] = list(
|
||||
"The metroid's cortex tentacles wriggle over you, violating and teasing you as they sopped you in viscous slime.",
|
||||
"The cortex you are forced against pulses with life, gently squeezing you between it and the stretchy membrane around you.",
|
||||
"You press your face against the transparent membrane, watching how the world distorts as it stretches over your eyes.",
|
||||
"The air around you is so thick. You struggle to breathe occasionally, choking on the heat and moisture.",
|
||||
"You struggle a bit, making the membrane swell out."
|
||||
)
|
||||
B.emote_lists[DM_DIGEST] = list(
|
||||
"The cortex tentacles are pulsating like lines of power streaking away from you as it drains you. Waves of sleepiness wash over you as the areas most closest to the tentacles are drained of energy.",
|
||||
"The air feels a tinge incendiary as the cortex you rest on heats up, fueled by your own body as the metroid draws your strenght away from you.",
|
||||
"As you grow weaker, your movements against the membrane grow weaker as well, making you feel as if the membrane is closing around you, wrapping and squeezing you, draining you for all you are worth.",
|
||||
"You feel faint as the tentacles wrapped around you sap you of your strength, seemingly eager to drain and claim you for food."
|
||||
)
|
||||
B.digest_messages_prey = list(
|
||||
"You can't stay awake anymore, the clear world around you going fuzzy until you can see it no more.",
|
||||
"The tinge of the air grows to a crescendo and then fades away, just as the rest of your body fizzles into energy for the metroid.",
|
||||
"The tentacles squeeze you one last time as the last of your energy is sapped and your body is claimed as food for the metroid.",
|
||||
"The metroid swells as it absorbs the rest of your life force and nutrients into its body, making it stronger and even hungry for more."
|
||||
)
|
||||
|
||||
|
||||
//Stuff for if a person is playing as a metroid.
|
||||
show_stat_health = 1 // Does the percentage health show in the stat panel for the mob
|
||||
ai_inactive = 0 // Set to 1 to turn off most AI actions
|
||||
@@ -82,6 +109,36 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
playsound(src, 'sound/effects/metroiddeath.ogg', 50, 1)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/pet //Security's pet
|
||||
name = "Jellybrig"
|
||||
desc = "This one scree's happily at you."
|
||||
hostile = 0
|
||||
retaliate = 1 //Just making sure. Hostile and Retaliate vars are literally the only difference between a hostile and a retaliate mob.
|
||||
faction = "neutral"
|
||||
maxHealth = 400
|
||||
health = 400
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 9
|
||||
move_to_delay = 6
|
||||
harm_intent_damage = 1
|
||||
armor = list(
|
||||
"melee" = 50,
|
||||
"bullet" = -90,
|
||||
"laser" = 0,
|
||||
"energy" = -50,
|
||||
"bomb" = 70,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
vore_active = 1
|
||||
vore_bump_chance = 0
|
||||
vore_capacity = 1
|
||||
vore_icons = SA_ICON_LIVING
|
||||
vore_pounce_chance = 80 //Don't punch or grab this guy. He will grab you instead!
|
||||
swallowTime = 1 SECONDS //Hungry little bastards.
|
||||
vore_default_mode = DM_HOLD
|
||||
vore_digest_chance = 1 // Chance to switch to digest mode if resisted
|
||||
vore_absorb_chance = 0
|
||||
vore_escape_chance = 10
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/mine
|
||||
@@ -126,10 +183,10 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_damage_upper = 5
|
||||
melee_miss_chance = 0
|
||||
armor = list(
|
||||
"melee" = 50,
|
||||
"bullet" = 30,
|
||||
"laser" = 80,
|
||||
"energy" = 90,
|
||||
"melee" = 20,
|
||||
"bullet" = -60,
|
||||
"laser" = 60,
|
||||
"energy" = 10,
|
||||
"bomb" = 70,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
@@ -138,7 +195,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
move_to_delay = 3
|
||||
|
||||
//Metroids aren't affected by most atmospheres except cold.
|
||||
minbodytemp = T0C-30
|
||||
minbodytemp = T0C-40
|
||||
cold_damage_per_tick = 100
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
@@ -191,13 +248,13 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
health = 250
|
||||
maxHealth = 250
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 5
|
||||
melee_damage_upper = 9
|
||||
melee_miss_chance = 0
|
||||
armor = list(
|
||||
"melee" = 50,
|
||||
"bullet" = 30,
|
||||
"melee" = 20,
|
||||
"bullet" = -50,
|
||||
"laser" = 90,
|
||||
"energy" = 90,
|
||||
"energy" = 10,
|
||||
"bomb" = 70,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
@@ -206,7 +263,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
move_to_delay = 3
|
||||
|
||||
//Metroids aren't affected by most atmospheres except cold.
|
||||
minbodytemp = T0C-30
|
||||
minbodytemp = T0C-40
|
||||
cold_damage_per_tick = 100
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
@@ -273,10 +330,10 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_miss_chance = 5
|
||||
attacktext = list("rammed")
|
||||
armor = list(
|
||||
"melee" = 60,
|
||||
"bullet" = 45,
|
||||
"melee" = 50,
|
||||
"bullet" = 15,
|
||||
"laser" = 50,
|
||||
"energy" = 70,
|
||||
"energy" = 60,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
@@ -355,8 +412,8 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
melee_miss_chance = 5
|
||||
attacktext = list("rammed")
|
||||
armor = list(
|
||||
"melee" = 60,
|
||||
"bullet" = 50,
|
||||
"melee" = 55,
|
||||
"bullet" = 15,
|
||||
"laser" = 50,
|
||||
"energy" = 90,
|
||||
"bomb" = 10,
|
||||
@@ -446,9 +503,9 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
attacktext = list("slashed")
|
||||
armor = list(
|
||||
"melee" = 70,
|
||||
"bullet" = 60,
|
||||
"bullet" = 15,
|
||||
"laser" = 50,
|
||||
"energy" = 70,
|
||||
"energy" = 60,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
@@ -539,9 +596,9 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
attacktext = list("slashed")
|
||||
armor = list(
|
||||
"melee" = 75,
|
||||
"bullet" = 60,
|
||||
"bullet" = 40,
|
||||
"laser" = 55,
|
||||
"energy" = 90,
|
||||
"energy" = 60,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
@@ -633,7 +690,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
attacktext = list("gnashed")
|
||||
armor = list(
|
||||
"melee" = 75,
|
||||
"bullet" = 60,
|
||||
"bullet" = 40,
|
||||
"laser" = 60,
|
||||
"energy" = 90,
|
||||
"bomb" = 10,
|
||||
@@ -698,7 +755,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
vore_pounce_chance = 60 //It's the queen, and it's hungry.
|
||||
vore_default_mode = DM_DIGEST
|
||||
swallowTime = 3 SECONDS
|
||||
vore_escape_chance = 0
|
||||
vore_escape_chance = 0 //You're not climbing out of that neck
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------
|
||||
@@ -772,23 +829,24 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/Life()
|
||||
. = ..()
|
||||
|
||||
if(canEvolve == 1 && nutrition >= evo_limit && (buckled || vore_fullness == 1)) //spit dat crap out if nutrition gets too high!
|
||||
release_vore_contents()
|
||||
prey_excludes.Cut()
|
||||
stop_consumption()
|
||||
if(stat != DEAD)
|
||||
if(canEvolve == 1 && nutrition >= evo_limit && (buckled || vore_fullness == 1)) //spit dat crap out if nutrition gets too high!
|
||||
release_vore_contents()
|
||||
prey_excludes.Cut()
|
||||
stop_consumption()
|
||||
|
||||
if(canEvolve == 1 && nutrition >= evo_point && !buckled && vore_fullness == 0 && !victim)
|
||||
playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1)
|
||||
paralysis = 7998
|
||||
sleep(50)
|
||||
paralysis = 0
|
||||
expand_troid()
|
||||
return
|
||||
if(stance == 7) //Necessary to fix a bug where if their vore prey or latching victim is laying down when they evolve, they get stuck in stance 7 and do nothing.
|
||||
stance = 4
|
||||
return
|
||||
else
|
||||
handle_idle()
|
||||
if(canEvolve == 1 && nutrition >= evo_point && !buckled && vore_fullness == 0 && !victim)
|
||||
playsound(src, 'sound/metroid/metroidgrow.ogg', 50, 1)
|
||||
paralysis = 7998
|
||||
sleep(50)
|
||||
paralysis = 0
|
||||
expand_troid()
|
||||
return
|
||||
if(stance == 7) //Necessary to fix a bug where if their vore prey or latching victim is laying down when they evolve, they get stuck in stance 7 and do nothing.
|
||||
stance = 4
|
||||
return
|
||||
else
|
||||
handle_idle()
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/proc/expand_troid()
|
||||
new next(get_turf(src))
|
||||
@@ -811,13 +869,14 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
|
||||
/mob/living/simple_animal/hostile/metroid/evolution/proc/handle_idle()
|
||||
//Do we have a vent ? Good, let's take a look
|
||||
|
||||
for(entry_vent in view(1, src))
|
||||
if(!victim && !buckled && vore_fullness == 0 && prob(90)) //10 % chance to consider a vent, to try and avoid constant vent switching
|
||||
if(prob(1)) //1% chance to consider a vent, to try and avoid constant vent switching
|
||||
return
|
||||
visible_message("<span class='danger'>\The [src] starts trying to slide itself into the vent!</span>")
|
||||
sleep(50) //Let's stop the metroid for five seconds to do its parking job
|
||||
..()
|
||||
if(!victim && !buckled && vore_fullness == 0 && entry_vent.network && entry_vent.network.normal_members.len)
|
||||
if(entry_vent.network && entry_vent.network.normal_members.len)
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.network.normal_members)
|
||||
vents.Add(temp_vent)
|
||||
@@ -924,7 +983,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
|
||||
var/armor_modifier = abs((victim.getarmor(null, "bio") / 100) - 1)
|
||||
if(istype(victim, /mob/living/carbon))
|
||||
victim.adjustCloneLoss(rand(5,6) * armor_modifier)
|
||||
victim.adjustCloneLoss(rand(2,6) * armor_modifier)
|
||||
victim.adjustToxLoss(rand(1,2) * armor_modifier)
|
||||
if(victim.health <= 0)
|
||||
victim.adjustToxLoss(rand(2,4) * armor_modifier)
|
||||
@@ -938,7 +997,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
"I can not feed from this subject", "I do not feel nourished", "This subject is not food")]...</span>")
|
||||
stop_consumption()
|
||||
|
||||
adjust_nutrition(50 * armor_modifier)
|
||||
adjust_nutrition(35 * armor_modifier)
|
||||
playsound(src, 'sound/metroid/metroidattack.ogg', 50, 1)
|
||||
|
||||
adjustOxyLoss(-10 * armor_modifier) //Heal yourself
|
||||
@@ -1028,7 +1087,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
if(!L.isSynthetic())
|
||||
if(ishuman(L))
|
||||
if(L.getCloneLoss() < L.getMaxHealth() * 1.5)
|
||||
adjust_nutrition(damage_to_do * armor_modifier)
|
||||
adjust_nutrition(5 + damage_to_do * armor_modifier)
|
||||
|
||||
else if(istype(L, /mob/living/simple_animal))
|
||||
if(!ismetroid(L))
|
||||
@@ -1201,7 +1260,7 @@ var/global/list/queen_amount = 0 //We only gonna want 1 queen in the world.
|
||||
var/mob/living/simple_animal/SA = L
|
||||
if(!SA.stat)
|
||||
L.attack_generic(src, damage_to_do, pick(attacktext))
|
||||
adjust_nutrition(damage_to_do * 4)
|
||||
adjust_nutrition(damage_to_do * 5)
|
||||
|
||||
|
||||
if(istype(L,/obj/mecha))
|
||||
|
||||
@@ -270,6 +270,12 @@
|
||||
var/passthrough = (removed - (removed/pass_mod)) //Some may be nullified during consumption, between one third and one fifth.
|
||||
affect_blood(M, alien, passthrough)
|
||||
|
||||
/datum/reagent/sodiumchloride/overdose(var/mob/living/carbon/M, var/alien, var/removed) // This is for you, Solus. -Erik
|
||||
if(alien == IS_DIONA)
|
||||
return
|
||||
|
||||
M/human.losebreath = 10
|
||||
|
||||
/datum/reagent/blackpepper
|
||||
name = "Black Pepper"
|
||||
id = "blackpepper"
|
||||
@@ -1374,9 +1380,10 @@
|
||||
glass_desc = "A sweet concotion hated even by its namesake."
|
||||
glass_special = list(DRINK_FIZZ)
|
||||
|
||||
/datum/reagent/drink/roy_rogers
|
||||
//CHOMPStation Edit TFF 24/9/19 - Minor change to make it easier for no runtimes with casino.dm
|
||||
/datum/reagent/drink/royrogers
|
||||
name = "Roy Rogers"
|
||||
id = "roy_rogers"
|
||||
id = "royrogers"
|
||||
description = "I'm a cowboy, on a steel horse I ride."
|
||||
taste_description = "cola and fruit"
|
||||
color = "#4F1811"
|
||||
@@ -2045,7 +2052,8 @@
|
||||
glass_name = "Barefoot"
|
||||
glass_desc = "Barefoot and pregnant."
|
||||
|
||||
/datum/reagent/ethanol/beepsky_smash
|
||||
//CHOMPStation Edit TFF 24/9/19 - Minor change to make it easier for no runtimes with casino.dm
|
||||
/datum/reagent/ethanol/beepskysmash
|
||||
name = "Beepsky Smash"
|
||||
id = "beepskysmash"
|
||||
description = "Deny drinking this and prepare for THE LAW."
|
||||
@@ -2058,7 +2066,7 @@
|
||||
glass_name = "Beepsky Smash"
|
||||
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
|
||||
|
||||
/datum/reagent/ethanol/beepsky_smash/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
/datum/reagent/ethanol/beepskysmash/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
M.Stun(2)
|
||||
|
||||
|
||||
@@ -188,7 +188,54 @@
|
||||
M.adjustBruteLoss(1)
|
||||
M.adjustToxLoss(1)
|
||||
|
||||
/datum/reagent/change_drug //base chemical
|
||||
name = "Elixer of Change" //always the same name
|
||||
id = "change_drug"
|
||||
metabolism = 100 //set high enough that it does not process multiple times(delay implemented below)
|
||||
description = "the bloods DNA in this seems aggressive"
|
||||
taste_description = "this shouldn't be here" //unobtainable ingame
|
||||
color = "#7F0000"
|
||||
var/gender_change = null //set the gender variable here so we can set it to others in varients
|
||||
|
||||
/datum/reagent/change_drug/male //inherits base chemical properties listed above
|
||||
id = "change_drug_male" //unique ID for each varient
|
||||
taste_description = "old spice odor blocker body wash"
|
||||
reagent_state = LIQUID
|
||||
color = "#428AFF"
|
||||
gender_change = "male"
|
||||
scannable = 1
|
||||
|
||||
/datum/reagent/change_drug/female
|
||||
id = "change_drug_female"
|
||||
taste_description = "spiced honey"
|
||||
reagent_state = LIQUID
|
||||
color = "#FFA0FA"
|
||||
gender_change = "female"
|
||||
scannable = 1
|
||||
|
||||
/datum/reagent/change_drug/intersex
|
||||
id = "change_drug_intersex"
|
||||
taste_description = "something salty and sweet"
|
||||
reagent_state = LIQUID
|
||||
color = "#CB9EFF"
|
||||
gender_change = "herm"
|
||||
scannable = 1
|
||||
|
||||
/datum/reagent/change_drug/affect_blood(var/mob/living/carbon/human/M, var/alien, var/removed) //we need to process the change
|
||||
if(alien == IS_DIONA) //doesn't work on multiple creature hiveminds
|
||||
return
|
||||
if(M.identifying_gender == gender_change) //don't bug them if they're already the same gender
|
||||
return
|
||||
if(M.gender_change_cooldown == 1) //if already done, don't bug them
|
||||
return
|
||||
else
|
||||
M.gender_change_cooldown = 1 //set not to bug them because the chem is activating
|
||||
M << "<span class='notice'>You lose focus as warmth spreads throughout your chest and abdomen.</span>"
|
||||
spawn(300) //wait 30 seconds, growth takes time yo
|
||||
M.gender_change_cooldown = 0 //allow it to bug them again now that we've waited
|
||||
if (alert(M,"This chemical will change your gender, proceed?", "Warning", "Yes", "No") == "Yes") //check if they want this to happen for pref sake
|
||||
M.change_gender_identity(gender_change)
|
||||
M << "<span class='warning'>You feel like a new person</span>" //success
|
||||
////////////////////////////////////////////////
|
||||
/////////DRINKS////////////////////////////////
|
||||
//////////////////////////////////////////////
|
||||
|
||||
@@ -365,7 +365,7 @@
|
||||
required_reagents = list("inaprovaline" = 1, "carbon" = 1)
|
||||
inhibitors = list("sugar" = 1) // Messes up with inaprovaline
|
||||
result_amount = 2
|
||||
|
||||
|
||||
/datum/chemical_reaction/alizine
|
||||
name = "Alizine"
|
||||
id = "alizine"
|
||||
@@ -1464,7 +1464,8 @@
|
||||
required_reagents = list("rum" = 2, "vermouth" = 2, "phoron" = 2)
|
||||
result_amount = 6
|
||||
|
||||
/datum/chemical_reaction/drinks/beepsky_smash
|
||||
//CHOMPStation Edit TFF 24/9/19 - Minor change to make it easier for no runtimes with casino.dm
|
||||
/datum/chemical_reaction/drinks/beepskysmash
|
||||
name = "Beepksy Smash"
|
||||
id = "beepksysmash"
|
||||
result = "beepskysmash"
|
||||
@@ -1850,10 +1851,11 @@
|
||||
required_reagents = list("gingerale" = 4, "grenadine" = 1)
|
||||
result_amount = 5
|
||||
|
||||
//CHOMPStation Edit TFF 24/9/19 - Minor change to make it easier for no runtimes with casino.dm
|
||||
/datum/chemical_reaction/drinks/royrogers
|
||||
name = "Roy Rogers"
|
||||
id = "roy_rogers"
|
||||
result = "roy_rogers"
|
||||
id = "royrogers"
|
||||
result = "royrogers"
|
||||
required_reagents = list("gingerale" = 4, "lemon_lime" = 2, "grenadine" = 1)
|
||||
result_amount = 7
|
||||
|
||||
@@ -1919,7 +1921,7 @@
|
||||
result = "watermelontea"
|
||||
required_reagents = list("tea" = 5, "watermelonjuice" = 1)
|
||||
result_amount = 6
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/sakebomb
|
||||
name = "Sake Bomb"
|
||||
id = "sakebomb"
|
||||
@@ -2236,7 +2238,7 @@
|
||||
result = "eggnog"
|
||||
required_reagents = list("sugar" = 1, "egg" = 1, "milk" = 1, "cream" = 1, "cognac" = 2)
|
||||
result_amount = 6
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/spiderdrink
|
||||
name = "Brimming glass of spiders"
|
||||
id = "spiderdrink"
|
||||
@@ -2250,28 +2252,28 @@
|
||||
result = "bubbleteawatermelon"
|
||||
required_reagents = list("gelatin" = 2, "watermelontea" = 6, "milk" = 2)
|
||||
result_amount = 10
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/bubbleteastrawberry
|
||||
name = "Strawberry bubble tea"
|
||||
id = "bubbleteastrawberry"
|
||||
result = "bubbleteastrawberry"
|
||||
required_reagents = list("gelatin" = 2, "berrytea" = 6, "milk" = 2)
|
||||
result_amount = 10
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/bubbleteacherry
|
||||
name = "Cherry bubble tea"
|
||||
id = "bubbleteacherry"
|
||||
result = "bubbleteacherry"
|
||||
required_reagents = list("gelatin" = 2, "cherrytea" = 6, "milk" = 2)
|
||||
result_amount = 10
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/bubbleteacoffee
|
||||
name = "Coffee bubble tea"
|
||||
id = "bubbleteacoffee"
|
||||
result = "bubbleteacoffee"
|
||||
required_reagents = list("gelatin" = 2, "tea" = 5, "cafe_latte" = 3)
|
||||
result_amount = 10
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/bubbleteabanana
|
||||
name = "Banana bubble tea"
|
||||
id = "bubbleteabanana"
|
||||
@@ -2284,7 +2286,7 @@
|
||||
id = "horchata"
|
||||
result = "horchata"
|
||||
required_reagents = list("milk" = 1, "sugar" = 2, "rice" = 2)
|
||||
result_amount = 5
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/drinks/bluetrain
|
||||
name = "Blue train"
|
||||
@@ -2292,49 +2294,49 @@
|
||||
result = "bluetrain"
|
||||
required_reagents = list("coolant" = 2, "ethanol" = 2, "nutriment" = 1)
|
||||
result_amount = 5
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/lowpower
|
||||
name = "The low power"
|
||||
id = "lowpower"
|
||||
result = "lowpower"
|
||||
required_reagents = list("lemonade" = 1, "cream" = 1, "limejuice" = 1)
|
||||
result_amount = 3
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/jackbrew
|
||||
name = "Jack's brew"
|
||||
id = "jackbrew"
|
||||
result = "jackbrew"
|
||||
required_reagents = list("irishcoffee" = 1, "hyperzine" = 1)
|
||||
result_amount = 2
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/bookwyrm
|
||||
name = "Bookwyrm's bite"
|
||||
id = "bookwyrm"
|
||||
result = "bookwyrm"
|
||||
required_reagents = list("coldfront" = 1, "limejuice" = 1, "stoxin" = 1)
|
||||
result_amount = 3
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/highpower
|
||||
name = "The high power"
|
||||
id = "highpower"
|
||||
result = "highpower"
|
||||
required_reagents = list("lowpower" = 1, "iron" = 1, "uranium" = 1)
|
||||
result_amount = 3
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/flapper
|
||||
name = "Flapper"
|
||||
id = "flapper"
|
||||
result = "flapper"
|
||||
required_reagents = list("whiskey" = 1, "blood" = 1, "ice" = 1)
|
||||
result_amount = 3
|
||||
|
||||
|
||||
/datum/chemical_reaction/toxin/oilslide
|
||||
name = "Oil slide"
|
||||
id = "oilslide"
|
||||
result = "oilslide"
|
||||
required_reagents = list("moonshine" = 1, "lube" = 1, "fuel" = 1)
|
||||
result_amount = 3
|
||||
|
||||
|
||||
/datum/chemical_reaction/drinks/sitonmyface
|
||||
name = "Sit on my face"
|
||||
id = "sitonmyface"
|
||||
|
||||
@@ -59,4 +59,25 @@
|
||||
id = "matcha_latte"
|
||||
result = "matcha_latte"
|
||||
required_reagents = list ("matchapowder" = 1, "milk" = 5)
|
||||
result_amount = 5
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/change_drug/male
|
||||
name = "Elixer of Change"
|
||||
id = "change_drug_male"
|
||||
result = "change_drug_male"
|
||||
required_reagents = list("blood" = 1, "mutagen" = 1, "iron" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/change_drug/female
|
||||
name = "Elixer of Change"
|
||||
id = "change_drug_female"
|
||||
result = "change_drug_female"
|
||||
required_reagents = list("blood" = 1, "mutagen" = 1, "sugar" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/change_drug/intersex
|
||||
name = "Elixer of Change"
|
||||
id = "change_drug_intersex"
|
||||
result = "change_drug_intersex"
|
||||
required_reagents = list("change_drug_male" = 1, "change_drug_female" = 1)
|
||||
result_amount = 1
|
||||
@@ -115,9 +115,9 @@
|
||||
egg spawn_reagent = "egg"
|
||||
coco spawn_reagent = "coco"
|
||||
cherryjelly spawn_reagent = "cherryjelly"
|
||||
carrot spawn_reagent = "carrot"
|
||||
apple spawn_reagent = "apple"
|
||||
tomato spawn_reagent = "tomato"
|
||||
carrotjuice spawn_reagent = "carrotjuice"
|
||||
applejuice spawn_reagent = "applejuice"
|
||||
tomatojuice spawn_reagent = "tomatojuice"
|
||||
nutbutter spawn_reagent = "nutbutter" //ha
|
||||
soymilk spawn_reagent = "soymilk"
|
||||
grenadine spawn_reagent = "grenadine"
|
||||
@@ -133,7 +133,7 @@
|
||||
sake spawn_reagent = "sake"
|
||||
acidspit spawn_reagent = "acidspit"
|
||||
amasec spawn_reagent = "amasec"
|
||||
beepsky_smash spawn_reagent = "beepsky_smash"
|
||||
beepskysmash spawn_reagent = "beepskysmash"
|
||||
atomicbomb spawn_reagent = "atomicbomb"
|
||||
nuka_cola spawn_reagent = "nuka_cola"
|
||||
threemileisland spawn_reagent = "threemileisland"
|
||||
|
||||
@@ -386,3 +386,15 @@
|
||||
/obj/structure/reagent_dispensers/acid/New()
|
||||
..()
|
||||
reagents.add_reagent("sacid", 1000)
|
||||
|
||||
/obj/structure/reagent_dispensers/space_cleaner
|
||||
name = "Space Cleaner Dispenser"
|
||||
desc = "A dispenser of space cleaner, every janitor's dream!"
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "virusfoodtank"
|
||||
amount_per_transfer_from_this = 60
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/reagent_dispensers/space_cleaner/New()
|
||||
..()
|
||||
reagents.add_reagent("cleaner", 3000)
|
||||
|
||||
@@ -617,6 +617,10 @@
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of gluttonous waste of food.</span>")
|
||||
else if(istype(I,/obj/item/weapon/storage/glass_ornament))
|
||||
to_chat(src, "<span class='notice'>You can taste the flavor of smooth glass.</span>")
|
||||
//TFF 10/7/19 - Add custom flavour for collars for trash can trait.
|
||||
else if (istype(I,/obj/item/clothing/accessory/collar))
|
||||
visible_message("<span class='warning'>[src] demonstrates their voracious capabilities by swallowing [I] whole!</span>")
|
||||
to_chat(src, "<span class='notice'>You can taste the submissiveness in the wearer of [I]!</span>")
|
||||
else if(istype(I,/obj/item/integrated_circuit) ||istype(I,/obj/item/weapon/circuitboard))
|
||||
to_chat(src, "<span class='notice'>mmm crunchy computer chips.</span>")
|
||||
else if(istype(I,/obj/item/weapon/cell))
|
||||
|
||||
Reference in New Issue
Block a user