mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 13:37:58 +01:00
Merge Fix
This commit is contained in:
@@ -24,15 +24,20 @@
|
||||
return target
|
||||
|
||||
// All mobs should have custom emote, really..
|
||||
/mob/proc/custom_emote(var/m_type=1,var/message = null)
|
||||
/mob/proc/custom_emote(var/m_type=EMOTE_VISUAL,var/message = null)
|
||||
|
||||
if(stat || !use_me && usr == src)
|
||||
if(usr)
|
||||
to_chat(usr, "You are unable to emote.")
|
||||
return
|
||||
|
||||
var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle)
|
||||
if(m_type == 2 && muzzled) return
|
||||
var/muzzled = is_muzzled()
|
||||
if(muzzled)
|
||||
var/obj/item/clothing/mask/muzzle/M = wear_mask
|
||||
if(m_type == EMOTE_SOUND && M.mute >= MUZZLE_MUTE_MUFFLE)
|
||||
return //Not all muzzles block sound
|
||||
if(m_type == EMOTE_SOUND && !can_speak())
|
||||
return
|
||||
|
||||
var/input
|
||||
if(!message)
|
||||
@@ -63,7 +68,7 @@
|
||||
|
||||
|
||||
// Type 1 (Visual) emotes are sent to anyone in view of the item
|
||||
if(m_type & 1)
|
||||
if(m_type & EMOTE_VISUAL)
|
||||
var/list/can_see = get_mobs_in_view(1,src) //Allows silicon & mmi mobs carried around to see the emotes of the person carrying them around.
|
||||
can_see |= viewers(src,null)
|
||||
for(var/mob/O in can_see)
|
||||
@@ -80,7 +85,7 @@
|
||||
|
||||
// Type 2 (Audible) emotes are sent to anyone in hear range
|
||||
// of the *LOCATION* -- this is important for pAIs to be heard
|
||||
else if(m_type & 2)
|
||||
else if(m_type & EMOTE_SOUND)
|
||||
for(var/mob/O in get_mobs_in_view(7,src))
|
||||
|
||||
if(O.status_flags & PASSEMOTES)
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
act = copytext(act, 1, t1)
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
if(muzzled)
|
||||
var/obj/item/clothing/mask/muzzle/M = wear_mask
|
||||
if(M.mute == MUZZLE_MUTE_NONE)
|
||||
muzzled = 0 //Not all muzzles block sound
|
||||
if(!can_speak())
|
||||
muzzled = 1
|
||||
//var/m_type = 1
|
||||
|
||||
@@ -1328,7 +1328,7 @@
|
||||
dna.species.create_organs(src)
|
||||
|
||||
for(var/thing in kept_items)
|
||||
equip_to_slot_or_del(thing, kept_items[thing])
|
||||
equip_to_slot_if_possible(thing, kept_items[thing], redraw_mob = 0)
|
||||
|
||||
//Handle default hair/head accessories for created mobs.
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
|
||||
@@ -253,8 +253,8 @@
|
||||
|
||||
if(H.status_flags & GOTTAGOFAST)
|
||||
. -= 1
|
||||
if(H.status_flags & GOTTAGOREALLYFAST)
|
||||
. -= 2
|
||||
if(H.status_flags & GOTTAGOFAST_METH)
|
||||
. -= 1
|
||||
return .
|
||||
|
||||
/datum/species/proc/on_species_gain(mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
|
||||
|
||||
@@ -140,8 +140,13 @@
|
||||
hair += Entry[3] // Adds custom screen to list
|
||||
|
||||
var/new_style = input(H, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair
|
||||
var/new_color = input("Please select hair color.", "Monitor Color", head_organ.hair_colour) as null|color
|
||||
|
||||
if(H.incapacitated())
|
||||
to_chat(src, "<span class='warning'>You were interrupted while changing your monitor display.</span>")
|
||||
to_chat(H, "<span class='warning'>You were interrupted while changing your monitor display.</span>")
|
||||
return
|
||||
|
||||
if(new_style)
|
||||
H.change_hair(new_style, 1) // The 1 is to enable custom sprites
|
||||
H.change_hair(new_style, 1) // The 1 is to enable custom sprites
|
||||
if(new_color)
|
||||
H.change_hair_color(new_color)
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
icon_state = "radio"
|
||||
|
||||
//
|
||||
//Robotic Component Analyser, basically a health analyser for robots
|
||||
//Robotic Component Analyzer, basically a health analyzer for robots
|
||||
//
|
||||
/obj/item/robotanalyzer
|
||||
name = "cyborg analyzer"
|
||||
|
||||
@@ -290,7 +290,7 @@ var/list/robot_verbs_default = list(
|
||||
if(N.kickoff)
|
||||
modules = list("Nations")
|
||||
if(mmi != null && mmi.alien)
|
||||
modules = "Hunter"
|
||||
modules = list("Hunter")
|
||||
modtype = input("Please, select a module!", "Robot", null, null) as null|anything in modules
|
||||
if(!modtype)
|
||||
return
|
||||
@@ -394,7 +394,6 @@ var/list/robot_verbs_default = list(
|
||||
|
||||
if("Hunter")
|
||||
module = new /obj/item/robot_module/alien/hunter(src)
|
||||
icon = "icons/mob/alien.dmi"
|
||||
icon_state = "xenoborg-state-a"
|
||||
modtype = "Xeno-Hu"
|
||||
feedback_inc("xeborg_hunter",1)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
if(..())
|
||||
return 1
|
||||
if(message_mode)
|
||||
used_radios += radio
|
||||
if(!is_component_functioning("radio"))
|
||||
to_chat(src, "<span class='warning'>Your radio isn't functional at this time.</span>")
|
||||
return 0
|
||||
@@ -18,8 +19,10 @@
|
||||
if(..())
|
||||
return 1
|
||||
if(message_mode == "department")
|
||||
used_radios += aiRadio
|
||||
return holopad_talk(message, verb, speaking)
|
||||
else if(message_mode)
|
||||
used_radios += aiRadio
|
||||
if(aiRadio.disabledAi || aiRestorePowerRoutine || stat)
|
||||
to_chat(src, "<span class='danger'>System Error - Transceiver Disabled.</span>")
|
||||
return 0
|
||||
@@ -36,6 +39,7 @@
|
||||
else if(message_mode)
|
||||
if(message_mode == "general")
|
||||
message_mode = null
|
||||
used_radios += radio
|
||||
return radio.talk_into(src,message,message_mode,verb,speaking)
|
||||
|
||||
/mob/living/silicon/say_quote(var/text)
|
||||
|
||||
@@ -146,3 +146,57 @@
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "splats"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
|
||||
|
||||
/mob/living/simple_animal/mouse/blobinfected
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
var/cycles_alive = 0
|
||||
var/cycles_limit = 30
|
||||
var/has_burst = FALSE
|
||||
|
||||
/mob/living/simple_animal/mouse/blobinfected/Life()
|
||||
cycles_alive++
|
||||
var/timeleft = (cycles_limit - cycles_alive) * 2
|
||||
if(ismob(loc)) // if someone ate it, burst immediately
|
||||
burst(FALSE)
|
||||
else if(timeleft < 1) // if timer expired, burst.
|
||||
burst(FALSE)
|
||||
else if(cycles_alive % 2 == 0) // give the mouse/player a countdown reminder every 2 cycles
|
||||
to_chat(src, "<span class='warning'>[timeleft] seconds until you burst, and become a blob...</span>")
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/mouse/blobinfected/death(gibbed)
|
||||
burst(gibbed)
|
||||
return ..(gibbed)
|
||||
|
||||
/mob/living/simple_animal/mouse/blobinfected/proc/burst(gibbed)
|
||||
if(has_burst)
|
||||
return FALSE
|
||||
var/turf/T = get_turf(src)
|
||||
if(!is_station_level(T.z) || isspaceturf(T))
|
||||
to_chat(src, "<span class='userdanger'>You feel ready to burst, but this isn't an appropriate place! You must return to the station!</span>")
|
||||
return FALSE
|
||||
has_burst = TRUE
|
||||
var/datum/mind/blobmind = mind
|
||||
var/client/C = client
|
||||
if(istype(blobmind) && istype(C))
|
||||
blobmind.special_role = SPECIAL_ROLE_BLOB
|
||||
var/obj/structure/blob/core/core = new(T, 200, C, 3)
|
||||
if(core.overmind && core.overmind.mind)
|
||||
//core.overmind.mind.name = blob.name
|
||||
core.overmind.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
|
||||
else
|
||||
new /obj/structure/blob/core(T) // Ghosts will be prompted to control it.
|
||||
if(ismob(loc)) // in case some taj/etc ate the mouse.
|
||||
var/mob/M = loc
|
||||
M.gib()
|
||||
if(!gibbed)
|
||||
gib()
|
||||
|
||||
/mob/living/simple_animal/mouse/blobinfected/get_scooped(mob/living/carbon/grabber)
|
||||
to_chat(grabber, "<span class='warning'>You try to pick up [src], but they slip out of your grasp!</span>")
|
||||
to_chat(src, "<span class='warning'>[src] tries to pick you up, but you wriggle free of their grasp!</span>")
|
||||
@@ -65,10 +65,12 @@
|
||||
addtimer(CALLBACK(src, .proc/inert_check), 2400)
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/proc/inert_check()
|
||||
if(!owner && !preserved)
|
||||
go_inert()
|
||||
else
|
||||
if(owner)
|
||||
preserved(implanted = 1)
|
||||
else if(preserved)
|
||||
preserved()
|
||||
else
|
||||
go_inert()
|
||||
|
||||
/obj/item/organ/internal/hivelord_core/proc/preserved(implanted = 0)
|
||||
inert = FALSE
|
||||
|
||||
@@ -51,7 +51,10 @@
|
||||
var/damage = O.force
|
||||
if(O.damtype == STAMINA)
|
||||
damage = 0
|
||||
health -= damage
|
||||
if(force_threshold && damage < force_threshold)
|
||||
visible_message("<span class='boldwarning'>[src] is unharmed by [O]!</span>")
|
||||
return
|
||||
adjustHealth(damage)
|
||||
visible_message("<span class='boldwarning'>[src] has been attacked with the [O] by [user]. </span>")
|
||||
playsound(loc, O.hitsound, 25, 1, -1)
|
||||
else
|
||||
@@ -125,6 +128,9 @@
|
||||
seen_revived_enemy = TRUE
|
||||
raise_alert("[name] reports intruder [target] has returned from death!")
|
||||
depotarea.list_remove(target, depotarea.dead_list)
|
||||
if(!atoms_share_level(src, target) && prob(20))
|
||||
// This prevents someone from aggroing a depot mob, then hiding in a locker, perfectly safe, while the mob stands there getting killed by their friends.
|
||||
LoseTarget()
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_action()
|
||||
if(seen_enemy)
|
||||
@@ -134,6 +140,14 @@
|
||||
if(scan_cycles >= 15 && istype(depotarea))
|
||||
scan_cycles = 0
|
||||
if(!atoms_share_level(src, spawn_turf))
|
||||
if(istype(loc, /obj/structure/closet))
|
||||
var/obj/structure/closet/O = loc
|
||||
forceMove(get_turf(src))
|
||||
visible_message("<span class='boldwarning'>[src] smashes their way out of [O]!</span>")
|
||||
qdel(O)
|
||||
raise_alert("[src] reported being trapped in a locker.")
|
||||
raised_alert = FALSE
|
||||
return
|
||||
if(alert_on_spacing)
|
||||
raise_alert("[src] lost in space.")
|
||||
death()
|
||||
@@ -196,19 +210,14 @@
|
||||
alert_on_timeout = TRUE
|
||||
alert_on_shield_breach = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/death()
|
||||
if(depotarea)
|
||||
depotarea.declare_finished()
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize()
|
||||
. = ..()
|
||||
..()
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/LateInitialize()
|
||||
if(istype(depotarea))
|
||||
var/list/key_candidates = list()
|
||||
for(var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O in living_mob_list)
|
||||
if(O == src)
|
||||
continue
|
||||
key_candidates += O
|
||||
if(key_candidates.len)
|
||||
var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O = pick(key_candidates)
|
||||
|
||||
@@ -171,8 +171,8 @@ var/global/list/ts_spiderling_list = list()
|
||||
visible_message("<span class='notice'>[src] harmlessly nuzzles [target].</span>")
|
||||
T.CheckFaction()
|
||||
CheckFaction()
|
||||
else if(istype(target, /obj/structure/spider/cocoon))
|
||||
to_chat(src, "Destroying our own cocoons would not help us.")
|
||||
else if(istype(target, /obj/structure/spider)) // Prevents destroying coccoons (exploit), eggs (horrible misclick), etc
|
||||
to_chat(src, "Destroying things created by fellow spiders would not help us.")
|
||||
else if(istype(target, /obj/machinery/door/firedoor))
|
||||
var/obj/machinery/door/firedoor/F = target
|
||||
if(F.density)
|
||||
|
||||
@@ -49,7 +49,14 @@
|
||||
|
||||
// Whether the mob is capable of talking
|
||||
/mob/living/can_speak()
|
||||
return !(silent || (disabilities & MUTE) || is_muzzled())
|
||||
if(!(silent || (disabilities & MUTE)))
|
||||
if(is_muzzled())
|
||||
var/obj/item/clothing/mask/muzzle/M = wear_mask
|
||||
if(M.mute >= MUZZLE_MUTE_MUFFLE)
|
||||
return FALSE
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
// Whether the mob is capable of standing or not
|
||||
/mob/living/proc/can_stand()
|
||||
|
||||
@@ -857,7 +857,7 @@ var/list/slot_equipment_priority = list( \
|
||||
if(machine && in_range(src, usr))
|
||||
show_inv(machine)
|
||||
|
||||
if(!usr.stat && usr.canmove && !usr.restrained() && in_range(src, usr))
|
||||
if(!usr.incapacitated() && in_range(src, usr))
|
||||
if(href_list["item"])
|
||||
var/slot = text2num(href_list["item"])
|
||||
var/obj/item/what = get_item_by_slot(slot)
|
||||
|
||||
@@ -1307,6 +1307,11 @@
|
||||
name = "Rough-Cropped Mane"
|
||||
icon_state = "rough"
|
||||
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_raine
|
||||
name = "Raine"
|
||||
icon_state = "vulp_hair_raine"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/hair/vox
|
||||
species_allowed = list("Vox")
|
||||
glasses_over = 1
|
||||
@@ -1425,6 +1430,42 @@
|
||||
name = "Wildflowers"
|
||||
icon_state = "diona_wildflower"
|
||||
|
||||
//Kidan Hairstyles, sprites by Travelling Merchant
|
||||
|
||||
/datum/sprite_accessory/hair/kidan
|
||||
species_allowed = list("Kidan")
|
||||
glasses_over = 1
|
||||
do_colouration = 0
|
||||
|
||||
/datum/sprite_accessory/hair/kidan/hollow_horns
|
||||
name = "Hollow Horns"
|
||||
icon_state = "kidan_hollow_horns"
|
||||
|
||||
/datum/sprite_accessory/hair/kidan/wide_horns
|
||||
name = "Wide Horns"
|
||||
icon_state = "kidan_wide_horns"
|
||||
|
||||
/datum/sprite_accessory/hair/kidan/curled_horns
|
||||
name = "Curled Horns"
|
||||
icon_state = "kidan_curled_horns"
|
||||
|
||||
/datum/sprite_accessory/hair/kidan/hawk_horn
|
||||
name = "Hawk Horn"
|
||||
icon_state = "kidan_hawk_horn"
|
||||
|
||||
/datum/sprite_accessory/hair/kidan/kidan_bull_horns
|
||||
name = "Bull Horns"
|
||||
icon_state = "kidan_bull_horns"
|
||||
|
||||
/datum/sprite_accessory/hair/kidan/kidan_broken_bull_horns
|
||||
name = "Broken Bull Horns"
|
||||
icon_state = "kidan_broken_bull_horns"
|
||||
|
||||
/datum/sprite_accessory/hair/kidan/kidan_tall_horns
|
||||
name = "Tall Horns"
|
||||
icon_state = "kidan_tall_horns"
|
||||
|
||||
|
||||
// Apollo-specific
|
||||
|
||||
/datum/sprite_accessory/hair/wryn
|
||||
@@ -2532,6 +2573,17 @@
|
||||
name = "Moth Antennae"
|
||||
icon_state = "kidan_moth"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/kidan/kidan_Mantie_Long
|
||||
name = "Mantie Long"
|
||||
icon_state = "kidan_Mantie_Long"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/kidan/kidan_Mantie_Curled
|
||||
name = "Mantie Curled"
|
||||
icon_state = "kidan_Mantie_Curled"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/kidan/kidan_very_short
|
||||
name = "Very Short"
|
||||
icon_state = "kidan_very_short"
|
||||
|
||||
/* BODY MARKINGS */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user