mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into findnreplace
# Conflicts: # code/game/machinery/recharger.dm # code/game/objects/items/devices/autopsy.dm # code/game/objects/items/devices/modkit.dm # code/game/objects/structures/lattice.dm
This commit is contained in:
@@ -157,7 +157,7 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/toggledebuglogs,
|
||||
/client/proc/qdel_toggle,
|
||||
/client/proc/gc_dump_hdl,
|
||||
/client/proc/cmd_display_del_log,
|
||||
/client/proc/debugNatureMapGenerator,
|
||||
/client/proc/check_bomb_impacts,
|
||||
/client/proc/test_movable_UI,
|
||||
|
||||
@@ -157,7 +157,7 @@ var/global/sent_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse(src), slot_r_hand)
|
||||
|
||||
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)//Here you go Deuryn
|
||||
var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(src)
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
sec_hud_set_implants()
|
||||
|
||||
@@ -51,8 +51,7 @@
|
||||
mob_hunt_server.red_terminal = null
|
||||
if(mob_hunt_server.blue_terminal == src)
|
||||
mob_hunt_server.blue_terminal = null
|
||||
if(avatar)
|
||||
qdel(avatar)
|
||||
QDEL_NULL(avatar)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/mob_battle_terminal/attackby(obj/item/O, mob/user)
|
||||
|
||||
@@ -12,8 +12,7 @@
|
||||
sparks.attach(src)
|
||||
|
||||
/obj/item/device/assembly/igniter/Destroy()
|
||||
qdel(sparks)
|
||||
sparks = null
|
||||
QDEL_NULL(sparks)
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
@@ -255,9 +255,7 @@
|
||||
/obj/effect/beam/i_beam/Destroy()
|
||||
if(master.first == src)
|
||||
master.first = null
|
||||
if(next)
|
||||
qdel(next)
|
||||
next = null
|
||||
QDEL_NULL(next)
|
||||
if(previous)
|
||||
previous.next = null
|
||||
master.last = previous
|
||||
|
||||
@@ -10,10 +10,8 @@
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/assembly/shock_kit/Destroy()
|
||||
qdel(part1)
|
||||
part1 = null
|
||||
qdel(part2)
|
||||
part2 = null
|
||||
QDEL_NULL(part1)
|
||||
QDEL_NULL(part2)
|
||||
return ..()
|
||||
|
||||
/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
if(water_timer)
|
||||
deltimer(water_timer)
|
||||
water_timer = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/waterfall/proc/drip()
|
||||
var/obj/effect/effect/water/W = new(loc)
|
||||
|
||||
@@ -116,8 +116,7 @@
|
||||
if(roomtimer)
|
||||
deltimer(roomtimer)
|
||||
roomtimer = null
|
||||
qdel(card)
|
||||
card = null
|
||||
QDEL_NULL(card)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/unpowered/hotel_door/examine(mob/user)
|
||||
@@ -220,9 +219,7 @@
|
||||
vacant_rooms.Cut()
|
||||
guests.Cut()
|
||||
|
||||
if(radio)
|
||||
qdel(radio)
|
||||
radio = null
|
||||
QDEL_NULL(radio)
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
log_startup_progress(" No away missions found.")
|
||||
return
|
||||
|
||||
|
||||
/proc/createALLZlevels()
|
||||
if(awaydestinations.len) //crude, but it saves another var!
|
||||
return
|
||||
|
||||
@@ -111,8 +111,7 @@
|
||||
init(R)
|
||||
|
||||
/turf/unsimulated/floor/upperlevel/Destroy()
|
||||
qdel(sensor)
|
||||
sensor = null
|
||||
QDEL_NULL(sensor)
|
||||
return ..()
|
||||
|
||||
/turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R)
|
||||
|
||||
@@ -63,16 +63,14 @@
|
||||
desc = "Horrendous and awful. It smells like cancer. The fact it has wires attached to it is incidental."
|
||||
var/obj/item/weapon/stock_parts/cell/cell = null
|
||||
var/stun_strength = 5
|
||||
var/stun_cost = 3750
|
||||
var/stun_cost = 2000
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/Destroy()
|
||||
if(cell)
|
||||
qdel(cell)
|
||||
cell = null
|
||||
QDEL_NULL(cell)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/Touch(atom/A, proximity)
|
||||
|
||||
@@ -165,10 +165,8 @@
|
||||
M.unEquip(piece)
|
||||
qdel(piece)
|
||||
processing_objects -= src
|
||||
qdel(wires)
|
||||
wires = null
|
||||
qdel(spark_system)
|
||||
spark_system = null
|
||||
QDEL_NULL(wires)
|
||||
QDEL_NULL(spark_system)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/rig/proc/suit_is_deployed()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/hooded/Destroy()
|
||||
qdel(hood)
|
||||
QDEL_NULL(hood)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/suit/hooded/proc/MakeHood()
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
pockets.max_combined_w_class = 4
|
||||
|
||||
/obj/item/clothing/suit/storage/Destroy()
|
||||
qdel(pockets)
|
||||
pockets = null
|
||||
QDEL_NULL(pockets)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
|
||||
|
||||
@@ -386,9 +386,7 @@
|
||||
var/obj/item/weapon/card/id/access_id
|
||||
|
||||
/obj/item/clothing/accessory/petcollar/Destroy()
|
||||
if(access_id)
|
||||
qdel(access_id)
|
||||
access_id = null
|
||||
QDEL_NULL(access_id)
|
||||
processing_objects -= src
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -761,7 +761,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/contortionist/dropped(mob/living/carbon/human/user)
|
||||
if(!user.get_int_organ(/obj/item/organ/internal/gland/ventcrawling))
|
||||
if(!user.get_int_organ(/obj/item/organ/internal/heart/gland/ventcrawling))
|
||||
user.ventcrawler = 0
|
||||
..()
|
||||
|
||||
|
||||
@@ -235,6 +235,33 @@
|
||||
to_chat(target, "<span class='notice'>You comb your tail with the [src].</span>")
|
||||
used = 1
|
||||
|
||||
/obj/item/device/fluff/desolate_baton_kit //DesolateG: Michael steampunk_witch
|
||||
name = "stun baton converstion kit"
|
||||
desc = "Some sci-fi looking parts for a stun baton."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "scifikit"
|
||||
w_class = 2
|
||||
|
||||
/obj/item/device/fluff/desolate_baton_kit/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity || !ishuman(user) || user.incapacitated())
|
||||
return
|
||||
|
||||
if(istype(target, /obj/item/weapon/melee/baton) && !istype(target, /obj/item/weapon/melee/baton/cattleprod))
|
||||
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
|
||||
//because batons use the initial() proc, we can't just swap the icon state, sadly
|
||||
var/obj/item/weapon/melee/baton/the_baton = target
|
||||
the_baton.base_icon = "desolate_baton"
|
||||
the_baton.item_state = "desolate_baton"
|
||||
the_baton.icon = 'icons/obj/custom_items.dmi'
|
||||
the_baton.lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi'
|
||||
the_baton.righthand_file = 'icons/mob/inhands/fluff_righthand.dmi'
|
||||
the_baton.update_icon()
|
||||
user.update_icons()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
|
||||
|
||||
/obj/item/device/fluff/cardgage_helmet_kit //captain cardgage: Richard Ulery
|
||||
name = "welding helmet modkit"
|
||||
desc = "Some spraypaint and a stencil, perfect for painting flames onto a welding helmet!"
|
||||
@@ -244,14 +271,14 @@
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/device/fluff/cardgage_helmet_kit/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity || !ishuman(user) || user.lying)
|
||||
if(!proximity || !ishuman(user) || user.incapacitated())
|
||||
return
|
||||
|
||||
if(istype(target, /obj/item/clothing/head/welding))
|
||||
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
|
||||
|
||||
var/obj/item/clothing/head/welding/flamedecal/P = new(get_turf(target))
|
||||
transfer_fingerprints_to(P)
|
||||
target.transfer_fingerprints_to(P)
|
||||
qdel(target)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -269,7 +296,7 @@
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/device/fluff/shadey_plasman_modkit/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity || !ishuman(user) || user.lying)
|
||||
if(!proximity || !ishuman(user) || user.incapacitated())
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
@@ -744,4 +771,3 @@
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/bottle/fluff/moonshine(src)
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
vendingMachines.Remove(originMachine)
|
||||
originMachine.shut_up = 0
|
||||
originMachine.shoot_inventory = 1
|
||||
log_debug("Original brand intelligence machine: [originMachine] [ADMIN_VV(originMachine)] [ADMIN_JMP(originMachine)]")
|
||||
|
||||
/datum/event/brand_intelligence/tick()
|
||||
if(!originMachine || !isnull(originMachine.gcDestroyed) || originMachine.shut_up || originMachine.wires.IsAllCut()) //if the original vending machine is missing or has it's voice switch flipped
|
||||
|
||||
@@ -1218,28 +1218,19 @@
|
||||
var/monkey_type = "Monkey"
|
||||
list_reagents = list("nutriment" = 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(O, /obj/structure/sink))
|
||||
to_chat(user, "<span class='notice'>You place [src] under a stream of water...</span>")
|
||||
user.drop_item()
|
||||
forceMove(get_turf(O))
|
||||
return Expand()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature)
|
||||
if(volume >= 5)
|
||||
return Expand()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wash(mob/user, atom/source)
|
||||
if(do_after(user, 40, target = source))
|
||||
return 1
|
||||
user.drop_item()
|
||||
forceMove(get_turf(source))
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
|
||||
if(isnull(gcDestroyed))
|
||||
visible_message("<span class='notice'>[src] expands!</span>")
|
||||
new/mob/living/carbon/human(get_turf(src),monkey_type)
|
||||
new/mob/living/carbon/human(get_turf(src), monkey_type)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube
|
||||
|
||||
@@ -50,8 +50,7 @@
|
||||
wires = new/datum/wires/smartfridge(src)
|
||||
|
||||
/obj/machinery/smartfridge/Destroy()
|
||||
qdel(wires)
|
||||
wires = null
|
||||
QDEL_NULL(wires)
|
||||
for(var/atom/movable/A in contents)
|
||||
A.forceMove(loc)
|
||||
return ..()
|
||||
|
||||
@@ -7,8 +7,12 @@
|
||||
#define GC_FORCE_DEL_PER_TICK 30
|
||||
//#define GC_DEBUG
|
||||
|
||||
// A list of types that were queued in the GC, and had to be soft deleted; used in testing
|
||||
var/list/gc_hard_del_types = list()
|
||||
var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened.
|
||||
// the types are stored as strings
|
||||
var/list/sleptDestroy = list() //Same as above but these are paths that slept during their Destroy call
|
||||
|
||||
var/list/noqdelhint = list() // list of all types that do not return a QDEL_HINT
|
||||
|
||||
var/global/datum/controller/process/garbage_collector/garbageCollector
|
||||
|
||||
// The time a datum was destroyed by the GC, or null if it hasn't been
|
||||
@@ -82,7 +86,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
|
||||
#undef GC_COLLECTIONS_PER_TICK
|
||||
|
||||
/datum/controller/process/garbage_collector/proc/hardDel(var/datum/D)
|
||||
gc_hard_del_types |= D.type
|
||||
didntgc["[D.type]"]++
|
||||
D.hard_deleted = 1
|
||||
if(!D.gcDestroyed)
|
||||
spawn(-1)
|
||||
@@ -126,6 +130,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
|
||||
return
|
||||
if(!isnull(D.gcDestroyed) && D.gcDestroyed != world.time)
|
||||
gcwarning("Sleep detected in Destroy() call of [D.type]")
|
||||
sleptDestroy["[D.type]"]++
|
||||
D.gcDestroyed = world.time
|
||||
|
||||
switch(hint)
|
||||
@@ -155,7 +160,9 @@ var/global/datum/controller/process/garbage_collector/garbageCollector
|
||||
#endif
|
||||
garbageCollector.addTrash(D)
|
||||
else
|
||||
// to_chat(world, "WARNING GC DID NOT GET A RETURN VALUE FOR [D], [D.type]!")
|
||||
if(!noqdelhint["[D.type]"])
|
||||
noqdelhint["[D.type]"] = "[D.type]"
|
||||
gcwarning("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.")
|
||||
garbageCollector.addTrash(D)
|
||||
|
||||
|
||||
|
||||
@@ -13,21 +13,27 @@
|
||||
log_admin("[key_name(usr)] turned qdel [garbageCollector.del_everything ? "off" : "on"].")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] turned qdel [garbageCollector.del_everything ? "off" : "on"].</span>", 1)
|
||||
|
||||
/client/proc/gc_dump_hdl()
|
||||
set name = "(GC) Hard Del List"
|
||||
set desc = "List types that are hard del()'d by the GC."
|
||||
/client/proc/cmd_display_del_log()
|
||||
set category = "Debug"
|
||||
set name = "(GC) Display del() Log"
|
||||
set desc = "Displays a list of things that have failed to GC this round"
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
if(!gc_hard_del_types || !gc_hard_del_types.len)
|
||||
to_chat(usr, "<span class='notice'>No hard del()'d types found.</span>")
|
||||
return
|
||||
var/dat = "<B>List of things that failed to GC this round</B><BR><BR>"
|
||||
for(var/path in didntgc)
|
||||
dat += "[path] - [didntgc[path]] times<BR>"
|
||||
|
||||
to_chat(usr, "Types hard del()'d by the GC:")
|
||||
for(var/A in gc_hard_del_types)
|
||||
to_chat(usr, "[A]")
|
||||
dat += "<B>List of paths that did not return a qdel hint in Destroy()</B><BR><BR>"
|
||||
for(var/path in noqdelhint)
|
||||
dat += "[path]<BR>"
|
||||
|
||||
dat += "<B>List of paths that slept in Destroy()</B><BR><BR>"
|
||||
for(var/path in sleptDestroy)
|
||||
dat += "[path]<BR>"
|
||||
|
||||
usr << browse(dat, "window=dellog")
|
||||
|
||||
#ifdef TESTING
|
||||
/client/var/running_find_references
|
||||
|
||||
@@ -31,9 +31,8 @@
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/biogenerator/Destroy()
|
||||
if(beaker)
|
||||
qdel(beaker)
|
||||
beaker = null
|
||||
QDEL_NULL(beaker)
|
||||
QDEL_NULL(files)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/biogenerator/ex_act(severity)
|
||||
@@ -208,7 +207,7 @@
|
||||
|
||||
/obj/machinery/biogenerator/attack_hand(mob/user)
|
||||
interact(user)
|
||||
|
||||
|
||||
/obj/machinery/biogenerator/attack_ghost(mob/user)
|
||||
interact(user)
|
||||
|
||||
|
||||
@@ -24,13 +24,22 @@
|
||||
/obj/machinery/plantgenes/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/plantgenes(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/circuitboard/plantgenes(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/plantgenes/Destroy()
|
||||
core_genes.Cut()
|
||||
reagent_genes.Cut()
|
||||
trait_genes.Cut()
|
||||
target = null
|
||||
QDEL_NULL(seed)
|
||||
QDEL_NULL(disk)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/plantgenes/RefreshParts()
|
||||
rating = 0
|
||||
for(var/I in component_parts)
|
||||
@@ -90,7 +99,7 @@
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
|
||||
/obj/machinery/plantgenes/attack_ghost(mob/user)
|
||||
interact(user)
|
||||
|
||||
@@ -282,9 +291,9 @@
|
||||
repaint_seed()
|
||||
if("extract")
|
||||
if(disk && !disk.read_only)
|
||||
disk.gene = G
|
||||
if(istype(G, /datum/plant_gene/core/potency))
|
||||
var/datum/plant_gene/core/gene = G
|
||||
disk.gene = G.Copy()
|
||||
if(istype(disk.gene, /datum/plant_gene/core/potency))
|
||||
var/datum/plant_gene/core/gene = disk.gene
|
||||
gene.value = min(gene.value, max_extract_pot)
|
||||
disk.update_name()
|
||||
qdel(seed)
|
||||
@@ -370,6 +379,10 @@
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
|
||||
/obj/item/weapon/disk/plantgene/Destroy()
|
||||
QDEL_NULL(gene)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/disk/plantgene/attackby(obj/item/weapon/W, mob/user, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/pen))
|
||||
|
||||
@@ -39,7 +39,9 @@
|
||||
transform *= TransformUsingVariable(seed.potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency!
|
||||
add_juice()
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy()
|
||||
QDEL_NULL(seed)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/proc/add_juice()
|
||||
if(reagents)
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
transform *= TransformUsingVariable(seed.potency, 100, 0.5)
|
||||
add_juice()
|
||||
|
||||
/obj/item/weapon/grown/Destroy()
|
||||
QDEL_NULL(seed)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grown/attackby(obj/item/O, mob/user, params)
|
||||
..()
|
||||
|
||||
@@ -75,9 +75,7 @@
|
||||
plant_hud_set_water()
|
||||
|
||||
/obj/machinery/hydroponics/Destroy()
|
||||
if(myseed)
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
QDEL_NULL(myseed)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
@@ -68,6 +68,12 @@
|
||||
for(var/reag_id in reagents_add)
|
||||
genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id])
|
||||
|
||||
/obj/item/seeds/Destroy()
|
||||
for(var/thing in genes)
|
||||
qdel(thing)
|
||||
genes.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/item/seeds/proc/Copy()
|
||||
var/obj/item/seeds/S = new type(null, 1)
|
||||
// Copy all the stats
|
||||
|
||||
@@ -79,7 +79,7 @@ var/list/karma_spenders = list()
|
||||
to_chat(src, "<span class='warning'>You can't spend karma on someone connected from the same IP.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/mob/verb/spend_karma_list()
|
||||
set name = "Award Karma"
|
||||
@@ -118,8 +118,6 @@ var/list/karma_spenders = list()
|
||||
if(!M)
|
||||
to_chat(usr, "Please right click a mob to award karma directly, or use the 'Award Karma' verb to select a player from the player listing.")
|
||||
return
|
||||
if(!can_give_karma_to_mob(M))
|
||||
return
|
||||
if(alert("Give [M.name] good karma?", "Karma", "Yes", "No") != "Yes")
|
||||
return
|
||||
if(!can_give_karma_to_mob(M))
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if(bag)
|
||||
bag.loc = user
|
||||
bag.attackby(W, user, params)
|
||||
|
||||
|
||||
/obj/item/device/shared_storage/attack_self(mob/living/carbon/user)
|
||||
if(!iscarbon(user))
|
||||
return
|
||||
@@ -116,7 +116,7 @@
|
||||
H.adjustBruteLoss(20)
|
||||
H.emote("scream")
|
||||
..()*/
|
||||
|
||||
|
||||
//Boat
|
||||
|
||||
/obj/vehicle/lavaboat
|
||||
@@ -183,7 +183,7 @@
|
||||
generic_pixel_y = 2
|
||||
generic_pixel_x = 1
|
||||
vehicle_move_delay = 1
|
||||
|
||||
|
||||
// Wisp Lantern
|
||||
/obj/item/device/wisp_lantern
|
||||
name = "spooky lantern"
|
||||
@@ -238,16 +238,16 @@
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
light_power = 1
|
||||
light_range = 7
|
||||
|
||||
|
||||
//Red/Blue Cubes
|
||||
|
||||
|
||||
/obj/item/device/warp_cube
|
||||
name = "blue cube"
|
||||
desc = "A mysterious blue cube."
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
icon_state = "blue_cube"
|
||||
var/obj/item/device/warp_cube/linked
|
||||
|
||||
|
||||
/obj/item/device/warp_cube/Destroy()
|
||||
if(linked)
|
||||
linked.linked = null
|
||||
@@ -260,14 +260,14 @@
|
||||
return
|
||||
|
||||
var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread()
|
||||
smoke.set_up(1, 0, user.loc)
|
||||
smoke.set_up(1, 0, user.loc)
|
||||
smoke.start()
|
||||
|
||||
user.forceMove(get_turf(linked))
|
||||
feedback_add_details("warp_cube","[src.type]")
|
||||
|
||||
var/datum/effect/system/harmless_smoke_spread/smoke2 = new /datum/effect/system/harmless_smoke_spread()
|
||||
smoke2.set_up(1, 0, user.loc)
|
||||
smoke2.set_up(1, 0, user.loc)
|
||||
smoke2.start()
|
||||
|
||||
/obj/item/device/warp_cube/red
|
||||
@@ -281,7 +281,7 @@
|
||||
var/obj/item/device/warp_cube/blue = new(src.loc)
|
||||
linked = blue
|
||||
blue.linked = src
|
||||
|
||||
|
||||
//Meat Hook
|
||||
|
||||
/obj/item/weapon/gun/magic/hook
|
||||
@@ -329,9 +329,9 @@
|
||||
L.forceMove(get_turf(firer))
|
||||
|
||||
/obj/item/projectile/hook/Destroy()
|
||||
qdel(chain)
|
||||
QDEL_NULL(chain)
|
||||
return ..()
|
||||
|
||||
|
||||
//Immortality Talisman
|
||||
|
||||
/obj/item/device/immortality_talisman
|
||||
|
||||
@@ -226,6 +226,7 @@
|
||||
|
||||
/obj/item/device/mobcapsule/Destroy()
|
||||
if(captured)
|
||||
captured.ghostize()
|
||||
qdel(captured)
|
||||
captured = null
|
||||
return ..()
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
points = 1
|
||||
refined_type = /obj/item/stack/sheet/glass
|
||||
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
|
||||
|
||||
|
||||
/obj/item/weapon/ore/glass/basalt
|
||||
name = "volcanic ash"
|
||||
icon_state = "volcanic_sand"
|
||||
@@ -163,8 +163,7 @@
|
||||
var/datum/wires/explosive/gibtonite/wires
|
||||
|
||||
/obj/item/weapon/twohanded/required/gibtonite/Destroy()
|
||||
qdel(wires)
|
||||
wires = null
|
||||
QDEL_NULL(wires)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/twohanded/required/gibtonite/attackby(obj/item/I, mob/user, params)
|
||||
@@ -192,7 +191,7 @@
|
||||
quality = 1
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/required/gibtonite/attack_ghost(mob/user)
|
||||
if(wires)
|
||||
wires.Interact(user)
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
threatcount += 4
|
||||
|
||||
//Mindshield implants imply trustworthyness
|
||||
if(isloyal(src))
|
||||
if(ismindshielded(src))
|
||||
threatcount -= 1
|
||||
|
||||
return threatcount
|
||||
|
||||
@@ -167,12 +167,8 @@
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/borg = loc
|
||||
borg.mmi = null
|
||||
if(brainmob)
|
||||
qdel(brainmob)
|
||||
brainmob = null
|
||||
if(held_brain)
|
||||
qdel(held_brain)
|
||||
held_brain = null
|
||||
QDEL_NULL(brainmob)
|
||||
QDEL_NULL(held_brain)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/mmi/syndie
|
||||
|
||||
@@ -123,7 +123,5 @@
|
||||
icon_state = "scroll"
|
||||
|
||||
/obj/item/organ/internal/brain/Destroy() //copypasted from MMIs.
|
||||
if(brainmob)
|
||||
qdel(brainmob)
|
||||
brainmob = null
|
||||
QDEL_NULL(brainmob)
|
||||
return ..()
|
||||
|
||||
@@ -53,6 +53,19 @@
|
||||
|
||||
if(!found_slime_bodypart) //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
|
||||
if("clack", "clacks")
|
||||
if(species.name == "Kidan") //Only Kidan can clack and rightfully so.
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
|
||||
if("click", "clicks")
|
||||
if(species.name == "Kidan") //Only Kidan can click and rightfully so.
|
||||
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
|
||||
if("scream", "screams")
|
||||
on_CD = handle_emote_CD(50) //longer cooldown
|
||||
if("fart", "farts", "flip", "flips", "snap", "snaps")
|
||||
@@ -163,6 +176,40 @@
|
||||
playsound(loc, 'sound/effects/slime_squish.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
|
||||
m_type = 2
|
||||
|
||||
if("clack", "clacks")
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "<B>[src]</B> clacks their mandibles at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> clacks their mandibles."
|
||||
playsound(loc, 'sound/effects/Kidanclack.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
|
||||
m_type = 2
|
||||
|
||||
if("click", "clicks")
|
||||
var/M = null
|
||||
if(param)
|
||||
for(var/mob/A in view(null, null))
|
||||
if(param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if(param)
|
||||
message = "<B>[src]</B> clicks their mandibles at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> clicks their mandibles."
|
||||
playsound(loc, 'sound/effects/Kidanclack2.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
|
||||
m_type = 2
|
||||
|
||||
if("yes")
|
||||
var/M = null
|
||||
if(param)
|
||||
@@ -225,12 +272,12 @@
|
||||
if(!restrained())
|
||||
message = "<B>[src]</B> is strumming the air and headbanging like a safari chimp."
|
||||
m_type = 1
|
||||
|
||||
|
||||
if("dance")
|
||||
if(!restrained())
|
||||
message = "<B>[src]</B> dances around happily."
|
||||
m_type = 1
|
||||
|
||||
|
||||
if("jump")
|
||||
if(!restrained())
|
||||
message = "<B>[src]</B> jumps!"
|
||||
@@ -836,11 +883,11 @@
|
||||
// playsound(loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins still vote no to fun
|
||||
if(locate(/obj/item/weapon/storage/bible) in get_turf(src))
|
||||
to_chat(viewers(src), "<span class='warning'><b>[src] farts on the Bible!</b></span>")
|
||||
var/image/cross = image('icons/obj/storage.dmi',"bible")
|
||||
var/adminbfmessage = "\blue [bicon(cross)] <b><font color=red>Bible Fart: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b>"
|
||||
for(var/client/X in admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
to_chat(X, adminbfmessage)
|
||||
var/image/cross = image('icons/obj/storage.dmi',"bible")
|
||||
var/adminbfmessage = "\blue [bicon(cross)] <b><font color=red>Bible Fart: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b>"
|
||||
for(var/client/X in admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
to_chat(X, adminbfmessage)
|
||||
else if(TOXIC_FARTS in mutations)
|
||||
message = "<b>[src]</b> unleashes a [pick("horrible","terrible","foul","disgusting","awful")] fart."
|
||||
else if(SUPER_FART in mutations)
|
||||
|
||||
@@ -1892,7 +1892,7 @@
|
||||
|
||||
|
||||
//Mindshield implants imply slight trustworthiness
|
||||
if(isloyal(src))
|
||||
if(ismindshielded(src))
|
||||
threatcount -= 1
|
||||
|
||||
//Agent cards lower threatlevel.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
var/global/default_martial_art = new/datum/martial_art
|
||||
/mob/living/carbon/human
|
||||
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD)
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD)
|
||||
|
||||
//Marking colour and style
|
||||
var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000.
|
||||
|
||||
@@ -1181,7 +1181,8 @@
|
||||
else
|
||||
AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3)
|
||||
adjustOxyLoss(5)
|
||||
adjustBruteLoss(1)
|
||||
Paralyse(4)
|
||||
adjustBruteLoss(2)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"eyes" = /obj/item/organ/internal/eyes/abductor //3 darksight.
|
||||
)
|
||||
|
||||
flags = HAS_LIPS | NO_BLOOD | NO_BREATHE
|
||||
flags = HAS_LIPS | NO_BLOOD | NO_BREATHE | NOGUNS
|
||||
|
||||
oxy_mod = 0
|
||||
|
||||
@@ -27,11 +27,14 @@
|
||||
dietflags = DIET_OMNI
|
||||
reagent_tag = PROCESS_ORG
|
||||
blood_color = "#FF5AFF"
|
||||
female_scream_sound = 'sound/goonstation/voice/male_scream.ogg'
|
||||
female_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
|
||||
female_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' //Abductors always scream like guys
|
||||
|
||||
/datum/species/abductor/can_understand(var/mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member
|
||||
/datum/species/abductor/can_understand(mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member
|
||||
return 1
|
||||
|
||||
/datum/species/abductor/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
/datum/species/abductor/handle_post_spawn(mob/living/carbon/human/H)
|
||||
H.gender = NEUTER
|
||||
if(H.mind)
|
||||
H.mind.abductor = new /datum/abductor
|
||||
|
||||
@@ -486,7 +486,7 @@
|
||||
brute_mod = 0.8
|
||||
|
||||
flags = IS_WHITELISTED
|
||||
clothing_flags = HAS_SOCKS
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = FEET_CLAWS | HAS_HEAD_ACCESSORY
|
||||
eyes = "kidan_eyes_s"
|
||||
dietflags = DIET_HERB
|
||||
@@ -512,6 +512,8 @@
|
||||
"is attempting to bite their antenna off!",
|
||||
"is jamming their claws into their eye sockets!",
|
||||
"is twisting their own neck!",
|
||||
"is cracking their exoskeleton!",
|
||||
"is stabbing themselves with their mandibles!",
|
||||
"is holding their breath!")
|
||||
|
||||
/datum/species/slime
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
to_chat(target, "<span class='danger'>You feel yourself agreeing with [user], and a surge of loyalty begins building.</span>")
|
||||
target.Weaken(12)
|
||||
sleep(20)
|
||||
if(isloyal(target))
|
||||
if(ismindshielded(target))
|
||||
to_chat(user, "<span class='notice'>They are enslaved by Nanotrasen. You feel their interest in your cause wane and disappear.</span>")
|
||||
user.visible_message("<span class='danger'>[user] stops talking for a moment, then moves back away from [target].</span>")
|
||||
to_chat(target, "<span class='danger'>Your mindshield implant activates, protecting you from conversion.</span>")
|
||||
|
||||
@@ -246,7 +246,7 @@ var/list/ai_verbs_default = list(
|
||||
ai_list -= src
|
||||
shuttle_caller_list -= src
|
||||
shuttle_master.autoEvac()
|
||||
qdel(eyeobj) // No AI, no Eye
|
||||
QDEL_NULL(eyeobj) // No AI, no Eye
|
||||
malfhack = null
|
||||
return ..()
|
||||
|
||||
@@ -299,22 +299,59 @@ var/list/ai_verbs_default = list(
|
||||
for(var/i = 1 to Entry.len)
|
||||
Entry[i] = trim(Entry[i])
|
||||
|
||||
if(Entry.len < 2)
|
||||
if(Entry.len < 2 || Entry[1] != "ai") //ignore incorrectly formatted entries or entries that aren't marked for AI
|
||||
continue
|
||||
|
||||
if(Entry.len < 3 && Entry[1] == ckey && Entry[2] == real_name)
|
||||
custom_sprite = 1 //They're in the list? Custom sprite time
|
||||
icon = 'icons/mob/custom-synthetic.dmi'
|
||||
if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required
|
||||
custom_sprite = 1
|
||||
|
||||
var/display_choices = list(
|
||||
"Monochrome",
|
||||
"Blue",
|
||||
"Clown",
|
||||
"Inverted",
|
||||
"Text",
|
||||
"Smiley",
|
||||
"Angry",
|
||||
"Dorf",
|
||||
"Matrix",
|
||||
"Bliss",
|
||||
"Firewall",
|
||||
"Green",
|
||||
"Red",
|
||||
"Static",
|
||||
"Triumvirate",
|
||||
"Triumvirate Static",
|
||||
"Red October",
|
||||
"Sparkles",
|
||||
"ANIMA",
|
||||
"President",
|
||||
"NT",
|
||||
"NT2",
|
||||
"Rainbow",
|
||||
"Angel",
|
||||
"Heartline",
|
||||
"Hades",
|
||||
"Helios",
|
||||
"Syndicat Meow",
|
||||
"Too Deep",
|
||||
"Goon",
|
||||
"Murica",
|
||||
"Fuzzy",
|
||||
"Glitchman",
|
||||
"House",
|
||||
"Database"
|
||||
)
|
||||
if(custom_sprite)
|
||||
display_choices += "Custom"
|
||||
|
||||
//if(icon_state == initial(icon_state))
|
||||
var/icontype = ""
|
||||
if(custom_sprite == 1)
|
||||
icontype = ("Custom")//automagically selects custom sprite if one is available
|
||||
else
|
||||
icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Blue", "Clown", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Red October", "Sparkles", "ANIMA", "President", "NT", "NT2", "Rainbow", "Angel", "Heartline", "Hades", "Helios", "Syndicat Meow", "Too Deep", "Goon", "Murica", "Fuzzy", "Glitchman", "House", "Database")
|
||||
icontype = input("Select an icon!", "AI", null, null) in display_choices
|
||||
icon = 'icons/mob/AI.dmi' //reset this in case we were on a custom sprite and want to change to a standard one
|
||||
switch(icontype)
|
||||
if("Custom")
|
||||
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi' //set this here so we can use the custom_sprite
|
||||
icon_state = "[ckey]-ai"
|
||||
if("Clown")
|
||||
icon_state = "ai-clown"
|
||||
@@ -859,10 +896,10 @@ var/list/ai_verbs_default = list(
|
||||
for(var/i = 1 to Entry.len)
|
||||
Entry[i] = trim(Entry[i])
|
||||
|
||||
if(Entry.len < 3)
|
||||
if(Entry.len < 2 || Entry[1] != "hologram")
|
||||
continue
|
||||
|
||||
if (Entry[1] == ckey && Entry[2] == real_name && Entry[3] == "Hologram") //Custom holograms
|
||||
if (Entry[2] == ckey) //Custom holograms
|
||||
custom_hologram = 1 // option is given in hologram menu
|
||||
|
||||
var/input
|
||||
@@ -971,10 +1008,10 @@ var/list/ai_verbs_default = list(
|
||||
if("ancient machine")
|
||||
holo_icon = getHologramIcon(icon('icons/mob/ancient_machine.dmi', "ancient_machine"))
|
||||
if("custom")
|
||||
if("[ckey]-ai-holo" in icon_states('icons/mob/custom-synthetic.dmi'))
|
||||
holo_icon = getHologramIcon(icon('icons/mob/custom-synthetic.dmi', "[ckey]-ai-holo"))
|
||||
else if("[ckey]-ai-holo" in icon_states('icons/mob/custom-synthetic64.dmi'))
|
||||
holo_icon = getHologramIcon(icon('icons/mob/custom-synthetic64.dmi', "[ckey]-ai-holo"))
|
||||
if("[ckey]-ai-holo" in icon_states('icons/mob/custom_synthetic/custom-synthetic.dmi'))
|
||||
holo_icon = getHologramIcon(icon('icons/mob/custom_synthetic/custom-synthetic.dmi', "[ckey]-ai-holo"))
|
||||
else if("[ckey]-ai-holo" in icon_states('icons/mob/custom_synthetic/custom-synthetic64.dmi'))
|
||||
holo_icon = getHologramIcon(icon('icons/mob/custom_synthetic/custom-synthetic64.dmi', "[ckey]-ai-holo"))
|
||||
else
|
||||
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1"))
|
||||
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
var/translator_on = 0 // keeps track of the translator module
|
||||
|
||||
var/current_pda_messaging = null
|
||||
var/custom_sprite = 0
|
||||
|
||||
/mob/living/silicon/pai/New(var/obj/item/device/paicard)
|
||||
loc = paicard
|
||||
@@ -394,17 +395,47 @@
|
||||
set category = "pAI Commands"
|
||||
set name = "Choose Chassis"
|
||||
|
||||
var/list/my_choices = list()
|
||||
var/choice
|
||||
var/finalized = "No"
|
||||
|
||||
//check for custom_sprite
|
||||
if(!custom_sprite)
|
||||
var/file = file2text("config/custom_sprites.txt")
|
||||
var/lines = splittext(file, "\n")
|
||||
|
||||
for(var/line in lines)
|
||||
// split & clean up
|
||||
var/list/Entry = splittext(line, ":")
|
||||
for(var/i = 1 to Entry.len)
|
||||
Entry[i] = trim(Entry[i])
|
||||
|
||||
if(Entry.len < 2 || Entry[1] != "pai") //ignore incorrectly formatted entries or entries that aren't marked for pAI
|
||||
continue
|
||||
|
||||
if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required
|
||||
custom_sprite = 1
|
||||
my_choices["Custom"] = "[ckey]-pai"
|
||||
|
||||
my_choices = possible_chassis.Copy()
|
||||
if(custom_sprite)
|
||||
my_choices["Custom"] = "[ckey]-pai"
|
||||
|
||||
if(loc == card) //don't let them continue in card form, since they won't be able to actually see their new mobile form sprite.
|
||||
to_chat(src, "<span class='warning'>You must be in your mobile form to reconfigure your chassis.</span>")
|
||||
return
|
||||
|
||||
while(finalized == "No" && client)
|
||||
|
||||
choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in possible_chassis
|
||||
choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in my_choices
|
||||
if(!choice) return
|
||||
|
||||
icon_state = possible_chassis[choice]
|
||||
if(choice == "Custom")
|
||||
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
|
||||
else
|
||||
icon = 'icons/mob/pai.dmi'
|
||||
icon_state = my_choices[choice]
|
||||
finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes")
|
||||
|
||||
chassis = possible_chassis[choice]
|
||||
chassis = my_choices[choice]
|
||||
verbs -= /mob/living/silicon/pai/proc/choose_chassis
|
||||
|
||||
/mob/living/silicon/pai/proc/choose_verbs()
|
||||
@@ -562,15 +593,23 @@
|
||||
// Handle being picked up.
|
||||
|
||||
|
||||
/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber)
|
||||
/mob/living/silicon/pai/get_scooped(mob/living/carbon/grabber)
|
||||
var/obj/item/weapon/holder/H = ..()
|
||||
if(!istype(H))
|
||||
return
|
||||
if(resting)
|
||||
icon_state = "[chassis]"
|
||||
resting = 0
|
||||
H.icon_state = "pai-[icon_state]"
|
||||
H.item_state = "pai-[icon_state]"
|
||||
if(custom_sprite)
|
||||
H.icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
|
||||
H.icon_override = 'icons/mob/custom_synthetic/custom_head.dmi'
|
||||
H.lefthand_file = 'icons/mob/custom_synthetic/custom_lefthand.dmi'
|
||||
H.righthand_file = 'icons/mob/custom_synthetic/custom_righthand.dmi'
|
||||
H.icon_state = "[icon_state]"
|
||||
H.item_state = "[icon_state]_hand"
|
||||
else
|
||||
H.icon_state = "pai-[icon_state]"
|
||||
H.item_state = "pai-[icon_state]"
|
||||
grabber.put_in_active_hand(H)//for some reason unless i call this it dosen't work
|
||||
grabber.update_inv_l_hand()
|
||||
grabber.update_inv_r_hand()
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
|
||||
if(!player) return
|
||||
|
||||
src.ckey = player.ckey
|
||||
ckey = player.ckey
|
||||
|
||||
if(player.mob && player.mob.mind)
|
||||
player.mob.mind.transfer_to(src)
|
||||
|
||||
@@ -47,4 +47,55 @@
|
||||
if(M.a_intent == I_HELP)
|
||||
get_scooped(M)
|
||||
|
||||
..()
|
||||
..()
|
||||
|
||||
/mob/living/silicon/robot/drone/verb/customize()
|
||||
set name = "Customize Chassis"
|
||||
set desc = "Reconfigure your chassis into a customized version."
|
||||
set category = "Drone"
|
||||
|
||||
if(!custom_sprite) //Check to see if custom sprite time, checking the appopriate file to change a var
|
||||
var/file = file2text("config/custom_sprites.txt")
|
||||
var/lines = splittext(file, "\n")
|
||||
|
||||
for(var/line in lines)
|
||||
// split & clean up
|
||||
var/list/Entry = splittext(line, ":")
|
||||
for(var/i = 1 to Entry.len)
|
||||
Entry[i] = trim(Entry[i])
|
||||
|
||||
if(Entry.len < 2 || Entry[1] != "drone")
|
||||
continue
|
||||
|
||||
if (Entry[2] == ckey) //Custom holograms
|
||||
custom_sprite = 1 // option is given in hologram menu
|
||||
|
||||
if(!custom_sprite)
|
||||
to_chat(src, "<span class='warning'>Error 404: Custom chassis not found. Revoking customization option.</span>")
|
||||
else
|
||||
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
|
||||
icon_state = "[ckey]-drone"
|
||||
to_chat(src, "<span class='notice'>You reconfigure your chassis and improve the station through your new aesthetics.</span>")
|
||||
verbs -= /mob/living/silicon/robot/drone/verb/customize
|
||||
|
||||
/mob/living/silicon/robot/drone/get_scooped(mob/living/carbon/grabber)
|
||||
var/obj/item/weapon/holder/H = ..()
|
||||
if(!istype(H))
|
||||
return
|
||||
if(resting)
|
||||
resting = 0
|
||||
if(custom_sprite)
|
||||
H.icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
|
||||
H.icon_override = 'icons/mob/custom_synthetic/custom_head.dmi'
|
||||
H.lefthand_file = 'icons/mob/custom_synthetic/custom_lefthand.dmi'
|
||||
H.righthand_file = 'icons/mob/custom_synthetic/custom_righthand.dmi'
|
||||
H.icon_state = "[icon_state]"
|
||||
H.item_state = "[icon_state]_hand"
|
||||
else
|
||||
H.icon_state = "drone"
|
||||
H.item_state = "drone"
|
||||
grabber.put_in_active_hand(H)//for some reason unless i call this it dosen't work
|
||||
grabber.update_inv_l_hand()
|
||||
grabber.update_inv_r_hand()
|
||||
|
||||
return H
|
||||
@@ -180,16 +180,15 @@ var/list/robot_verbs_default = list(
|
||||
|
||||
for(var/line in lines)
|
||||
// split & clean up
|
||||
var/list/Entry = splittext(line, ";")
|
||||
var/list/Entry = splittext(line, ":")
|
||||
for(var/i = 1 to Entry.len)
|
||||
Entry[i] = trim(Entry[i])
|
||||
|
||||
if(Entry.len < 2)
|
||||
continue;
|
||||
if(Entry.len < 2 || Entry[1] != "cyborg") //ignore incorrectly formatted entries or entries that aren't marked for cyborg
|
||||
continue
|
||||
|
||||
if(Entry[1] == src.ckey && Entry[2] == src.real_name) //They're in the list? Custom sprite time, var and icon change required
|
||||
if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required
|
||||
custom_sprite = 1
|
||||
icon = 'icons/mob/custom-synthetic.dmi'
|
||||
|
||||
return 1
|
||||
|
||||
@@ -252,12 +251,10 @@ var/list/robot_verbs_default = list(
|
||||
mmi = null
|
||||
if(connected_ai)
|
||||
connected_ai.connected_robots -= src
|
||||
qdel(wires)
|
||||
wires = null
|
||||
qdel(module)
|
||||
module = null
|
||||
camera = null
|
||||
cell = null
|
||||
QDEL_NULL(wires)
|
||||
QDEL_NULL(module)
|
||||
QDEL_NULL(camera)
|
||||
QDEL_NULL(cell)
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/proc/pick_module()
|
||||
@@ -1252,15 +1249,14 @@ var/list/robot_verbs_default = list(
|
||||
triesleft--
|
||||
|
||||
var/icontype
|
||||
|
||||
if(custom_sprite == 1)
|
||||
icontype = "Custom"
|
||||
triesleft = 0
|
||||
else
|
||||
lockcharge = 1 //Locks borg until it select an icon to avoid secborgs running around with a standard sprite
|
||||
icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chances." : "This is your last try."]", "Robot", null, null) in module_sprites
|
||||
lockcharge = 1 //Locks borg until it select an icon to avoid secborgs running around with a standard sprite
|
||||
icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chances." : "This is your last try."]", "Robot", null, null) in module_sprites
|
||||
|
||||
if(icontype)
|
||||
if(icontype == "Custom")
|
||||
icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi'
|
||||
else
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
icon_state = module_sprites[icontype]
|
||||
if(icontype == "Bro")
|
||||
module.module_type = "Brobot"
|
||||
|
||||
@@ -35,8 +35,7 @@
|
||||
for(var/module in modules)
|
||||
qdel(module)
|
||||
modules.Cut()
|
||||
qdel(emag)
|
||||
emag = null
|
||||
QDEL_NULL(emag)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/robot_module/proc/fix_modules()
|
||||
@@ -222,7 +221,7 @@
|
||||
/obj/item/weapon/robot_module/security/New()
|
||||
..()
|
||||
modules += new /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg(src)
|
||||
modules += new /obj/item/weapon/melee/baton/loaded/robot(src)
|
||||
modules += new /obj/item/weapon/melee/baton/loaded(src)
|
||||
modules += new /obj/item/weapon/gun/energy/disabler/cyborg(src)
|
||||
modules += new /obj/item/taperoll/police(src)
|
||||
modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src)
|
||||
|
||||
@@ -169,14 +169,11 @@
|
||||
/mob/living/simple_animal/bot/Destroy()
|
||||
if(paicard)
|
||||
ejectpai()
|
||||
qdel(Radio)
|
||||
Radio = null
|
||||
qdel(access_card)
|
||||
access_card = null
|
||||
QDEL_NULL(Radio)
|
||||
QDEL_NULL(access_card)
|
||||
if(radio_controller && bot_filter)
|
||||
radio_controller.remove_object(bot_core, control_freq)
|
||||
qdel(bot_core)
|
||||
bot_core = null
|
||||
QDEL_NULL(bot_core)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/death(gibbed)
|
||||
@@ -263,7 +260,7 @@
|
||||
interact(H)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/attack_ghost(mob/M)
|
||||
interact(M)
|
||||
|
||||
|
||||
@@ -65,12 +65,8 @@
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/Destroy()
|
||||
unload(0)
|
||||
if(wires)
|
||||
qdel(wires)
|
||||
wires = null
|
||||
if(cell)
|
||||
qdel(cell)
|
||||
cell = null
|
||||
QDEL_NULL(wires)
|
||||
QDEL_NULL(cell)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/proc/set_suffix(suffix)
|
||||
|
||||
@@ -295,8 +295,7 @@
|
||||
queen = new(src)
|
||||
|
||||
/obj/item/queen_bee/Destroy()
|
||||
qdel(queen)
|
||||
queen = null
|
||||
QDEL_NULL(queen)
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ Difficulty: Hard
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/Destroy()
|
||||
qdel(spawned_rune)
|
||||
QDEL_NULL(spawned_rune)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/devour(mob/living/L)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
mouse_opacity = 2 // Easier to click on in melee, they're giant targets anyway
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/Destroy()
|
||||
qdel(internal_gps)
|
||||
QDEL_NULL(internal_gps)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/death(gibbed)
|
||||
@@ -77,7 +77,7 @@
|
||||
OpenFire()
|
||||
else
|
||||
devour(L)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/onShuttleMove()
|
||||
var/turf/oldloc = loc
|
||||
. = ..()
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
if(collar)
|
||||
collar.forceMove(loc)
|
||||
collar = null
|
||||
master_commander = null
|
||||
simple_animal_list -= src
|
||||
return ..()
|
||||
|
||||
@@ -303,7 +304,7 @@
|
||||
|
||||
/mob/living/simple_animal/proc/attacked_by(obj/item/I, mob/living/user) // Handled in _onclick/click.dm
|
||||
return
|
||||
|
||||
|
||||
/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj)
|
||||
return
|
||||
@@ -662,15 +663,15 @@
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/can_equip(obj/item/I, slot, disable_warning = 0)
|
||||
// . = ..() // Do not call parent. We do not want animals using their hand slots.
|
||||
switch(slot)
|
||||
if(slot_collar)
|
||||
if(collar)
|
||||
return 0
|
||||
if(!can_collar)
|
||||
return 0
|
||||
if(!istype(I, /obj/item/clothing/accessory/petcollar))
|
||||
return 0
|
||||
// . = ..() // Do not call parent. We do not want animals using their hand slots.
|
||||
switch(slot)
|
||||
if(slot_collar)
|
||||
if(collar)
|
||||
return 0
|
||||
if(!can_collar)
|
||||
return 0
|
||||
if(!istype(I, /obj/item/clothing/accessory/petcollar))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/equip_to_slot(obj/item/W, slot)
|
||||
@@ -692,13 +693,13 @@
|
||||
name = collar.tagname
|
||||
real_name = collar.tagname
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/simple_animal/unEquip(obj/item/I, force)
|
||||
. = ..()
|
||||
if(!. || !I)
|
||||
return
|
||||
|
||||
if(I == collar)
|
||||
|
||||
/mob/living/simple_animal/unEquip(obj/item/I, force)
|
||||
. = ..()
|
||||
if(!. || !I)
|
||||
return
|
||||
|
||||
if(I == collar)
|
||||
collar = null
|
||||
regenerate_icons()
|
||||
|
||||
|
||||
@@ -444,8 +444,7 @@
|
||||
if(assailant.client)
|
||||
assailant.client.screen -= hud
|
||||
assailant = null
|
||||
qdel(hud)
|
||||
hud = null
|
||||
QDEL_NULL(hud)
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
@@ -41,8 +41,8 @@
|
||||
else if(eyes) //If they're not, check to see if their eyes got one of them there colour matrices. Will be null if eyes are robotic/the mob isn't colourblind and they have no default colour matrix.
|
||||
return eyes.get_colourmatrix()
|
||||
|
||||
/proc/isloyal(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them
|
||||
for(var/obj/item/weapon/implant/loyalty/L in A)
|
||||
/proc/ismindshielded(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them
|
||||
for(var/obj/item/weapon/implant/mindshield/L in A)
|
||||
if(L && L.implanted)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -559,10 +559,67 @@
|
||||
/datum/sprite_accessory/hair/unathi
|
||||
species_allowed = list("Unathi")
|
||||
glasses_over = 1
|
||||
icon = 'icons/mob/body_accessory.dmi'
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/una_horns
|
||||
name = "Unathi Horns"
|
||||
icon_state = "soghun_horns"
|
||||
/datum/sprite_accessory/hair/unathi/una_side_frills
|
||||
icon = 'icons/mob/human_face.dmi'
|
||||
name = "Unathi Side Frills"
|
||||
icon_state = "unathi_sidefrills"
|
||||
secondary_theme = "webbing"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/una_frills_dorsal
|
||||
icon = 'icons/mob/human_face.dmi'
|
||||
name = "Dorsal Frills"
|
||||
icon_state = "unathi_dorsalfrills"
|
||||
secondary_theme = "webbing"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/simple
|
||||
name = "Simple Horns"
|
||||
icon_state = "horns_simple"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/short
|
||||
name = "Short Horns"
|
||||
icon_state = "horns_short"
|
||||
|
||||
/datum/sprite_accessory/hairy/unathi/curled
|
||||
name = "Curled Horns"
|
||||
icon_state = "horns_curled"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/ram
|
||||
name = "Ram Horns"
|
||||
icon_state = "horns_ram"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/double
|
||||
name = "Double Horns"
|
||||
icon_state = "horns_drac"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/lower
|
||||
name = "Lower Horns"
|
||||
icon_state = "horns_lower"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/big
|
||||
name = "Big"
|
||||
icon_state = "horns_big"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/ram2
|
||||
name = "Ram alt."
|
||||
icon_state = "horns_ram2"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/small
|
||||
name = "Small"
|
||||
icon_state = "horns_small"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/chin
|
||||
name = "Chin"
|
||||
icon_state = "horns_chin"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/adorns
|
||||
name = "Adorns"
|
||||
icon_state = "horns_adorns"
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/spikes
|
||||
name = "Spikes"
|
||||
icon_state = "horns_spikes"
|
||||
|
||||
/datum/sprite_accessory/hair/skrell
|
||||
species_allowed = list("Skrell")
|
||||
@@ -747,6 +804,20 @@
|
||||
icon_state = "braided"
|
||||
secondary_theme = "beads"
|
||||
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_punkbraided
|
||||
name = "Punk Braided"
|
||||
icon_state = "punkbraided"
|
||||
secondary_theme = "flare"
|
||||
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_short2
|
||||
name = "Short Alt."
|
||||
icon_state = "short2"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_rough
|
||||
name = "Rough-Cropped Mane"
|
||||
icon_state = "rough"
|
||||
|
||||
/datum/sprite_accessory/hair/vox
|
||||
species_allowed = list("Vox")
|
||||
glasses_over = 1
|
||||
@@ -984,6 +1055,10 @@
|
||||
name = "Tajara Goatee"
|
||||
icon_state = "facial_goatee"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/tajara/taj_goatee_faded
|
||||
name = "Tajara Faded Goatee"
|
||||
icon_state = "facial_goatee_faded"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/tajara/taj_smallstache
|
||||
name = "Tajara Smallstache"
|
||||
icon_state = "facial_smallstache"
|
||||
@@ -1048,6 +1123,15 @@
|
||||
name = "Swift"
|
||||
icon_state = "vulp_facial_swift"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/vulpkanin/vulp_elder
|
||||
name = "Elder"
|
||||
icon_state = "vulp_facial_elder"
|
||||
secondary_theme = "chin"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/vulpkanin/vulp_slash
|
||||
name = "Slash"
|
||||
icon_state = "vulp_facial_slash"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi
|
||||
species_allowed = list("Unathi")
|
||||
gender = NEUTER
|
||||
@@ -1055,39 +1139,74 @@
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_spines_long
|
||||
name = "Long Spines"
|
||||
icon_state = "soghun_longspines"
|
||||
icon_state = "unathi_longspines"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_spines_short
|
||||
name = "Short Spines"
|
||||
icon_state = "soghun_shortspines"
|
||||
icon_state = "unathi_shortspines"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_aquaspine
|
||||
name = "Spiny Aquatic Frills"
|
||||
icon_state = "unathi_dracfrills"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_aquatic
|
||||
name = "Aquatic Frills"
|
||||
icon_state = "soghun_aquaticfrills"
|
||||
icon_state = "unathi_aquaticfrills"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_long
|
||||
name = "Long Frills"
|
||||
icon_state = "soghun_longfrills"
|
||||
icon_state = "unathi_longfrills"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_short
|
||||
name = "Short Frills"
|
||||
icon_state = "soghun_shortfrills"
|
||||
icon_state = "unathi_shortfrills"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_aquaspine
|
||||
name = "Spiny Aquatic Webbed Frills"
|
||||
icon_state = "unathi_dracfrills"
|
||||
secondary_theme = "webbing"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_aquatic
|
||||
name = "Aquatic Webbed Frills"
|
||||
icon_state = "soghun_aquaticfrills"
|
||||
icon_state = "unathi_aquaticfrills"
|
||||
secondary_theme = "webbing"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_long
|
||||
name = "Long Webbed Frills"
|
||||
icon_state = "soghun_longfrills"
|
||||
icon_state = "unathi_longfrills"
|
||||
secondary_theme = "webbing"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_short
|
||||
name = "Short Webbed Frills"
|
||||
icon_state = "soghun_shortfrills"
|
||||
icon_state = "unathi_shortfrills"
|
||||
secondary_theme = "webbing"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_side_frills
|
||||
name = "Side Frills"
|
||||
icon_state = "unathi_sidefrills"
|
||||
secondary_theme = "webbing"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_frills_dorsal
|
||||
over_hair = null
|
||||
name = "Dorsal Frills"
|
||||
icon_state = "unathi_dorsalfrills"
|
||||
secondary_theme = "webbing"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_chin_horns
|
||||
name = "Chin Horns"
|
||||
icon = 'icons/mob/body_accessory.dmi'
|
||||
icon_state = "horns_chin"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_horn_adorns
|
||||
name = "Horn Adorns"
|
||||
icon = 'icons/mob/body_accessory.dmi'
|
||||
icon_state = "horns_adorns"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_spikes
|
||||
name = "Spikes"
|
||||
icon = 'icons/mob/body_accessory.dmi'
|
||||
icon_state = "horns_spikes"
|
||||
|
||||
//skin styles - WIP
|
||||
//going to have to re-integrate this with surgery
|
||||
//let the icon_state hold an icon preview for now
|
||||
@@ -1649,6 +1768,38 @@
|
||||
name = "Ram"
|
||||
icon_state = "horns_ram"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/double
|
||||
name = "Double"
|
||||
icon_state = "horns_drac"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/lower
|
||||
name = "Lower"
|
||||
icon_state = "horns_lower"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/big
|
||||
name = "Big"
|
||||
icon_state = "horns_big"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/ram2
|
||||
name = "Ram alt."
|
||||
icon_state = "horns_ram2"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/small
|
||||
name = "Small"
|
||||
icon_state = "horns_small"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/chin
|
||||
name = "Chin"
|
||||
icon_state = "horns_chin"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/adorns
|
||||
name = "Adorns"
|
||||
icon_state = "horns_adorns"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/spikes
|
||||
name = "Spikes"
|
||||
icon_state = "horns_spikes"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/tajara
|
||||
species_allowed = list("Tajaran")
|
||||
|
||||
@@ -1729,6 +1880,20 @@
|
||||
name = "Vulpkanin Nose"
|
||||
icon_state = "markings_face_nose_vulp"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/vulpkanin/vulp_nose2
|
||||
name = "Vulpkanin Nose Alt."
|
||||
icon_state = "markings_face_nose2_vulp"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/vulpkanin/vulp_elder
|
||||
icon = 'icons/mob/human_face.dmi'
|
||||
name = "Elder"
|
||||
icon_state = "vulp_facial_elder"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/vulpkanin/vulp_slash
|
||||
icon = 'icons/mob/human_face.dmi'
|
||||
name = "Slash"
|
||||
icon_state = "vulp_facial_slash"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/ipc
|
||||
species_allowed = list("Machine")
|
||||
over_hair = 1
|
||||
@@ -1749,11 +1914,31 @@
|
||||
name = "Head Light"
|
||||
icon_state = "light"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/ipc/ipc_side_lights
|
||||
name = "Side Lights"
|
||||
icon_state = "sidelights"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/ipc/ipc_side_cyber_head
|
||||
name = "Cyber Pipes"
|
||||
icon_state = "cyberhead"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/ipc/ipc_side_antlers
|
||||
name = "Antlers"
|
||||
icon_state = "antlers"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/ipc/ipc_side_drone_eyes
|
||||
name = "Drone Eyes"
|
||||
icon_state = "droneeyes"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/ipc/ipc_crowned
|
||||
name = "Crowned"
|
||||
icon_state = "crowned"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/kidan
|
||||
icon = 'icons/mob/human_face.dmi'
|
||||
species_allowed = list("Kidan")
|
||||
over_hair = 1
|
||||
do_colouration = 0
|
||||
do_colouration = 1
|
||||
|
||||
/datum/sprite_accessory/head_accessory/kidan/perked_antennae
|
||||
name = "Perked-up Antennae"
|
||||
@@ -1956,6 +2141,10 @@
|
||||
name = "Vulpkanin Nose"
|
||||
icon_state = "markings_face_nose_vulp"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/vulpkanin/nose2_default_vulp
|
||||
name = "Vulpkanin Nose Alt."
|
||||
icon_state = "markings_face_nose2_vulp"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/vulpkanin/muzzle_vulp //Companion marking for Vulpkanin Belly Alt..
|
||||
name = "Vulpkanin Muzzle"
|
||||
icon_state = "markings_face_full_vulp"
|
||||
|
||||
@@ -41,9 +41,7 @@ var/list/global_modular_computers = list()
|
||||
global_modular_computers.Add(src)
|
||||
|
||||
/obj/machinery/modular_computer/Destroy()
|
||||
if(cpu)
|
||||
qdel(cpu)
|
||||
cpu = null
|
||||
QDEL_NULL(cpu)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/modular_computer/attack_ghost(mob/dead/observer/user)
|
||||
|
||||
@@ -23,7 +23,7 @@ var/global/file_uid = 0
|
||||
if(holder.holder && holder.holder.active_program == src)
|
||||
holder.holder.kill_program(forced = TRUE)
|
||||
holder = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
// Returns independent copy of this file.
|
||||
/datum/computer_file/proc/clone(rename = 0)
|
||||
|
||||
@@ -16,11 +16,10 @@
|
||||
AH.register(src, /datum/computer_file/program/alarm_monitor/proc/update_icon)
|
||||
|
||||
/datum/computer_file/program/alarm_monitor/Destroy()
|
||||
..()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
AH.unregister(src)
|
||||
qdel(alarm_handlers)
|
||||
alarm_handlers = null
|
||||
QDEL_NULL(alarm_handlers)
|
||||
return ..()
|
||||
|
||||
/datum/computer_file/program/alarm_monitor/proc/update_icon()
|
||||
for(var/datum/alarm_handler/AH in alarm_handlers)
|
||||
|
||||
@@ -11,9 +11,7 @@
|
||||
var/locked = FALSE
|
||||
|
||||
/obj/item/weapon/computer_hardware/ai_slot/Destroy()
|
||||
if(stored_card)
|
||||
qdel(stored_card)
|
||||
stored_card = null
|
||||
QDEL_NULL(stored_card)
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
@@ -14,9 +14,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/computer_hardware/battery/Destroy()
|
||||
if(battery)
|
||||
qdel(battery)
|
||||
battery = null
|
||||
QDEL_NULL(battery)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/computer_hardware/battery/on_remove(obj/item/device/modular_computer/M, mob/living/user = null)
|
||||
|
||||
@@ -11,12 +11,8 @@
|
||||
var/obj/item/weapon/card/id/stored_card2 = null
|
||||
|
||||
/obj/item/weapon/computer_hardware/card_slot/Destroy()
|
||||
if(stored_card)
|
||||
qdel(stored_card)
|
||||
stored_card = null
|
||||
if(stored_card2)
|
||||
qdel(stored_card2)
|
||||
stored_card2 = null
|
||||
QDEL_NULL(stored_card)
|
||||
QDEL_NULL(stored_card2)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/computer_hardware/card_slot/GetAccess()
|
||||
|
||||
@@ -74,6 +74,5 @@
|
||||
spark_system.attach(src)
|
||||
|
||||
/obj/item/weapon/katana/energy/Destroy()
|
||||
qdel(spark_system)
|
||||
spark_system = null
|
||||
QDEL_NULL(spark_system)
|
||||
return ..()
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
|
||||
usesound = 'sound/items/Deconstruct.ogg'
|
||||
|
||||
|
||||
var/icon_base
|
||||
var/obj/displayed
|
||||
|
||||
@@ -198,9 +198,7 @@
|
||||
verbs |= /obj/structure/sign/picture_frame/proc/tilt
|
||||
|
||||
/obj/structure/sign/picture_frame/Destroy()
|
||||
if(frame)
|
||||
qdel(frame)
|
||||
frame = null
|
||||
QDEL_NULL(frame)
|
||||
return ..()
|
||||
|
||||
/obj/structure/sign/picture_frame/update_icon()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
w_class = 2
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 5
|
||||
var/blueprints = 0 // Does this have the blueprints?
|
||||
var/icon/img //Big photo image
|
||||
var/scribble //Scribble on the back.
|
||||
var/icon/tiny
|
||||
@@ -151,6 +152,7 @@
|
||||
var/pictures_max = 10
|
||||
var/pictures_left = 10
|
||||
var/on = 1
|
||||
var/blueprints = 0
|
||||
var/icon_on = "camera"
|
||||
var/icon_off = "camera_off"
|
||||
var/size = 3
|
||||
@@ -253,6 +255,8 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s
|
||||
var/atom/A = sorted[i]
|
||||
if(A)
|
||||
var/icon/img = getFlatIcon(A)//build_composite_icon(A)
|
||||
if(istype(A, /obj/item/areaeditor/blueprints))
|
||||
blueprints = 1
|
||||
|
||||
// If what we got back is actually a picture, draw it.
|
||||
if(istype(img, /icon))
|
||||
@@ -351,7 +355,7 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s
|
||||
y_c--
|
||||
x_c = x_c - size
|
||||
|
||||
var/datum/picture/P = createpicture(target, user, turfs, mobs, flag)
|
||||
var/datum/picture/P = createpicture(target, user, turfs, mobs, flag, blueprints)
|
||||
printpicture(user, P)
|
||||
|
||||
/obj/item/device/camera/proc/createpicture(atom/target, mob/user, list/turfs, mobs, flag)
|
||||
@@ -388,6 +392,10 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s
|
||||
Photo.loc = user.loc
|
||||
if(!user.get_inactive_hand())
|
||||
user.put_in_inactive_hand(Photo)
|
||||
|
||||
if(blueprints)
|
||||
Photo.blueprints = 1
|
||||
blueprints = 0
|
||||
Photo.construct(P)
|
||||
|
||||
/obj/item/weapon/photo/proc/construct(var/datum/picture/P)
|
||||
@@ -409,6 +417,7 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s
|
||||
p.name = name
|
||||
p.desc = desc
|
||||
p.scribble = scribble
|
||||
p.blueprints = blueprints
|
||||
|
||||
return p
|
||||
|
||||
|
||||
@@ -440,7 +440,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
scanmode.scan_atom(A, user)
|
||||
|
||||
/obj/item/device/pda/proc/explode() //This needs tuning.
|
||||
if(!detonate)
|
||||
if(!detonate)
|
||||
return
|
||||
var/turf/T = get_turf(src.loc)
|
||||
|
||||
@@ -467,9 +467,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
for(var/A in programs)
|
||||
qdel(A)
|
||||
programs.Cut()
|
||||
if(cartridge)
|
||||
qdel(cartridge)
|
||||
cartridge = null
|
||||
QDEL_NULL(cartridge)
|
||||
return ..()
|
||||
|
||||
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
|
||||
|
||||
@@ -24,9 +24,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/cartridge/Destroy()
|
||||
if(radio)
|
||||
qdel(radio)
|
||||
radio = null
|
||||
QDEL_NULL(radio)
|
||||
for(var/A in programs)
|
||||
qdel(A)
|
||||
programs.Cut()
|
||||
|
||||
@@ -78,6 +78,7 @@ var/list/chatrooms = list(new /datum/chatroom("General Discussion"))
|
||||
ch.users -= src
|
||||
if(src in ch.invites)
|
||||
ch.invites -= src
|
||||
return ..()
|
||||
|
||||
/datum/data/pda/app/chatroom/start()
|
||||
. = ..()
|
||||
|
||||
@@ -90,7 +90,6 @@
|
||||
var/update_overlay = -1
|
||||
var/global/status_overlays = 0
|
||||
var/updating_icon = 0
|
||||
var/standard_max_charge
|
||||
var/datum/wires/apc/wires = null
|
||||
//var/debug = 0
|
||||
var/global/list/status_overlays_lock
|
||||
@@ -142,9 +141,6 @@
|
||||
apcs += src
|
||||
apcs = sortAtom(apcs)
|
||||
wires = new(src)
|
||||
var/tmp/obj/item/weapon/stock_parts/cell/tmp_cell = new
|
||||
standard_max_charge = tmp_cell.maxcharge
|
||||
qdel(tmp_cell)
|
||||
|
||||
// offset 24 pixels in direction of dir
|
||||
// this allows the APC to be embedded in a wall, yet still inside an area
|
||||
@@ -178,11 +174,8 @@
|
||||
area.power_change()
|
||||
if(occupier)
|
||||
malfvacate(1)
|
||||
qdel(wires)
|
||||
wires = null
|
||||
if(cell)
|
||||
qdel(cell) // qdel
|
||||
cell = null
|
||||
QDEL_NULL(wires)
|
||||
QDEL_NULL(cell)
|
||||
if(terminal)
|
||||
disconnect_terminal()
|
||||
area.apc -= src
|
||||
@@ -201,7 +194,7 @@
|
||||
if(cell_type)
|
||||
src.cell = new/obj/item/weapon/stock_parts/cell(src)
|
||||
cell.maxcharge = cell_type // cell_type is maximum charge (old default was 1000 or 2500 (values one and two respectively)
|
||||
cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value)
|
||||
cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value)
|
||||
|
||||
var/area/A = get_area(src)
|
||||
|
||||
|
||||
@@ -5,24 +5,25 @@
|
||||
return 100.0*charge/maxcharge
|
||||
|
||||
// use power from a cell
|
||||
/obj/item/weapon/stock_parts/cell/proc/use(var/amount)
|
||||
/obj/item/weapon/stock_parts/cell/proc/use(amount)
|
||||
if(rigged && amount > 0)
|
||||
explode()
|
||||
return 0
|
||||
|
||||
if(charge < amount) return 0
|
||||
if(charge < amount)
|
||||
return 0
|
||||
charge = (charge - amount)
|
||||
return 1
|
||||
|
||||
// recharge the cell
|
||||
/obj/item/weapon/stock_parts/cell/proc/give(var/amount)
|
||||
/obj/item/weapon/stock_parts/cell/proc/give(amount)
|
||||
if(rigged && amount > 0)
|
||||
explode()
|
||||
return 0
|
||||
|
||||
if(maxcharge < amount) return 0
|
||||
if(maxcharge < amount)
|
||||
return 0
|
||||
var/power_used = min(maxcharge-charge,amount)
|
||||
if(crit_fail) return 0
|
||||
if(crit_fail)
|
||||
return 0
|
||||
if(!prob(reliability))
|
||||
minor_fault++
|
||||
if(prob(minor_fault))
|
||||
@@ -31,7 +32,6 @@
|
||||
charge += power_used
|
||||
return power_used
|
||||
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/examine(mob/user)
|
||||
if(..(user, 1))
|
||||
if(maxcharge <= 2500)
|
||||
|
||||
@@ -52,8 +52,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
|
||||
/obj/machinery/gravity_generator/part/Destroy()
|
||||
set_broken()
|
||||
if(main_part)
|
||||
qdel(main_part)
|
||||
QDEL_NULL(main_part)
|
||||
return ..()
|
||||
|
||||
//
|
||||
|
||||
@@ -30,8 +30,7 @@
|
||||
/obj/machinery/particle_accelerator/control_box/Destroy()
|
||||
if(active)
|
||||
toggle_power()
|
||||
qdel(wires)
|
||||
wires = null
|
||||
QDEL_NULL(wires)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/attack_ghost(user as mob)
|
||||
|
||||
@@ -72,9 +72,7 @@
|
||||
|
||||
/obj/machinery/power/supermatter_shard/Destroy()
|
||||
investigate_log("has been destroyed.", "supermatter")
|
||||
if(radio)
|
||||
qdel(radio)
|
||||
radio = null
|
||||
QDEL_NULL(radio)
|
||||
poi_list.Remove(src)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "The part of the gun that makes the laser go pew"
|
||||
caliber = "energy"
|
||||
projectile_type = /obj/item/projectile/energy
|
||||
var/e_cost = 1000 //The amount of energy a cell needs to expend to create this shot.
|
||||
var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot.
|
||||
var/select_name = "energy"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
@@ -13,10 +13,11 @@
|
||||
|
||||
/obj/item/ammo_casing/energy/lasergun
|
||||
projectile_type = /obj/item/projectile/beam/laser
|
||||
e_cost = 830
|
||||
e_cost = 83
|
||||
select_name = "kill"
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/hos //allows balancing of HoS and blueshit guns seperately from other energy weapons
|
||||
e_cost = 100
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/practice
|
||||
projectile_type = /obj/item/projectile/beam/practice
|
||||
@@ -35,13 +36,13 @@
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/pulse
|
||||
projectile_type = /obj/item/projectile/beam/pulse
|
||||
e_cost = 2000
|
||||
e_cost = 200
|
||||
select_name = "DESTROY"
|
||||
fire_sound = 'sound/weapons/pulse.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/scatter/pulse
|
||||
projectile_type = /obj/item/projectile/beam/pulse
|
||||
e_cost = 2000
|
||||
e_cost = 200
|
||||
select_name = "ANNIHILATE"
|
||||
fire_sound = 'sound/weapons/pulse.ogg'
|
||||
|
||||
@@ -55,26 +56,27 @@
|
||||
|
||||
/obj/item/ammo_casing/energy/xray
|
||||
projectile_type = /obj/item/projectile/beam/xray
|
||||
e_cost = 500
|
||||
e_cost = 50
|
||||
fire_sound = 'sound/weapons/laser3.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/immolator
|
||||
projectile_type = /obj/item/projectile/beam/immolator
|
||||
fire_sound = 'sound/weapons/laser3.ogg'
|
||||
e_cost = 1250
|
||||
e_cost = 125
|
||||
|
||||
/obj/item/ammo_casing/energy/electrode
|
||||
projectile_type = /obj/item/projectile/energy/electrode
|
||||
select_name = "stun"
|
||||
fire_sound = 'sound/weapons/taser.ogg'
|
||||
e_cost = 2000
|
||||
e_cost = 200
|
||||
delay = 15
|
||||
|
||||
/obj/item/ammo_casing/energy/electrode/gun
|
||||
fire_sound = 'sound/weapons/gunshot.ogg'
|
||||
e_cost = 1000
|
||||
e_cost = 100
|
||||
|
||||
/obj/item/ammo_casing/energy/electrode/hos //allows balancing of HoS and blueshit guns seperately from other energy weapons
|
||||
e_cost = 200
|
||||
|
||||
/obj/item/ammo_casing/energy/ion
|
||||
projectile_type = /obj/item/projectile/ion
|
||||
@@ -121,7 +123,7 @@
|
||||
/obj/item/ammo_casing/energy/disabler
|
||||
projectile_type = /obj/item/projectile/beam/disabler
|
||||
select_name = "disable"
|
||||
e_cost = 500
|
||||
e_cost = 50
|
||||
fire_sound = 'sound/weapons/taser2.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/plasma
|
||||
@@ -129,12 +131,12 @@
|
||||
select_name = "plasma burst"
|
||||
fire_sound = 'sound/weapons/plasma_cutter.ogg'
|
||||
delay = 15
|
||||
e_cost = 250
|
||||
e_cost = 25
|
||||
|
||||
/obj/item/ammo_casing/energy/plasma/adv
|
||||
projectile_type = /obj/item/projectile/plasma/adv
|
||||
delay = 10
|
||||
e_cost = 100
|
||||
e_cost = 10
|
||||
|
||||
/obj/item/ammo_casing/energy/wormhole
|
||||
projectile_type = /obj/item/projectile/beam/wormhole
|
||||
@@ -153,7 +155,7 @@
|
||||
/obj/item/ammo_casing/energy/bolt
|
||||
projectile_type = /obj/item/projectile/energy/bolt
|
||||
select_name = "bolt"
|
||||
e_cost = 5000
|
||||
e_cost = 500
|
||||
fire_sound = 'sound/weapons/Genhit.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/bolt/large
|
||||
@@ -163,7 +165,7 @@
|
||||
/obj/item/ammo_casing/energy/dart
|
||||
projectile_type = /obj/item/projectile/energy/dart
|
||||
fire_sound = 'sound/weapons/Genhit.ogg'
|
||||
e_cost = 5000
|
||||
e_cost = 500
|
||||
select_name = "toxic dart"
|
||||
|
||||
/obj/item/ammo_casing/energy/instakill
|
||||
@@ -187,7 +189,7 @@
|
||||
|
||||
/obj/item/ammo_casing/energy/shock_revolver
|
||||
fire_sound = 'sound/magic/lightningbolt.ogg'
|
||||
e_cost = 2000
|
||||
e_cost = 200
|
||||
select_name = "lightning beam"
|
||||
projectile_type = /obj/item/projectile/energy/shock_revolver
|
||||
|
||||
@@ -210,7 +212,7 @@
|
||||
/obj/item/ammo_casing/energy/teleport
|
||||
projectile_type = /obj/item/projectile/energy/teleport
|
||||
fire_sound = 'sound/weapons/wave.ogg'
|
||||
e_cost = 1250
|
||||
e_cost = 250
|
||||
select_name = "teleport beam"
|
||||
var/teleport_target
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/obj/item/ammo_casing/magic/chaos
|
||||
projectile_type = /obj/item/projectile/magic
|
||||
|
||||
|
||||
/obj/item/ammo_casing/magic/spellblade
|
||||
projectile_type = /obj/item/projectile/magic/spellblade
|
||||
|
||||
@@ -49,4 +49,4 @@
|
||||
projectile_type = /obj/item/projectile/bullet/midbullet3
|
||||
select_name = "spraydown"
|
||||
fire_sound = 'sound/weapons/gunshot_smg.ogg'
|
||||
e_cost = 200
|
||||
e_cost = 20
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
if(selfcharge)
|
||||
processing_objects.Add(src)
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/proc/update_ammo_types()
|
||||
var/obj/item/ammo_casing/energy/shot
|
||||
for(var/i = 1, i <= ammo_type.len, i++)
|
||||
@@ -61,9 +61,9 @@
|
||||
var/obj/item/ammo_casing/energy/E = ammo_type[select]
|
||||
if(use_external_power)
|
||||
var/obj/item/weapon/stock_parts/cell/external = get_external_power_supply()
|
||||
if(!external || !external.use((E.e_cost)/10)) //Take power from the borg...
|
||||
if(!external || !external.use(E.e_cost)) //Take power from the borg...
|
||||
return //Note, uses /10 because of shitty mods to the cell system
|
||||
power_supply.give(1000) //... to recharge the shot
|
||||
power_supply.give(100) //... to recharge the shot
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/energy/attack_self(mob/living/user as mob)
|
||||
@@ -176,7 +176,7 @@
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(R && R.cell)
|
||||
var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot
|
||||
if(R.cell.use(shot.e_cost/10)) //Take power from the borg... //Divided by 10 because cells and charge costs are fucked.
|
||||
if(R.cell.use(shot.e_cost)) //Take power from the borg...
|
||||
power_supply.give(shot.e_cost) //... to recharge the shot
|
||||
|
||||
/obj/item/weapon/gun/energy/proc/get_external_power_supply()
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
empty()
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty()
|
||||
power_supply.use(5000)
|
||||
power_supply.use(500)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload()
|
||||
@@ -120,7 +120,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload()
|
||||
power_supply.give(5000)
|
||||
power_supply.give(500)
|
||||
if(!suppressed)
|
||||
playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
|
||||
else if(isliving(loc))
|
||||
@@ -144,7 +144,7 @@
|
||||
/obj/item/ammo_casing/energy/kinetic
|
||||
projectile_type = /obj/item/projectile/kinetic
|
||||
select_name = "kinetic"
|
||||
e_cost = 5000
|
||||
e_cost = 500
|
||||
fire_sound = 'sound/weapons/Kenetic_accel.ogg' // fine spelling there chap
|
||||
|
||||
/obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
@@ -181,7 +181,7 @@
|
||||
|
||||
/obj/item/projectile/kinetic/pod
|
||||
range = 4
|
||||
|
||||
|
||||
/obj/item/projectile/kinetic/pod/regular
|
||||
damage = 50
|
||||
pressure_decrease = 0.5
|
||||
|
||||
@@ -39,8 +39,8 @@
|
||||
/obj/item/weapon/gun/energy/gun/mini/New()
|
||||
gun_light = new /obj/item/device/flashlight/seclite(src)
|
||||
..()
|
||||
power_supply.maxcharge = 6000
|
||||
power_supply.charge = 6000
|
||||
power_supply.maxcharge = 600
|
||||
power_supply.charge = 600
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/mini/update_icon()
|
||||
..()
|
||||
|
||||
@@ -157,11 +157,11 @@
|
||||
if(istype(A, /obj/item/stack/sheet/mineral/plasma))
|
||||
var/obj/item/stack/sheet/S = A
|
||||
S.use(1)
|
||||
power_supply.give(10000)
|
||||
power_supply.give(1000)
|
||||
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
||||
else if(istype(A, /obj/item/weapon/ore/plasma))
|
||||
qdel(A)
|
||||
power_supply.give(5000)
|
||||
power_supply.give(500)
|
||||
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
||||
else
|
||||
..()
|
||||
@@ -308,12 +308,10 @@
|
||||
desc = "A gun that changes the body temperature of its targets."
|
||||
var/temperature = 300
|
||||
var/target_temperature = 300
|
||||
var/e_cost = 1000
|
||||
origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2"
|
||||
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/temp)
|
||||
selfcharge = 1
|
||||
cell_type = /obj/item/weapon/stock_parts/cell
|
||||
|
||||
var/powercost = ""
|
||||
var/powercostcolor = ""
|
||||
@@ -369,19 +367,19 @@
|
||||
T.temp = temperature
|
||||
switch(temperature)
|
||||
if(0 to 100)
|
||||
T.e_cost = 3000
|
||||
T.e_cost = 300
|
||||
powercost = "High"
|
||||
if(100 to 250)
|
||||
T.e_cost = 2000
|
||||
T.e_cost = 200
|
||||
powercost = "Medium"
|
||||
if(251 to 300)
|
||||
T.e_cost = 1000
|
||||
T.e_cost = 100
|
||||
powercost = "Low"
|
||||
if(301 to 400)
|
||||
T.e_cost = 2000
|
||||
T.e_cost = 200
|
||||
powercost = "Medium"
|
||||
if(401 to 1000)
|
||||
T.e_cost = 3000
|
||||
T.e_cost = 300
|
||||
powercost = "High"
|
||||
switch(powercost)
|
||||
if("High")
|
||||
@@ -471,16 +469,16 @@
|
||||
/obj/item/weapon/gun/energy/temperature/proc/update_charge()
|
||||
var/charge = power_supply.charge
|
||||
switch(charge)
|
||||
if(9000 to INFINITY) overlays += "900"
|
||||
if(8000 to 9000) overlays += "800"
|
||||
if(7000 to 8000) overlays += "700"
|
||||
if(6000 to 7000) overlays += "600"
|
||||
if(5000 to 6000) overlays += "500"
|
||||
if(4000 to 5000) overlays += "400"
|
||||
if(3000 to 4000) overlays += "300"
|
||||
if(2000 to 3000) overlays += "200"
|
||||
if(1000 to 2002) overlays += "100"
|
||||
if(-INFINITY to 1000) overlays += "0"
|
||||
if(900 to INFINITY) overlays += "900"
|
||||
if(800 to 900) overlays += "800"
|
||||
if(700 to 800) overlays += "700"
|
||||
if(600 to 700) overlays += "600"
|
||||
if(500 to 600) overlays += "500"
|
||||
if(400 to 500) overlays += "400"
|
||||
if(300 to 400) overlays += "300"
|
||||
if(200 to 300) overlays += "200"
|
||||
if(100 to 202) overlays += "100"
|
||||
if(-INFINITY to 100) overlays += "0"
|
||||
|
||||
/obj/item/weapon/gun/energy/mimicgun
|
||||
name = "mimic gun"
|
||||
|
||||
@@ -5,23 +5,12 @@
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/electrode)
|
||||
ammo_x_offset = 3
|
||||
cell_type = /obj/item/weapon/stock_parts/cell/crap
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/mounted
|
||||
name = "mounted taser gun"
|
||||
selfcharge = 1
|
||||
use_external_power = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/cyborg
|
||||
name = "taser gun"
|
||||
desc = "A small, low capacity gun used for non-lethal takedowns."
|
||||
icon_state = "taser"
|
||||
cell_type = /obj/item/weapon/stock_parts/cell/secborg
|
||||
|
||||
/obj/item/weapon/gun/energy/disabler/cyborg/newshot()
|
||||
..()
|
||||
robocharge()
|
||||
|
||||
/obj/item/weapon/gun/energy/shock_revolver
|
||||
name = "tesla revolver"
|
||||
desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
icon_state = "telegun"
|
||||
item_state = "ionrifle"
|
||||
origin_tech = "combat=6;materials=7;powerstorage=5;bluespace=5;syndicate=4"
|
||||
cell_type = /obj/item/weapon/stock_parts/cell/crap
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/teleport)
|
||||
shaded_charge = 1
|
||||
var/teleport_target = null
|
||||
|
||||
@@ -36,8 +36,7 @@
|
||||
notify_ammo_count(user)
|
||||
|
||||
/obj/item/weapon/gun/throw/Destroy()
|
||||
qdel(to_launch)
|
||||
to_launch = null
|
||||
QDEL_NULL(to_launch)
|
||||
for(var/atom/A in loaded_projectiles)
|
||||
qdel(A)
|
||||
loaded_projectiles = null
|
||||
|
||||
@@ -93,9 +93,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/reagentgrinder/Destroy()
|
||||
if(beaker)
|
||||
qdel(beaker)
|
||||
beaker = null
|
||||
QDEL_NULL(beaker)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/reagentgrinder/ex_act(severity)
|
||||
|
||||
@@ -48,8 +48,7 @@
|
||||
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
|
||||
if(!cube.wrapped)
|
||||
cube.Expand()
|
||||
cube.Expand()
|
||||
// Dehydrated carp
|
||||
if(istype(O, /obj/item/toy/carpplushie/dehy_carp))
|
||||
var/obj/item/toy/carpplushie/dehy_carp/dehy = O
|
||||
|
||||
@@ -78,9 +78,7 @@
|
||||
var/accepts_rig = 1
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/Destroy()
|
||||
if(rig)
|
||||
qdel(rig)
|
||||
rig = null
|
||||
QDEL_NULL(rig)
|
||||
return ..()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/P)
|
||||
|
||||
@@ -500,7 +500,7 @@
|
||||
var/hasmob = 0 //If it contains a mob
|
||||
|
||||
Destroy()
|
||||
qdel(gas)
|
||||
QDEL_NULL(gas)
|
||||
active = 0
|
||||
return ..()
|
||||
|
||||
@@ -1146,11 +1146,11 @@
|
||||
|
||||
update()
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/disposalpipe/trunk/Destroy()
|
||||
if(istype(linked, /obj/structure/disposaloutlet))
|
||||
var/obj/structure/disposaloutlet/O = linked
|
||||
O.expel()
|
||||
O.expel(animation = 0)
|
||||
else if(istype(linked, /obj/machinery/disposal))
|
||||
var/obj/machinery/disposal/D = linked
|
||||
if(D.trunk == src)
|
||||
@@ -1207,7 +1207,7 @@
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
to_chat(user, "<span class='notice'>Slicing the disposal pipe.</span>")
|
||||
if(do_after(user, 30 * W.toolspeed, target = src))
|
||||
if(!W.isOn())
|
||||
if(!W.isOn())
|
||||
return
|
||||
welded()
|
||||
else
|
||||
@@ -1290,12 +1290,13 @@
|
||||
|
||||
// expel the contents of the holder object, then delete it
|
||||
// called when the holder exits the outlet
|
||||
proc/expel(var/obj/structure/disposalholder/H)
|
||||
proc/expel(var/obj/structure/disposalholder/H, animation = 1)
|
||||
|
||||
flick("outlet-open", src)
|
||||
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
|
||||
sleep(20) //wait until correct animation frame
|
||||
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
|
||||
if(animation)
|
||||
flick("outlet-open", src)
|
||||
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
|
||||
sleep(20) //wait until correct animation frame
|
||||
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
|
||||
|
||||
if(H)
|
||||
for(var/atom/movable/AM in H)
|
||||
@@ -1308,7 +1309,6 @@
|
||||
H.vent_gas(src.loc)
|
||||
qdel(H)
|
||||
|
||||
return
|
||||
|
||||
attackby(var/obj/item/I, var/mob/user, params)
|
||||
if(!I || !user)
|
||||
|
||||
@@ -429,7 +429,5 @@
|
||||
desc += " The package is not sealed."
|
||||
|
||||
/obj/item/shippingPackage/Destroy()
|
||||
if(wrapped)
|
||||
qdel(wrapped)
|
||||
wrapped = null
|
||||
QDEL_NULL(wrapped)
|
||||
return ..()
|
||||
@@ -608,6 +608,14 @@
|
||||
build_path = /obj/item/weapon/rcd
|
||||
category = list("hacked", "Construction")
|
||||
|
||||
/datum/design/rcl
|
||||
name = "Rapid Cable Layer"
|
||||
id = "rcl"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 5000)
|
||||
build_path = /obj/item/weapon/twohanded/rcl
|
||||
category = list("hacked", "Construction")
|
||||
|
||||
/datum/design/electropack
|
||||
name = "Electropack"
|
||||
id = "electropack"
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$plasma" = 200)
|
||||
build_path = /obj/item/clothing/glasses/hud/hydroponic/night
|
||||
category = list("Equipment")
|
||||
|
||||
|
||||
/datum/design/handdrill
|
||||
name = "Hand Drill"
|
||||
desc = "A small electric hand drill with an interchangable screwdriver and bolt bit"
|
||||
@@ -210,7 +210,7 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_DIAMOND = 1000)
|
||||
category = list("Equipment")
|
||||
|
||||
|
||||
/datum/design/alienwrench
|
||||
name = "Alien Wrench"
|
||||
desc = "An advanced wrench obtained through Abductor technology."
|
||||
|
||||
@@ -167,32 +167,32 @@
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting
|
||||
category = list("Exosuit Modules")
|
||||
|
||||
/datum/design/recitence_main
|
||||
name = "Exosuit Module (\"Recitence\" Central Control module)"
|
||||
desc = "Allows for the construction of a \"Recitence\" Central Control module."
|
||||
id = "recitence_main"
|
||||
/datum/design/reticence_main
|
||||
name = "Exosuit Module (\"Reticence\" Central Control module)"
|
||||
desc = "Allows for the construction of a \"Reticence\" Central Control module."
|
||||
id = "reticence_main"
|
||||
req_tech = list("programming" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/recitence/main
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/reticence/main
|
||||
category = list("Exosuit Modules")
|
||||
|
||||
/datum/design/recitence_peri
|
||||
name = "Exosuit Module (\"Recitence\" Peripherals Control module)"
|
||||
desc = "Allows for the construction of a \"Recitence\" Peripheral Control module."
|
||||
id = "recitence_peri"
|
||||
/datum/design/reticence_peri
|
||||
name = "Exosuit Module (\"Reticence\" Peripherals Control module)"
|
||||
desc = "Allows for the construction of a \"Reticence\" Peripheral Control module."
|
||||
id = "reticence_peri"
|
||||
req_tech = list("programming" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/recitence/peripherals
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/reticence/peripherals
|
||||
category = list("Exosuit Modules")
|
||||
|
||||
/datum/design/recitence_targ
|
||||
name = "Exosuit Module (\"Recitence\" Weapons & Targeting Control module)"
|
||||
desc = "Allows for the construction of a \"Recitence\" Weapons & Targeting Control module."
|
||||
id = "recitence_targ"
|
||||
/datum/design/reticence_targ
|
||||
name = "Exosuit Module (\"Reticence\" Weapons & Targeting Control module)"
|
||||
desc = "Allows for the construction of a \"Reticence\" Weapons & Targeting Control module."
|
||||
id = "reticence_targ"
|
||||
req_tech = list("programming" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/recitence/targeting
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/reticence/targeting
|
||||
category = list("Exosuit Modules")
|
||||
@@ -459,69 +459,69 @@
|
||||
construction_time = 200
|
||||
category = list("H.O.N.K")
|
||||
|
||||
//Recitence
|
||||
/datum/design/recitence_chassis
|
||||
name = "Exosuit Chassis (\"Recitence\")"
|
||||
id = "recitence_chassis"
|
||||
//Reticence
|
||||
/datum/design/reticence_chassis
|
||||
name = "Exosuit Chassis (\"Reticence\")"
|
||||
id = "reticence_chassis"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/chassis/recitence
|
||||
build_path = /obj/item/mecha_parts/chassis/reticence
|
||||
materials = list(MAT_METAL=20000)
|
||||
construction_time = 100
|
||||
category = list("Recitence")
|
||||
category = list("Reticence")
|
||||
|
||||
/datum/design/recitence_torso
|
||||
name = "Exosuit Torso (\"Recitence\")"
|
||||
id = "recitence_torso"
|
||||
/datum/design/reticence_torso
|
||||
name = "Exosuit Torso (\"Reticence\")"
|
||||
id = "reticence_torso"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_torso
|
||||
build_path = /obj/item/mecha_parts/part/reticence_torso
|
||||
materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_TRANQUILLITE=10000)
|
||||
construction_time = 300
|
||||
category = list("Recitence")
|
||||
category = list("Reticence")
|
||||
|
||||
/datum/design/recitence_head
|
||||
name = "Exosuit Head (\"Recitence\")"
|
||||
id = "recitence_head"
|
||||
/datum/design/reticence_head
|
||||
name = "Exosuit Head (\"Reticence\")"
|
||||
id = "reticence_head"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_head
|
||||
build_path = /obj/item/mecha_parts/part/reticence_head
|
||||
materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
category = list("Reticence")
|
||||
|
||||
/datum/design/recitence_left_arm
|
||||
name = "Exosuit Left Arm (\"Recitence\")"
|
||||
id = "recitence_left_arm"
|
||||
/datum/design/reticence_left_arm
|
||||
name = "Exosuit Left Arm (\"Reticence\")"
|
||||
id = "reticence_left_arm"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_left_arm
|
||||
build_path = /obj/item/mecha_parts/part/reticence_left_arm
|
||||
materials = list(MAT_METAL=15000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
category = list("Reticence")
|
||||
|
||||
/datum/design/recitence_right_arm
|
||||
name = "Exosuit Right Arm (\"Recitence\")"
|
||||
id = "recitence_right_arm"
|
||||
/datum/design/reticence_right_arm
|
||||
name = "Exosuit Right Arm (\"Reticence\")"
|
||||
id = "reticence_right_arm"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_right_arm
|
||||
build_path = /obj/item/mecha_parts/part/reticence_right_arm
|
||||
materials = list(MAT_METAL=15000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
category = list("Reticence")
|
||||
|
||||
/datum/design/recitence_left_leg
|
||||
name = "Exosuit Left Leg (\"Recitence\")"
|
||||
id = "recitence_left_leg"
|
||||
/datum/design/reticence_left_leg
|
||||
name = "Exosuit Left Leg (\"Reticence\")"
|
||||
id = "reticence_left_leg"
|
||||
build_type = MECHFAB
|
||||
build_path =/obj/item/mecha_parts/part/recitence_left_leg
|
||||
build_path =/obj/item/mecha_parts/part/reticence_left_leg
|
||||
materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
category = list("Reticence")
|
||||
|
||||
/datum/design/recitence_right_leg
|
||||
name = "Exosuit Right Leg (\"Recitence\")"
|
||||
id = "recitence_right_leg"
|
||||
/datum/design/reticence_right_leg
|
||||
name = "Exosuit Right Leg (\"Reticence\")"
|
||||
id = "reticence_right_leg"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_right_leg
|
||||
build_path = /obj/item/mecha_parts/part/reticence_right_leg
|
||||
materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
category = list("Reticence")
|
||||
|
||||
//Phazon
|
||||
/datum/design/phazon_chassis
|
||||
|
||||
@@ -62,8 +62,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
reagents.my_atom = src
|
||||
|
||||
/obj/machinery/r_n_d/protolathe/Destroy()
|
||||
qdel(materials)
|
||||
materials = null
|
||||
QDEL_NULL(materials)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/r_n_d/protolathe/RefreshParts()
|
||||
|
||||
@@ -77,11 +77,11 @@
|
||||
else if(istype(O, /obj/item/weapon/storage/bag))
|
||||
var/obj/item/weapon/storage/P = O
|
||||
var/loaded = 0
|
||||
for(var/obj/G in P.contents)
|
||||
if(istype(G, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
||||
loaded = 1
|
||||
monkeys++
|
||||
qdel(G)
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/MC in P.contents)
|
||||
loaded = 1
|
||||
monkeys++
|
||||
P.remove_from_storage(MC)
|
||||
qdel(MC)
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='notice'>You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.</span>")
|
||||
return
|
||||
|
||||
@@ -19,6 +19,10 @@
|
||||
|
||||
dir = EAST
|
||||
|
||||
/obj/structure/spacepod_frame/Destroy()
|
||||
QDEL_NULL(construct)
|
||||
return ..()
|
||||
|
||||
/obj/structure/spacepod_frame/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(!construct || !construct.action(W, user))
|
||||
..()
|
||||
|
||||
@@ -124,22 +124,14 @@
|
||||
/obj/spacepod/Destroy()
|
||||
if(equipment_system.cargo_system)
|
||||
equipment_system.cargo_system.removed(null)
|
||||
qdel(equipment_system)
|
||||
equipment_system = null
|
||||
qdel(cargo_hold)
|
||||
cargo_hold = null
|
||||
qdel(battery)
|
||||
battery = null
|
||||
qdel(cabin_air)
|
||||
cabin_air = null
|
||||
qdel(internal_tank)
|
||||
internal_tank = null
|
||||
qdel(pr_int_temp_processor)
|
||||
pr_int_temp_processor = null
|
||||
qdel(pr_give_air)
|
||||
pr_give_air = null
|
||||
qdel(ion_trail)
|
||||
ion_trail = null
|
||||
QDEL_NULL(equipment_system)
|
||||
QDEL_NULL(cargo_hold)
|
||||
QDEL_NULL(battery)
|
||||
QDEL_NULL(cabin_air)
|
||||
QDEL_NULL(internal_tank)
|
||||
QDEL_NULL(pr_int_temp_processor)
|
||||
QDEL_NULL(pr_give_air)
|
||||
QDEL_NULL(ion_trail)
|
||||
occupant_sanity_check()
|
||||
if(pilot)
|
||||
pilot.forceMove(get_turf(src))
|
||||
@@ -275,7 +267,7 @@
|
||||
cargo_hold.emp_act(severity)
|
||||
|
||||
if(battery && battery.charge > 0)
|
||||
battery.use((battery.charge / 2) / severity)
|
||||
battery.use((battery.charge/3)/(severity*2))
|
||||
deal_damage(80 / severity)
|
||||
if(empcounter < (40 / severity))
|
||||
empcounter = 40 / severity
|
||||
|
||||
@@ -150,8 +150,7 @@
|
||||
var/obj/item/device/mmi/stored_mmi
|
||||
|
||||
/obj/item/organ/internal/brain/mmi_holder/Destroy()
|
||||
if(stored_mmi)
|
||||
qdel(stored_mmi)
|
||||
QDEL_NULL(stored_mmi)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/internal/brain/mmi_holder/insert(var/mob/living/target,special = 0)
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
var/rand_y = 0
|
||||
var/emagged = 0
|
||||
var/teleporting = 0
|
||||
var/chargecost = 1500
|
||||
var/chargecost = 1000
|
||||
|
||||
/obj/item/weapon/rcs/New()
|
||||
..()
|
||||
@@ -140,9 +140,7 @@
|
||||
to_chat(user, "There are [round(rcell.charge/chargecost)] charge\s left.")
|
||||
|
||||
/obj/item/weapon/rcs/Destroy()
|
||||
if(rcell)
|
||||
qdel(rcell)
|
||||
rcell = null
|
||||
QDEL_NULL(rcell)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/rcs/attack_self(mob/user)
|
||||
|
||||
Reference in New Issue
Block a user