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

This commit is contained in:
Aurorablade
2015-07-14 07:32:02 -04:00
58 changed files with 2016 additions and 3085 deletions
+1 -5
View File
@@ -629,11 +629,7 @@ var/global/nologevent = 0
set category = "Server"
set desc="Globally Toggles OOC"
set name="Toggle OOC"
ooc_allowed = !( ooc_allowed )
if (ooc_allowed)
world << "<B>The OOC channel has been globally enabled!</B>"
else
world << "<B>The OOC channel has been globally disabled!</B>"
toggle_ooc()
log_admin("[key_name(usr)] toggled OOC.")
message_admins("[key_name_admin(usr)] toggled OOC.", 1)
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+3 -3
View File
@@ -126,7 +126,7 @@ datum/admins/proc/notes_gethtml(var/ckey)
message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.")
log_admin("[key_name(usr)] has edited [key]'s notes.")
del info
del(info)
//Updating list of keys with notes on them
var/savefile/note_list = new("data/player_notes.sav")
@@ -135,7 +135,7 @@ datum/admins/proc/notes_gethtml(var/ckey)
if(!note_keys) note_keys = list()
if(!note_keys.Find(key)) note_keys += key
note_list << note_keys
del note_list
del(note_list)
/proc/notes_del(var/key, var/index)
@@ -151,7 +151,7 @@ datum/admins/proc/notes_gethtml(var/ckey)
message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
log_admin("[key_name(usr)] deleted one of [key]'s notes.")
del info
del(info)
/proc/show_player_info_irc(var/key as text)
var/dat = " Info on [key]%0D%0A"
+4 -4
View File
@@ -52,7 +52,7 @@
return
message_admins("[key_name_admin(src)] accessed file: [path]")
src << run( file(path) )
src << ftp( file(path) )
src << "Attempting to send file, this may take a fair few minutes if the file is very large."
return
@@ -72,7 +72,7 @@
return
message_admins("[key_name_admin(src)] accessed file: [path]")
src << run( file(path) )
src << ftp( file(path) )
src << "Attempting to send file, this may take a fair few minutes if the file is very large."
return
@@ -87,7 +87,7 @@
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")].log"
if( fexists(path) )
src << run( file(path) )
src << ftp( file(path) )
else
src << "<font color='red'>Error: view_txt_log(): File not found/Invalid path([path]).</font>"
return
@@ -102,7 +102,7 @@
var/path = "data/logs/[time2text(world.realtime,"YYYY/MM-Month/DD-Day")] Attack.log"
if( fexists(path) )
src << run( file(path) )
src << ftp( file(path) )
else
src << "<font color='red'>Error: view_atk_log(): File not found/Invalid path([path]).</font>"
return
+2 -2
View File
@@ -367,7 +367,7 @@ client/proc/one_click_antag()
candidates.Remove(theghost)
if(!theghost)
del(new_syndicate_commando)
qdel(new_syndicate_commando)
break
new_syndicate_commando.key = theghost.key
@@ -487,7 +487,7 @@ client/proc/one_click_antag()
candidates.Remove(theghost)
if(!theghost)
del(new_vox)
qdel(new_vox)
break
new_vox.key = theghost.key
+4 -4
View File
@@ -443,16 +443,16 @@ Gunshots/explosions/opening doors/less rare audio (done)
/obj/effect/fake_attacker/proc/updateimage()
// del src.currentimage
if(src.dir == NORTH)
del src.currentimage
del(src.currentimage)
src.currentimage = new /image(up,src)
else if(src.dir == SOUTH)
del src.currentimage
del(src.currentimage)
src.currentimage = new /image(down,src)
else if(src.dir == EAST)
del src.currentimage
del(src.currentimage)
src.currentimage = new /image(right,src)
else if(src.dir == WEST)
del src.currentimage
del(src.currentimage)
src.currentimage = new /image(left,src)
my_target << currentimage
+12 -397
View File
@@ -1,24 +1,16 @@
/obj/machinery/candy_maker
/obj/machinery/kitchen_machine/candy_maker
name = "candy machine"
desc = "The stuff of nightmares for a dentist."
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "candymaker_off"
layer = 2.9
density = 1
anchored = 1
use_power = 1
idle_power_usage = 5
active_power_usage = 100
flags = OPENCONTAINER | NOREACT
var/operating = 0 // Is it on?
var/dirty = 0 // = {0..100} Does it need cleaning?
var/broken = 0 // ={0,1,2} How broken is it???
var/global/list/datum/recipe/available_recipes // List of the recipes you can use
var/global/list/acceptable_items // List of the items you can put in
var/global/list/acceptable_reagents // List of the reagents you can put in
var/global/max_n_of_items = 0
var/efficiency
cook_verbs = list("Wonderizing", "Scrumpdiddlyumptiousification", "Miracle-coating", "Flavorifaction")
recipe_type = /datum/recipe/candy
off_icon = "candymaker_off"
on_icon = "candymaker_on"
broken_icon = "candymaker_broke"
dirty_icon = "candymaker_dirty"
open_icon = "candymaker_open"
// see code/modules/food/recipes_candy.dm for recipes
@@ -26,29 +18,8 @@
* Initialising
********************/
/obj/machinery/candy_maker/New()
//..() //do not need this
reagents = new/datum/reagents(100)
reagents.my_atom = src
if (!available_recipes)
available_recipes = new
for (var/type in (typesof(/datum/recipe/candy)-/datum/recipe/candy))
var/datum/recipe/recipe = new type
if(recipe.result) // Ignore recipe subtypes that lack a result
available_recipes += recipe
else
qdel(recipe)
acceptable_items = new
acceptable_reagents = new
for (var/datum/recipe/candy/recipe in available_recipes)
for (var/item in recipe.items)
acceptable_items |= item
for (var/reagent in recipe.reagents)
acceptable_reagents |= reagent
if (recipe.items)
max_n_of_items = max(max_n_of_items,recipe.items.len)
acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown
/obj/machinery/kitchen_machine/candy_maker/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/candy_maker(null)
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
@@ -56,8 +27,7 @@
component_parts += new /obj/item/stack/cable_coil(null, 5)
RefreshParts()
/obj/machinery/candy_maker/upgraded/New()
/obj/machinery/kitchen_machine/candy_maker/upgraded/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/candy_maker(null)
@@ -66,363 +36,8 @@
component_parts += new /obj/item/stack/cable_coil(null, 5)
RefreshParts()
/obj/machinery/candy_maker/RefreshParts()
/obj/machinery/kitchen_machine/candy_maker/RefreshParts()
var/E
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
E += M.rating
efficiency = E
/*******************
* Item Adding
********************/
/obj/machinery/candy_maker/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(operating)
return
if(!broken && dirty < 100)
if(default_deconstruction_screwdriver(user, "candymaker_open", "candymaker_off", O))
return
if(exchange_parts(user, O))
return
if(!broken && istype(O, /obj/item/weapon/wrench))
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
if(anchored)
anchored = 0
user << "<span class='caution'>The [src] can now be moved.</span>"
return
else if(!anchored)
anchored = 1
user << "<span class='caution'>The [src] is now secured.</span>"
return
default_deconstruction_crowbar(O)
if(src.broken > 0)
if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver
user.visible_message( \
"\blue [user] starts to fix part of the candy maker.", \
"\blue You start to fix part of the candy maker." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] fixes part of the candy maker.", \
"\blue You have fixed part of the candy maker." \
)
src.broken = 1 // Fix it a bit
else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench
user.visible_message( \
"\blue [user] starts to fix part of the candy maker.", \
"\blue You start to fix part of the candy maker." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] fixes the candy maker.", \
"\blue You have fixed the candy maker." \
)
src.icon_state = "candymaker_off"
src.broken = 0 // Fix it!
src.dirty = 0 // just to be sure
src.flags = OPENCONTAINER
else
user << "\red It's broken!"
return 1
else if(src.dirty==100) // The candy_maker is all dirty so can't be used!
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
user.visible_message( \
"\blue [user] starts to clean the candy maker.", \
"\blue You start to clean the candy maker." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] has cleaned the candy maker.", \
"\blue You have cleaned the candy maker." \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
src.icon_state = "candymaker_off"
src.flags = OPENCONTAINER
else //Otherwise bad luck!!
user << "\red It's dirty!"
return 1
else if(is_type_in_list(O,acceptable_items))
if (contents.len>=max_n_of_items)
user << "\red This [src] is full of ingredients, you cannot put more."
return 1
if (istype(O,/obj/item/stack) && O:amount>1)
new O.type (src)
O:use(1)
user.visible_message( \
"\blue [user] has added one of [O] to \the [src].", \
"\blue You add one of [O] to \the [src].")
else
// user.unEquip(O) //This just causes problems so far as I can tell. -Pete
if(!user.drop_item())
user << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
return 0
O.loc = src
user.visible_message( \
"\blue [user] has added \the [O] to \the [src].", \
"\blue You add \the [O] to \the [src].")
else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
istype(O,/obj/item/weapon/reagent_containers/food/condiment) \
)
if (!O.reagents)
return 1
for (var/datum/reagent/R in O.reagents.reagent_list)
if (!(R.id in acceptable_reagents))
user << "\red Your [O] contains components unsuitable for cookery."
return 1
//G.reagents.trans_to(src,G.amount_per_transfer_from_this)
else if(istype(O,/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = O
user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]."
return 1
else
user << "\red You have no idea what you can cook with this [O]."
return 1
src.updateUsrDialog()
/obj/machinery/candy_maker/attack_ai(mob/user as mob)
return 0
/obj/machinery/candy_maker/attack_hand(mob/user as mob)
user.set_machine(src)
interact(user)
/*******************
* candy_maker Menu
********************/
/obj/machinery/candy_maker/interact(mob/user as mob) // The Candy Maker Menu
if(panel_open || !anchored)
return
var/dat = ""
if(src.broken > 0)
dat = {"<TT>Bzzzzttttt</TT>"}
else if(src.operating)
var/whimsy_word = pick("Wonderizing", "Scrumpdiddlyumptiousification", "Miracle-coating", "Flavorifaction")
dat = {"<TT>[whimsy_word] in progress!<BR>Please wait...!</TT>"}
else if(src.dirty==100)
dat = {"<TT>This candy maker is dirty!<BR>Please clean it before use!</TT>"}
else
var/list/items_counts = new
var/list/items_measures = new
var/list/items_measures_p = new
for (var/obj/O in contents)
var/display_name = O.name
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
items_measures[display_name] = "egg"
items_measures_p[display_name] = "eggs"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
items_measures[display_name] = "tofu chunk"
items_measures_p[display_name] = "tofu chunks"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
items_measures[display_name] = "slab of meat"
items_measures_p[display_name] = "slabs of meat"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
display_name = "Turnovers"
items_measures[display_name] = "turnover"
items_measures_p[display_name] = "turnovers"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
items_measures[display_name] = "fillet of meat"
items_measures_p[display_name] = "fillets of meat"
items_counts[display_name]++
for (var/O in items_counts)
var/N = items_counts[O]
if (!(O in items_measures))
dat += {"<B>[capitalize(O)]:</B> [N] [lowertext(O)]\s<BR>"}
else
if (N==1)
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures[O]]<BR>"}
else
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures_p[O]]<BR>"}
for (var/datum/reagent/R in reagents.reagent_list)
var/display_name = R.name
if (R.id == "capsaicin")
display_name = "Hotsauce"
if (R.id == "frostoil")
display_name = "Coldsauce"
dat += {"<B>[display_name]:</B> [R.volume] unit\s<BR>"}
if (items_counts.len==0 && reagents.reagent_list.len==0)
dat = {"<B>The candy maker is empty</B><BR>"}
else
dat = {"<b>Ingredients:</b><br>[dat]"}
dat += {"<HR><BR>\
<A href='?src=\ref[src];action=cook'>Turn on!<BR>\
<A href='?src=\ref[src];action=dispose'>Eject ingredients!<BR>\
"}
user << browse("<HEAD><TITLE>Candy Maker Controls</TITLE></HEAD><TT>[dat]</TT>", "window=candy_maker")
onclose(user, "candy_maker")
return
/***********************************
* candy_maker Menu Handling/Cooking
************************************/
/obj/machinery/candy_maker/proc/cook()
if(stat & (NOPOWER|BROKEN))
return
start()
if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run
if (!wzhzhzh(10))
abort()
return
stop()
return
var/datum/recipe/recipe = select_recipe(available_recipes,src)
var/obj/cooked
var/obj/byproduct
if (!recipe)
dirty += 1
if (prob(max(10,dirty*5)))
if (!wzhzhzh(4))
abort()
return
muck_start()
wzhzhzh(4)
muck_finish()
cooked = fail()
cooked.loc = src.loc
return
else if (has_extra_item())
if (!wzhzhzh(4))
abort()
return
broke()
cooked = fail()
cooked.loc = src.loc
return
else
if (!wzhzhzh(10))
abort()
return
stop()
cooked = fail()
cooked.loc = src.loc
return
else
var/halftime = round(recipe.time/10/2)
if (!wzhzhzh(halftime))
abort()
return
if (!wzhzhzh(halftime))
abort()
cooked = fail()
cooked.loc = src.loc
return
cooked = recipe.make_food(src)
byproduct = recipe.get_byproduct()
stop()
if(cooked)
cooked.loc = src.loc
for(var/i=1,i<efficiency,i++)
cooked = new cooked.type(loc)
if(byproduct)
new byproduct(loc)
return
/obj/machinery/candy_maker/proc/wzhzhzh(var/seconds as num)
for (var/i=1 to seconds)
if (stat & (NOPOWER|BROKEN))
return 0
use_power(500)
sleep(10)
return 1
/obj/machinery/candy_maker/proc/has_extra_item()
for (var/obj/O in contents)
if ( \
!istype(O,/obj/item/weapon/reagent_containers/food) && \
!istype(O, /obj/item/weapon/grown) \
)
return 1
return 0
/obj/machinery/candy_maker/proc/start()
src.visible_message("\blue The candy maker turns on.", "\blue You hear a candy maker.")
src.operating = 1
src.icon_state = "candymaker_on"
src.updateUsrDialog()
/obj/machinery/candy_maker/proc/abort()
src.operating = 0 // Turn it off again aferwards
src.icon_state = "candymaker_off"
src.updateUsrDialog()
/obj/machinery/candy_maker/proc/stop()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
src.operating = 0 // Turn it off again aferwards
src.icon_state = "candymaker_off"
src.updateUsrDialog()
/obj/machinery/candy_maker/proc/dispose()
for (var/obj/O in contents)
O.loc = src.loc
if (src.reagents.total_volume)
src.dirty++
src.reagents.clear_reagents()
usr << "\blue You dispose of the candy maker contents."
src.updateUsrDialog()
/obj/machinery/candy_maker/proc/muck_start()
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
src.icon_state = "candymaker_dirty" // Make it look dirty!!
/obj/machinery/candy_maker/proc/muck_finish()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
src.visible_message("\red The candy maker gets covered in muck!")
src.dirty = 100 // Make it dirty so it can't be used util cleaned
src.flags = null //So you can't add condiments
src.icon_state = "candymaker_dirty" // Make it look dirty too
src.operating = 0 // Turn it off again aferwards
src.updateUsrDialog()
/obj/machinery/candy_maker/proc/broke()
var/datum/effect/effect/system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
src.icon_state = "candymaker_broke" // Make it look all busted up and shit
src.visible_message("\red The candy maker breaks!") //Let them know they're stupid
src.broken = 2 // Make it broken so it can't be used util fixed
src.flags = null //So you can't add condiments
src.operating = 0 // Turn it off again aferwards
src.updateUsrDialog()
/obj/machinery/candy_maker/proc/fail()
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
var/amount = 0
for (var/obj/O in contents-ffuu)
amount++
if (O.reagents)
var/id = O.reagents.get_master_reagent_id()
if (id)
amount+=O.reagents.get_reagent_amount(id)
qdel(O)
src.reagents.clear_reagents()
ffuu.reagents.add_reagent("carbon", amount)
ffuu.reagents.add_reagent("????", amount/10)
return ffuu
/obj/machinery/candy_maker/Topic(href, href_list)
if(..() || panel_open)
return
usr.set_machine(src)
if(src.operating)
src.updateUsrDialog()
return
switch(href_list["action"])
if ("cook")
cook()
if ("dispose")
dispose()
return
+12 -393
View File
@@ -1,25 +1,16 @@
/obj/machinery/grill
/obj/machinery/kitchen_machine/grill
name = "grill"
desc = "Backyard grilling, IN SPACE."
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "grill_off"
layer = 2.9
density = 1
anchored = 1
use_power = 1
idle_power_usage = 5
active_power_usage = 100
flags = OPENCONTAINER | NOREACT
var/operating = 0 // Is it on?
var/dirty = 0 // = {0..100} Does it need cleaning?
var/broken = 0 // ={0,1,2} How broken is it???
var/global/list/datum/recipe/available_recipes // List of the recipes you can use
var/global/list/acceptable_items // List of the items you can put in
var/global/list/acceptable_reagents // List of the reagents you can put in
var/global/max_n_of_items = 0
var/efficiency
cook_verbs = list("Grilling", "Searing", "Frying")
recipe_type = /datum/recipe/grill
off_icon = "grill_off"
on_icon = "grill_on"
broken_icon = "grill_broke"
dirty_icon = "grill_dirty"
open_icon = "grill_open"
// see code/modules/food/recipes_grill.dm for recipes
@@ -27,29 +18,8 @@
* Initialising
********************/
/obj/machinery/grill/New()
//..() //do not need this
reagents = new/datum/reagents(100)
reagents.my_atom = src
if (!available_recipes)
available_recipes = new
for (var/type in (typesof(/datum/recipe/grill)-/datum/recipe/grill))
var/datum/recipe/recipe = new type
if(recipe.result) // Ignore recipe subtypes that lack a result
available_recipes += recipe
else
qdel(recipe)
acceptable_items = new
acceptable_reagents = new
for (var/datum/recipe/grill/recipe in available_recipes)
for (var/item in recipe.items)
acceptable_items |= item
for (var/reagent in recipe.reagents)
acceptable_reagents |= reagent
if (recipe.items)
max_n_of_items = max(max_n_of_items,recipe.items.len)
acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown
/obj/machinery/kitchen_machine/grill/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/grill(null)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
@@ -58,8 +28,7 @@
component_parts += new /obj/item/stack/cable_coil(null, 5)
RefreshParts()
/obj/machinery/grill/upgraded/New()
/obj/machinery/kitchen_machine/grill/upgraded/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/grill(null)
@@ -69,358 +38,8 @@
component_parts += new /obj/item/stack/cable_coil(null, 5)
RefreshParts()
/obj/machinery/grill/RefreshParts()
/obj/machinery/kitchen_machine/grill/RefreshParts()
var/E
for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts)
E += M.rating
efficiency = round((E/2), 1) // There's 2 lasers, so halve the effect on the efficiency to keep it balanced
/*******************
* Item Adding
********************/
/obj/machinery/grill/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(operating)
return
if(!broken && dirty < 100)
if(default_deconstruction_screwdriver(user, "grill_open", "grill_off", O))
return
if(exchange_parts(user, O))
return
if(!broken && istype(O, /obj/item/weapon/wrench))
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
if(anchored)
anchored = 0
user << "<span class='caution'>The [src] can now be moved.</span>"
return
else if(!anchored)
anchored = 1
user << "<span class='caution'>The [src] is now secured.</span>"
return
default_deconstruction_crowbar(O)
if(src.broken > 0)
if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver
user.visible_message( \
"\blue [user] starts to fix part of the grill.", \
"\blue You start to fix part of the grill." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] fixes part of the grill.", \
"\blue You have fixed part of the grill." \
)
src.broken = 1 // Fix it a bit
else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench
user.visible_message( \
"\blue [user] starts to fix part of the grill.", \
"\blue You start to fix part of the grill." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] fixes the grill.", \
"\blue You have fixed the grill." \
)
src.icon_state = "grill_off"
src.broken = 0 // Fix it!
src.dirty = 0 // just to be sure
src.flags = OPENCONTAINER
else
user << "\red It's broken!"
return 1
else if(src.dirty==100) // The grill is all dirty so can't be used!
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
user.visible_message( \
"\blue [user] starts to clean the grill.", \
"\blue You start to clean the grill." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] has cleaned the grill.", \
"\blue You have cleaned the grill." \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
src.icon_state = "grill_off"
src.flags = OPENCONTAINER
else //Otherwise bad luck!!
user << "\red It's dirty!"
return 1
else if(is_type_in_list(O,acceptable_items))
if (contents.len>=max_n_of_items)
user << "\red This [src] is full of ingredients, you cannot put more."
return 1
if (istype(O,/obj/item/stack) && O:amount>1)
new O.type (src)
O:use(1)
user.visible_message( \
"\blue [user] has added one of [O] to \the [src].", \
"\blue You add one of [O] to \the [src].")
else
// user.unEquip(O) //This just causes problems so far as I can tell. -Pete
if(!user.drop_item())
user << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
return 0
O.loc = src
user.visible_message( \
"\blue [user] has added \the [O] to \the [src].", \
"\blue You add \the [O] to \the [src].")
else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
istype(O,/obj/item/weapon/reagent_containers/food/condiment) \
)
if (!O.reagents)
return 1
for (var/datum/reagent/R in O.reagents.reagent_list)
if (!(R.id in acceptable_reagents))
user << "\red Your [O] contains components unsuitable for cookery."
return 1
//G.reagents.trans_to(src,G.amount_per_transfer_from_this)
else if(istype(O,/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = O
user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]."
return 1
else
user << "\red You have no idea what you can cook with this [O]."
return 1
src.updateUsrDialog()
/obj/machinery/grill/attack_ai(mob/user as mob)
return 0
/obj/machinery/grill/attack_hand(mob/user as mob)
user.set_machine(src)
interact(user)
/*******************
* grill Menu
********************/
/obj/machinery/grill/interact(mob/user as mob) // The grill Menu
if(panel_open || !anchored)
return
var/dat = ""
if(src.broken > 0)
dat = {"<TT>Bzzzzttttt</TT>"}
else if(src.operating)
dat = {"<TT>Grilling in progress!<BR>Please wait...!</TT>"}
else if(src.dirty==100)
dat = {"<TT>This grill is dirty!<BR>Please clean it before use!</TT>"}
else
var/list/items_counts = new
var/list/items_measures = new
var/list/items_measures_p = new
for (var/obj/O in contents)
var/display_name = O.name
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
items_measures[display_name] = "egg"
items_measures_p[display_name] = "eggs"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
items_measures[display_name] = "tofu chunk"
items_measures_p[display_name] = "tofu chunks"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
items_measures[display_name] = "slab of meat"
items_measures_p[display_name] = "slabs of meat"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
display_name = "Turnovers"
items_measures[display_name] = "turnover"
items_measures_p[display_name] = "turnovers"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
items_measures[display_name] = "fillet of meat"
items_measures_p[display_name] = "fillets of meat"
items_counts[display_name]++
for (var/O in items_counts)
var/N = items_counts[O]
if (!(O in items_measures))
dat += {"<B>[capitalize(O)]:</B> [N] [lowertext(O)]\s<BR>"}
else
if (N==1)
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures[O]]<BR>"}
else
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures_p[O]]<BR>"}
for (var/datum/reagent/R in reagents.reagent_list)
var/display_name = R.name
if (R.id == "capsaicin")
display_name = "Hotsauce"
if (R.id == "frostoil")
display_name = "Coldsauce"
dat += {"<B>[display_name]:</B> [R.volume] unit\s<BR>"}
if (items_counts.len==0 && reagents.reagent_list.len==0)
dat = {"<B>The grill is empty</B><BR>"}
else
dat = {"<b>Ingredients:</b><br>[dat]"}
dat += {"<HR><BR>\
<A href='?src=\ref[src];action=cook'>Turn on!<BR>\
<A href='?src=\ref[src];action=dispose'>Eject ingredients!<BR>\
"}
user << browse("<HEAD><TITLE>grill Controls</TITLE></HEAD><TT>[dat]</TT>", "window=grill")
onclose(user, "grill")
return
/***********************************
* grill Menu Handling/Cooking
************************************/
/obj/machinery/grill/proc/cook()
if(stat & (NOPOWER|BROKEN))
return
start()
if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run
if (!wzhzhzh(10))
abort()
return
stop()
return
var/datum/recipe/recipe = select_recipe(available_recipes,src)
var/obj/cooked
if (!recipe)
dirty += 1
if (prob(max(10,dirty*5)))
if (!wzhzhzh(4))
abort()
return
muck_start()
wzhzhzh(4)
muck_finish()
cooked = fail()
cooked.loc = src.loc
return
else if (has_extra_item())
if (!wzhzhzh(4))
abort()
return
broke()
cooked = fail()
cooked.loc = src.loc
return
else
if (!wzhzhzh(10))
abort()
return
stop()
cooked = fail()
cooked.loc = src.loc
return
else
var/halftime = round(recipe.time/10/2)
if (!wzhzhzh(halftime))
abort()
return
if (!wzhzhzh(halftime))
abort()
cooked = fail()
cooked.loc = src.loc
return
cooked = recipe.make_food(src)
stop()
if(cooked)
cooked.loc = src.loc
for(var/i=1,i<efficiency,i++)
cooked = new cooked.type(loc)
return
/obj/machinery/grill/proc/wzhzhzh(var/seconds as num)
for (var/i=1 to seconds)
if (stat & (NOPOWER|BROKEN))
return 0
use_power(500)
sleep(10)
return 1
/obj/machinery/grill/proc/has_extra_item()
for (var/obj/O in contents)
if ( \
!istype(O,/obj/item/weapon/reagent_containers/food) && \
!istype(O, /obj/item/weapon/grown) \
)
return 1
return 0
/obj/machinery/grill/proc/start()
src.visible_message("\blue The grill turns on.", "\blue You hear a grill.")
src.operating = 1
src.icon_state = "grill_on"
src.updateUsrDialog()
/obj/machinery/grill/proc/abort()
src.operating = 0 // Turn it off again aferwards
src.icon_state = "grill_off"
src.updateUsrDialog()
/obj/machinery/grill/proc/stop()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
src.operating = 0 // Turn it off again aferwards
src.icon_state = "grill_off"
src.updateUsrDialog()
/obj/machinery/grill/proc/dispose()
for (var/obj/O in contents)
O.loc = src.loc
if (src.reagents.total_volume)
src.dirty++
src.reagents.clear_reagents()
usr << "\blue You dispose of the grill contents."
src.updateUsrDialog()
/obj/machinery/grill/proc/muck_start()
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
src.icon_state = "grill_dirty" // Make it look dirty!!
/obj/machinery/grill/proc/muck_finish()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
src.visible_message("\red The grill gets covered in muck!")
src.dirty = 100 // Make it dirty so it can't be used util cleaned
src.flags = null //So you can't add condiments
src.icon_state = "grill_dirty" // Make it look dirty too
src.operating = 0 // Turn it off again aferwards
src.updateUsrDialog()
/obj/machinery/grill/proc/broke()
var/datum/effect/effect/system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
src.icon_state = "grill_broke" // Make it look all busted up and shit
src.visible_message("\red The grill breaks!") //Let them know they're stupid
src.broken = 2 // Make it broken so it can't be used util fixed
src.flags = null //So you can't add condiments
src.operating = 0 // Turn it off again aferwards
src.updateUsrDialog()
/obj/machinery/grill/proc/fail()
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
var/amount = 0
for (var/obj/O in contents-ffuu)
amount++
if (O.reagents)
var/id = O.reagents.get_master_reagent_id()
if (id)
amount+=O.reagents.get_reagent_amount(id)
qdel(O)
src.reagents.clear_reagents()
ffuu.reagents.add_reagent("carbon", amount)
ffuu.reagents.add_reagent("????", amount/10)
return ffuu
/obj/machinery/grill/Topic(href, href_list)
if(..() || panel_open)
return
usr.set_machine(src)
if(src.operating)
src.updateUsrDialog()
return
switch(href_list["action"])
if ("cook")
cook()
if ("dispose")
dispose()
return
+12 -393
View File
@@ -1,25 +1,16 @@
/obj/machinery/oven
/obj/machinery/kitchen_machine/oven
name = "oven"
desc = "Cookies are ready, dear."
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "oven_off"
layer = 2.9
density = 1
anchored = 1
use_power = 1
idle_power_usage = 5
active_power_usage = 100
flags = OPENCONTAINER | NOREACT
var/operating = 0 // Is it on?
var/dirty = 0 // = {0..100} Does it need cleaning?
var/broken = 0 // ={0,1,2} How broken is it???
var/global/list/datum/recipe/available_recipes // List of the recipes you can use
var/global/list/acceptable_items // List of the items you can put in
var/global/list/acceptable_reagents // List of the reagents you can put in
var/global/max_n_of_items = 0
var/efficiency
cook_verbs = list("Baking", "Roasting", "Broiling")
recipe_type = /datum/recipe/oven
off_icon = "oven_off"
on_icon = "oven_on"
broken_icon = "oven_broke"
dirty_icon = "oven_dirty"
open_icon = "oven_open"
// see code/modules/food/recipes_oven.dm for recipes
@@ -27,29 +18,8 @@
* Initialising
********************/
/obj/machinery/oven/New()
//..() //do not need this
reagents = new/datum/reagents(100)
reagents.my_atom = src
if (!available_recipes)
available_recipes = new
for (var/type in (typesof(/datum/recipe/oven)-/datum/recipe/oven))
var/datum/recipe/recipe = new type
if(recipe.result) // Ignore recipe subtypes that lack a result
available_recipes += recipe
else
qdel(recipe)
acceptable_items = new
acceptable_reagents = new
for (var/datum/recipe/oven/recipe in available_recipes)
for (var/item in recipe.items)
acceptable_items |= item
for (var/reagent in recipe.reagents)
acceptable_reagents |= reagent
if (recipe.items)
max_n_of_items = max(max_n_of_items,recipe.items.len)
acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown
/obj/machinery/kitchen_machine/oven/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/oven(null)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
@@ -58,8 +28,7 @@
component_parts += new /obj/item/stack/cable_coil(null, 5)
RefreshParts()
/obj/machinery/oven/upgraded/New()
/obj/machinery/kitchen_machine/oven/upgraded/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/oven(null)
@@ -69,358 +38,8 @@
component_parts += new /obj/item/stack/cable_coil(null, 5)
RefreshParts()
/obj/machinery/oven/RefreshParts()
/obj/machinery/kitchen_machine/oven/RefreshParts()
var/E
for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts)
E += M.rating
efficiency = round((E/2), 1) // There's 2 lasers, so halve the effect on the efficiency to keep it balanced
/*******************
* Item Adding
********************/
/obj/machinery/oven/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
if(operating)
return
if(!broken && dirty < 100)
if(default_deconstruction_screwdriver(user, "oven_open", "oven_off", O))
return
if(exchange_parts(user, O))
return
if(!broken && istype(O, /obj/item/weapon/wrench))
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
if(anchored)
anchored = 0
user << "<span class='caution'>The [src] can now be moved.</span>"
return
else if(!anchored)
anchored = 1
user << "<span class='caution'>The [src] is now secured.</span>"
return
default_deconstruction_crowbar(O)
if(src.broken > 0)
if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver
user.visible_message( \
"\blue [user] starts to fix part of the oven.", \
"\blue You start to fix part of the oven." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] fixes part of the oven.", \
"\blue You have fixed part of the oven." \
)
src.broken = 1 // Fix it a bit
else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench
user.visible_message( \
"\blue [user] starts to fix part of the oven.", \
"\blue You start to fix part of the oven." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] fixes the oven.", \
"\blue You have fixed the oven." \
)
src.icon_state = "oven_off"
src.broken = 0 // Fix it!
src.dirty = 0 // just to be sure
src.flags = OPENCONTAINER
else
user << "\red It's broken!"
return 1
else if(src.dirty==100) // The oven is all dirty so can't be used!
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
user.visible_message( \
"\blue [user] starts to clean the oven.", \
"\blue You start to clean the oven." \
)
if (do_after(user,20))
user.visible_message( \
"\blue [user] has cleaned the oven.", \
"\blue You have cleaned the oven." \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
src.icon_state = "oven_off"
src.flags = OPENCONTAINER
else //Otherwise bad luck!!
user << "\red It's dirty!"
return 1
else if(is_type_in_list(O,acceptable_items))
if (contents.len>=max_n_of_items)
user << "\red This [src] is full of ingredients, you cannot put more."
return 1
if (istype(O,/obj/item/stack) && O:amount>1)
new O.type (src)
O:use(1)
user.visible_message( \
"\blue [user] has added one of [O] to \the [src].", \
"\blue You add one of [O] to \the [src].")
else
// user.unEquip(O) //This just causes problems so far as I can tell. -Pete
if(!user.drop_item())
user << "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>"
return 0
O.loc = src
user.visible_message( \
"\blue [user] has added \the [O] to \the [src].", \
"\blue You add \the [O] to \the [src].")
else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
istype(O,/obj/item/weapon/reagent_containers/food/condiment) \
)
if (!O.reagents)
return 1
for (var/datum/reagent/R in O.reagents.reagent_list)
if (!(R.id in acceptable_reagents))
user << "\red Your [O] contains components unsuitable for cookery."
return 1
//G.reagents.trans_to(src,G.amount_per_transfer_from_this)
else if(istype(O,/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = O
user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]."
return 1
else
user << "\red You have no idea what you can cook with this [O]."
return 1
src.updateUsrDialog()
/obj/machinery/oven/attack_ai(mob/user as mob)
return 0
/obj/machinery/oven/attack_hand(mob/user as mob)
user.set_machine(src)
interact(user)
/*******************
* oven Menu
********************/
/obj/machinery/oven/interact(mob/user as mob) // The oven Menu
if(panel_open || !anchored)
return
var/dat = ""
if(src.broken > 0)
dat = {"<TT>Bzzzzttttt</TT>"}
else if(src.operating)
dat = {"<TT>Baking in progress!<BR>Please wait...!</TT>"}
else if(src.dirty==100)
dat = {"<TT>This oven is dirty!<BR>Please clean it before use!</TT>"}
else
var/list/items_counts = new
var/list/items_measures = new
var/list/items_measures_p = new
for (var/obj/O in contents)
var/display_name = O.name
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
items_measures[display_name] = "egg"
items_measures_p[display_name] = "eggs"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
items_measures[display_name] = "tofu chunk"
items_measures_p[display_name] = "tofu chunks"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
items_measures[display_name] = "slab of meat"
items_measures_p[display_name] = "slabs of meat"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
display_name = "Turnovers"
items_measures[display_name] = "turnover"
items_measures_p[display_name] = "turnovers"
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
items_measures[display_name] = "fillet of meat"
items_measures_p[display_name] = "fillets of meat"
items_counts[display_name]++
for (var/O in items_counts)
var/N = items_counts[O]
if (!(O in items_measures))
dat += {"<B>[capitalize(O)]:</B> [N] [lowertext(O)]\s<BR>"}
else
if (N==1)
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures[O]]<BR>"}
else
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures_p[O]]<BR>"}
for (var/datum/reagent/R in reagents.reagent_list)
var/display_name = R.name
if (R.id == "capsaicin")
display_name = "Hotsauce"
if (R.id == "frostoil")
display_name = "Coldsauce"
dat += {"<B>[display_name]:</B> [R.volume] unit\s<BR>"}
if (items_counts.len==0 && reagents.reagent_list.len==0)
dat = {"<B>The oven is empty</B><BR>"}
else
dat = {"<b>Ingredients:</b><br>[dat]"}
dat += {"<HR><BR>\
<A href='?src=\ref[src];action=cook'>Turn on!<BR>\
<A href='?src=\ref[src];action=dispose'>Eject ingredients!<BR>\
"}
user << browse("<HEAD><TITLE>oven Controls</TITLE></HEAD><TT>[dat]</TT>", "window=oven")
onclose(user, "oven")
return
/***********************************
* oven Menu Handling/Cooking
************************************/
/obj/machinery/oven/proc/cook()
if(stat & (NOPOWER|BROKEN))
return
start()
if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run
if (!wzhzhzh(10))
abort()
return
stop()
return
var/datum/recipe/recipe = select_recipe(available_recipes,src)
var/obj/cooked
if (!recipe)
dirty += 1
if (prob(max(10,dirty*5)))
if (!wzhzhzh(4))
abort()
return
muck_start()
wzhzhzh(4)
muck_finish()
cooked = fail()
cooked.loc = src.loc
return
else if (has_extra_item())
if (!wzhzhzh(4))
abort()
return
broke()
cooked = fail()
cooked.loc = src.loc
return
else
if (!wzhzhzh(10))
abort()
return
stop()
cooked = fail()
cooked.loc = src.loc
return
else
var/halftime = round(recipe.time/10/2)
if (!wzhzhzh(halftime))
abort()
return
if (!wzhzhzh(halftime))
abort()
cooked = fail()
cooked.loc = src.loc
return
cooked = recipe.make_food(src)
stop()
if(cooked)
cooked.loc = src.loc
for(var/i=1,i<efficiency,i++)
cooked = new cooked.type(loc)
return
/obj/machinery/oven/proc/wzhzhzh(var/seconds as num)
for (var/i=1 to seconds)
if (stat & (NOPOWER|BROKEN))
return 0
use_power(500)
sleep(10)
return 1
/obj/machinery/oven/proc/has_extra_item()
for (var/obj/O in contents)
if ( \
!istype(O,/obj/item/weapon/reagent_containers/food) && \
!istype(O, /obj/item/weapon/grown) \
)
return 1
return 0
/obj/machinery/oven/proc/start()
src.visible_message("\blue The oven turns on.", "\blue You hear a oven.")
src.operating = 1
src.icon_state = "oven_on"
src.updateUsrDialog()
/obj/machinery/oven/proc/abort()
src.operating = 0 // Turn it off again aferwards
src.icon_state = "oven_off"
src.updateUsrDialog()
/obj/machinery/oven/proc/stop()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
src.operating = 0 // Turn it off again aferwards
src.icon_state = "oven_off"
src.updateUsrDialog()
/obj/machinery/oven/proc/dispose()
for (var/obj/O in contents)
O.loc = src.loc
if (src.reagents.total_volume)
src.dirty++
src.reagents.clear_reagents()
usr << "\blue You dispose of the oven contents."
src.updateUsrDialog()
/obj/machinery/oven/proc/muck_start()
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
src.icon_state = "oven_dirty" // Make it look dirty!!
/obj/machinery/oven/proc/muck_finish()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
src.visible_message("\red The oven gets covered in muck!")
src.dirty = 100 // Make it dirty so it can't be used util cleaned
src.flags = null //So you can't add condiments
src.icon_state = "oven_dirty" // Make it look dirty too
src.operating = 0 // Turn it off again aferwards
src.updateUsrDialog()
/obj/machinery/oven/proc/broke()
var/datum/effect/effect/system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
src.icon_state = "oven_broke" // Make it look all busted up and shit
src.visible_message("\red The oven breaks!") //Let them know they're stupid
src.broken = 2 // Make it broken so it can't be used util fixed
src.flags = null //So you can't add condiments
src.operating = 0 // Turn it off again aferwards
src.updateUsrDialog()
/obj/machinery/oven/proc/fail()
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
var/amount = 0
for (var/obj/O in contents-ffuu)
amount++
if (O.reagents)
var/id = O.reagents.get_master_reagent_id()
if (id)
amount+=O.reagents.get_reagent_amount(id)
qdel(O)
src.reagents.clear_reagents()
ffuu.reagents.add_reagent("carbon", amount)
ffuu.reagents.add_reagent("????", amount/10)
return ffuu
/obj/machinery/oven/Topic(href, href_list)
if(..() || panel_open)
return
usr.set_machine(src)
if(src.operating)
src.updateUsrDialog()
return
switch(href_list["action"])
if ("cook")
cook()
if ("dispose")
dispose()
return
+1 -1
View File
@@ -37,7 +37,7 @@ var/global/datum/controller/plants/plant_controller // Set in New().
/datum/controller/plants/New()
if(plant_controller && plant_controller != src)
log_debug("Rebuilding plant controller.")
qdel(plant_controller)
del(plant_controller)
plant_controller = src
setup()
process()
@@ -37,7 +37,7 @@
qdel(container)//Gets rid of the MMI if there is one
if(loc)
if(istype(loc,/obj/item/organ/brain))
del(loc)//Gets rid of the brain item
qdel(loc)//Gets rid of the brain item
spawn(15)
if(animation) qdel(animation)
if(src) qdel(src)
@@ -505,6 +505,7 @@ emp_act
return
/mob/living/carbon/human/experience_pressure_difference(pressure_difference, direction)
playsound(src, 'sound/effects/space_wind.ogg', 50, 1)
if(shoes)
if(istype(shoes,/obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP)) //TODO: Make a not-shit shoe var system to negate airflow.
return 0
File diff suppressed because it is too large Load Diff
@@ -243,7 +243,7 @@ var/global/list/damage_icon_parts = list()
//0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
//Create a new, blank icon for our mob to use.
if(stand_icon)
del(stand_icon)
qdel(stand_icon)
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
var/icon_key = "[species.race_key][g][s_tone][r_skin][g_skin][b_skin]"
var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"]
@@ -447,7 +447,7 @@ var/global/list/damage_icon_parts = list()
if (targeted_by && target_locked)
overlays_standing[TARGETED_LAYER] = target_locked
else if (!targeted_by && target_locked)
del(target_locked)
qdel(target_locked)
if (!targeted_by)
overlays_standing[TARGETED_LAYER] = null
if(update_icons) update_icons()
+15
View File
@@ -485,6 +485,10 @@
if ((!(L.stat) && !(L.restrained())))
resist_grab(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src'
// Sliding out of a morgue/crematorium
if(loc && (istype(loc, /obj/structure/morgue) || istype(loc, /obj/structure/crematorium)))
resist_tray(L)
//unbuckling yourself
if(L.buckled && (L.last_special <= world.time) )
resist_buckle(L) //this passes L because the proc requires a typecasted mob/living instead of just 'src'
@@ -687,6 +691,17 @@
BD.attack_hand(usr)
C.open()
// resist_tray allows a mob to slide themselves out of a morgue or crematorium
/mob/living/proc/resist_tray(var/mob/living/carbon/CM)
if(!istype(CM))
return
if (usr.stat || usr.restrained())
return
usr << "<span class='alert'>You attempt to slide yourself out of \the [loc]...</span>"
var/obj/structure/S = loc
S.attack_hand(src)
/* resist_stop_drop_roll allows a mob to stop, drop, and roll in order to put out a fire burning on them.
*/////
/mob/living/proc/resist_stop_drop_roll(var/mob/living/carbon/CM)
-24
View File
@@ -41,30 +41,6 @@
src << "\blue Your [C.name] was disrupted!"
Stun(2)
/*
//Being hit while using a deadman switch
if(istype(equipped(),/obj/item/device/assembly/signaler))
var/obj/item/device/assembly/signaler/signaler = equipped()
if(signaler.deadman && prob(80))
src.visible_message("\red [src] triggers their deadman's switch!")
signaler.signal()
*/
/*
//Stun Beams -- These were commented out, making appropriate changes here. - Dave
if(istype(P, /obj/item/projectile/beam/stun) || istype(P, /obj/item/projectile/bullet/stunshot))
stun_effect_act(0, P.agony, def_zone, P)
src <<"\red You have been hit by [P]!"
del P
return
if(istype(P, /obj/item/projectile/energy/electrode) || istype(P, /obj/item/projectile/bullet/stunshot))
stun_effect_act(0, P.agony, def_zone, P)
src <<"\red You have been hit by [P]!"
del P
return
*/
//Armor
var/armor = run_armor_check(def_zone, P.flag)
var/proj_sharp = is_sharp(P)
@@ -34,11 +34,11 @@ var/global/list/empty_playable_ai_cores = list()
job_master.FreeRole(job)
if(mind.objectives.len)
del(mind.objectives)
qdel(mind.objectives)
mind.special_role = null
else
if(ticker.mode.name == "AutoTraitor")
var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
current_mode.possible_traitors.Remove(src)
del(src)
qdel(src)
+2 -2
View File
@@ -22,8 +22,8 @@
//New pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here.
//Read as: I have no idea what I'm doing but asking for help got me nowhere so this is what you get. - Nodrak
if(mind) del(mind)
if(mind) qdel(mind)
living_mob_list -= src
ghostize()
if(icon_state != "[chassis]_dead")
del(src)
qdel(src)
+1
View File
@@ -3,6 +3,7 @@
layer = 4.0
animate_movement = 2
// flags = NOREACT
pressure_resistance = 8
var/datum/mind/mind
var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak
+1 -1
View File
@@ -3,5 +3,5 @@
..()
if(!spawning)//Here so that if they are spawning and log out, the other procs can play out and they will have a mob to come back to.
key = null//We null their key before deleting the mob, so they are properly kicked out.
del(src)
qdel(src)
return
+4 -4
View File
@@ -138,7 +138,7 @@
observer.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
observer.key = key
respawnable_list += observer
del(src)
qdel(src)
return 1
if(href_list["late_join"])
@@ -325,8 +325,8 @@
AnnounceCyborg(character, rank, "has been downloaded to the empty core in \the [character.loc.loc]")
ticker.mode.latespawn(character)
del(C)
del(src)
qdel(C)
qdel(src)
return
//Find our spawning point.
@@ -364,7 +364,7 @@
else
AnnounceCyborg(character, rank, join_message)
callHook("latespawn", list(character))
del(src)
qdel(src)
proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message)
+1 -1
View File
@@ -13,7 +13,7 @@
throw_range = 1
throw_speed = 1
layer = 4
pressure_resistance = 1
pressure_resistance = 0
slot_flags = SLOT_HEAD
body_parts_covered = HEAD
attack_verb = list("bapped")
+1 -1
View File
@@ -7,7 +7,7 @@
w_class = 3
throw_speed = 3
throw_range = 7
pressure_resistance = 10
pressure_resistance = 8
var/amount = 30 //How much paper is in the bin.
var/list/papers = new/list() //List of papers put in the bin for reference.
/*
+1 -1
View File
@@ -591,7 +591,7 @@
sleep(2)
explosion(T, 0, 0, 2, 2)
sleep(1)
del(src)
qdel(src)
// the light item
// can be tube or bulb subtypes