Merge branch 'master' into upstream-merge-13406

This commit is contained in:
Nadyr
2022-08-01 21:29:15 -04:00
committed by GitHub
27 changed files with 157 additions and 29 deletions

View File

@@ -11,6 +11,7 @@
#define DM_SIZE_STEAL "Size Steal"
#define DM_HEAL "Heal"
#define DM_EGG "Encase In Egg"
#define DM_SELECT "Selective"
//Addon mode flags
#define DM_FLAG_NUMBING 0x1

View File

@@ -161,6 +161,10 @@
var/obj/item/organ/external/hand = H.organs_by_name[check_hand]
if(istype(hand) && hand.is_usable())
return TRUE
var/mob/living/simple_mob/S = M
if(istype(S) && S.has_hands) //Are they a mob? And do they have hands?
return TRUE
return FALSE

View File

@@ -23,7 +23,7 @@
/obj/item/device/analyzer/attack_self(mob/user as mob)
if (user.stat)
return
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
if (!user.IsAdvancedToolUser())
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
return

View File

@@ -41,7 +41,7 @@
dat += "Body Temperature: ???"
user.show_message("<span class='notice'>[dat]</span>", 1)
return
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return

View File

@@ -30,7 +30,7 @@
/obj/item/device/mass_spectrometer/attack_self(mob/user as mob)
if (user.stat)
return
if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey")
if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
if(reagents.total_volume)

View File

@@ -20,8 +20,7 @@
to_chat(user, "<span class='warning'>\The [src] cannot be applied to [M]!</span>")
return 1
if ( ! (istype(user, /mob/living/carbon/human) || \
istype(user, /mob/living/silicon)) )
if (!M.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return 1
@@ -129,7 +128,7 @@
if(used >= available)
to_chat(user, "<span class='warning'>You run out of [src]!</span>")
break
if (W.current_stage <= W.max_bleeding_stage)
user.visible_message("<b>\The [user]</b> bandages \a [W.desc] on [M]'s [affecting.name].", \
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )

View File

@@ -19,7 +19,7 @@
user.setClickCooldown(user.get_attack_speed(src))
user.do_attack_animation(M)
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='danger'>You don't have the dexterity to do this!</span>")
return

View File

@@ -84,6 +84,49 @@
else
return ..()
/obj/structure/trash_pile/attack_ghost(mob/observer/user as mob)
if(config.disable_player_mice)
to_chat(user, "<span class='warning'>Spawning as a mouse is currently disabled.</span>")
return
//VOREStation Add Start
if(jobban_isbanned(user, "GhostRoles"))
to_chat(user, "<span class='warning'>You cannot become a mouse because you are banned from playing ghost roles.</span>")
return
//VOREStation Add End
if(!user.MayRespawn(1))
return
var/turf/T = get_turf(src)
if(!T || (T.z in using_map.admin_levels))
to_chat(user, "<span class='warning'>You may not spawn as a mouse on this Z-level.</span>")
return
var/timedifference = world.time - user.client.time_died_as_mouse
if(user.client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600)
var/timedifference_text
timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss")
to_chat(user, "<span class='warning'>You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.</span>")
return
var/response = tgui_alert(user, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?",list("Squeek!","Nope!"))
if(response != "Squeek!") return //Hit the wrong key...again.
var/mob/living/simple_mob/animal/passive/mouse/host
host = new /mob/living/simple_mob/animal/passive/mouse(get_turf(src))
if(host)
if(config.uneducated_mice)
host.universal_understand = 0
announce_ghost_joinleave(src, 0, "They are now a mouse.")
host.ckey = user.ckey
to_chat(host, "<span class='info'>You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.</span>")
var/atom/A = get_holder_at_turf_level(src)
A.visible_message("[host] crawls out of \the [src].")
return
/obj/structure/trash_pile/attack_hand(mob/user)
//Human mob
if(ishuman(user))

View File

@@ -147,7 +147,7 @@
req_access = list()
req_one_access = list()
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage) //CHOMP Edit
offline_vision_restriction = 1
initial_modules = list(

View File

@@ -513,14 +513,17 @@
|ACCESSORY_SLOT_ARMOR_A\
|ACCESSORY_SLOT_ARMOR_L\
|ACCESSORY_SLOT_ARMOR_S\
|ACCESSORY_SLOT_ARMOR_M)
|ACCESSORY_SLOT_ARMOR_M\
|ACCESSORY_SLOT_OVER\
|ACCESSORY_SLOT_ARMBAND) //CHOMPEdit - let pcarriers have fashion
restricted_accessory_slots = (\
ACCESSORY_SLOT_INSIGNIA\
|ACCESSORY_SLOT_ARMOR_C\
|ACCESSORY_SLOT_ARMOR_A\
|ACCESSORY_SLOT_ARMOR_L\
|ACCESSORY_SLOT_ARMOR_S\
|ACCESSORY_SLOT_ARMOR_M)
|ACCESSORY_SLOT_ARMOR_M\
|ACCESSORY_SLOT_ARMBAND) //CHOMPEdit - let pcarriers have fashion
blood_overlay_type = "armor"
/obj/item/clothing/suit/armor/pcarrier/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
@@ -639,4 +642,4 @@
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/bulletproof, /obj/item/clothing/accessory/armor/armguards/bulletproof, /obj/item/clothing/accessory/armor/legguards/bulletproof, /obj/item/clothing/accessory/storage/pouches)
/obj/item/clothing/suit/armor/pcarrier/riot/full
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/riot, /obj/item/clothing/accessory/armor/armguards/riot, /obj/item/clothing/accessory/armor/legguards/riot, /obj/item/clothing/accessory/storage/pouches)
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/riot, /obj/item/clothing/accessory/armor/armguards/riot, /obj/item/clothing/accessory/armor/legguards/riot, /obj/item/clothing/accessory/storage/pouches)

View File

@@ -361,7 +361,7 @@ var/list/mining_overlay_cache = list()
//Not even going to touch this pile of spaghetti
/turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
if (!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return

View File

@@ -354,7 +354,7 @@
R.icon = 'icons/mob/widerobot_vr.dmi'
src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test
src.modules += new /obj/item/weapon/dogborg/pounce(src) //CHOMPEdit - Switch to the more balanced pounce module
R.icon = 'icons/mob/widerobot_med_vr.dmi'
R.wideborg_dept = 'icons/mob/widerobot_med_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
@@ -390,7 +390,7 @@
src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun(src)
src.modules += new /obj/item/weapon/dogborg/swordtail(src)
src.modules += new /obj/item/weapon/tool/crowbar(src)
src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test
src.modules += new /obj/item/weapon/dogborg/pounce(src) //CHOMPEdit - Switch to the more balanced pounce module
src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src)
var/datum/matter_synth/water = new /datum/matter_synth(500)

View File

@@ -41,7 +41,7 @@
src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop people on the nose.
src.modules += new /obj/item/device/dogborg/tongue(src) //This is so they can clean up bloody evidence after it's examined, and so they can lick crew.
src.modules += new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig.
src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test
src.modules += new /obj/item/weapon/dogborg/pounce(src) //CHOMPEdit - Switch to the more balanced pounce module
src.modules += new /obj/item/borg/sight/material(src)
src.modules += new /obj/item/weapon/tool/wrench(src)
src.modules += new /obj/item/weapon/tool/screwdriver(src)
@@ -98,7 +98,7 @@
src.emag.reagents.add_reagent("pacid", 250)
src.emag.name = "Polyacid spray"
src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test
src.modules += new /obj/item/weapon/dogborg/pounce(src) //CHOMPEdit - Switch to the more balanced pounce module.
//R.icon_state = "medihound"
R.pixel_x = -16
R.old_x = -16

View File

@@ -47,4 +47,12 @@
add_modifier(/datum/modifier/berserk, 30 SECONDS)
/decl/mob_organ_names/goose
hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing", "neck")
hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing", "neck")
/mob/living/simple_mob/animal/space/goose/white
icon = 'icons/mob/animal_vr.dmi'
icon_state = "whitegoose"
icon_living = "whitegoose"
icon_dead = "whitegoose_dead"
name = "white goose"
desc = "And just when you thought it was a lovely day..."

View File

@@ -11,8 +11,6 @@
verbs |= /mob/living/simple_mob/proc/set_name
verbs |= /mob/living/simple_mob/proc/set_desc
<<<<<<< HEAD
=======
ooc_notes = client.prefs.metadata
digestable = client.prefs_vr.digestable
devourable = client.prefs_vr.devourable
@@ -20,7 +18,7 @@
feeding = client.prefs_vr.feeding
can_be_drop_prey = client.prefs_vr.can_be_drop_prey
can_be_drop_pred = client.prefs_vr.can_be_drop_pred
allow_inbelly_spawning = client.prefs_vr.allow_inbelly_spawning
latejoin_vore = client.prefs_vr.latejoin_vore //CHOMPedit
allow_spontaneous_tf = client.prefs_vr.allow_spontaneous_tf
digest_leave_remains = client.prefs_vr.digest_leave_remains
allowmobvore = client.prefs_vr.allowmobvore
@@ -38,7 +36,6 @@
pickup_pref = client.prefs_vr.pickup_pref
>>>>>>> 7550df1e26... Merge pull request #13406 from Heroman3003/selective-upgrade
/mob/living/simple_mob/proc/set_name()
set name = "Set Name"
set desc = "Sets your mobs name. You only get to do this once."

View File

@@ -433,3 +433,52 @@
icon_state = "teshlarge_eyes_het"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
// Nightstalker Body Markings
/datum/sprite_accessory/marking/ch/desert_nightstalker
name = "Nightstalker Scales (Desert Coloration)"
icon_state = "nightstalker_desert"
body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT,BP_TORSO,BP_GROIN) // Fullbody markings, save head
do_colouration = 0 // Don't color, these are pre-colored markings
/datum/sprite_accessory/marking/ch/desert_nightstalker_head
name = "Nightstalker Head (Desert Coloration)"
icon_state = "nightstalker_desert"
body_parts = list(BP_HEAD)
do_colouration = 0 // Don't color, these are pre-colored markings
/datum/sprite_accessory/marking/ch/nightstalker_head_center
name = "Nightstalker Head, Tricolor (Center)"
icon_state = "nightstalker_1"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/marking/ch/nightstalker_head_left
name = "Nightstalker Head, Tricolor (Left)"
icon_state = "nightstalker_2"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/marking/ch/nightstalker_head_right
name = "Nightstalker Head, Tricolor (Right)"
icon_state = "nightstalker_3"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/marking/ch/diamondback_nightstalker_outer
name = "Nightstalker Scales, Outer"
icon_state = "nightstalker_1"
body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT,BP_TORSO,BP_GROIN) // Fullbody markings, save head
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/marking/ch/diamondback_nightstalker_inner
name = "Nightstalker Scales, Inner"
icon_state = "nightstalker_2"
body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_LEG,BP_L_LEG,BP_TORSO,BP_GROIN) // Fullbody markings, save head
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/marking/ch/outer_spots
name = "Spots, Outer"
icon_state = "spots_extremities"
body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT)
color_blend_mode = ICON_MULTIPLY

View File

@@ -141,4 +141,20 @@
icon_state = "bigringtail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "bigringtail_markings"
extra_overlay = "bigringtail_markings"
/datum/sprite_accessory/tail/longtail/desert_nightstalker
name = "Desert Nightstalker Tail (vwag)"
icon = 'icons/mob/vore/taurs_ch.dmi'
icon_state = "nightstalker_desert"
ani_state = "nightstalker_desert_w"
do_colouration = 0 // We're not coloring this, these are pre-colored
color_blend_mode = ICON_ADD
/datum/sprite_accessory/tail/longtail/diamondback_nightstalker
name = "Diamondback Nightstalker Tail (dual-color, vwag)"
icon = 'icons/mob/vore/taurs_ch.dmi'
icon_state = "nightstalker_diamondback"
ani_state = "nightstalker_diamondback_w"
extra_overlay = "nightstalker_diamondback_markings"
extra_overlay_w = "nightstalker_diamondback_markings_w"

View File

@@ -242,12 +242,11 @@ GLOBAL_LIST_INIT(digest_modes, list())
B.ownegg = null
return list("to_update" = TRUE)
return
<<<<<<< HEAD
=======
/datum/digest_mode/selective //unselectable, "smart" digestion mode for mobs only
id = DM_SELECT
/datum/digest_mode/selective/process_mob(obj/belly/B, mob/living/L)
var/datum/digest_mode/tempmode = GLOB.digest_modes[DM_HOLD] // Default to Hold in case of big oof fallback
//if not absorbed, see if they're food
@@ -280,5 +279,4 @@ GLOBAL_LIST_INIT(digest_modes, list())
tempmode = GLOB.digest_modes[DM_DIGEST] // If not absorbable, are they digestible? Then digest.
else
tempmode = GLOB.digest_modes[DM_DRAIN] // Otherwise drain.
return tempmode.process_mob(B, L)
>>>>>>> 7550df1e26... Merge pull request #13406 from Heroman3003/selective-upgrade
return tempmode.process_mob(B, L)

View File

@@ -139,7 +139,7 @@
if(emote_active)
var/list/EL = emote_lists[digest_mode]
if((LAZYLEN(EL) || LAZYLEN(emote_lists[DM_HOLD_ABSORBED]) || (digest_mode == DM_DIGEST && LAZYLEN(emote_lists[DM_HOLD]))) && next_emote <= world.time)
if((LAZYLEN(EL) || LAZYLEN(emote_lists[DM_HOLD_ABSORBED]) || (digest_mode == DM_DIGEST && LAZYLEN(emote_lists[DM_HOLD])) || (digest_mode == DM_SELECT && (LAZYLEN(emote_lists[DM_HOLD])||LAZYLEN(emote_lists[DM_DIGEST])||LAZYLEN(emote_lists[DM_ABSORB])) )) && next_emote <= world.time)
var/living_count = 0
var/absorbed_count = 0
for(var/mob/living/L in contents)
@@ -160,7 +160,14 @@
if(formatted_message)
to_chat(M, "<span class='notice'>[formatted_message]</span>")
else
if(digest_mode == DM_DIGEST && !M.digestable)
if (digest_mode == DM_SELECT)
if (M.digestable)
EL = emote_lists[DM_DIGEST]
else if (M.absorbable)
EL = emote_lists[DM_ABSORB]
else
EL = emote_lists[DM_HOLD]
else if(digest_mode == DM_DIGEST && !M.digestable)
EL = emote_lists[DM_HOLD] // Use Hold's emote list if we're indigestible
var/raw_message = pick(EL)

View File

@@ -1,6 +1,7 @@
/obj/machinery/artifact/predefined/hungry_statue
name = "alien artifact"
desc = "A large alien device."
icon = 'icons/obj/xenoarchaeology.dmi' //CHOMP Fix
artifact_master = /datum/component/artifact_master/hungry_statue

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -13,6 +13,7 @@ const digestModeToColor = {
'Absorb': 'purple',
'Unabsorb': 'purple',
'Drain': 'orange',
'Selective': 'orange',
'Shrink': 'teal',
'Grow': 'teal',
'Size Steal': 'teal',
@@ -26,6 +27,7 @@ const digestModeToPreyMode = {
'Absorb': 'being absorbed.',
'Unabsorb': 'being unabsorbed.',
'Drain': 'being drained.',
'Selective': 'being processed.',
'Shrink': 'being shrunken.',
'Grow': 'being grown.',
'Size Steal': 'having your size stolen.',

File diff suppressed because one or more lines are too long