mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Merge branch 'master' into garbobutton
This commit is contained in:
@@ -657,7 +657,9 @@ var/global/datum/controller/occupations/job_master
|
||||
var/fail_deadly = FALSE
|
||||
var/obj/belly/vore_spawn_gut
|
||||
var/mob/living/prey_to_nomph
|
||||
var/obj/item/item_to_be
|
||||
var/obj/item/item_to_be //CHOMPEdit - Item TF spawning
|
||||
var/mob/living/item_carrier //CHOMPEdit - Capture crystal spawning
|
||||
var/vorgans = FALSE //CHOMPEdit - capture crystal simplemob spawning
|
||||
|
||||
//CHOMPEdit - Remove fail_deadly addition on offmap_spawn
|
||||
|
||||
@@ -810,13 +812,22 @@ var/global/datum/controller/occupations/job_master
|
||||
continue
|
||||
carriers += null
|
||||
|
||||
items += I
|
||||
if(I.name == initial(I.name))
|
||||
if(istype(I, /obj/item/capture_crystal))
|
||||
if(carrier)
|
||||
items += I
|
||||
var/obj/item/capture_crystal/cryst = I
|
||||
if(cryst.spawn_mob_type)
|
||||
item_names += "\a [cryst.spawn_mob_name] inside of [carrier]'s [I.name] ([I.loc.name])"
|
||||
else
|
||||
item_names += "Inside of [carrier]'s [I.name] ([I.loc.name])"
|
||||
else if(I.name == initial(I.name))
|
||||
items += I
|
||||
if(carrier)
|
||||
item_names += "[carrier]'s [I.name] ([I.loc.name])"
|
||||
else
|
||||
item_names += "[I.name] ([I.loc.name])"
|
||||
else
|
||||
items += I
|
||||
if(carrier)
|
||||
item_names += "[carrier]'s [I.name] (\a [initial(I.name)] at [I.loc.name])"
|
||||
else
|
||||
@@ -853,6 +864,7 @@ var/global/datum/controller/occupations/job_master
|
||||
return
|
||||
log_and_message_admins("[key_name(C)] has item spawned onto [key_name(carrier)]")
|
||||
item_to_be = item
|
||||
item_carrier = carrier
|
||||
if(backup)
|
||||
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
|
||||
else
|
||||
@@ -863,6 +875,12 @@ var/global/datum/controller/occupations/job_master
|
||||
item_to_be = item
|
||||
if(backup)
|
||||
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
|
||||
if(istype(item, /obj/item/capture_crystal))
|
||||
var/obj/item/capture_crystal/cryst = item
|
||||
if(cryst.spawn_mob_type)
|
||||
var/confirm = alert(C, "Do you want to spawn with your slot's vore organs and prefs?", "Confirm", "No", "Yes")
|
||||
if(confirm == "Yes")
|
||||
vorgans = TRUE
|
||||
else
|
||||
to_chat(C, "<span class='warning'>No items were available to accept you.</span>")
|
||||
return
|
||||
@@ -879,13 +897,15 @@ var/global/datum/controller/occupations/job_master
|
||||
spawnpos = spawntypes[C.prefs.spawnpoint]
|
||||
|
||||
//We will return a list key'd by "turf" and "msg"
|
||||
. = list("turf","msg", "voreny", "prey", "itemtf") //CHOMPEdit - Item TF spawnpoints
|
||||
. = list("turf","msg", "voreny", "prey", "itemtf", "vorgans", "carrier") //CHOMPEdit - Item TF spawnpoints, spawn as mob
|
||||
if(vore_spawn_gut)
|
||||
.["voreny"] = vore_spawn_gut
|
||||
if(prey_to_nomph)
|
||||
.["prey"] = prey_to_nomph //We pass this on later to reverse the vorespawn in new_player.dm
|
||||
//CHOMPEdit Start - Item TF spawnpoints
|
||||
if(item_to_be)
|
||||
.["carrier"] = item_carrier
|
||||
.["vorgans"] = vorgans
|
||||
.["itemtf"] = item_to_be
|
||||
//CHOMPEdit End
|
||||
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
if(pcard.is_damage_critical())
|
||||
pcard.forceMove(get_turf(src))
|
||||
charging = null
|
||||
pcard.damage_random_component()
|
||||
//pcard.damage_random_component()//CHOMPEDIT: Punishing PAI for charging too soon seems kinda annoying
|
||||
update_icon()
|
||||
else if(pcard.pai.bruteloss)
|
||||
pcard.pai.adjustBruteLoss(-5)
|
||||
|
||||
@@ -561,8 +561,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
if (malfunction) //so I'm just going to add a meltdown chance here
|
||||
return
|
||||
malfunction = MALFUNCTION_TEMPORARY
|
||||
|
||||
activate("emp") //let's shout that this dude is dead
|
||||
if(prob(40)) //CHOMPEDIT: Make the malfunction a probability because annoying
|
||||
activate("emp") //let's shout that this dude is dead
|
||||
if(severity == 1)
|
||||
if(prob(40)) //small chance of obvious meltdown
|
||||
meltdown()
|
||||
|
||||
@@ -39,3 +39,27 @@ var/datum/gear_tweak/item_tf_spawn/gear_tweak_item_tf_spawn = new()
|
||||
else if(metadata["state"] == "Only Specific Players")
|
||||
I.item_tf_spawnpoint_set()
|
||||
I.ckeys_allowed_itemspawn = metadata["valid"]
|
||||
|
||||
/datum/gear_tweak/simplemob_picker
|
||||
var/list/simplemob_list
|
||||
|
||||
/datum/gear_tweak/simplemob_picker/New(var/list/valid_simplemobs)
|
||||
src.simplemob_list = valid_simplemobs
|
||||
..()
|
||||
|
||||
/datum/gear_tweak/simplemob_picker/get_contents(var/metadata)
|
||||
return "Type: [metadata]"
|
||||
|
||||
/datum/gear_tweak/simplemob_picker/get_default()
|
||||
return simplemob_list[1]
|
||||
|
||||
/datum/gear_tweak/simplemob_picker/get_metadata(var/user, var/metadata)
|
||||
return tgui_input_list(user, "Choose a type.", "Character Preference", simplemob_list, metadata)
|
||||
|
||||
/datum/gear_tweak/simplemob_picker/tweak_item(var/obj/item/capture_crystal/I, var/metadata)
|
||||
if(!(metadata in simplemob_list))
|
||||
return
|
||||
if(!istype(I))
|
||||
return
|
||||
I.spawn_mob_type = simplemob_list[metadata]
|
||||
I.spawn_mob_name = metadata
|
||||
|
||||
@@ -35,6 +35,13 @@
|
||||
character_name = list("Malady Blanche")
|
||||
|
||||
// A CKEYS
|
||||
|
||||
/datum/gear/fluff/mira_medal
|
||||
path = /obj/item/clothing/accessory/medal/silver/fluff/abc314
|
||||
display_name = "Mira's Health Service Achievement medal"
|
||||
ckeywhitelist = list("abc314")
|
||||
character_name = list("Mira Nesyne")
|
||||
|
||||
/datum/gear/fluff/lethe_helmet
|
||||
path = /obj/item/clothing/head/helmet/hos/fluff/lethe
|
||||
display_name = "Lethe's Helmet"
|
||||
|
||||
@@ -47,5 +47,6 @@
|
||||
name = "No Shoes"
|
||||
desc = "shoeless?"
|
||||
icon_state = ""
|
||||
/obj/item/clothing/shoes/none/New()
|
||||
qdel(src)
|
||||
/obj/item/clothing/shoes/none/Initialize()
|
||||
. = INITIALIZE_HINT_QDEL //Fuck them shoes
|
||||
..()
|
||||
|
||||
@@ -15,4 +15,41 @@
|
||||
for(var/implant in typesof(/obj/item/weapon/implant/reagent_generator/egg))
|
||||
var/obj/item/weapon/implant/reagent_generator/egg/implant_type = implant
|
||||
implants[initial(implant_type.name)] = implant_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(implants))
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(implants))
|
||||
|
||||
/datum/gear/utility/capture_crystal_crew
|
||||
display_name = "Capture Crystal (crew)"
|
||||
description = "A capture crystal already containing someone! (Item TF will need to be enabled for someone to join into this crystal)"
|
||||
path = /obj/item/capture_crystal/loadout
|
||||
cost = 2
|
||||
|
||||
/datum/gear/utility/capture_crystal_simplemob
|
||||
display_name = "Capture Crystal (pet)"
|
||||
description = "A capture crystal already containing a pet! (Item TF will need to be enabled for someone to join into this crystal)"
|
||||
path = /obj/item/capture_crystal/loadout
|
||||
cost = 2
|
||||
|
||||
/datum/gear/utility/capture_crystal_simplemob/New()
|
||||
..()
|
||||
var/list/mob_types = list(
|
||||
"mouse" = /mob/living/simple_mob/animal/passive/mouse,
|
||||
"rat" = /mob/living/simple_mob/animal/passive/mouse/rat,
|
||||
"dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper,
|
||||
"woof" = /mob/living/simple_mob/vore/woof,
|
||||
"corgi" = /mob/living/simple_mob/animal/passive/dog/corgi,
|
||||
"cat" = /mob/living/simple_mob/animal/passive/cat,
|
||||
"chicken" = /mob/living/simple_mob/animal/passive/chicken,
|
||||
"cow" = /mob/living/simple_mob/animal/passive/cow,
|
||||
"lizard" = /mob/living/simple_mob/animal/passive/lizard,
|
||||
"rabbit" = /mob/living/simple_mob/vore/rabbit,
|
||||
"fox" = /mob/living/simple_mob/animal/passive/fox,
|
||||
"fennec" = /mob/living/simple_mob/vore/fennec,
|
||||
"cute fennec" = /mob/living/simple_mob/animal/passive/fennec,
|
||||
"fennix" = /mob/living/simple_mob/vore/fennix,
|
||||
"red panda" = /mob/living/simple_mob/vore/redpanda,
|
||||
"opossum" = /mob/living/simple_mob/animal/passive/opossum,
|
||||
"horse" = /mob/living/simple_mob/vore/horse,
|
||||
"goose" = /mob/living/simple_mob/animal/space/goose,
|
||||
"sheep" = /mob/living/simple_mob/vore/sheep
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/simplemob_picker(mob_types)
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
var/flash_prot = 0 //0 for none, 1 for flash weapon protection, 2 for welder protection
|
||||
enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_AUGMENTED)
|
||||
plane_slots = list(slot_glasses)
|
||||
var/ar_toggled = TRUE //Used for toggle_ar_planes() verb
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/New()
|
||||
..()
|
||||
@@ -28,6 +30,14 @@
|
||||
SStgui.close_uis(src)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/examine()
|
||||
. = ..()
|
||||
if(ar_toggled)
|
||||
. += "\n <span class='notice'>The HUD indicator reads ON.</span>"
|
||||
else
|
||||
. += "\n <span class='notice'>The HUD indicator reads OFF.</span>"
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/emp_act(var/severity)
|
||||
if(tgarscreen)
|
||||
SStgui.close_uis(src)
|
||||
@@ -114,6 +124,29 @@
|
||||
to_chat(usr, "The [src] don't seem to support this functionality.")
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/verb/toggle_ar_planes()
|
||||
set name = "Toggle AR Heads-Up Display"
|
||||
set desc = "Toggles the job icon and other non-manually requested displays. Does not disable Crew monitor and similar."
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
//We do not check if user can move or not, since this system is inspired to help see chat bubbles during scenes primarily.
|
||||
//Preventing turning off the HUD could get in the way of scene flow.
|
||||
usr.visible_emote("toggles a button on their [src.name]!") //Since we're turning stuff like arrest/medical HUD on/off, we should inform those nearby.
|
||||
if(ar_toggled)
|
||||
away_planes = enables_planes
|
||||
enables_planes = null
|
||||
to_chat(usr, SPAN_NOTICE("You disabled the Augmented Reality HUD of your [src.name]."))
|
||||
else
|
||||
enables_planes = away_planes
|
||||
away_planes = null
|
||||
to_chat(usr, SPAN_NOTICE("You enabled the Augmented Reality HUD of your [src.name]."))
|
||||
ar_toggled = !ar_toggled
|
||||
usr.update_action_buttons()
|
||||
usr.recalculate_vis()
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/omnihud/proc/ar_interact(var/mob/living/carbon/human/user)
|
||||
return 0 //The base models do nothing.
|
||||
|
||||
@@ -305,4 +338,4 @@
|
||||
icon_state = "[icon_state]_1"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
update_clothing_icon()
|
||||
update_clothing_icon()
|
||||
|
||||
@@ -91,7 +91,10 @@
|
||||
/obj/item/clothing/head/pizzaguy
|
||||
name = "pizza delivery visor"
|
||||
desc = "A fancy visor showing alignment to pizza delivery service. Extremely risky career choice."
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "pizzadelivery"
|
||||
item_state = "pizzadelivery"
|
||||
|
||||
/obj/item/clothing/head/wedding
|
||||
name = "wedding veil"
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
name = "suit helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/rig/advsuit
|
||||
name = "voidsuit"
|
||||
name = "Hardsuit" //CHOMPEDIT: Replcing Void with Hard to fit the naming convention. Specced down hardsuit for comfort
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
|
||||
|
||||
@@ -332,6 +332,16 @@ var/list/holder_mob_icon_cache = list()
|
||||
L.Stun(2)
|
||||
|
||||
/obj/item/weapon/holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
//CHOMPADDITION: MicroHandCrush
|
||||
if(W == src && user.a_intent == I_HURT)
|
||||
for(var/mob/living/M in src.contents)
|
||||
if(user.size_multiplier > M.size_multiplier)
|
||||
var/dam = (user.size_multiplier - M.size_multiplier)*(rand(2,5))
|
||||
to_chat(user, "<span class='danger'>You roughly squeeze [M]!</span>")
|
||||
to_chat(M, "<span class='danger'>You are roughly squeezed by [user]!</span>")
|
||||
log_and_message_admins("[key_name(M)] has been harmsqueezed by [key_name(user)]")
|
||||
M.apply_damage(dam)
|
||||
//CHOMPADDITION: MicroHandCrush END
|
||||
for(var/mob/M in src.contents)
|
||||
M.attackby(W,user)
|
||||
|
||||
|
||||
@@ -451,6 +451,8 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/can_feel_pain(var/check_organ)
|
||||
if(!species) //CHOMPEdit
|
||||
return 0
|
||||
if(isSynthetic())
|
||||
return 0
|
||||
return !(species.flags & NO_PAIN)
|
||||
|
||||
@@ -440,6 +440,32 @@
|
||||
spawning = 1
|
||||
close_spawn_windows()
|
||||
|
||||
//CHOMPEdit start - join as mob in crystal...
|
||||
var/obj/item/itemtf = join_props["itemtf"]
|
||||
if(itemtf && istype(itemtf, /obj/item/capture_crystal))
|
||||
var/obj/item/capture_crystal/cryst = itemtf
|
||||
if(cryst.spawn_mob_type)
|
||||
// We want to be a spawned mob instead of a person aaaaa
|
||||
var/mob/living/carrier = join_props["carrier"]
|
||||
var/vorgans = join_props["vorgans"]
|
||||
cryst.bound_mob = new cryst.spawn_mob_type(cryst)
|
||||
cryst.spawn_mob_type = null
|
||||
cryst.bound_mob.ai_holder_type = /datum/ai_holder/simple_mob/inert
|
||||
cryst.bound_mob.key = src.key
|
||||
log_and_message_admins("[key_name_admin(src)] joined [cryst.bound_mob] inside a capture crystal [ADMIN_FLW(cryst.bound_mob)]")
|
||||
if(vorgans)
|
||||
cryst.bound_mob.copy_from_prefs_vr()
|
||||
if(istype(carrier))
|
||||
cryst.capture(cryst.bound_mob, carrier)
|
||||
else
|
||||
//Something went wrong, but lets try to do as much as we can.
|
||||
cryst.bound_mob.capture_caught = TRUE
|
||||
cryst.persist_storable = FALSE
|
||||
cryst.update_icon()
|
||||
qdel(src)
|
||||
return
|
||||
//CHOMPEdit end
|
||||
|
||||
job_master.AssignRole(src, rank, 1)
|
||||
|
||||
var/mob/living/character = create_character(T) //creates the human and transfers vars and mind
|
||||
@@ -503,8 +529,14 @@
|
||||
var/gut = join_props["voreny"]
|
||||
var/mob/living/prey = join_props["prey"]
|
||||
//CHOMPEdit Start - Item TF
|
||||
var/obj/item/itemtf = join_props["itemtf"]
|
||||
if(itemtf)
|
||||
if(itemtf && istype(itemtf, /obj/item/capture_crystal))
|
||||
//We want to be in the crystal, not actually possessing the crystal.
|
||||
var/obj/item/capture_crystal/cryst = itemtf
|
||||
var/mob/living/carrier = join_props["carrier"]
|
||||
cryst.capture(character, carrier)
|
||||
character.forceMove(cryst)
|
||||
cryst.update_icon()
|
||||
else if(itemtf)
|
||||
itemtf.inhabit_item(character, itemtf.name, character)
|
||||
var/mob/living/possessed_voice = itemtf.possessed_voice
|
||||
itemtf.trash_eatable = character.devourable
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
var/real_desc
|
||||
/// Icon_state prior to being scanned if !known
|
||||
var/unknown_state = "field"
|
||||
//Set to null. Exists only for admins/GMs when spawning overmap objects.
|
||||
//We need these as normal functionality relies on initial() which do not work at all with GM shenanigans.
|
||||
var/real_icon //Holds the .dmi file for icon_state to pick from. Leave null if using standard overmap.dmi
|
||||
var/real_icon_state //actual icon name to be used. Find examples inside 'icons/obj/overmap.dmi'
|
||||
var/real_color
|
||||
|
||||
var/list/map_z = list()
|
||||
var/list/extra_z_levels //if you need to manually insist that these z-levels are part of this sector, for things like edge-of-map step trigger transitions rather than multi-z complexes
|
||||
@@ -84,6 +89,19 @@
|
||||
//at the moment only used for the OM location renamer. Initializing here in case we want shuttles incl as well in future. Also proc definition convenience.
|
||||
visitable_overmap_object_instances |= src
|
||||
|
||||
//To be used by GMs and calling through var edits for the overmap object
|
||||
//It causes the overmap object to "reinitialize" its real_appearance for known = FALSE objects
|
||||
//Includes an argument that allows GMs/Admins to set a previously known sector to unknown. Set to any value except 0/False/Null to activate
|
||||
/obj/effect/overmap/visitable/proc/gmtools_update_omobject_vars(var/setToHidden)
|
||||
real_appearance = image(real_icon, src, real_icon_state)
|
||||
real_appearance.override = TRUE
|
||||
if(setToHidden && known) //
|
||||
name = unknown_name
|
||||
icon = 'icons/obj/overmap.dmi'
|
||||
icon_state = unknown_state
|
||||
color = null
|
||||
desc = "Scan this to find out more information."
|
||||
known = FALSE
|
||||
|
||||
|
||||
// You generally shouldn't destroy these.
|
||||
@@ -141,8 +159,16 @@
|
||||
name = real_name
|
||||
else
|
||||
name = initial(name)
|
||||
icon_state = initial(icon_state)
|
||||
color = initial(color)
|
||||
if(real_icon_state) //Only true when GMs/Admins play with the object
|
||||
if(real_icon) //Only true if GMs/Admins want a non-standard icon from outside 'icons/obj/overmap.dmi'
|
||||
icon = real_icon
|
||||
icon_state = real_icon_state
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
if(real_color)
|
||||
color = real_color
|
||||
else
|
||||
color = initial(color)
|
||||
if(real_desc)
|
||||
desc = real_desc
|
||||
else
|
||||
|
||||
@@ -9,7 +9,10 @@
|
||||
density = FALSE
|
||||
unacidable = TRUE
|
||||
use_power = USE_POWER_OFF
|
||||
light_range = 4
|
||||
light_on = TRUE
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#5BA8FF"
|
||||
var/obj/machinery/field_generator/FG1 = null
|
||||
var/obj/machinery/field_generator/FG2 = null
|
||||
var/list/shockdirs
|
||||
|
||||
@@ -36,6 +36,10 @@ field_generator power level display
|
||||
var/gen_power_draw = 5500 //power needed per generator
|
||||
var/field_power_draw = 2000 //power needed per field object
|
||||
|
||||
var/light_range_on = 3
|
||||
var/light_power_on = 1
|
||||
light_color = "#5BA8FF"
|
||||
|
||||
|
||||
/obj/machinery/field_generator/update_icon()
|
||||
cut_overlays()
|
||||
@@ -177,6 +181,7 @@ field_generator power level display
|
||||
active = 0
|
||||
spawn(1)
|
||||
src.cleanup()
|
||||
set_light(0)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/field_generator/proc/turn_on()
|
||||
@@ -189,6 +194,7 @@ field_generator power level display
|
||||
update_icon()
|
||||
if(warming_up >= 3)
|
||||
start_fields()
|
||||
set_light(light_range_on, light_power_on)
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
icon_state = "conveyor0"
|
||||
name = "conveyor belt"
|
||||
desc = "A conveyor belt."
|
||||
plane = TURF_PLANE
|
||||
layer = ABOVE_TURF_LAYER
|
||||
plane = OBJ_PLANE //CHOMPEdit
|
||||
layer = STAIRS_LAYER //CHOMPEdit
|
||||
anchored = TRUE
|
||||
active_power_usage = 100
|
||||
circuit = /obj/item/weapon/circuitboard/conveyor
|
||||
|
||||
@@ -936,6 +936,8 @@
|
||||
M.forceMove(G)
|
||||
else
|
||||
qdel(M)
|
||||
if(isanimal(owner))
|
||||
owner.update_transform()
|
||||
//CHOMPEdit End
|
||||
|
||||
// Handle a mob being absorbed
|
||||
|
||||
@@ -215,10 +215,12 @@ GLOBAL_LIST_INIT(digest_modes, list())
|
||||
B.put_in_egg(H, 1)*/
|
||||
|
||||
/datum/digest_mode/egg/handle_atoms(obj/belly/B, list/touchable_atoms)
|
||||
if(B.owner.nutrition < 25) //CHOMPEdit Start
|
||||
return
|
||||
var/list/egg_contents = list()
|
||||
for(var/E in touchable_atoms)
|
||||
if(istype(E, /obj/item/weapon/storage/vore_egg)) // Don't egg other eggs.
|
||||
var/obj/item/weapon/storage/vore_egg/EG = E //CHOMPEdit Start
|
||||
var/obj/item/weapon/storage/vore_egg/EG = E
|
||||
if(EG.egg_name != B.egg_name)
|
||||
if(!B.egg_name)
|
||||
EG.egg_name = null
|
||||
@@ -239,6 +241,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
|
||||
if(B.egg_type in tf_vore_egg_types)
|
||||
B.egg_path = tf_vore_egg_types[B.egg_type]
|
||||
B.ownegg = new B.egg_path(B)
|
||||
B.owner.adjust_nutrition(-25)
|
||||
if(B.ownegg && B.egg_name)
|
||||
B.ownegg.egg_name = B.egg_name
|
||||
B.ownegg.name = B.egg_name //CHOMPEdit End
|
||||
|
||||
@@ -1568,3 +1568,12 @@ End CHOMP Removal*/
|
||||
|
||||
/obj/item/weapon/dice/loaded/ceph/New()
|
||||
icon_state = "ceph_d6[rand(1,sides)]"
|
||||
|
||||
|
||||
//abc123: Mira Nesyne
|
||||
/obj/item/clothing/accessory/medal/silver/fluff/abc314
|
||||
name = "Health Service Achievement medal"
|
||||
desc = "A small silver medal with the inscription \"For going above and beyond in the field.\" on it, along with the name Mira Nesyne."
|
||||
|
||||
icon = 'icons/inventory/accessory/item.dmi'
|
||||
icon_state = "silver"
|
||||
|
||||
@@ -45,6 +45,9 @@
|
||||
|
||||
// Find out of this mob is a proper mob!
|
||||
if (persister.mind && persister.mind.loaded_from_ckey)
|
||||
if(ckey(persister.mind.key) != persister.mind.loaded_from_ckey) //CHOMPAdd
|
||||
warning("Persist (P4P): [persister.mind] was loaded from ckey [persister.mind.loaded_from_ckey] mismatching the current ckey [ckey(persister.mind.key)].")
|
||||
return //CHOMPAdd End
|
||||
// Okay this mob has a real loaded-from-savefile mind in it!
|
||||
var/datum/preferences/prefs = preferences_datums[persister.mind.loaded_from_ckey]
|
||||
if(!prefs)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,26 @@
|
||||
/obj/item/capture_crystal
|
||||
var/spawn_mob_name = "A mob"
|
||||
|
||||
/obj/item/capture_crystal/loadout
|
||||
active = TRUE
|
||||
|
||||
/obj/item/capture_crystal/loadout/attack(mob/living/M, mob/living/user)
|
||||
if(!bound_mob && M != user)
|
||||
to_chat(user, "<span class='notice'>\The [src] emits an unpleasant tone...</span>")
|
||||
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/capture_crystal/loadout/attack_self(mob/living/user)
|
||||
if(!bound_mob)
|
||||
to_chat(user, "<span class='notice'>\The [src] emits an unpleasant tone... It is not ready yet.</span>")
|
||||
playsound(src, 'sound/effects/capture-crystal-problem.ogg', 75, 1, -1)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/capture_crystal/loadout/capture_chance()
|
||||
return 0
|
||||
|
||||
/obj/item/capture_crystal/cheap
|
||||
name = "cheap capture crystal"
|
||||
desc = "A silent, unassuming crystal in what appears to be some kind of steel housing. This one seems to be cheapley made and can only handle a willing mind."
|
||||
|
||||
@@ -85,6 +85,8 @@
|
||||
items_taken++
|
||||
break
|
||||
for(var/atom/movable/C in A.contents)
|
||||
if(C.anchored)
|
||||
C.anchored = FALSE
|
||||
C.forceMove(loc)
|
||||
if(isitem(A))
|
||||
A.SpinAnimation(5,3)
|
||||
|
||||
Reference in New Issue
Block a user