Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into swordnborg

Conflicts:
	icons/obj/surgery.dmi
This commit is contained in:
Markolie
2015-10-01 04:32:10 +02:00
23 changed files with 946 additions and 235 deletions
+9 -14
View File
@@ -519,21 +519,16 @@ var/global/nologevent = 0
if(!check_rights(R_SERVER))
return
var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel")
if(confirm == "Cancel")
var/delay = input("What delay should the restart have (in seconds)?", "Restart Delay", 5) as num|null
if(isnull(delay))
return
if(confirm == "Yes")
var/delay = input("What delay should the restart have (in seconds)?", "Restart Delay", 5) as num
if(isnull(delay))
delay = 50
else
delay = delay * 10
message_admins("[key_name_admin(usr)] has initiated a server restart with a delay of [delay/10] seconds")
log_admin("[key_name(usr)] has initiated a server restart with a delay of [delay/10] seconds")
ticker.delay_end = 0
feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay)
else
delay = delay * 10
message_admins("[key_name_admin(usr)] has initiated a server restart with a delay of [delay/10] seconds")
log_admin("[key_name(usr)] has initiated a server restart with a delay of [delay/10] seconds")
ticker.delay_end = 0
feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay)
/datum/admins/proc/announce()
set category = "Special Verbs"
+5 -2
View File
@@ -60,7 +60,7 @@
//adv. hotkey mode vars, code using them in /interface/interface.dm//
/////////////////////////////////////////////////////////////////////
var/hotkeytype = "QWERTY" //what set of hotkeys is in use(defaulting to QWERTY because I can't be bothered to ake this save on SQL)
var/hotkeytype = "QWERTY" //what set of hotkeys is in use(defaulting to QWERTY because I can't be bothered to make this save on SQL)
var/hotkeyon = 0 //is the hotkey on?
var/hotkeylist = list( //list defining hotkey types, look at lists in place for structure if adding any if the future
@@ -69,7 +69,10 @@
"off" = "macro"),
"AZERTY" = list(
"on" = "AZERTYon",
"off" = "AZERTYoff")
"off" = "AZERTYoff"),
"Cyborg" = list(
"on" = "borghotkeymode",
"off" = "borgmacro")
)
var/reset_stretch = 0 //Used by things that fiddle with client's stretch-to-fit.
+4
View File
@@ -17,3 +17,7 @@
/mob/camera/Destroy()
..()
return QDEL_HINT_HARDDEL_NOW
/mob/camera/Login()
..()
update_interface()
+3 -1
View File
@@ -2,4 +2,6 @@
..()
if (ghostimage)
ghostimage.icon_state = src.icon_state
updateghostimages()
updateghostimages()
update_interface()
+65 -23
View File
@@ -3,6 +3,20 @@
#define BLOODCRAWL_EAT 2
/mob/living/proc/phaseout(var/obj/effect/decal/cleanable/B)
if(iscarbon(src))
var/mob/living/carbon/C = src
if(C.l_hand || C.r_hand)
C << "<span class='warning'>You may not hold items while blood crawling!</span>"
return 0
var/obj/item/weapon/bloodcrawl/B1 = new(C)
var/obj/item/weapon/bloodcrawl/B2 = new(C)
B1.icon_state = "bloodhand_left"
B2.icon_state = "bloodhand_right"
C.put_in_hands(B1)
C.put_in_hands(B2)
C.regenerate_icons()
var/mob/living/kidnapped = null
var/turf/mobloc = get_turf(src.loc)
var/turf/bloodloc = get_turf(B.loc)
@@ -29,10 +43,11 @@
if(istype(src.pulling, /mob/living/))
var/mob/living/victim = src.pulling
if(victim.stat == CONSCIOUS)
src.visible_message("[victim] kicks free of \the [src] at the last second!")
src.visible_message("<span class='warning'>[victim] kicks free of [B] just before entering it!</span>")
else
victim.loc = holder///holder
src.visible_message("<span class='danger'><B>\The [src] drags [victim] into [B]!</B></span>")
victim.emote("scream")
src.visible_message("<span class='warning'><b>[src] drags [victim] into [B]!</b></span>")
kidnapped = victim
flick("jaunt",animation)
src.loc = holder
@@ -44,32 +59,44 @@
sleep(6)
if (animation)
qdel(animation)
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
src << "<B>You devour [kidnapped]. Your health is fully restored.</B>"
src.adjustBruteLoss(-1000)
src.adjustFireLoss(-1000)
src.adjustOxyLoss(-1000)
src.adjustToxLoss(-1000)
kidnapped.ghostize()
qdel(kidnapped)
if (istype(src, /mob/living/simple_animal/slaughter)) //rason, do not want humans to get this
for(var/i = 3; i > 0; i--)
playsound(get_turf(src),'sound/misc/Demon_consume.ogg', 100, 1)
sleep(30)
if (kidnapped)
src << "<B>You devour [kidnapped]. Your health is fully restored.</B>"
src.adjustBruteLoss(-1000)
src.adjustFireLoss(-1000)
src.adjustOxyLoss(-1000)
src.adjustToxLoss(-1000)
var/mob/living/simple_animal/slaughter/demon = src
demon.devoured++
if (istype(src, /mob/living/simple_animal/slaughter)) //rason, do not want humans to get this
var/mob/living/simple_animal/slaughter/demon = src
demon.devoured++
kidnapped << "<span class='userdanger'>You feel teeth sink into your flesh, and the--</span>"
kidnapped.adjustBruteLoss(1000)
kidnapped.forceMove(src)
demon.consumed_mobs.Add(kidnapped)
else
kidnapped.ghostize()
qdel(kidnapped)
else
src << "<span class='danger'>You happily devour... nothing? Your meal vanished at some point!</span>"
else
sleep(6)
if (animation)
qdel(animation)
src.notransform = 0
/obj/item/weapon/bloodcrawl
name = "blood crawl"
desc = "You are unable to hold anything while in this form."
icon = 'icons/effects/blood.dmi'
flags = NODROP
/mob/living/proc/phasein(var/obj/effect/decal/cleanable/B)
if(src.notransform)
src << "<B>Finish eating first!</B>"
src << "<span class='warning'>Finish eating first!</span>"
else
var/atom/movable/overlay/animation = new /atom/movable/overlay( B.loc )
animation.name = "odd blood"
@@ -80,19 +107,34 @@
animation.layer = 5
animation.master = B.loc
animation.dir = src.dir
flick("jauntup",animation)
src.loc = B.loc
B.visible_message("<span class='warning'>[B] starts to bubble...</span>")
if(!do_after(src, 20, target = B))
return
if(!B)
return
src.forceMove(B)
src.client.eye = src
if (prob(25))
if (prob(25) && istype(src, /mob/living/simple_animal/slaughter))
var/list/voice = list('sound/hallucinations/behind_you1.ogg','sound/hallucinations/im_here1.ogg','sound/hallucinations/turn_around1.ogg','sound/hallucinations/i_see_you1.ogg')
playsound(get_turf(src), pick(voice),50, 1, -1)
src.visible_message("<span class='warning'><B>\The [src] rises out of \the [B]!</B>")
playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1)
flick("jauntup",animation)
qdel(src.holder)
src.holder = null
sleep(6)
if(iscarbon(src))
var/mob/living/carbon/C = src
for(var/obj/item/weapon/bloodcrawl/BC in C)
C.flags = null
C.unEquip(BC)
qdel(BC)
var/oldcolor = src.color
src.color = B.color
sleep(6)//wait for animation to finish
if(animation)
qdel(animation)
spawn(30)
src.color = oldcolor
/obj/effect/decal/cleanable/blood/CtrlClick(mob/living/user)
..()
+2 -1
View File
@@ -1,4 +1,3 @@
/mob/living/Login()
..()
//Mind updates
@@ -12,6 +11,8 @@
src << "<span class='notice'>You can ventcrawl! Use alt+click on vents to quickly travel about the station.</span>"
//Should update regardless of if we can ventcrawl, since we can end up in pipes in other ways.
update_pipe_vision()
update_interface()
//Round specific stuff like hud updates
if(ticker && ticker.mode)
+39 -24
View File
@@ -1,9 +1,7 @@
#define AI_CHECK_WIRELESS 1
#define AI_CHECK_RADIO 2
var/list/ai_list = list()
var/list/ai_verbs_default = list(
/mob/living/silicon/ai/proc/announcement,
/mob/living/silicon/ai/proc/ai_announcement_text,
/mob/living/silicon/ai/proc/ai_call_shuttle,
/mob/living/silicon/ai/proc/ai_camera_track,
/mob/living/silicon/ai/proc/ai_camera_list,
@@ -79,6 +77,7 @@ var/list/ai_verbs_default = list(
var/last_paper_seen = null
var/can_shunt = 1
var/last_announcement = ""
var/datum/announcement/priority/announcement
var/obj/machinery/bot/Bot
var/turf/waypoint //Holds the turf of the currently selected waypoint.
var/waypoint_mode = 0 //Waypoint mode is for selecting a turf via clicking.
@@ -97,6 +96,12 @@ var/list/ai_verbs_default = list(
src.verbs -= silicon_subsystems
/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0)
announcement = new()
announcement.title = "A.I. Announcement"
announcement.announcement_type = "A.I. Announcement"
announcement.announcer = name
announcement.newscast = 1
var/list/possibleNames = ai_names
var/pickedName = null
@@ -210,6 +215,8 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/SetName(pickedName as text)
..()
announcement.announcer = name
if(eyeobj)
eyeobj.name = "[pickedName] (AI Eye)"
@@ -325,15 +332,35 @@ var/list/ai_verbs_default = list(
set name = "Show Crew Manifest"
set category = "AI Commands"
show_station_manifest()
/mob/living/silicon/ai/var/message_cooldown = 0
/mob/living/silicon/ai/proc/ai_announcement_text()
set category = "AI Commands"
set name = "Make Station Announcement"
if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
return
if(message_cooldown)
src << "<span class='warning'>Please allow one minute to pass between announcements.</span>"
return
var/input = input(usr, "Please write a message to announce to the station crew.", "A.I. Announcement") as message|null
if(!input)
return
if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
return
announcement.Announce(input)
message_cooldown = 1
spawn(600)//One minute cooldown
message_cooldown = 0
/mob/living/silicon/ai/proc/ai_call_shuttle()
set name = "Call Emergency Shuttle"
set category = "AI Commands"
if(src.stat == DEAD)
src << "<span class='warning'>You can't call the shuttle because you are dead!</span>"
return
if(check_unable(AI_CHECK_WIRELESS))
return
@@ -356,11 +383,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/proc/ai_cancel_call()
set name = "Recall Emergency Shuttle"
set category = "AI Commands"
if(src.stat == 2)
src << "You can't send the shuttle back because you are dead!"
return
if(check_unable(AI_CHECK_WIRELESS))
return
@@ -394,10 +417,6 @@ var/list/ai_verbs_default = list(
set desc = "Create a vocal announcement by typing in the available words to create a sentence."
set category = "AI Commands"
if(src.stat == 2)
src << "You can't call make an announcement because you are dead!"
return
if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
return
@@ -838,7 +857,7 @@ var/list/ai_verbs_default = list(
set desc = "Change the message that's transmitted when a new crew member arrives on station."
set category = "AI Commands"
var/newmsg = input("What would you like the arrival message to be? Use $name to substitute the crew member's name, and use $rank to substitute the crew member's rank.", "Change Arrival Message", arrivalmsg) as text
var/newmsg = input("What would you like the arrival message to be? List of options: $name, $rank, $species, $gender, $age", "Change Arrival Message", arrivalmsg) as text
if(newmsg != arrivalmsg)
arrivalmsg = newmsg
usr << "The arrival message has been successfully changed."
@@ -949,14 +968,14 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/proc/check_unable(var/flags = 0)
if(stat == DEAD)
usr << "\red You are dead!"
usr << "<span class='warning'>You are dead!</span>"
return 1
if((flags & AI_CHECK_WIRELESS) && src.control_disabled)
usr << "\red Wireless control is disabled!"
usr << "<span class='warning'>Wireless control is disabled!</span>"
return 1
if((flags & AI_CHECK_RADIO) && src.aiRadio.disabledAi)
src << "\red System Error - Transceiver Disabled!"
src << "<span class='warning'>System Error - Transceiver Disabled!</span>"
return 1
return 0
@@ -980,7 +999,3 @@ var/list/ai_verbs_default = list(
loc = card//Throw AI into the card.
src << "You have been downloaded to a mobile storage device. Remote device connection severed."
user << "<span class='boldnotice'>Transfer successful</span>: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
#undef AI_CHECK_WIRELESS
#undef AI_CHECK_RADIO
+9 -3
View File
@@ -28,13 +28,19 @@ var/const/VOX_PATH = "sound/vox_fem/"
popup.open()
/mob/living/silicon/ai/proc/ai_announcement()
if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
return
if(announcing_vox > world.time)
src << "<span class='notice'>Please wait [round((announcing_vox - world.time) / 10)] seconds.</span>"
src << "<span class='warning'>Please wait [round((announcing_vox - world.time) / 10)] seconds.</span>"
return
var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) as text
var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", last_announcement) as message|null
last_announcement = message
if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
return
if(!message || announcing_vox > world.time)
return
@@ -54,7 +60,7 @@ var/const/VOX_PATH = "sound/vox_fem/"
incorrect_words += word
if(incorrect_words.len)
src << "<span class='notice'>These words are not available on the announcement system: [english_list(incorrect_words)].</span>"
src << "<span class='warning'>These words are not available on the announcement system: [english_list(incorrect_words)].</span>"
return
announcing_vox = world.time + VOX_DELAY
@@ -1,9 +1,11 @@
/mob/living/silicon/robot/Login()
..()
if(client)
client.hotkeytype = "Cyborg"
regenerate_icons()
show_laws(0)
if(mind) ticker.mode.remove_cultist(mind)
if(mind) ticker.mode.remove_revolutionary(mind)
if(mind) ticker.mode.remove_thrall(mind,0)
if(mind) ticker.mode.remove_shadowling(mind)
return
return
@@ -377,6 +377,17 @@ var/list/robot_verbs_default = list(
updatename()
update_icons()
//for borg hotkeys, here module refers to borg inv slot, not core module
/mob/living/silicon/robot/verb/cmd_toggle_module(module as num)
set name = "Toggle Module"
set hidden = 1
toggle_module(module)
/mob/living/silicon/robot/verb/cmd_unequip_module()
set name = "Unequip Module"
set hidden = 1
uneq_active()
// this verb lets cyborgs see the stations manifest
/mob/living/silicon/robot/verb/cmd_station_manifest()
set category = "Robot Commands"
@@ -1,9 +1,9 @@
//////////////////The Monster
/mob/living/simple_animal/slaughter
name = "Slaughter Demon"
real_name = "Slaughter Demon"
desc = "You should run."
name = "slaughter demon"
real_name = "slaughter demon"
desc = "A large, menacing creature covered in armored black scales. You should run."
speak = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")
speak_emote = list("gurgles")
emote_hear = list("wails","screeches")
@@ -43,6 +43,7 @@
var/devoured = 0
var/list/consumed_mobs = list()
var/list/nearby_mortals = list()
var/cooldown = 0
@@ -61,6 +62,7 @@
src.mind.current.verbs += /mob/living/simple_animal/slaughter/proc/slaughterWhisper
src << src.playstyle_string
src << "<B><span class ='notice'>You are not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest.</span></B>"
src << 'sound/misc/demon_dies.ogg'
if(!(vialspawned))
var/datum/objective/slaughter/objective = new
var/datum/objective/demonFluff/fluffObjective = new
@@ -83,12 +85,19 @@
/mob/living/simple_animal/slaughter/Die()
..()
var/obj/effect/decal/cleanable/blood/innards = new (get_turf(src))
innards.icon = 'icons/obj/surgery.dmi'
innards.icon_state = "innards"
innards.name = "pile of viscera"
innards.desc = "A repulsive pile of guts and gore."
new /obj/effect/decal/cleanable/blood (src.loc)
new /obj/effect/gibspawner/generic(get_turf(src))
new /obj/effect/gibspawner/generic(get_turf(src))
new /obj/item/weapon/demonheart(src.loc)
playsound(get_turf(src),'sound/misc/demon_dies.ogg', 200, 1)
new /obj/item/weapon/demonheart (src.loc)
visible_message("<span class='danger'>The [src] screams in anger as its form collapes into a pool of viscera.</span>")
visible_message("<span class='danger'>[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.</span>")
for(var/mob/living/M in consumed_mobs)
M.forceMove(get_turf(src))
ghostize()
qdel(src)
@@ -97,7 +106,7 @@
/mob/living/simple_animal/slaughter/phasein()
..()
speed = 0
boost = world.time + 30
boost = world.time + 60
////////////////////The Powers
@@ -128,23 +137,28 @@
//////////The Loot
//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
/obj/item/weapon/demonheart
name = "demon's heart"
desc = "It's still faintly beating with rage"
name = "demon heart"
desc = "Still it beats furiously, emanating an aura of utter hate."
icon = 'icons/obj/surgery.dmi'
icon_state = "heart-on"
icon_state = "demon_heart"
origin_tech = "combat=5;biotech=8"
/obj/item/weapon/demonheart/attack_self(mob/living/user)
visible_message("[user] feasts upon the [src].")
user.visible_message("<span class='warning'>[user] raises [src] to their mouth and tears into it with their teeth!</span>", \
"<span class='danger'>An unnatural hunger consumes you. You raise [src] to your mouth and devour it!</span>")
playsound(user, 'sound/misc/Demon_consume.ogg', 50, 1)
if(user.bloodcrawl == 0)
user << "You absorb some of the demon's power!"
user.visible_message("<span class='warning'>[user]'s eyes flare a deep crimson!</span>", \
"<span class='userdanger'>You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!</span>")
user.bloodcrawl = BLOODCRAWL
else if(user.bloodcrawl == 1)
user << "You absorb some of the demon's power!"
user << "You feel diffr-<span class = 'danger'> CONSUME THEM! </span>"
user.bloodcrawl = BLOODCRAWL_EAT
else
user <<"<span class='warning'>...and you don't feel any different.</span>"
qdel(src)
+25
View File
@@ -60,3 +60,28 @@
client.verbs |= H.species.abilities
CallHook("Login", list("client" = src.client, "mob" = src))
// Calling update_interface() in /mob/Login() causes the Cyborg to immediately be ghosted; because of winget().
// Calling it in the overriden Login, such as /mob/living/Login() doesn't cause this.
/mob/proc/update_interface()
if(client)
if(winget(src, "mainwindow.hotkey_toggle", "is-checked") == "true")
update_hotkey_mode()
else
update_normal_mode()
/mob/proc/update_hotkey_mode()
var/hotkeyname = "hotkeymode"
if(client)
var/hotkeys = client.hotkeylist[client.hotkeytype]
hotkeyname = hotkeys[client.hotkeyon ? "on" : "off"]
client.hotkeyon = 1
winset(src, null, "mainwindow.macro=[hotkeyname] hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0")
/mob/proc/update_normal_mode()
var/hotkeyname = "macro"
if(client)
var/hotkeys = client.hotkeylist[client.hotkeytype]//get the list containing the hotkey names
hotkeyname = hotkeys[client.hotkeyon ? "on" : "off"]//get the name of the hotkey, to not clutter winset() to much
client.hotkeyon = 0
winset(src, null, "mainwindow.macro=[hotkeyname] hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5")
+5 -2
View File
@@ -342,6 +342,9 @@
var/arrivalmessage = announcer.arrivalmsg
arrivalmessage = replacetext(arrivalmessage,"$name",character.real_name)
arrivalmessage = replacetext(arrivalmessage,"$rank",rank ? "[rank]" : "visitor")
arrivalmessage = replacetext(arrivalmessage,"$species",character.species.name)
arrivalmessage = replacetext(arrivalmessage,"$age",num2text(character.age))
arrivalmessage = replacetext(arrivalmessage,"$gender",character.gender == FEMALE ? "Female" : "Male")
announcer.say(";[arrivalmessage]")
else
if(character.mind)
@@ -469,11 +472,11 @@
if(client.prefs.disabilities & DISABILITY_FLAG_BLIND)
new_character.dna.SetSEState(BLINDBLOCK,1,1)
new_character.sdisabilities |= BLIND
if(client.prefs.disabilities & DISABILITY_FLAG_MUTE)
new_character.dna.SetSEState(MUTEBLOCK,1,1)
new_character.sdisabilities |= MUTE
chosen_species.handle_dna(new_character)
domutcheck(new_character)
+2 -2
View File
@@ -481,7 +481,7 @@
..()
/obj/machinery/power/smes/engineering
charge = 1e6 // Engineering starts with some charge for singulo
charge = 2e6 // Engineering starts with some charge for singulo
/obj/machinery/power/smes/magical
name = "magical power storage unit"
@@ -493,4 +493,4 @@
charge = 5000000
..()
#undef SMESRATE
#undef SMESRATE
@@ -1655,76 +1655,79 @@
var/monkey_type = "Monkey"
New()
..()
reagents.add_reagent("protein",10)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New()
..()
reagents.add_reagent("protein",10)
afterattack(obj/O as obj, mob/user as mob, proximity)
if(!proximity) return
if(istype(O,/obj/structure/sink) && !wrapped)
user << "You place [name] under a stream of water..."
loc = get_turf(O)
return Expand()
..()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O as obj, mob/user as mob, proximity)
if(!proximity) return
if(istype(O,/obj/structure/sink) && !wrapped)
user << "You place [name] under a stream of water..."
if(loc == user)
user.unEquip(src)
forceMove(get_turf(src))
return Expand()
..()
attack_self(mob/user as mob)
if(wrapped)
Unwrap(user)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob)
if(wrapped)
Unwrap(user)
/*
On_Consume(var/mob/M)
M << "<span class = 'warning'>Something inside of you suddently expands!</span>"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M)
M << "<span class = 'warning'>Something inside of you suddently expands!</span>"
if (istype(M, /mob/living/carbon/human))
//Do not try to understand.
var/obj/item/weapon/surprise = new/obj/item/weapon(M)
var/mob/living/carbon/monkey/ook = new monkey_type(null) //no other way to get access to the vars, alas
surprise.icon = ook.icon
surprise.icon_state = ook.icon_state
surprise.name = "malformed [ook.name]"
surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life."
del(ook) //rip nullspace monkey
surprise.transform *= 0.6
surprise.add_blood(M)
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/E = H.get_organ("chest")
E.fracture()
for (var/obj/item/organ/I in E.internal_organs)
I.take_damage(rand(I.min_bruised_damage, I.min_broken_damage+1))
if (istype(M, /mob/living/carbon/human))
//Do not try to understand.
var/obj/item/weapon/surprise = new/obj/item/weapon(M)
var/mob/living/carbon/monkey/ook = new monkey_type(null) //no other way to get access to the vars, alas
surprise.icon = ook.icon
surprise.icon_state = ook.icon_state
surprise.name = "malformed [ook.name]"
surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life."
del(ook) //rip nullspace monkey
surprise.transform *= 0.6
surprise.add_blood(M)
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/E = H.get_organ("chest")
E.fracture()
for (var/obj/item/organ/I in E.internal_organs)
I.take_damage(rand(I.min_bruised_damage, I.min_broken_damage+1))
if (!E.hidden && prob(60)) //set it snuggly
E.hidden = surprise
E.cavity = 0
else //someone is having a bad day
E.createwound(CUT, 30)
E.embed(surprise)
else if (issmall(M))
M.visible_message("<span class='danger'>[M] suddenly tears in half!</span>")
var/mob/living/carbon/monkey/ook = new monkey_type(M.loc)
ook.name = "malformed [ook.name]"
ook.transform *= 0.6
ook.add_blood(M)
M.gib()
..()
if (!E.hidden && prob(60)) //set it snuggly
E.hidden = surprise
E.cavity = 0
else //someone is having a bad day
E.createwound(CUT, 30)
E.embed(surprise)
else if (issmall(M))
M.visible_message("<span class='danger'>[M] suddenly tears in half!</span>")
var/mob/living/carbon/monkey/ook = new monkey_type(M.loc)
ook.name = "malformed [ook.name]"
ook.transform *= 0.6
ook.add_blood(M)
M.gib()
..()
*/
water_act(volume, temperature)
if(volume >= 5) return Expand()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature)
if(volume >= 5)
return Expand()
proc/Expand()
for(var/mob/M in viewers(src,7))
M << "\red \The [src] expands!"
var/mob/living/carbon/human/H = new (src)
H.set_species(monkey_type)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
for(var/mob/M in viewers(src,7))
M << "\red \The [src] expands!"
var/mob/living/carbon/human/H = new (src)
H.set_species(monkey_type)
qdel(src)
proc/Unwrap(mob/user as mob)
icon_state = "monkeycube"
desc = "Just add water!"
user << "You unwrap the cube."
wrapped = 0
return
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob)
icon_state = "monkeycube"
desc = "Just add water!"
user << "You unwrap the cube."
wrapped = 0
return
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
desc = "Still wrapped in some paper."