mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 12:04:48 +01:00
Merge branch 'master' into bad-karma
This commit is contained in:
@@ -101,7 +101,9 @@ var/global/nologevent = 0
|
||||
<br><br>
|
||||
[check_rights(R_ADMIN,0) ? "<A href='?_src_=holder;traitor=\ref[M]'>Traitor panel</A> | " : "" ]
|
||||
<A href='?_src_=holder;narrateto=\ref[M]'>Narrate to</A> |
|
||||
<A href='?_src_=holder;subtlemessage=\ref[M]'>Subtle message</A>
|
||||
<A href='?_src_=holder;subtlemessage=\ref[M]'>Subtle message</A> |
|
||||
<A href='?_src_=holder;Bless=[M.UID()]'>Bless</A> |
|
||||
<A href='?_src_=holder;Smite=[M.UID()]'>Smite</A>
|
||||
"}
|
||||
|
||||
if(M.client)
|
||||
|
||||
+100
-1
@@ -1546,7 +1546,7 @@
|
||||
to_chat(X, take_msg)
|
||||
else if(is_mhelp && check_rights(R_MOD|R_MENTOR, 0, X.mob))
|
||||
to_chat(X, take_msg)
|
||||
to_chat(M, "<span class='notice'><b>Your question is being attended to by [key_name(usr.client)]. Thanks for your patience!</b></span>")
|
||||
to_chat(M, "<span class='notice'><b>Your question is being attended to by [key_name(usr.client, null, 0)]. Thanks for your patience!</b></span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Unable to locate mob.</span>")
|
||||
|
||||
@@ -1790,9 +1790,15 @@
|
||||
H = M
|
||||
ptypes += "Brain Damage"
|
||||
ptypes += "Honk Tumor"
|
||||
ptypes += "Hallucinate"
|
||||
ptypes += "Cold"
|
||||
ptypes += "Hunger"
|
||||
ptypes += "Cluwne"
|
||||
ptypes += "Mutagen Cookie"
|
||||
ptypes += "Hellwater Cookie"
|
||||
ptypes += "Assassin"
|
||||
ptypes += "Priest"
|
||||
ptypes += "Lynch"
|
||||
var/punishment = input(owner, "How would you like to smite [M]?", "Its good to be baaaad...", "") as null|anything in ptypes
|
||||
if(!(punishment in ptypes))
|
||||
return
|
||||
@@ -1820,6 +1826,15 @@
|
||||
to_chat(H, "<span class='userdanger'>Life seems funnier, somehow.</span>")
|
||||
organ.insert(H)
|
||||
logmsg = "a honk tumor."
|
||||
if("Hallucinate")
|
||||
H.Hallucinate(1000)
|
||||
logmsg = "hallucinations."
|
||||
if("Hunger")
|
||||
H.nutrition = NUTRITION_LEVEL_CURSED
|
||||
logmsg = "starvation."
|
||||
if("Cold")
|
||||
H.reagents.add_reagent("frostoil", 40)
|
||||
H.reagents.add_reagent("ice", 40)
|
||||
if("Cluwne")
|
||||
H.makeCluwne()
|
||||
logmsg = "cluwned."
|
||||
@@ -1828,6 +1843,7 @@
|
||||
evilcookie.reagents.add_reagent("mutagen", 10)
|
||||
evilcookie.desc = "It has a faint green glow."
|
||||
evilcookie.bitesize = 100
|
||||
evilcookie.flags = NODROP
|
||||
H.drop_l_hand()
|
||||
H.equip_to_slot_or_del(evilcookie, slot_l_hand)
|
||||
logmsg = "a mutagen cookie."
|
||||
@@ -1836,9 +1852,92 @@
|
||||
evilcookie.reagents.add_reagent("hell_water", 25)
|
||||
evilcookie.desc = "Sulphur-flavored."
|
||||
evilcookie.bitesize = 100
|
||||
evilcookie.flags = NODROP
|
||||
H.drop_l_hand()
|
||||
H.equip_to_slot_or_del(evilcookie, slot_l_hand)
|
||||
logmsg = "a hellwater cookie."
|
||||
if("Priest")
|
||||
logmsg = "priest."
|
||||
H.mutations |= NOCLONE
|
||||
message_admins("[key_name_admin(owner)] is sending a dark priest to assassinate [key_name_admin(M)]...")
|
||||
var/list/candidates = pollCandidates("Do you want to play as a murderous dark priest?")
|
||||
if(!candidates.len)
|
||||
to_chat(usr, "ERROR: Could not create priest. No valid candidates.")
|
||||
return
|
||||
var/mob/C = pick(candidates)
|
||||
var/key_of_priest = C.key
|
||||
if(!key_of_priest)
|
||||
to_chat(usr, "ERROR: Could not create priest. Could not pick key.")
|
||||
return
|
||||
var/datum/mind/priest_mind = new /datum/mind(key_of_priest)
|
||||
priest_mind.active = 1
|
||||
var/mob/living/carbon/human/priest_mob = new /mob/living/carbon/human(pick(latejoin))
|
||||
priest_mind.transfer_to(priest_mob)
|
||||
var/datum/outfit/admin/dark_priest/O = new /datum/outfit/admin/dark_priest
|
||||
priest_mob.equipOutfit(O, FALSE)
|
||||
var/obj/item/weapon/pinpointer/advpinpointer/N = new /obj/item/weapon/pinpointer/advpinpointer(priest_mob)
|
||||
priest_mob.equip_to_slot_or_del(N, slot_r_store)
|
||||
N.active = 1
|
||||
N.mode = 2
|
||||
N.target = H
|
||||
N.point_at(N.target)
|
||||
N.flags |= NODROP
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
kill_objective.owner = priest_mind
|
||||
kill_objective.target = H.mind
|
||||
kill_objective.explanation_text = "Murder [H.real_name], the [H.mind.assigned_role], in the name of the dark gods."
|
||||
priest_mind.objectives += kill_objective
|
||||
ticker.mode.traitors |= priest_mob.mind
|
||||
to_chat(priest_mob, "<span class='danger'>ATTENTION:</span> You are now a dark priest!")
|
||||
to_chat(priest_mob, "<B>Goal: <span class='danger'>MURDER [H.real_name]</span>, currently in [get_area(H.loc)], in the name of the dark gods. </B>");
|
||||
to_chat(priest_mob, "<B>The gods will prevent their revival.</B>");
|
||||
priest_mob.mind.special_role = SPECIAL_ROLE_TRAITOR
|
||||
var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
|
||||
tatorhud.join_hud(priest_mob)
|
||||
ticker.mode.set_antag_hud(priest_mob, "hudsyndicate")
|
||||
if("Assassin")
|
||||
logmsg = "assassin."
|
||||
var/list/possible_traitors = list()
|
||||
for(var/mob/living/player in living_mob_list)
|
||||
if(player.client && player.mind && !player.mind.special_role && player.stat != DEAD && player != H)
|
||||
if(ishuman(player))
|
||||
if(player.client && (ROLE_TRAITOR in player.client.prefs.be_special) && !jobban_isbanned(player, ROLE_TRAITOR) && !jobban_isbanned(player, "Syndicate"))
|
||||
possible_traitors += player.mind
|
||||
for(var/datum/mind/player in possible_traitors)
|
||||
if(player.current)
|
||||
if(ismindshielded(player.current))
|
||||
possible_traitors -= player
|
||||
if(possible_traitors.len)
|
||||
var/datum/mind/newtraitormind = pick(possible_traitors)
|
||||
var/mob/living/newtraitor = newtraitormind.current
|
||||
var/datum/objective/assassinate/kill_objective = new
|
||||
kill_objective.owner = newtraitormind
|
||||
kill_objective.target = H.mind
|
||||
kill_objective.explanation_text = "Assassinate [H.real_name], the [H.mind.assigned_role]."
|
||||
newtraitormind.objectives += kill_objective
|
||||
ticker.mode.equip_traitor(newtraitor)
|
||||
ticker.mode.traitors |= newtraitor.mind
|
||||
to_chat(newtraitor, "<span class='danger'>ATTENTION:</span> It is time to pay your debt to the Syndicate...")
|
||||
to_chat(newtraitor, "<B>You are now a traitor.</B>")
|
||||
to_chat(newtraitor, "<B>Goal: <span class='danger'>KILL [H.real_name]</span>, currently in [get_area(H.loc)]</B>");
|
||||
newtraitor.mind.special_role = SPECIAL_ROLE_TRAITOR
|
||||
var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
|
||||
tatorhud.join_hud(newtraitor)
|
||||
ticker.mode.set_antag_hud(newtraitor, "hudsyndicate")
|
||||
else
|
||||
to_chat(usr, "ERROR: Failed to create a traitor.")
|
||||
return
|
||||
if("Lynch")
|
||||
logmsg = "lynch."
|
||||
for(var/datum/mind/crew in ticker.minds)
|
||||
if(!crew.current)
|
||||
continue
|
||||
if(!isliving(crew.current))
|
||||
continue
|
||||
if(crew == H.mind)
|
||||
continue
|
||||
to_chat(crew.current, "<BR><span class='userdanger'>The gods have given you a task: find [H.real_name], located in [get_area(H.loc)], and slay them!</span>");
|
||||
to_chat(crew.current, "<span class='userdanger'>Do not harm anyone other than [H.real_name] while carrying out this task.</span><BR>");
|
||||
if("Gib")
|
||||
logmsg = "gibbed."
|
||||
M.gib(FALSE)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/claymore/highlander(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(H.loc), slot_l_store)
|
||||
|
||||
|
||||
@@ -76,8 +76,6 @@
|
||||
"off" = "borgmacro")
|
||||
)
|
||||
|
||||
var/reset_stretch = 0 //Used by things that fiddle with client's stretch-to-fit.
|
||||
|
||||
var/topic_debugging = 0 //if set to true, allows client to see nanoUI errors -- yes i realize this is messy but it'll make live testing infinitely easier
|
||||
|
||||
control_freak = CONTROL_FREAK_ALL | CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS
|
||||
@@ -93,7 +91,7 @@
|
||||
|
||||
// Donator stuff.
|
||||
var/donator_level = DONATOR_LEVEL_NONE
|
||||
|
||||
|
||||
// If set to true, this client can interact with atoms such as buttons and doors on top of regular machinery interaction
|
||||
var/advanced_admin_interaction = FALSE
|
||||
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* ViewMods Client module
|
||||
* This should be used by anything that wants to change a client's view range.
|
||||
* Also includes
|
||||
*/
|
||||
|
||||
/* Defines */
|
||||
#define CUSTOM_VIEWRANGES list(1, 2, 3, 4, 5, 6, "RESET")
|
||||
|
||||
/* Viewmods */
|
||||
/client
|
||||
var/list/ViewMods = list()
|
||||
var/ViewModsActive = FALSE
|
||||
var/ViewPreferedIconSize = 0
|
||||
|
||||
/client/proc/AddViewMod(id, size)
|
||||
var/datum/viewmod/V = new /datum/viewmod(id, size)
|
||||
ViewMods[V.id] = V
|
||||
UpdateView()
|
||||
|
||||
/client/proc/CheckViewMod(id)
|
||||
. = 0
|
||||
if(ViewMods[id])
|
||||
. = 1
|
||||
|
||||
/client/proc/RemoveViewMod(id)
|
||||
if(CheckViewMod(id))
|
||||
qdel(ViewMods[id])
|
||||
ViewMods.Remove(id)
|
||||
UpdateView()
|
||||
|
||||
/client/proc/UpdateView()
|
||||
if(!ViewModsActive)
|
||||
ViewPreferedIconSize = winget(src, "mapwindow.map", "icon-size")
|
||||
|
||||
var/highest_range = 0
|
||||
for(var/mod_id in ViewMods)
|
||||
var/datum/viewmod/V = ViewMods[mod_id]
|
||||
highest_range = max(highest_range, V.size)
|
||||
|
||||
SetView(highest_range ? highest_range : world.view)
|
||||
ViewModsActive = (highest_range > 0)
|
||||
|
||||
/client/proc/SetView(view_range)
|
||||
if(view_range == world.view)
|
||||
winset(src, "mapwindow.map", "icon-size=[ViewPreferedIconSize]")
|
||||
else
|
||||
winset(src, "mapwindow.map", "icon-size=0")
|
||||
|
||||
view = view_range
|
||||
|
||||
if(mob && mob.hud_used)
|
||||
// If view range is less than world.view, assume the HUD will not fit under normal mode and turn it to reduced
|
||||
if(view_range < world.view)
|
||||
// If it's really tiny, turn their hud off completely
|
||||
if(view_range <= ARBITRARY_VIEWRANGE_NOHUD)
|
||||
mob.hud_used.show_hud(HUD_STYLE_NOHUD)
|
||||
else
|
||||
mob.hud_used.show_hud(HUD_STYLE_REDUCED)
|
||||
else
|
||||
mob.hud_used.show_hud(HUD_STYLE_STANDARD)
|
||||
|
||||
/* Viewmod datums */
|
||||
/datum/viewmod
|
||||
var/id = ""
|
||||
var/size = -1
|
||||
|
||||
/datum/viewmod/New(new_id, new_size = world.view)
|
||||
. = ..()
|
||||
id = new_id
|
||||
size = new_size
|
||||
|
||||
/* Client verbs */
|
||||
/proc/viewNum_to_text(view)
|
||||
return "[(view * 2) + 1]x[(view * 2) + 1]"
|
||||
|
||||
/client/verb/set_view_range(view_range as null|anything in CUSTOM_VIEWRANGES)
|
||||
set name = "Set View Range"
|
||||
set category = "Preferences"
|
||||
|
||||
if(!view_range)
|
||||
return
|
||||
|
||||
RemoveViewMod("custom")
|
||||
if(view_range == "RESET")
|
||||
to_chat(src, "<span class='notice'>View range reset.</span>")
|
||||
return
|
||||
|
||||
to_chat(src, "<span class='notice'>View range set to [viewNum_to_text(view_range)]</span>")
|
||||
AddViewMod("custom", view_range)
|
||||
@@ -17,6 +17,13 @@
|
||||
icon_state = "black"
|
||||
item_state = "r_hands"
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/color/black/forensics
|
||||
name = "forensics gloves"
|
||||
desc = "These high-tech gloves don't leave any material traces on objects they touch. Perfect for leaving crime scenes undisturbed...both before and after the crime."
|
||||
icon_state = "forensics"
|
||||
can_leave_fibers = FALSE
|
||||
|
||||
/obj/item/clothing/gloves/combat
|
||||
desc = "These tactical gloves are somewhat fire and impact resistant."
|
||||
name = "combat gloves"
|
||||
@@ -124,4 +131,4 @@
|
||||
to_chat(user, "<span class='notice'>You cut [cell] away from [src].</span>")
|
||||
cell.forceMove(get_turf(loc))
|
||||
cell = null
|
||||
update_icon()
|
||||
update_icon()
|
||||
|
||||
@@ -16,33 +16,33 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
|
||||
var/item_multiplier = istype(src,/obj/item)?1.2:1
|
||||
if(M.wear_suit)
|
||||
fibertext = "Material from \a [M.wear_suit]."
|
||||
if(prob(10*item_multiplier) && !(fibertext in suit_fibers))
|
||||
if(prob(10*item_multiplier) && !(fibertext in suit_fibers) && M.wear_suit.can_leave_fibers)
|
||||
//log_to_dd("Added fibertext: [fibertext]")
|
||||
suit_fibers += fibertext
|
||||
if(!(M.wear_suit.body_parts_covered & UPPER_TORSO))
|
||||
if(M.w_uniform)
|
||||
fibertext = "Fibers from \a [M.w_uniform]."
|
||||
if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed.
|
||||
if(prob(12*item_multiplier) && !(fibertext in suit_fibers) && M.w_uniform.can_leave_fibers) //Wearing a suit means less of the uniform exposed.
|
||||
//log_to_dd("Added fibertext: [fibertext]")
|
||||
suit_fibers += fibertext
|
||||
if(!(M.wear_suit.body_parts_covered & HANDS))
|
||||
if(M.gloves)
|
||||
fibertext = "Material from a pair of [M.gloves.name]."
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers)
|
||||
//log_to_dd("Added fibertext: [fibertext]")
|
||||
suit_fibers += fibertext
|
||||
else if(M.w_uniform)
|
||||
fibertext = "Fibers from \a [M.w_uniform]."
|
||||
if(prob(15*item_multiplier) && !(fibertext in suit_fibers))
|
||||
if(prob(15*item_multiplier) && !(fibertext in suit_fibers) && M.w_uniform.can_leave_fibers)
|
||||
// "Added fibertext: [fibertext]"
|
||||
suit_fibers += fibertext
|
||||
if(M.gloves)
|
||||
fibertext = "Material from a pair of [M.gloves.name]."
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers)
|
||||
//log_to_dd("Added fibertext: [fibertext]")
|
||||
suit_fibers += "Material from a pair of [M.gloves.name]."
|
||||
else if(M.gloves)
|
||||
fibertext = "Material from a pair of [M.gloves.name]."
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers)
|
||||
//log_to_dd("Added fibertext: [fibertext]")
|
||||
suit_fibers += "Material from a pair of [M.gloves.name]."
|
||||
suit_fibers += "Material from a pair of [M.gloves.name]."
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
var/datum/martial_art/base = null // The permanent style
|
||||
var/deflection_chance = 0 //Chance to deflect projectiles
|
||||
var/help_verb = null
|
||||
var/no_guns = FALSE //set to TRUE to prevent users of this style from using guns (sleeping carp, highlander). They can still pick them up, but not fire them.
|
||||
var/no_guns_message = "" //message to tell the style user if they try and use a gun while no_guns = TRUE (DISHONORABRU!)
|
||||
|
||||
/datum/martial_art/proc/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
return 0
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
name = "The Sleeping Carp"
|
||||
deflection_chance = 100
|
||||
help_verb = /mob/living/carbon/human/proc/sleeping_carp_help
|
||||
no_guns = TRUE
|
||||
no_guns_message = "Use of ranged weaponry would bring dishonor to the clan."
|
||||
|
||||
/datum/martial_art/the_sleeping_carp/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(findtext(streak,WRIST_WRENCH_COMBO))
|
||||
|
||||
@@ -1985,8 +1985,8 @@
|
||||
to_chat(src, "<span class='warning'>Your fingers don't fit in the trigger guard!</span>")
|
||||
return 0
|
||||
|
||||
if(martial_art && martial_art.name == "The Sleeping Carp") //great dishonor to famiry
|
||||
to_chat(src, "<span class='warning'>Use of ranged weaponry would bring dishonor to the clan.</span>")
|
||||
if(martial_art && martial_art.no_guns) //great dishonor to famiry
|
||||
to_chat(src, "<span class='warning'>[martial_art.no_guns_message]</span>")
|
||||
return 0
|
||||
|
||||
return .
|
||||
|
||||
@@ -37,12 +37,85 @@
|
||||
icon_resting = "cat_rest"
|
||||
gender = FEMALE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
var/list/family = list()
|
||||
var/memory_saved = 0
|
||||
var/list/children = list() //Actual mob instances of children
|
||||
var/cats_deployed = 0
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/New()
|
||||
Read_Memory()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/Life()
|
||||
if(!cats_deployed && ticker.current_state >= GAME_STATE_SETTING_UP)
|
||||
Deploy_The_Cats()
|
||||
if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
Write_Memory()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/make_babies()
|
||||
var/mob/baby = ..()
|
||||
if(baby)
|
||||
children += baby
|
||||
return baby
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/death()
|
||||
if(!memory_saved)
|
||||
Write_Memory(1)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory()
|
||||
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
|
||||
S["family"] >> family
|
||||
|
||||
if(isnull(family))
|
||||
family = list()
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead)
|
||||
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
|
||||
family = list()
|
||||
if(!dead)
|
||||
for(var/mob/living/simple_animal/pet/cat/kitten/C in children)
|
||||
if(istype(C,type) || C.stat || !C.z || !C.butcher_results)
|
||||
continue
|
||||
if(C.type in family)
|
||||
family[C.type] += 1
|
||||
else
|
||||
family[C.type] = 1
|
||||
S["family"] << family
|
||||
memory_saved = 1
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats()
|
||||
cats_deployed = 1
|
||||
for(var/cat_type in family)
|
||||
if(family[cat_type] > 0)
|
||||
for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS)
|
||||
new cat_type(loc)
|
||||
|
||||
|
||||
/mob/living/simple_animal/pet/cat/handle_automated_action()
|
||||
..()
|
||||
if(prob(1))
|
||||
custom_emote(1, pick("stretches out for a belly rub.", "wags its tail.", "lies down."))
|
||||
icon_state = "[icon_living]_rest"
|
||||
resting = 1
|
||||
update_canmove()
|
||||
else if (prob(1))
|
||||
custom_emote(1, pick("sits down.", "crouches on its hind legs.", "looks alert."))
|
||||
icon_state = "[icon_living]_sit"
|
||||
resting = 1
|
||||
update_canmove()
|
||||
else if (prob(1))
|
||||
if (resting)
|
||||
custom_emote(1, pick("gets up and meows.", "walks around.", "stops resting."))
|
||||
icon_state = "[icon_living]"
|
||||
resting = 0
|
||||
update_canmove()
|
||||
else
|
||||
custom_emote(1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat."))
|
||||
|
||||
//MICE!
|
||||
if(eats_mice && loc && isturf(loc) && !incapacitated())
|
||||
if(eats_mice && isturf(loc) && !incapacitated())
|
||||
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
||||
if(!M.stat && Adjacent(M))
|
||||
custom_emote(1, "splats \the [M]!")
|
||||
@@ -50,13 +123,11 @@
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
break
|
||||
|
||||
//attempt to mate
|
||||
make_babies()
|
||||
|
||||
/mob/living/simple_animal/pet/cat/handle_automated_movement()
|
||||
..()
|
||||
if(eats_mice && !incapacitated())
|
||||
if(!stat && !resting && !buckled)
|
||||
turns_since_scan++
|
||||
if(turns_since_scan > 5)
|
||||
walk_to(src,0)
|
||||
@@ -75,6 +146,7 @@
|
||||
stop_automated_movement = 1
|
||||
walk_to(src,movement_target,0,3)
|
||||
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Proc
|
||||
name = "Proc"
|
||||
|
||||
@@ -102,4 +174,4 @@
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
eats_mice = 0
|
||||
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
|
||||
minbodytemp = 0
|
||||
|
||||
@@ -592,7 +592,7 @@
|
||||
alone = 0
|
||||
continue
|
||||
if(alone && partner && children < 3)
|
||||
new childtype(loc)
|
||||
return new childtype(loc)
|
||||
|
||||
/mob/living/simple_animal/say_quote(var/message)
|
||||
var/verb = "says"
|
||||
|
||||
@@ -149,14 +149,6 @@
|
||||
|
||||
|
||||
/client/Move(n, direct)
|
||||
if(viewingCanvas)
|
||||
view = world.view //Reset the view
|
||||
winset(src, "mapwindow.map", "icon-size=[src.reset_stretch]")
|
||||
viewingCanvas = 0
|
||||
mob.reset_perspective()
|
||||
if(mob.hud_used)
|
||||
mob.hud_used.show_hud(HUD_STYLE_STANDARD)
|
||||
|
||||
if(world.time < move_delay)
|
||||
return
|
||||
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
fixture_type = "bulb"
|
||||
sheets_refunded = 1
|
||||
|
||||
|
||||
// the standard tube light fixture
|
||||
/obj/machinery/light
|
||||
name = "light fixture"
|
||||
@@ -149,6 +150,7 @@
|
||||
// this is used to calc the probability the light burns out
|
||||
|
||||
var/rigged = 0 // true if rigged to explode
|
||||
var/lightmaterials = list(MAT_GLASS=100) //stores the materials the light is made of to stop infinite glass exploit
|
||||
|
||||
// the smaller bulb light fixture
|
||||
|
||||
@@ -305,6 +307,7 @@
|
||||
brightness_range = L.brightness_range
|
||||
brightness_power = L.brightness_power
|
||||
brightness_color = L.brightness_color
|
||||
lightmaterials = L.materials
|
||||
on = has_power()
|
||||
update()
|
||||
|
||||
@@ -472,6 +475,7 @@
|
||||
L.brightness_range = brightness_range
|
||||
L.brightness_power = brightness_power
|
||||
L.brightness_color = brightness_color
|
||||
L.materials = lightmaterials
|
||||
|
||||
// light item inherits the switchcount, then zero it
|
||||
L.switchcount = switchcount
|
||||
@@ -500,6 +504,7 @@
|
||||
L.brightness_range = brightness_range
|
||||
L.brightness_power = brightness_power
|
||||
L.brightness_color = brightness_color
|
||||
L.materials = lightmaterials
|
||||
|
||||
// light item inherits the switchcount, then zero it
|
||||
L.switchcount = switchcount
|
||||
@@ -596,7 +601,7 @@
|
||||
var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
|
||||
var/base_state
|
||||
var/switchcount = 0 // number of times switched
|
||||
materials = list(MAT_METAL=60)
|
||||
materials = list(MAT_GLASS=100)
|
||||
var/rigged = 0 // true if rigged to explode
|
||||
var/brightness_range = 2 //how much light it gives off
|
||||
var/brightness_power = 1
|
||||
@@ -608,7 +613,6 @@
|
||||
icon_state = "ltube"
|
||||
base_state = "ltube"
|
||||
item_state = "c_tube"
|
||||
materials = list(MAT_GLASS=100)
|
||||
brightness_range = 8
|
||||
|
||||
/obj/item/weapon/light/tube/large
|
||||
@@ -623,7 +627,6 @@
|
||||
icon_state = "lbulb"
|
||||
base_state = "lbulb"
|
||||
item_state = "contvapour"
|
||||
materials = list(MAT_GLASS=100)
|
||||
brightness_range = 5
|
||||
brightness_color = "#a0a080"
|
||||
|
||||
@@ -637,7 +640,6 @@
|
||||
icon_state = "fbulb"
|
||||
base_state = "fbulb"
|
||||
item_state = "egg4"
|
||||
materials = list(MAT_GLASS=100)
|
||||
brightness_range = 5
|
||||
|
||||
// update the icon state and description of the light
|
||||
|
||||
@@ -394,22 +394,22 @@
|
||||
build_path = /obj/item/weapon/implantcase
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/implant_freedom
|
||||
name = "Freedom Implant Case"
|
||||
/datum/design/implant_chem
|
||||
name = "Chemical Implant Case"
|
||||
desc = "A glass case containing an implant."
|
||||
id = "implant_freedom"
|
||||
req_tech = list("combat" = 6, "biotech" = 5, "magnets" = 3, "syndicate" = 3)
|
||||
id = "implant_chem"
|
||||
req_tech = list("materials" = 3, "biotech" = 5,)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 800, MAT_GLASS = 500, MAT_GOLD = 500)
|
||||
build_path = /obj/item/weapon/implantcase/freedom
|
||||
materials = list(MAT_GLASS = 700)
|
||||
build_path = /obj/item/weapon/implantcase/chem
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/implant_adrenalin
|
||||
name = "Adrenalin Implant Case"
|
||||
/datum/design/implant_tracking
|
||||
name = "Tracking Implant Case"
|
||||
desc = "A glass case containing an implant."
|
||||
id = "implant_adrenalin"
|
||||
req_tech = list("biotech" = 6, "combat" = 6, "syndicate" = 6)
|
||||
id = "implant_tracking"
|
||||
req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "programming" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_GOLD = 500, MAT_URANIUM = 600, MAT_DIAMOND = 600)
|
||||
build_path = /obj/item/weapon/implantcase/adrenaline
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/weapon/implantcase/track
|
||||
category = list("Medical")
|
||||
|
||||
@@ -245,6 +245,7 @@
|
||||
/obj/machinery/teleport/station,
|
||||
/obj/machinery/teleport/hub,
|
||||
/obj/machinery/telepad,
|
||||
/obj/machinery/telepad_cargo,
|
||||
/obj/machinery/clonepod,
|
||||
/obj/effect/hierophant,
|
||||
/obj/item/device/warp_cube,
|
||||
|
||||
Reference in New Issue
Block a user