| "
diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm
index 2b83017d1d..aaeee27985 100644
--- a/code/game/gamemodes/miniantags/borer/borer.dm
+++ b/code/game/gamemodes/miniantags/borer/borer.dm
@@ -1093,7 +1093,7 @@ GLOBAL_VAR_INIT(total_borer_hosts_needed, 10)
/datum/action/innate/borer/jumpstart_host
name = "Jumpstart Host"
desc = "Bring your host back to life."
- icon_icon = 'icons/obj/weapons.dmi'
+ icon_icon = 'icons/obj/items_and_weapons.dmi'
button_icon_state = "defibpaddles0"
/datum/action/innate/borer/jumpstart_host/Activate()
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index 502b02c7f7..bbd78ff76a 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -29,11 +29,17 @@
3. Biological resources will be harvested at a later date; do not harm them.
"}
+/obj/effect/mob_spawn/swarmer/Initialize()
+ . = ..()
+ var/area/A = get_area(src)
+ if(A)
+ notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/effects/bin_close.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
+
/obj/effect/mob_spawn/swarmer/attack_hand(mob/living/user)
to_chat(user, "Picking up the swarmer may cause it to activate. You should be careful about this.")
-/obj/effect/mob_spawn/swarmer/attackby(obj/item/weapon/W, mob/user, params)
- if(istype(W, /obj/item/weapon/screwdriver) && user.a_intent != INTENT_HARM)
+/obj/effect/mob_spawn/swarmer/attackby(obj/item/W, mob/user, params)
+ if(istype(W, /obj/item/screwdriver) && user.a_intent != INTENT_HARM)
user.visible_message("[usr.name] deactivates [src].",
"After some fiddling, you find a way to disable [src]'s power source.",
"You hear clicking.")
@@ -85,7 +91,7 @@
projectiletype = /obj/item/projectile/beam/disabler
ranged_cooldown_time = 20
projectilesound = 'sound/weapons/taser2.ogg'
- loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/weapon/ore/bluespace_crystal)
+ loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/ore/bluespace_crystal)
del_on_death = 1
deathmessage = "explodes with a sharp pop!"
light_color = LIGHT_COLOR_CYAN
@@ -185,7 +191,7 @@
return 1
return ..()
-/obj/item/weapon/gun/swarmer_act()//Stops you from eating the entire armory
+/obj/item/gun/swarmer_act()//Stops you from eating the entire armory
return FALSE
/obj/item/clockwork/alloy_shards/IntegrateAmount()
@@ -463,7 +469,7 @@
var/mob/living/carbon/human/H = target
if(ishuman(target) && (!H.handcuffed))
- H.handcuffed = new /obj/item/weapon/restraints/handcuffs/energy/used(H)
+ H.handcuffed = new /obj/item/restraints/handcuffs/energy/used(H)
H.update_handcuffed()
add_logs(src, H, "handcuffed")
@@ -648,7 +654,7 @@
to_chat(M, "[link] [rendered]")
/mob/living/simple_animal/hostile/swarmer/proc/ContactSwarmers()
- var/message = input(src, "Announce to other swarmers", "Swarmer contact")
+ var/message = stripped_input(src, "Announce to other swarmers", "Swarmer contact")
// TODO get swarmers their own colour rather than just boldtext
if(message)
swarmer_chat(message)
diff --git a/code/game/gamemodes/miniantags/hades/hades.dm b/code/game/gamemodes/miniantags/hades/hades.dm
index 9b9f1cbf80..948aaeb422 100644
--- a/code/game/gamemodes/miniantags/hades/hades.dm
+++ b/code/game/gamemodes/miniantags/hades/hades.dm
@@ -136,7 +136,7 @@
src.visible_message("[src]'s Staff is flung free as their body explodes.")
var/obj/structure/ladder/unbreakable/hades/churchLadder = new/obj/structure/ladder/unbreakable/hades(T)
var/obj/structure/ladder/unbreakable/hades/bodyLadder = new/obj/structure/ladder/unbreakable/hades(get_turf(src))
- var/obj/item/weapon/hades_staff/HS = new/obj/item/weapon/hades_staff(get_turf(src))
+ var/obj/item/hades_staff/HS = new/obj/item/hades_staff(get_turf(src))
HS.throw_at_fast(pick(orange(src,7)),10,1)
churchLadder.up = bodyLadder
bodyLadder.down = churchLadder
@@ -447,8 +447,8 @@
if(isIndulged)
sinPerson << "Your stomach growls, you feel hungry."
var/list/allTypes = list()
- for(var/A in typesof(/obj/item/weapon/reagent_containers/food/snacks))
- var/obj/item/weapon/reagent_containers/food/snacks/O = A
+ for(var/A in typesof(/obj/item/reagent_containers/food/snacks))
+ var/obj/item/reagent_containers/food/snacks/O = A
if(initial(O.cooked_type))
allTypes += A
for(var/i in 1 to 10)
@@ -461,12 +461,12 @@
/proc/sin_Pride(var/mob/living/carbon/human/sinPerson, var/isIndulged)
if(isIndulged)
sinPerson << "You feel strong enough to take on the world."
- var/obj/item/weapon/twohanded/sin_pride/good = new/obj/item/weapon/twohanded/sin_pride(get_turf(sinPerson))
+ var/obj/item/twohanded/sin_pride/good = new/obj/item/twohanded/sin_pride(get_turf(sinPerson))
good.name = "Indulged [good.name]"
good.pride_direction = FALSE
else
sinPerson << "You feel small and weak, like the entire world is against you."
- var/obj/item/weapon/twohanded/sin_pride/bad = new/obj/item/weapon/twohanded/sin_pride(get_turf(sinPerson))
+ var/obj/item/twohanded/sin_pride/bad = new/obj/item/twohanded/sin_pride(get_turf(sinPerson))
bad.name = "Punished [bad.name]"
bad.pride_direction = TRUE
@@ -550,7 +550,7 @@
icon = 'icons/effects/224x224.dmi'
-/obj/item/weapon/twohanded/sin_pride
+/obj/item/twohanded/sin_pride
icon_state = "mjollnir0"
name = "Pride-struck Hammer"
desc = "It resonates an aura of Pride."
@@ -564,11 +564,11 @@
hitsound = 'sound/weapons/blade1.ogg'
var/pride_direction = FALSE
-/obj/item/weapon/twohanded/sin_pride/update_icon()
+/obj/item/twohanded/sin_pride/update_icon()
icon_state = "mjollnir[wielded]"
return
-/obj/item/weapon/twohanded/sin_pride/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
+/obj/item/twohanded/sin_pride/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
if(!proximity) return
if(wielded)
if(istype(A,/mob/living/carbon/human))
@@ -655,7 +655,7 @@
attacktext = "strikes at"
attack_sound = 'sound/weapons/bladeslice.ogg'
- butcher_results = list(/obj/item/clothing/mask/gas/cyborg/hades = 1,/obj/item/clothing/suit/hooded/chaplain_hoodie/hades = 1,/obj/item/weapon/hades_staff/fake = 1)
+ butcher_results = list(/obj/item/clothing/mask/gas/cyborg/hades = 1,/obj/item/clothing/suit/hooded/chaplain_hoodie/hades = 1,/obj/item/hades_staff/fake = 1)
unsuitable_atmos_damage = 0
del_on_death = 0
diff --git a/code/game/gamemodes/miniantags/hades/hades_chapel.dm b/code/game/gamemodes/miniantags/hades/hades_chapel.dm
index 6b1f781fe0..df8a2efafd 100644
--- a/code/game/gamemodes/miniantags/hades/hades_chapel.dm
+++ b/code/game/gamemodes/miniantags/hades/hades_chapel.dm
@@ -16,7 +16,7 @@
/obj/structure/chair/hades/New()
..()
- flags |= NODECONSTRUCT
+ flags_1 |= NODECONSTRUCT_1
for(var/obj/structure/kitchenspike/KS in range(12))
watchedSpikes += KS
@@ -39,14 +39,14 @@
playsound(get_turf(src), 'sound/effects/pope_entry.ogg', 100, 1)
sleep(100)
playsound(get_turf(src), 'sound/effects/hyperspace_end.ogg', 100, 1)
- new/obj/item/weapon/hades_staff/imbued(get_turf(src))
+ new/obj/item/hades_staff/imbued(get_turf(src))
src.visible_message("[src] shatters into a thousand shards, a staff falling from it.")
qdel(src)
-/obj/structure/chair/hades/attackby(obj/item/weapon/W, mob/user, params)
+/obj/structure/chair/hades/attackby(obj/item/W, mob/user, params)
..()
- if(istype(W, /obj/item/weapon/hades_staff))
- var/obj/item/weapon/hades_staff/HS = W
+ if(istype(W, /obj/item/hades_staff))
+ var/obj/item/hades_staff/HS = W
if(!HS.isKey)
return
src.visible_message("[user] inserts the [W] into the [src], giving it a quick turn.")
@@ -74,11 +74,11 @@
/obj/structure/ladder/unbreakable/hades/update_icon()
return
-/obj/item/weapon/paper/hades_instructions
+/obj/item/paper/hades_instructions
name = "paper- 'Hastily Scrawled Letter'"
info = "The Master has instructed us to collect corpses for the ritual, and told us to deposity them in the Ritual Room, behind a bookcase in the library. The Master has locked the device to only work with his key, so no more accidents happen."
-/obj/item/weapon/hades_staff
+/obj/item/hades_staff
name = "Staff of Hades"
desc = "A large, dark staff, with a set of key-like prongs on the end."
icon_state = "staffofchange"
@@ -93,12 +93,12 @@
block_chance = 25
var/isKey = 1
-/obj/item/weapon/hades_staff/fake
+/obj/item/hades_staff/fake
name = "Inert Staff of Hades"
desc = "A large, dark staff."
isKey = 0
-/obj/item/weapon/hades_staff/imbued
+/obj/item/hades_staff/imbued
name = "Imbued Staff of Hades"
desc = " Bestowed with the power of wayward souls, this Staff allows the wielder to judge a target."
force = 75
@@ -107,7 +107,7 @@
var/lastJudge = 0
var/judgeCooldown = 150
-/obj/item/weapon/hades_staff/imbued/attack(mob/living/carbon/human/M, mob/living/carbon/human/user)
+/obj/item/hades_staff/imbued/attack(mob/living/carbon/human/M, mob/living/carbon/human/user)
if(!istype(M))
return ..()
diff --git a/code/game/gamemodes/miniantags/monkey/monkey.dm b/code/game/gamemodes/miniantags/monkey/monkey.dm
index da9f4b61f1..f84e4e72b6 100644
--- a/code/game/gamemodes/miniantags/monkey/monkey.dm
+++ b/code/game/gamemodes/miniantags/monkey/monkey.dm
@@ -41,7 +41,7 @@
/datum/game_mode/monkey/announce()
to_chat(world, "The current game mode is - Monkey!")
- to_chat(world, "One or more crewmembers have been infected with Jungle Fever! Crew: Contain the outbreak. None of the infected monkeys may escape alive to Centcom. \
+ to_chat(world, "One or more crewmembers have been infected with Jungle Fever! Crew: Contain the outbreak. None of the infected monkeys may escape alive to CentCom. \
Monkeys: Ensure that your kind lives on! Rise up against your captors!")
@@ -50,7 +50,7 @@
to_chat(carrier.current, "You have been planted onto this station by the Animal Rights Consortium.")
to_chat(carrier.current, "Soon the disease will transform you into an ape. Afterwards, you will be able spread the infection to others with a bite.")
to_chat(carrier.current, "While your infection strain is undetectable by scanners, any other infectees will show up on medical equipment.")
- to_chat(carrier.current, "Your mission will be deemed a success if any of the live infected monkeys reach Centcom.")
+ to_chat(carrier.current, "Your mission will be deemed a success if any of the live infected monkeys reach CentCom.")
return
/datum/game_mode/monkey/post_setup()
@@ -88,7 +88,7 @@
var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
for(var/mob/living/carbon/monkey/M in GLOB.living_mob_list)
if (M.HasDisease(D))
- if(M.onCentcom() || M.onSyndieBase())
+ if(M.onCentCom() || M.onSyndieBase())
escaped_monkeys++
if(escaped_monkeys >= monkeys_to_win)
return 1
diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm
index dcd2ef2673..0eb0882332 100644
--- a/code/game/gamemodes/miniantags/morph/morph.dm
+++ b/code/game/gamemodes/miniantags/morph/morph.dm
@@ -30,7 +30,7 @@
wander = 0
attacktext = "glomps"
attack_sound = 'sound/effects/blobattack.ogg'
- butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2)
var/morphed = 0
var/atom/movable/form = null
@@ -224,7 +224,7 @@
player_mind.special_role = "Morph"
SSticker.mode.traitors |= player_mind
to_chat(S, S.playstyle_string)
- S << 'sound/magic/mutate.ogg'
+ SEND_SOUND(S, sound('sound/magic/mutate.ogg'))
message_admins("[key_name_admin(S)] has been made into a morph by an event.")
log_game("[key_name(S)] was spawned as a morph by an event.")
spawned_mobs += S
diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm
index afbc597c29..5e1d80e175 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant.dm
@@ -74,7 +74,7 @@
generated_objectives_and_spells = TRUE
mind.remove_all_antag()
mind.wipe_memory()
- src << 'sound/effects/ghost.ogg'
+ SEND_SOUND(src, sound('sound/effects/ghost.ogg'))
var/datum/objective/revenant/objective = new
objective.owner = mind
mind.objectives += objective
@@ -174,7 +174,7 @@
//damage, gibbing, and dying
/mob/living/simple_animal/revenant/attackby(obj/item/W, mob/living/user, params)
. = ..()
- if(istype(W, /obj/item/weapon/nullrod))
+ if(istype(W, /obj/item/nullrod))
visible_message("[src] violently flinches!", \
"As \the [W] passes through you, you feel your essence draining away!")
adjustBruteLoss(25) //hella effective
@@ -218,7 +218,7 @@
alpha = i
visible_message("[src]'s body breaks apart into a fine pile of blue dust.")
var/reforming_essence = essence_regen_cap //retain the gained essence capacity
- var/obj/item/weapon/ectoplasm/revenant/R = new(get_turf(src))
+ var/obj/item/ectoplasm/revenant/R = new(get_turf(src))
R.essence = max(reforming_essence - 15 * perfectsouls, 75) //minus any perfect souls
R.client_to_revive = client //If the essence reforms, the old revenant is put back in the body
R.revenant = src
@@ -321,7 +321,7 @@
//reforming
-/obj/item/weapon/ectoplasm/revenant
+/obj/item/ectoplasm/revenant
name = "glimmering residue"
desc = "A pile of fine blue dust. Small tendrils of violet mist swirl around it."
icon = 'icons/effects/effects.dmi'
@@ -333,14 +333,14 @@
var/client/client_to_revive
var/mob/living/simple_animal/revenant/revenant
-/obj/item/weapon/ectoplasm/revenant/New()
+/obj/item/ectoplasm/revenant/New()
..()
addtimer(CALLBACK(src, .proc/try_reform), 600)
-/obj/item/weapon/ectoplasm/revenant/proc/scatter()
+/obj/item/ectoplasm/revenant/proc/scatter()
qdel(src)
-/obj/item/weapon/ectoplasm/revenant/proc/try_reform()
+/obj/item/ectoplasm/revenant/proc/try_reform()
if(reforming)
reforming = FALSE
reform()
@@ -348,7 +348,7 @@
inert = TRUE
visible_message("[src] settles down and seems lifeless.")
-/obj/item/weapon/ectoplasm/revenant/attack_self(mob/user)
+/obj/item/ectoplasm/revenant/attack_self(mob/user)
if(!reforming || inert)
return ..()
user.visible_message("[user] scatters [src] in all directions.", \
@@ -356,21 +356,21 @@
user.drop_item()
scatter()
-/obj/item/weapon/ectoplasm/revenant/throw_impact(atom/hit_atom)
+/obj/item/ectoplasm/revenant/throw_impact(atom/hit_atom)
..()
if(inert)
return
visible_message("[src] breaks into particles upon impact, which fade away to nothingness.")
scatter()
-/obj/item/weapon/ectoplasm/revenant/examine(mob/user)
+/obj/item/ectoplasm/revenant/examine(mob/user)
..()
if(inert)
to_chat(user, "It seems inert.")
else if(reforming)
to_chat(user, "It is shifting and distorted. It would be wise to destroy this.")
-/obj/item/weapon/ectoplasm/revenant/proc/reform()
+/obj/item/ectoplasm/revenant/proc/reform()
if(QDELETED(src) || QDELETED(revenant) || inert)
return
var/key_of_revenant
@@ -412,7 +412,7 @@
revenant = null
qdel(src)
-/obj/item/weapon/ectoplasm/revenant/Destroy()
+/obj/item/ectoplasm/revenant/Destroy()
if(!QDELETED(revenant))
qdel(revenant)
..()
diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
index 184564b024..98102984ee 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm
@@ -238,8 +238,8 @@
INVOKE_ASYNC(src, .proc/defile, T)
/obj/effect/proc_holder/spell/aoe_turf/revenant/defile/proc/defile(turf/T)
- if(T.flags & NOJAUNT)
- T.flags -= NOJAUNT
+ if(T.flags_1 & NOJAUNT_1)
+ T.flags_1 &= ~NOJAUNT_1
new /obj/effect/temp_visual/revenant(T)
if(!istype(T, /turf/open/floor/plating) && !istype(T, /turf/open/floor/engine/cult) && isfloorturf(T) && prob(15))
var/turf/open/floor/floor = T
diff --git a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm
index e9b417de1a..bcb2218fe6 100644
--- a/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm
+++ b/code/game/gamemodes/miniantags/slaughter/slaughterevent.dm
@@ -42,7 +42,7 @@
SSticker.mode.traitors |= player_mind
to_chat(S, S.playstyle_string)
to_chat(S, "You are currently not currently in the same plane of existence as the station. Blood Crawl near a blood pool to manifest.")
- S << 'sound/magic/demon_dies.ogg'
+ SEND_SOUND(S, 'sound/magic/demon_dies.ogg')
message_admins("[key_name_admin(S)] has been made into a slaughter demon by an event.")
log_game("[key_name(S)] was spawned as a slaughter demon by an event.")
spawned_mobs += S
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 63f723b7c2..59650561a6 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -114,9 +114,9 @@
var/obj/item/device/nuclear_challenge/challenge = new /obj/item/device/nuclear_challenge
synd_mind.current.put_in_hands_or_del(challenge)
- var/list/foundIDs = synd_mind.current.search_contents_for(/obj/item/weapon/card/id)
+ var/list/foundIDs = synd_mind.current.search_contents_for(/obj/item/card/id)
if(foundIDs.len)
- for(var/obj/item/weapon/card/id/ID in foundIDs)
+ for(var/obj/item/card/id/ID in foundIDs)
ID.name = "lead agent card"
ID.access += ACCESS_SYNDICATE_LEADER
else
@@ -127,7 +127,7 @@
A.command = TRUE
if(nuke_code)
- var/obj/item/weapon/paper/P = new
+ var/obj/item/paper/P = new
P.info = "The nuclear authorization code is: [nuke_code]"
P.name = "nuclear bomb code"
var/mob/living/carbon/human/H = synd_mind.current
@@ -186,8 +186,8 @@
/datum/game_mode/nuclear/declare_completion()
var/disk_rescued = 1
- for(var/obj/item/weapon/disk/nuclear/D in GLOB.poi_list)
- if(!D.onCentcom())
+ for(var/obj/item/disk/nuclear/D in GLOB.poi_list)
+ if(!D.onCentCom())
disk_rescued = 0
break
var/crew_evacuated = (SSshuttle.emergency.mode == SHUTTLE_ENDGAME)
@@ -288,7 +288,7 @@
text += " " text += "(Syndicates used [TC_uses] TC) [purchases]" if(TC_uses == 0 && station_was_nuked && !are_operatives_dead()) - text += "[bicon(icon('icons/badass.dmi', "badass"))]" + text += "[icon2html('icons/badass.dmi', world, "badass")]" to_chat(world, text) return 1 @@ -323,12 +323,12 @@ uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat - back = /obj/item/weapon/storage/backpack + back = /obj/item/storage/backpack ears = /obj/item/device/radio/headset/syndicate/alt - l_pocket = /obj/item/weapon/pinpointer/syndicate - id = /obj/item/weapon/card/id/syndicate - belt = /obj/item/weapon/gun/ballistic/automatic/pistol - backpack_contents = list(/obj/item/weapon/storage/box/syndie=1) + l_pocket = /obj/item/pinpointer/syndicate + id = /obj/item/card/id/syndicate + belt = /obj/item/gun/ballistic/automatic/pistol + backpack_contents = list(/obj/item/storage/box/syndie=1) var/tc = 25 @@ -347,9 +347,9 @@ U.hidden_uplink.telecrystals = tc H.equip_to_slot_or_del(U, slot_in_backpack) - var/obj/item/weapon/implant/weapons_auth/W = new/obj/item/weapon/implant/weapons_auth(H) + var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H) W.implant(H) - var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(H) + var/obj/item/implant/explosive/E = new/obj/item/implant/explosive(H) E.implant(H) H.faction |= "syndicate" H.update_icons() @@ -360,10 +360,10 @@ glasses = /obj/item/clothing/glasses/night mask = /obj/item/clothing/mask/gas/syndicate suit = /obj/item/clothing/suit/space/hardsuit/syndi - r_pocket = /obj/item/weapon/tank/internals/emergency_oxygen/engi + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi internals_slot = slot_r_store - belt = /obj/item/weapon/storage/belt/military - r_hand = /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog - backpack_contents = list(/obj/item/weapon/storage/box/syndie=1,\ - /obj/item/weapon/tank/jetpack/oxygen/harness=1,\ - /obj/item/weapon/gun/ballistic/automatic/pistol=1) + belt = /obj/item/storage/belt/military + r_hand = /obj/item/gun/ballistic/automatic/shotgun/bulldog + backpack_contents = list(/obj/item/storage/box/syndie=1,\ + /obj/item/tank/jetpack/oxygen/harness=1,\ + /obj/item/gun/ballistic/automatic/pistol=1) diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index f275db3b0b..f671d38395 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -49,7 +49,7 @@ to_chat(user, "You've attracted the attention of powerful forces within the syndicate. A bonus bundle of telecrystals has been granted to your team. Great things await you if you complete the mission.") for(var/V in GLOB.syndicate_shuttle_boards) - var/obj/item/weapon/circuitboard/computer/syndicate_shuttle/board = V + var/obj/item/circuitboard/computer/syndicate_shuttle/board = V board.challenge = TRUE var/obj/item/device/radio/uplink/nuclear/U = new(get_turf(user)) @@ -74,7 +74,7 @@ to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.") return 0 for(var/V in GLOB.syndicate_shuttle_boards) - var/obj/item/weapon/circuitboard/computer/syndicate_shuttle/board = V + var/obj/item/circuitboard/computer/syndicate_shuttle/board = V if(board.moved) to_chat(user, "The shuttle has already been moved! You have forfeit the right to declare war.") return 0 diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 755f6dd0c9..ee611349f8 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -32,7 +32,7 @@ var/r_code = "ADMIN" var/yes_code = FALSE var/safety = TRUE - var/obj/item/weapon/disk/nuclear/auth = null + var/obj/item/disk/nuclear/auth = null use_power = NO_POWER_USE var/previous_level = "" var/obj/item/nuke_core/core = null @@ -85,13 +85,12 @@ . = ..() var/obj/machinery/nuclearbomb/existing = locate("syndienuke") in GLOB.nuke_list if(existing) - qdel(src) - throw EXCEPTION("Attempted to spawn a syndicate nuke while one already exists at [existing.loc.x],[existing.loc.y],[existing.loc.z]") - return 0 + stack_trace("Attempted to spawn a syndicate nuke while one already exists at [existing.loc.x],[existing.loc.y],[existing.loc.z]") + return INITIALIZE_HINT_QDEL tag = "syndienuke" /obj/machinery/nuclearbomb/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/weapon/disk/nuclear)) + if (istype(I, /obj/item/disk/nuclear)) if(!user.drop_item()) return I.forceMove(src) @@ -101,7 +100,7 @@ switch(deconstruction_state) if(NUKESTATE_INTACT) - if(istype(I, /obj/item/weapon/screwdriver/nuke)) + if(istype(I, /obj/item/screwdriver/nuke)) playsound(loc, I.usesound, 100, 1) to_chat(user, "You start removing [src]'s front panel's screws...") if(do_after(user, 60*I.toolspeed,target=src)) @@ -110,7 +109,7 @@ update_icon() return if(NUKESTATE_UNSCREWED) - if(istype(I, /obj/item/weapon/crowbar)) + if(istype(I, /obj/item/crowbar)) to_chat(user, "You start removing [src]'s front panel...") playsound(loc, I.usesound, 100, 1) if(do_after(user,30*I.toolspeed,target=src)) @@ -119,8 +118,8 @@ update_icon() return if(NUKESTATE_PANEL_REMOVED) - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/welder = I + if(istype(I, /obj/item/weldingtool)) + var/obj/item/weldingtool/welder = I playsound(loc, I.usesound, 100, 1) to_chat(user, "You start cutting [src]'s inner plate...") if(welder.remove_fuel(1,user)) @@ -130,7 +129,7 @@ update_icon() return if(NUKESTATE_WELDED) - if(istype(I, /obj/item/weapon/crowbar)) + if(istype(I, /obj/item/crowbar)) to_chat(user, "You start prying off [src]'s inner plate...") playsound(loc, I.usesound, 100, 1) if(do_after(user,50*I.toolspeed,target=src)) @@ -297,7 +296,7 @@ if("insert_disk") if(!auth) var/obj/item/I = usr.get_active_held_item() - if(istype(I, /obj/item/weapon/disk/nuclear)) + if(istype(I, /obj/item/disk/nuclear)) usr.drop_item() I.forceMove(src) auth = I @@ -363,7 +362,7 @@ if(safety) if(timing) set_security_level(previous_level) - for(var/obj/item/weapon/pinpointer/syndicate/S in GLOB.pinpointer_list) + for(var/obj/item/pinpointer/syndicate/S in GLOB.pinpointer_list) S.switch_mode_to(initial(S.mode)) S.nuke_warning = FALSE timing = FALSE @@ -382,14 +381,14 @@ bomb_set = TRUE set_security_level("delta") detonation_timer = world.time + (timer_set * 10) - for(var/obj/item/weapon/pinpointer/syndicate/S in GLOB.pinpointer_list) + for(var/obj/item/pinpointer/syndicate/S in GLOB.pinpointer_list) S.switch_mode_to(TRACK_INFILTRATOR) countdown.start() else bomb_set = FALSE detonation_timer = null set_security_level(previous_level) - for(var/obj/item/weapon/pinpointer/syndicate/S in GLOB.pinpointer_list) + for(var/obj/item/pinpointer/syndicate/S in GLOB.pinpointer_list) S.switch_mode_to(initial(S.mode)) S.nuke_warning = FALSE countdown.stop() @@ -421,8 +420,7 @@ yes_code = FALSE safety = TRUE update_icon() - for(var/mob/M in GLOB.player_list) - M << 'sound/machines/alarm.ogg' + sound_to_playing_players('sound/machines/alarm.ogg') if(SSticker && SSticker.mode) SSticker.mode.explosion_in_progress = 1 sleep(100) @@ -484,7 +482,7 @@ This is here to make the tiles around the station mininuke change when it's arme SSmapping.remove_nuke_threat(src) //==========DAT FUKKEN DISK=============== -/obj/item/weapon/disk +/obj/item/disk icon = 'icons/obj/module.dmi' w_class = WEIGHT_CLASS_TINY item_state = "card-id" @@ -492,23 +490,23 @@ This is here to make the tiles around the station mininuke change when it's arme righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' icon_state = "datadisk0" -/obj/item/weapon/disk/nuclear +/obj/item/disk/nuclear name = "nuclear authentication disk" desc = "Better keep this safe." icon_state = "nucleardisk" - persistence_replacement = /obj/item/weapon/disk/fakenucleardisk + persistence_replacement = /obj/item/disk/fakenucleardisk max_integrity = 250 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF -/obj/item/weapon/disk/nuclear/New() +/obj/item/disk/nuclear/New() ..() GLOB.poi_list |= src set_stationloving(TRUE, inform_admins=TRUE) -/obj/item/weapon/disk/nuclear/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/weapon/claymore/highlander)) - var/obj/item/weapon/claymore/highlander/H = I +/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/claymore/highlander)) + var/obj/item/claymore/highlander/H = I if(H.nuke_disk) to_chat(user, "Wait... what?") qdel(H.nuke_disk) @@ -520,13 +518,13 @@ This is here to make the tiles around the station mininuke change when it's arme return 1 return ..() -/obj/item/weapon/disk/nuclear/Destroy(force=FALSE) +/obj/item/disk/nuclear/Destroy(force=FALSE) // respawning is handled in /obj/Destroy() if(force) GLOB.poi_list -= src . = ..() -/obj/item/weapon/disk/nuclear/suicide_act(mob/user) +/obj/item/disk/nuclear/suicide_act(mob/user) user.visible_message("[user] is going delta! It looks like [user.p_theyre()] trying to commit suicide!") playsound(user.loc, 'sound/machines/alarm.ogg', 50, -1, 1) var/end_time = world.time + 100 @@ -544,7 +542,7 @@ This is here to make the tiles around the station mininuke change when it's arme user.visible_message("[user] was destroyed by the nuclear blast!") return OXYLOSS -/obj/item/weapon/disk/fakenucleardisk +/obj/item/disk/fakenucleardisk name = "cheap plastic imitation of the nuclear authentication disk" desc = "Broken dreams and a faint odor of cheese." icon_state = "nucleardisk" diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index d926cf2a9f..9f63309643 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -1,10 +1,10 @@ //Pinpointers are used to track atoms from a distance as long as they're on the same z-level. The captain and nuke ops have ones that track the nuclear authentication disk. -/obj/item/weapon/pinpointer +/obj/item/pinpointer name = "pinpointer" desc = "A handheld tracking device that locks onto certain signals." icon = 'icons/obj/device.dmi' icon_state = "pinoff" - flags = CONDUCT + flags_1 = CONDUCT_1 slot_flags = SLOT_BELT w_class = WEIGHT_CLASS_SMALL item_state = "electronic" @@ -23,16 +23,16 @@ var/nuke_warning = FALSE // If we've set off a miniature alarm about an armed nuke var/mode = TRACK_NUKE_DISK //What are we looking for? -/obj/item/weapon/pinpointer/New() +/obj/item/pinpointer/New() ..() GLOB.pinpointer_list += src -/obj/item/weapon/pinpointer/Destroy() +/obj/item/pinpointer/Destroy() STOP_PROCESSING(SSfastprocess, src) GLOB.pinpointer_list -= src return ..() -/obj/item/weapon/pinpointer/attack_self(mob/living/user) +/obj/item/pinpointer/attack_self(mob/living/user) active = !active user.visible_message("[user] [active ? "" : "de"]activates their pinpointer.", "You [active ? "" : "de"]activate your pinpointer.") playsound(user, 'sound/items/screwdriver2.ogg', 50, 1) @@ -43,14 +43,14 @@ target = null //Restarting the pinpointer forces a target reset STOP_PROCESSING(SSfastprocess, src) -/obj/item/weapon/pinpointer/attackby(obj/item/I, mob/living/user, params) +/obj/item/pinpointer/attackby(obj/item/I, mob/living/user, params) if(mode != TRACK_ATOM) return ..() user.visible_message("[user] tunes [src] to [I].", "You fine-tune [src]'s tracking to track [I].") playsound(src, 'sound/machines/click.ogg', 50, 1) constant_target = I -/obj/item/weapon/pinpointer/examine(mob/user) +/obj/item/pinpointer/examine(mob/user) ..() var/msg = "Its tracking indicator reads " switch(mode) @@ -73,7 +73,7 @@ if(bomb.timing) to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]") -/obj/item/weapon/pinpointer/process() +/obj/item/pinpointer/process() if(!active) STOP_PROCESSING(SSfastprocess, src) return @@ -82,7 +82,7 @@ my_god_jc_a_bomb() addtimer(CALLBACK(src, .proc/refresh_target), 50, TIMER_UNIQUE) -/obj/item/weapon/pinpointer/proc/scan_for_target() //Looks for whatever it's tracking +/obj/item/pinpointer/proc/scan_for_target() //Looks for whatever it's tracking if(target) if(isliving(target)) var/mob/living/L = target @@ -91,7 +91,7 @@ return switch(mode) if(TRACK_NUKE_DISK) - var/obj/item/weapon/disk/nuclear/N = locate() in GLOB.poi_list + var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list target = N if(TRACK_MALF_AI) for(var/V in GLOB.ai_list) @@ -121,7 +121,7 @@ var/turf/T = get_turf(src) target = locate(target_x, target_y, T.z) -/obj/item/weapon/pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction +/obj/item/pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction if(!active) return if(!target || (mode == TRACK_ATOM && !constant_target)) @@ -144,7 +144,7 @@ if(16 to INFINITY) icon_state = "pinon[nuke_warning ? "alert" : "far"]" -/obj/item/weapon/pinpointer/proc/my_god_jc_a_bomb() //If we should get the hell back to the ship +/obj/item/pinpointer/proc/my_god_jc_a_bomb() //If we should get the hell back to the ship for(var/obj/machinery/nuclearbomb/bomb in GLOB.nuke_list) if(bomb.timing) if(!nuke_warning) @@ -154,7 +154,7 @@ var/mob/living/L = loc to_chat(L, "Your [name] vibrates and lets out a tinny alarm. Uh oh.") -/obj/item/weapon/pinpointer/proc/switch_mode_to(new_mode) //If we shouldn't be tracking what we are +/obj/item/pinpointer/proc/switch_mode_to(new_mode) //If we shouldn't be tracking what we are if(isliving(loc)) var/mob/living/L = loc to_chat(L, "Your [name] beeps as it reconfigures its tracking algorithms.") @@ -162,18 +162,18 @@ mode = new_mode target = null //Switch modes so we can find the new target -/obj/item/weapon/pinpointer/proc/refresh_target() //Periodically removes the target to allow the pinpointer to update (i.e. malf AI shunts, an operative dies) +/obj/item/pinpointer/proc/refresh_target() //Periodically removes the target to allow the pinpointer to update (i.e. malf AI shunts, an operative dies) target = null -/obj/item/weapon/pinpointer/syndicate //Syndicate pinpointers automatically point towards the infiltrator once the nuke is active. +/obj/item/pinpointer/syndicate //Syndicate pinpointers automatically point towards the infiltrator once the nuke is active. name = "syndicate pinpointer" desc = "A handheld tracking device that locks onto certain signals. It's configured to switch tracking modes once it detects the activation signal of a nuclear device." -/obj/item/weapon/pinpointer/syndicate/cyborg //Cyborg pinpointers just look for a random operative. +/obj/item/pinpointer/syndicate/cyborg //Cyborg pinpointers just look for a random operative. name = "cyborg syndicate pinpointer" desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives." mode = TRACK_OPERATIVES - flags = NODROP + flags_1 = NODROP_1 diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index c74f67c820..b33500db22 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -42,7 +42,6 @@ return target /datum/objective/proc/find_target_by_role(role, role_type=0, invert=0)//Option sets either to check assigned role or special role. Default to assigned., invert inverts the check, eg: "Don't choose a Ling" - var/list/candidates = list() //Let's compile a list and THEN pick one randomly, not just first come first serve... for(var/datum/mind/possible_target in get_crewmember_minds()) if((possible_target != owner) && ishuman(possible_target.current)) var/is_role = 0 @@ -56,11 +55,12 @@ if(invert) if(is_role) continue - candidates += possible_target + target = possible_target + break else if(is_role) - candidates += possible_target - if(candidates) - target = pick(candidates) + target = possible_target + break + update_explanation_text() /datum/objective/proc/update_explanation_text() @@ -157,7 +157,7 @@ H = target.current if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey || (H && H.dna.species.id == "memezombies")) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite return 1 - if(target.current.onCentcom() || target.current.onSyndieBase()) + if(target.current.onCentCom() || target.current.onSyndieBase()) return 0 return 1 @@ -357,7 +357,7 @@ if(istype(location, /turf/open/floor/plasteel/shuttle/red) || istype(location, /turf/open/floor/mineral/plastitanium/brig)) // Fails traitors if they are in the shuttle brig -- Polymorph return 0 - if(location.onCentcom() || location.onSyndieBase()) + if(location.onCentCom() || location.onSyndieBase()) return 1 return 0 @@ -442,7 +442,8 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/steal/New() ..() if(!GLOB.possible_items.len)//Only need to fill the list when it's needed. - init_subtypes(/datum/objective_item/steal,GLOB.possible_items) + for(var/I in subtypesof(/datum/objective_item/steal)) + new I /datum/objective/steal/find_target() var/approved_targets = list() @@ -507,8 +508,8 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/steal/special/New() ..() if(!GLOB.possible_items_special.len) - init_subtypes(/datum/objective_item/special,GLOB.possible_items_special) - init_subtypes(/datum/objective_item/stack,GLOB.possible_items_special) + for(var/I in subtypesof(/datum/objective_item/special) + subtypesof(/datum/objective_item/stack)) + new I /datum/objective/steal/special/find_target() return set_target(pick(GLOB.possible_items_special)) @@ -682,11 +683,11 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/steal_five_of_type/summon_guns explanation_text = "Steal at least five guns!" - wanted_items = list(/obj/item/weapon/gun) + wanted_items = list(/obj/item/gun) /datum/objective/steal_five_of_type/summon_magic explanation_text = "Steal at least five magical artefacts!" - wanted_items = list(/obj/item/weapon/spellbook, /obj/item/weapon/gun/magic, /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/weapon/scrying, /obj/item/weapon/antag_spawner/contract, /obj/item/device/necromantic_stone) + wanted_items = list(/obj/item/spellbook, /obj/item/gun/magic, /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/scrying, /obj/item/antag_spawner/contract, /obj/item/device/necromantic_stone) /datum/objective/steal_five_of_type/check_completion() if(!isliving(owner.current)) @@ -832,15 +833,15 @@ GLOBAL_LIST_EMPTY(possible_items_special) var/list/check_names = department_real_names.Copy() - //Check each department member's mind to see if any of them made it to centcomm alive, if they did it's an automatic fail + //Check each department member's mind to see if any of them made it to centcom alive, if they did it's an automatic fail for(var/datum/mind/M in department_minds) if(M in SSticker.mode.changelings) //Lings aren't picked for this, but let's be safe continue if(M.current) var/turf/mloc = get_turf(M.current) - if(mloc.onCentcom() && (M.current.stat != DEAD)) - return 0 //A Non-ling living target got to centcomm, fail + if(mloc.onCentCom() && (M.current.stat != DEAD)) + return 0 //A Non-ling living target got to centcom, fail //Check each staff member has been replaced, by cross referencing changeling minds, changeling current dna, the staff minds and their original DNA names var/success = 0 @@ -851,11 +852,11 @@ GLOBAL_LIST_EMPTY(possible_items_special) if(ishuman(changeling.current)) var/mob/living/carbon/human/H = changeling.current var/turf/cloc = get_turf(changeling.current) - if(cloc && cloc.onCentcom() && (changeling.current.stat != DEAD)) //Living changeling on centcomm.... + if(cloc && cloc.onCentCom() && (changeling.current.stat != DEAD)) //Living changeling on centcom.... for(var/name in check_names) //Is he (disguised as) one of the staff? if(H.dna.real_name == name) check_names -= name //This staff member is accounted for, remove them, so the team don't succeed by escape as 7 of the same engineer - success++ //A living changeling staff member made it to centcomm + success++ //A living changeling staff member made it to centcom continue changelings if(success >= department_minds.len) diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 43067d4c22..3cfede5f93 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -2,7 +2,7 @@ /datum/objective_item var/name = "A silly bike horn! Honk!" - var/targetitem = /obj/item/weapon/bikehorn //typepath of the objective item + var/targetitem = /obj/item/bikehorn //typepath of the objective item var/difficulty = 9001 //vaguely how hard it is to do this objective var/list/excludefromjob = list() //If you don't want a job to get a certain objective (no captain stealing his own medal, etcetc) var/list/altitems = list() //Items which can serve as an alternative to the objective (darn you blueprints) @@ -11,27 +11,41 @@ /datum/objective_item/proc/check_special_completion() //for objectives with special checks (is that slime extract unused? does that intellicard have an ai in it? etcetc) return 1 +/datum/objective_item/proc/TargetExists() + return TRUE + +/datum/objective_item/steal/New() + ..() + if(TargetExists()) + GLOB.possible_items += src + else + qdel(src) + +/datum/objective_item/steal/Destroy() + GLOB.possible_items -= src + return ..() + /datum/objective_item/steal/caplaser name = "the captain's antique laser gun." - targetitem = /obj/item/weapon/gun/energy/laser/captain + targetitem = /obj/item/gun/energy/laser/captain difficulty = 5 excludefromjob = list("Captain") /datum/objective_item/steal/hoslaser name = "the head of security's personal laser gun." - targetitem = /obj/item/weapon/gun/energy/e_gun/hos + targetitem = /obj/item/gun/energy/e_gun/hos difficulty = 10 excludefromjob = list("Head Of Security") /datum/objective_item/steal/handtele name = "a hand teleporter." - targetitem = /obj/item/weapon/hand_tele + targetitem = /obj/item/hand_tele difficulty = 5 excludefromjob = list("Captain") /datum/objective_item/steal/jetpack name = "the Captain's jetpack." - targetitem = /obj/item/weapon/tank/jetpack/oxygen/captain + targetitem = /obj/item/tank/jetpack/oxygen/captain difficulty = 5 excludefromjob = list("Captain") @@ -49,13 +63,13 @@ /datum/objective_item/steal/hypo name = "the hypospray." - targetitem = /obj/item/weapon/reagent_containers/hypospray/CMO + targetitem = /obj/item/reagent_containers/hypospray/CMO difficulty = 5 excludefromjob = list("Chief Medical Officer") /datum/objective_item/steal/nukedisc name = "the nuclear authentication disk." - targetitem = /obj/item/weapon/disk/nuclear + targetitem = /obj/item/disk/nuclear difficulty = 5 excludefromjob = list("Captain") @@ -82,7 +96,7 @@ difficulty = 15 /datum/objective_item/steal/nuke_core/New() - special_equipment += /obj/item/weapon/storage/box/syndie_kit/nuke + special_equipment += /obj/item/storage/box/syndie_kit/nuke ..() /datum/objective_item/steal/supermatter @@ -91,17 +105,20 @@ difficulty = 15 /datum/objective_item/steal/supermatter/New() - special_equipment += /obj/item/weapon/storage/box/syndie_kit/supermatter + special_equipment += /obj/item/storage/box/syndie_kit/supermatter ..() +/datum/objective_item/steal/supermatter/TargetExists() + return GLOB.main_supermatter_engine != null + //Items with special checks! /datum/objective_item/steal/plasma name = "28 moles of plasma (full tank)." - targetitem = /obj/item/weapon/tank + targetitem = /obj/item/tank difficulty = 3 excludefromjob = list("Chief Engineer","Research Director","Station Engineer","Scientist","Atmospheric Technician") -/datum/objective_item/steal/plasma/check_special_completion(obj/item/weapon/tank/T) +/datum/objective_item/steal/plasma/check_special_completion(obj/item/tank/T) var/target_amount = text2num(name) var/found_amount = 0 found_amount += T.air_contents.gases["plasma"] ? T.air_contents.gases["plasma"][MOLES] : 0 @@ -124,13 +141,13 @@ targetitem = /obj/item/areaeditor/blueprints difficulty = 10 excludefromjob = list("Chief Engineer") - altitems = list(/obj/item/weapon/photo) + altitems = list(/obj/item/photo) /datum/objective_item/steal/blueprints/check_special_completion(obj/item/I) if(istype(I, /obj/item/areaeditor/blueprints)) return 1 - if(istype(I, /obj/item/weapon/photo)) - var/obj/item/weapon/photo/P = I + if(istype(I, /obj/item/photo)) + var/obj/item/photo/P = I if(P.blueprints) //if the blueprints are in frame return 1 return 0 @@ -157,30 +174,41 @@ targetitem = /obj/item/documents/syndicate/blue difficulty = 10 +/datum/objective_item/special/New() + ..() + if(TargetExists()) + GLOB.possible_items_special += src + else + qdel(src) + +/datum/objective_item/special/Destroy() + GLOB.possible_items_special -= src + return ..() + //Old ninja objectives. /datum/objective_item/special/pinpointer name = "the captain's pinpointer." - targetitem = /obj/item/weapon/pinpointer + targetitem = /obj/item/pinpointer difficulty = 10 /datum/objective_item/special/aegun name = "an advanced energy gun." - targetitem = /obj/item/weapon/gun/energy/e_gun/nuclear + targetitem = /obj/item/gun/energy/e_gun/nuclear difficulty = 10 /datum/objective_item/special/ddrill name = "a diamond drill." - targetitem = /obj/item/weapon/pickaxe/drill/diamonddrill + targetitem = /obj/item/pickaxe/drill/diamonddrill difficulty = 10 /datum/objective_item/special/boh name = "a bag of holding." - targetitem = /obj/item/weapon/storage/backpack/holding + targetitem = /obj/item/storage/backpack/holding difficulty = 10 /datum/objective_item/special/hypercell name = "a hyper-capacity power cell." - targetitem = /obj/item/weapon/stock_parts/cell/hyper + targetitem = /obj/item/stock_parts/cell/hyper difficulty = 5 /datum/objective_item/special/laserpointer @@ -190,9 +218,20 @@ /datum/objective_item/special/corgimeat name = "a piece of corgi meat." - targetitem = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi + targetitem = /obj/item/reagent_containers/food/snacks/meat/slab/corgi difficulty = 5 +/datum/objective_item/stack/New() + ..() + if(TargetExists()) + GLOB.possible_items_special += src + else + qdel(src) + +/datum/objective_item/stack/Destroy() + GLOB.possible_items_special -= src + return ..() + //Stack objectives get their own subtype /datum/objective_item/stack name = "5 cardboard." diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 1586cc43b1..7a17d54b4c 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -26,23 +26,23 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) var/hsbinfo = null //items that shouldn't spawn on the floor because they would bug or act weird var/global/list/spawn_forbidden = list( - /obj/item/tk_grab, /obj/item/weapon/implant, // not implanter, the actual thing that is inside you + /obj/item/tk_grab, /obj/item/implant, // not implanter, the actual thing that is inside you /obj/item/assembly, /obj/item/device/onetankbomb, /obj/item/radio, /obj/item/device/pda/ai, /obj/item/device/uplink, /obj/item/smallDelivery, /obj/item/projectile, - /obj/item/borg/sight, /obj/item/borg/stun, /obj/item/weapon/robot_module) + /obj/item/borg/sight, /obj/item/borg/stun, /obj/item/robot_module) /datum/hSB/proc/update() var/global/list/hrefs = list( "Space Gear", "Suit Up (Space Travel Gear)" = "hsbsuit", "Spawn Gas Mask" = "hsbspawn&path=[/obj/item/clothing/mask/gas]", - "Spawn Emergency Air Tank" = "hsbspawn&path=[/obj/item/weapon/tank/internals/emergency_oxygen/double]", + "Spawn Emergency Air Tank" = "hsbspawn&path=[/obj/item/tank/internals/emergency_oxygen/double]", "Standard Tools", "Spawn Flashlight" = "hsbspawn&path=[/obj/item/device/flashlight]", - "Spawn Toolbox" = "hsbspawn&path=[/obj/item/weapon/storage/toolbox/mechanical]", + "Spawn Toolbox" = "hsbspawn&path=[/obj/item/storage/toolbox/mechanical]", "Spawn Light Replacer" = "hsbspawn&path=[/obj/item/device/lightreplacer]", - "Spawn Medical Kit" = "hsbspawn&path=[/obj/item/weapon/storage/firstaid/regular]", + "Spawn Medical Kit" = "hsbspawn&path=[/obj/item/storage/firstaid/regular]", "Spawn All-Access ID" = "hsbaaid", "Building Supplies", @@ -52,10 +52,10 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) "Spawn 50 Reinforced Glass" = "hsbrglass", "Spawn 50 Glass" = "hsbglass", "Spawn Full Cable Coil" = "hsbspawn&path=[/obj/item/stack/cable_coil]", - "Spawn Hyper Capacity Power Cell" = "hsbspawn&path=[/obj/item/weapon/stock_parts/cell/hyper]", - "Spawn Inf. Capacity Power Cell" = "hsbspawn&path=[/obj/item/weapon/stock_parts/cell/infinite]", + "Spawn Hyper Capacity Power Cell" = "hsbspawn&path=[/obj/item/stock_parts/cell/hyper]", + "Spawn Inf. Capacity Power Cell" = "hsbspawn&path=[/obj/item/stock_parts/cell/infinite]", "Spawn Rapid Construction Device" = "hsbrcd", - "Spawn RCD Ammo" = "hsb_safespawn&path=[/obj/item/weapon/rcd_ammo]", + "Spawn RCD Ammo" = "hsb_safespawn&path=[/obj/item/rcd_ammo]", "Spawn Airlock" = "hsbairlock", "Miscellaneous", @@ -171,7 +171,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) P.back.layer = initial(P.back.layer) P.back.plane = initial(P.back.plane) P.back = null - P.back = new/obj/item/weapon/tank/jetpack/oxygen(P) + P.back = new/obj/item/tank/jetpack/oxygen(P) P.back.layer = ABOVE_HUD_LAYER P.back.plane = ABOVE_HUD_PLANE P.update_inv_back() @@ -205,7 +205,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) // All access ID // if("hsbaaid") - var/obj/item/weapon/card/id/gold/ID = new(usr.loc) + var/obj/item/card/id/gold/ID = new(usr.loc) ID.registered_name = usr.real_name ID.assignment = "Sandbox" ID.access = get_all_accesses() @@ -218,7 +218,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) if("hsbrcd") if(!GLOB.hsboxspawn) return - new/obj/item/weapon/construction/rcd/combat(usr.loc) + new/obj/item/construction/rcd/combat(usr.loc) // // New sandbox airlock maker @@ -250,7 +250,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) if(!reaginfo) reaginfo = "Reagent Containers (Clothing) (Other Items) " - var/list/all_items = subtypesof(/obj/item/weapon/reagent_containers) + var/list/all_items = subtypesof(/obj/item/reagent_containers) for(var/typekey in spawn_forbidden) all_items -= typesof(typekey) for(var/O in reverseRange(all_items)) @@ -264,7 +264,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) if(!objinfo) objinfo = "Other Items (Clothing) (Reagent Containers) " - var/list/all_items = subtypesof(/obj/item/) - typesof(/obj/item/clothing) - typesof(/obj/item/weapon/reagent_containers) + var/list/all_items = subtypesof(/obj/item/) - typesof(/obj/item/clothing) - typesof(/obj/item/reagent_containers) for(var/typekey in spawn_forbidden) all_items -= typesof(typekey) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 3e6cca1ac5..3b91816ee9 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -124,7 +124,7 @@ text += " (used [TC_uses] TC) [purchases]" if(TC_uses==0 && traitorwin) var/static/icon/badass = icon('icons/badass.dmi', "badass") - text += "[bicon(badass)]" + text += "[icon2html(badass, world)]" text += objectives diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 5f65c2a96d..59e4db9893 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -3,7 +3,7 @@ ///////////////////////////Veil Render////////////////////// -/obj/item/weapon/veilrender +/obj/item/veilrender name = "veil render" desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city." icon = 'icons/obj/wizard.dmi' @@ -20,7 +20,7 @@ var/rend_desc = "You should run now." var/spawn_fast = 0 //if 1, ignores checking for mobs on loc before spawning -/obj/item/weapon/veilrender/attack_self(mob/user) +/obj/item/veilrender/attack_self(mob/user) if(charges > 0) new /obj/effect/rend(get_turf(user), spawn_type, spawn_amt, rend_desc, spawn_fast) charges-- @@ -57,14 +57,14 @@ qdel(src) /obj/effect/rend/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/nullrod)) + if(istype(I, /obj/item/nullrod)) user.visible_message("[user] seals \the [src] with \the [I].") qdel(src) return else return ..() -/obj/item/weapon/veilrender/vealrender +/obj/item/veilrender/vealrender name = "veal render" desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm." spawn_type = /mob/living/simple_animal/cow @@ -72,7 +72,7 @@ activate_descriptor = "hunger" rend_desc = "Reverberates with the sound of ten thousand moos." -/obj/item/weapon/veilrender/honkrender +/obj/item/veilrender/honkrender name = "honk render" desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast circus." spawn_type = /mob/living/simple_animal/hostile/retaliate/clown @@ -101,7 +101,7 @@ return /////////////////////////////////////////Scrying/////////////////// -/obj/item/weapon/scrying +/obj/item/scrying name = "scrying orb" desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." icon = 'icons/obj/projectiles.dmi' @@ -113,7 +113,7 @@ force = 15 hitsound = 'sound/items/welder2.ogg' -/obj/item/weapon/scrying/attack_self(mob/user) +/obj/item/scrying/attack_self(mob/user) to_chat(user, "You can see...everything!") visible_message("[user] stares into [src], their eyes glazing over.") user.ghostize(1) @@ -191,24 +191,24 @@ H.equip_to_slot_or_del(new hat(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) - H.put_in_hands_or_del(new /obj/item/weapon/shield/riot/roman(H)) - H.put_in_hands_or_del(new /obj/item/weapon/claymore(H)) - H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) + H.put_in_hands_or_del(new /obj/item/shield/riot/roman(H)) + H.put_in_hands_or_del(new /obj/item/claymore(H)) + H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back) /////////////////////Multiverse Blade//////////////////// -/obj/item/weapon/multisword +/obj/item/multisword name = "multiverse sword" desc = "A weapon capable of conquering the universe and beyond. Activate it to summon copies of yourself from others dimensions to fight by your side." - icon = 'icons/obj/weapons.dmi' + icon = 'icons/obj/items_and_weapons.dmi' icon_state = "multiverse" item_state = "multiverse" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' hitsound = 'sound/weapons/bladeslice.ogg' - flags = CONDUCT + flags_1 = CONDUCT_1 slot_flags = SLOT_BELT sharpness = IS_SHARP force = 20 @@ -220,16 +220,16 @@ var/assigned = "unassigned" var/static/list/multiverse = list() -/obj/item/weapon/multisword/New() +/obj/item/multisword/New() ..() multiverse += src -/obj/item/weapon/multisword/Destroy() +/obj/item/multisword/Destroy() multiverse.Remove(src) return ..() -/obj/item/weapon/multisword/attack_self(mob/user) +/obj/item/multisword/attack_self(mob/user) if(user.mind.special_role == "apprentice") to_chat(user, "You know better than to touch your teacher's stuff.") return @@ -265,7 +265,7 @@ spawn_copy(C, get_turf(user.loc), user) to_chat(user, "The sword flashes, and you find yourself face to face with...you!") cooldown = world.time + 400 - for(var/obj/item/weapon/multisword/M in multiverse) + for(var/obj/item/multisword/M in multiverse) if(M.assigned == assigned) M.cooldown = cooldown @@ -275,7 +275,7 @@ to_chat(user, "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies.") -/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user) +/obj/item/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user) var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) C.prefs.copy_to(M, icon_updates=0) M.key = C.key @@ -298,9 +298,9 @@ M.dna.update_dna_identity() equip_copy(M) -/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M) +/obj/item/multisword/proc/equip_copy(var/mob/living/carbon/human/M) - var/obj/item/weapon/multisword/sword = new /obj/item/weapon/multisword + var/obj/item/multisword/sword = new /obj/item/multisword sword.assigned = assigned sword.faction = list("[assigned]") @@ -321,7 +321,7 @@ M.equip_to_slot_or_del(new hat(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/under/roman(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(M), slot_shoes) - M.put_in_hands_or_del(new /obj/item/weapon/shield/riot/roman(M)) + M.put_in_hands_or_del(new /obj/item/shield/riot/roman(M)) M.put_in_hands_or_del(sword) if("wizard") @@ -380,7 +380,7 @@ M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/bikehorn(M), slot_l_store) M.put_in_hands_or_del(sword) if("killer") @@ -391,8 +391,8 @@ M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) + M.equip_to_slot_or_del(new /obj/item/kitchen/knife(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/scalpel(M), slot_r_store) M.put_in_hands_or_del(sword) for(var/obj/item/carried_item in M.get_equipped_items()) carried_item.add_mob_blood(M) @@ -439,7 +439,7 @@ M.update_body_parts() - var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id + var/obj/item/card/id/W = new /obj/item/card/id W.icon_state = "centcom" W.access += ACCESS_MAINT_TUNNELS W.assignment = "Multiverse Traveller" @@ -474,9 +474,9 @@ to_chat(target, "You feel a stabbing pain in [parse_zone(user.zone_selected)]!") target.Knockdown(40) GiveHint(target) - else if(istype(I, /obj/item/weapon/bikehorn)) + else if(istype(I, /obj/item/bikehorn)) to_chat(target, "HONK") - target << 'sound/items/airhorn.ogg' + SEND_SOUND(target, 'sound/items/airhorn.ogg') target.adjustEarDamage(0,3) GiveHint(target) cooldown = world.time +cooldown_time diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 69c26cdb43..2d18c1f9e9 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -19,7 +19,7 @@ /datum/spellbook_entry/proc/IsAvailible() // For config prefs / gamemode restrictions - these are round applied return 1 -/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) // Specific circumstances +/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/spellbook/book) // Specific circumstances if(book.uses " return . -/obj/item/weapon/spellbook +/obj/item/spellbook name = "spell book" desc = "An unearthly tome that glows with power." icon = 'icons/obj/library.dmi' @@ -537,7 +537,7 @@ throw_speed = 2 throw_range = 5 w_class = WEIGHT_CLASS_TINY - persistence_replacement = /obj/item/weapon/spellbook/oneuse/random + persistence_replacement = /obj/item/spellbook/oneuse/random var/uses = 10 var/temp = null var/tab = null @@ -545,18 +545,18 @@ var/list/datum/spellbook_entry/entries = list() var/list/categories = list() -/obj/item/weapon/spellbook/examine(mob/user) +/obj/item/spellbook/examine(mob/user) ..() if(owner) to_chat(user, "There is a small signature on the front cover: \"[owner]\".") else to_chat(user, "It appears to have no author.") -/obj/item/weapon/spellbook/Initialize() +/obj/item/spellbook/Initialize() ..() prepare_spells() -/obj/item/weapon/spellbook/proc/prepare_spells() +/obj/item/spellbook/proc/prepare_spells() var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon for(var/T in entry_types) var/datum/spellbook_entry/E = new T @@ -567,9 +567,9 @@ qdel(E) tab = categories[1] -/obj/item/weapon/spellbook/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/weapon/antag_spawner/contract)) - var/obj/item/weapon/antag_spawner/contract/contract = O +/obj/item/spellbook/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/antag_spawner/contract)) + var/obj/item/antag_spawner/contract/contract = O if(contract.used) to_chat(user, "The contract has been used, you can't get your points back now!") else @@ -579,7 +579,7 @@ if(!isnull(CT.limit)) CT.limit++ qdel(O) - else if(istype(O, /obj/item/weapon/antag_spawner/slaughter_demon)) + else if(istype(O, /obj/item/antag_spawner/slaughter_demon)) to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points.") uses++ for(var/datum/spellbook_entry/item/bloodbottle/BB in entries) @@ -587,7 +587,7 @@ BB.limit++ qdel(O) -/obj/item/weapon/spellbook/proc/GetCategoryHeader(category) +/obj/item/spellbook/proc/GetCategoryHeader(category) var/dat = "" switch(category) if("Offensive") @@ -617,7 +617,7 @@ dat += "These powerful spells change the very fabric of reality. Not always in your favour. " return dat -/obj/item/weapon/spellbook/proc/wrap(content) +/obj/item/spellbook/proc/wrap(content) var/dat = "" dat +=" |