Merge remote-tracking branch 'refs/remotes/origin/master' into oties-and-wild-removed

This commit is contained in:
Spades
2017-08-26 15:51:47 -04:00
20 changed files with 368 additions and 48 deletions
@@ -31,9 +31,100 @@
/obj/item/clothing/accessory/collar/shock
name = "Shock collar"
desc = "A collar used to ease hungry predators."
icon_state = "collar_shk"
icon_state = "collar_shk0"
item_state = "collar_shk_overlay"
overlay_state = "collar_shk_overlay"
// How about some copypasta?
var/on = 0 // 0 for off, 1 for on, starts off to encourage people to set non-default frequencies and codes.
var/frequency = 1449
var/code = 2
var/datum/radio_frequency/radio_connection
var/list/datum/radio_frequency/secure_radio_connections = new
proc/set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
/obj/item/clothing/accessory/collar/shock/New()
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) // Makes it so you don't need to change the frequency off of default for it to work.
/obj/item/clothing/accessory/collar/shock/Topic(href, href_list)
if(usr.stat || usr.restrained())
return
if(((istype(usr, /mob/living/carbon/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf)))))
usr.set_machine(src)
if(href_list["freq"])
var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"]))
set_frequency(new_frequency)
else
if(href_list["code"])
code += text2num(href_list["code"])
code = round(code)
code = min(100, code)
code = max(1, code)
else
if(href_list["power"])
on = !( on )
icon_state = "collar_shk[on]" // And apparently this works, too?!
if(!( master ))
if(istype(loc, /mob))
attack_self(loc)
else
for(var/mob/M in viewers(1, src))
if(M.client)
attack_self(M)
else
if(istype(master.loc, /mob))
attack_self(master.loc)
else
for(var/mob/M in viewers(1, master))
if(M.client)
attack_self(M)
else
usr << browse(null, "window=radio")
return
return
/obj/item/clothing/accessory/collar/shock/receive_signal(datum/signal/signal)
if(!signal || signal.encryption != code)
return
if(on)
var/mob/M = null
if(ismob(loc))
M = loc
if(ismob(loc.loc))
M = loc.loc // This is about as terse as I can make my solution to the whole 'collar won't work when attached as accessory' thing.
M << "<span class='danger'>You feel a sharp shock!</span>"
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, M)
s.start()
M.Weaken(10)
return
/obj/item/clothing/accessory/collar/shock/attack_self(mob/user as mob, flag1)
if(!istype(user, /mob/living/carbon/human))
return
user.set_machine(src)
var/dat = {"<TT>
<A href='?src=\ref[src];power=1'>Turn [on ? "Off" : "On"]</A><BR>
<B>Frequency/Code</B> for collar:<BR>
Frequency:
<A href='byond://?src=\ref[src];freq=-10'>-</A>
<A href='byond://?src=\ref[src];freq=-2'>-</A> [format_frequency(frequency)]
<A href='byond://?src=\ref[src];freq=2'>+</A>
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
Code:
<A href='byond://?src=\ref[src];code=-5'>-</A>
<A href='byond://?src=\ref[src];code=-1'>-</A> [code]
<A href='byond://?src=\ref[src];code=1'>+</A>
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
</TT>"}
user << browse(dat, "window=radio")
onclose(user, "radio")
return
/obj/item/clothing/accessory/collar/spike
name = "Spiked collar"
+5
View File
@@ -1,3 +1,8 @@
/mob/living/death()
clear_fullscreens()
//VOREStation Edit - Mob spawner stuff
if(source_spawner)
source_spawner.get_death_report(src)
source_spawner = null
//VOREStation Edit End
. = ..()
+2 -1
View File
@@ -1,2 +1,3 @@
/mob/living
var/ooc_notes = null
var/ooc_notes = null
var/obj/structure/mob_spawner/source_spawner = null
@@ -15,6 +15,7 @@
var/list/injection_chems = list("dexalin", "bicaridine", "kelotane","anti_toxin", "alkysine", "imidazoline", "spaceacillin", "paracetamol") //The borg is able to heal every damage type. As a nerf, they use 750 charge per injection.
var/eject_port = "ingestion"
var/list/items_preserved = list()
var/UI_open = 0
/obj/item/device/dogborg/sleeper/New()
..()
@@ -50,6 +51,8 @@
user.visible_message("<span class='warning'>[hound.name]'s medical pod lights up as [target.name] slips inside into their [src.name].</span>", "<span class='notice'>Your medical pod lights up as [target] slips into your [src]. Life support functions engaged.</span>")
message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[hound.x];Y=[hound.y];Z=[hound.z]'>JMP</a>" : "null"])")
playsound(hound, 'sound/vore/gulp.ogg', 100, 1) //POLARISTODO
if(UI_open == 1)
sleeperUI(usr)
/obj/item/device/dogborg/sleeper/proc/go_out(var/target)
hound = src.loc
@@ -88,6 +91,7 @@
if(..())
return
sleeperUI(user)
UI_open = 1
/obj/item/device/dogborg/sleeper/proc/sleeperUI(mob/user)
var/dat
@@ -174,9 +178,11 @@
dat += "</div>"
var/datum/browser/popup = new(user, "sleeper", "Sleeper Console", 520, 540) //Set up the popup browser window
popup.set_title_image(user.browse_rsc_icon(icon, icon_state))
//popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) //I have no idea what this is, but it feels irrelevant and causes runtimes idk.
popup.set_content(dat)
popup.open()
onclose(user, "sleeper")
UI_open = 0
return
/obj/item/device/dogborg/sleeper/Topic(href, href_list)
@@ -292,6 +298,8 @@
patient_laststat = null
patient = null
hound.updateicon()
if(UI_open == 1)
sleeperUI(usr)
return
//Gurgleborg process
@@ -390,6 +398,8 @@
T.drop_from_inventory(I, src)
qdel(T)
src.update_patient()
if(UI_open == 1)
sleeperUI(hound)
//Handle the target being anything but a /mob/living/carbon/human
else
@@ -438,6 +448,9 @@
contents -= T
qdel(T)
src.update_patient()
if(UI_open == 1)
sleeperUI(hound)
return
/obj/item/device/dogborg/sleeper/process()
@@ -514,6 +527,8 @@
if(length(contents) > 11) //grow that tum after a certain junk amount
hound.sleeper_r = 1
hound.updateicon()
if(UI_open == 1)
sleeperUI(usr)
return
if(istype(target, /mob/living/simple_animal/mouse)) //Edible mice, dead or alive whatever. Mostly for carcass picking you cruel bastard :v
@@ -527,6 +542,8 @@
if(length(contents) > 11) //grow that tum after a certain junk amount
hound.sleeper_r = 1
hound.updateicon()
if(UI_open == 1)
sleeperUI(usr)
return
else if(ishuman(target))
@@ -547,6 +564,8 @@
playsound(hound, 'sound/vore/gulp.ogg', 80, 1)
hound.sleeper_r = 1
hound.updateicon()
if(UI_open == 1)
sleeperUI(usr)
return
return
+1 -1
View File
@@ -115,7 +115,7 @@
if(mannequin.wing_style.do_colouration)
temp["color"] = MOB_HEX_COLOR(mannequin, wing)
temp["colorHref"] = "wing_color"
styles["Tail"] = temp
styles["Wing"] = temp
temp = list("styleHref" = "hair_style", "style" = mannequin.h_style)
if(mannequin.species && (mannequin.species.appearance_flags & HAS_HAIR_COLOR))
+1 -2
View File
@@ -83,7 +83,7 @@
if(process_longjump(departing, destination)) //VOREStation Edit - To hook custom shuttle code in
return //VOREStation Edit - It handled it for us (shuttle crash or such)
/*
var/last_progress_sound = 0
while (world.time < arrive_time)
// Make the shuttle make sounds every four seconds, since the sound file is five seconds.
@@ -91,7 +91,6 @@
make_sounds(interim, HYPERSPACE_PROGRESS)
last_progress_sound = world.time
sleep(5)
*/ //VOREStation Edit. Polaris code in this commented out part, but line 84 takes care of it as far as I cna see.
move(interim, destination, direction)
moving_status = SHUTTLE_IDLE
+7 -1
View File
@@ -175,6 +175,9 @@
prey.forceMove(owner)
internal_contents |= prey
owner.updateVRPanel()
for(var/mob/living/M in internal_contents)
M.updateVRPanel()
if(inside_flavor)
prey << "<span class='notice'><B>[inside_flavor]</B></span>"
@@ -519,7 +522,10 @@
to_chat(owner, "<span class='notice'>[M] tastes of [M.get_taste_message(0)].</span>")
if(!silent)
for(var/mob/hearer in range(1,owner))
hearer << sound('sound/vore/squish2.ogg',volume=80)
hearer << sound(target.vore_sound,volume=80)
owner.updateVRPanel()
for(var/mob/living/M in internal_contents)
M.updateVRPanel()
// Belly copies and then returns the copy
// Needs to be updated for any var changes
+7 -1
View File
@@ -84,6 +84,7 @@
owner.nutrition += offset*(10/difference) // 9.5 nutrition per digestion tick if they're 130 pounds and it's same size. 10.2 per digestion tick if they're 140 and it's same size. Etc etc.
else
owner.nutrition += (10/difference)
M.updateVRPanel()
if(digest_mode == DM_ITEMWEAK)
var/obj/item/T = pick(touchable_items)
@@ -189,6 +190,7 @@
else
return
owner.updateVRPanel()
return
//////////////////////////// DM_STRIPDIGEST ////////////////////////////
@@ -255,6 +257,8 @@
s_owner.cell.charge += (50 * T.w_class)
internal_contents -= T
qdel(T)
for(var/mob/living/carbon/human/M in internal_contents)
M.updateVRPanel()
for(var/mob/living/carbon/human/M in internal_contents)
if(!M)
@@ -289,7 +293,7 @@
for(var/stashslot in stash)
var/obj/item/SL = M.get_equipped_item(stashslot)
if(SL)
SL.forceMove(owner)
M.remove_from_mob(SL,owner)
internal_contents += SL
M.remove_from_mob(I,owner)
internal_contents += I
@@ -298,7 +302,9 @@
if(!(istype(I,/obj/item/organ) || istype(I,/obj/item/weapon/storage/internal) || istype(I,/obj/screen)))
M.remove_from_mob(I,owner)
internal_contents += I
M.updateVRPanel()
owner.updateVRPanel()
return
//////////////////////////// DM_ABSORB ////////////////////////////
+1
View File
@@ -13,6 +13,7 @@
var/metabolism = 0.0015
var/vore_taste = null // What the character tastes like
var/no_vore = 0 // If the character/mob can vore.
var/openpanel = 0 // Is the vore panel open?
//
// Hook for generic creation of stuff on new creatures
+14
View File
@@ -21,6 +21,19 @@
picker_holder.popup = new(src, "insidePanel","Inside!", 400, 600, picker_holder)
picker_holder.popup.set_content(dat)
picker_holder.popup.open()
src.openpanel = 1
/mob/living/proc/updateVRPanel() //Panel popup update call from belly évents.
if(src.openpanel == 1)
var/datum/vore_look/picker_holder = new()
picker_holder.loop = picker_holder
picker_holder.selected = vore_organs[vore_selected]
var/dat = picker_holder.gen_ui(src)
picker_holder.popup = new(src, "insidePanel","Inside!", 400, 600, picker_holder)
picker_holder.popup.set_content(dat)
picker_holder.popup.open()
//
// Callback Handler for the Inside form
@@ -253,6 +266,7 @@
if(href_list["close"])
qdel(src) // Cleanup
user.openpanel = 0
return
if(href_list["show_int"])
@@ -1342,3 +1342,14 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie
user.visible_message("<span class='notice'>[user] displays their [src.name].\nIt reads: [stored_name], [badge_string].</span>","<span class='notice'>You display your [src.name].\nIt reads: [stored_name], [badge_string].</span>")
else
user.visible_message("<span class='notice'>[user] displays their [src.name].\nIt reads: [badge_string].</span>","<span class='notice'>You display your [src.name]. It reads: [badge_string].</span>")
/obj/item/weapon/card/id/fluff/xennith
name = "\improper Amy Lessen's Central Command ID (Xenobiology Director)"
desc = "This ID card identifies Dr. Amelie Lessen as the founder and director of the NanoTrasen Xenobiology Research Department, circa 2553."
icon_state = "centcom"
registered_name = "Amy Lessen"
assignment = "Xenobiology Director"
access = list(access_cent_general,access_cent_thunder,access_cent_medical,access_cent_living,access_cent_storage,access_cent_teleporter,access_research,access_xenobiology,access_maint_tunnels,access_xenoarch,access_robotics,access_tox_storage,access_tox) //Yes, this looks awful. I tried calling both central and resarch access but it didn't work.
age = 39
blood_type = "O-"
sex = "Female"