and that just leaves the modules folder

This commit is contained in:
deathride58
2018-07-02 00:28:51 -04:00
parent 63013f8964
commit 91805b8789
231 changed files with 1508 additions and 693 deletions
+1 -1
View File
@@ -193,7 +193,7 @@ AI MODULES
/obj/item/aiModule/zeroth/oneHuman/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
if(..())
return "[targetName], but the AI's existing law 0 cannot be overriden."
return "[targetName], but the AI's existing law 0 cannot be overridden."
return targetName
+3 -2
View File
@@ -15,7 +15,8 @@ RLD
opacity = 0
density = FALSE
anchored = FALSE
flags_1 = CONDUCT_1 | NOBLUDGEON_1
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
force = 0
throwforce = 10
throw_speed = 3
@@ -129,7 +130,7 @@ RLD
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
max_matter = 160
item_flags = NO_MAT_REDEMPTION
item_flags = NO_MAT_REDEMPTION | NOBLUDGEON
has_ammobar = TRUE
var/mode = 1
var/ranged = FALSE
+1 -1
View File
@@ -13,7 +13,7 @@ RSF
opacity = 0
density = FALSE
anchored = FALSE
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
var/matter = 0
var/mode = 1
+2 -1
View File
@@ -9,7 +9,8 @@
materials = list(MAT_METAL=50, MAT_GLASS=50)
flags_1 = CONDUCT_1 | NOBLUDGEON_1
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
slot_flags = ITEM_SLOT_BELT
usesound = 'sound/effects/spray2.ogg'
+1 -1
View File
@@ -49,7 +49,7 @@
change_appearance(I, user)
return
// Why yes, this does closely resemble mob and object attack code.
if(I.flags_1 & NOBLUDGEON_1)
if(I.item_flags & NOBLUDGEON)
return
if(!I.force)
playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1)
+2 -3
View File
@@ -78,8 +78,7 @@
item_state = "card-id"
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
flags_1 = NOBLUDGEON_1
item_flags = NO_MAT_REDEMPTION
item_flags = NO_MAT_REDEMPTION | NOBLUDGEON
var/prox_check = TRUE //If the emag requires you to be in range
/obj/item/card/emag/bluespace
@@ -98,7 +97,7 @@
A.emag_act(user)
/obj/item/card/emagfake
desc = "It's a card with a magnetic strip attached to some circuitry."
desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back."
name = "cryptographic sequencer"
icon_state = "emag"
item_state = "card-id"
+1 -1
View File
@@ -48,7 +48,7 @@
icon_state = "chronogun"
item_state = "chronogun"
w_class = WEIGHT_CLASS_NORMAL
flags_1 = NODROP_1 | DROPDEL_1
item_flags = NODROP | DROPDEL
ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam)
can_charge = 0
fire_delay = 50
+1 -1
View File
@@ -575,7 +575,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? BODY_ZONE_PRECISE_R_HAND : BODY_ZONE_PRECISE_L_HAND
user.apply_damage(5, BURN, hitzone)
user.visible_message("<span class='warning'>After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn [user.p_their()] finger in the process.</span>", "<span class='warning'>You burn yourself while lighting the lighter!</span>")
user.SendSignal(COMSIG_ADD_MOOD_EVENT, "burnt_thumb", /datum/mood_event/burnt_thumb)
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "burnt_thumb", /datum/mood_event/burnt_thumb)
else
set_lit(FALSE)
@@ -215,37 +215,36 @@
name = "Booze-O-Mat Vendor (Machine Board)"
desc = "You can turn the \"brand selection\" dial using a screwdriver."
build_path = /obj/machinery/vending/boozeomat
req_components = list(
/obj/item/vending_refill/boozeomat = 3)
req_components = list(/obj/item/vending_refill/boozeomat = 1)
var/static/list/vending_names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat",
/obj/machinery/vending/coffee = "Solar's Best Hot Drinks",
/obj/machinery/vending/snack = "Getmore Chocolate Corp",
/obj/machinery/vending/cola = "Robust Softdrinks",
/obj/machinery/vending/cigarette = "ShadyCigs Deluxe",
/obj/machinery/vending/games = "\improper Good Clean Fun",
/obj/machinery/vending/autodrobe = "AutoDrobe",
/obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe",
/obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe",
/obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe",
/obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe",
/obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe",
/obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe",
/obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe",
/obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe",
/obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe",
/obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe",
/obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe",
/obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe",
/obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe",
/obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe",
/obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe",
/obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe",
/obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe",
/obj/machinery/vending/clothing = "ClothesMate",
/obj/machinery/vending/medical = "NanoMed Plus",
/obj/machinery/vending/wallmed = "NanoMed")
needs_anchored = FALSE
var/static/list/vending_names_paths = list(
/obj/machinery/vending/boozeomat = "Booze-O-Mat",
/obj/machinery/vending/coffee = "Solar's Best Hot Drinks",
/obj/machinery/vending/snack = "Getmore Chocolate Corp",
/obj/machinery/vending/cola = "Robust Softdrinks",
/obj/machinery/vending/cigarette = "ShadyCigs Deluxe",
/obj/machinery/vending/games = "\improper Good Clean Fun",
/obj/machinery/vending/autodrobe = "AutoDrobe",
/obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe",
/obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe",
/obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe",
/obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe",
/obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe",
/obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe",
/obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe",
/obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe",
/obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe",
/obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe",
/obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe",
/obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe",
/obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe",
/obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe",
/obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe",
/obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe",
/obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe",
/obj/machinery/vending/clothing = "ClothesMate",
/obj/machinery/vending/medical = "NanoMed Plus",
/obj/machinery/vending/wallmed = "NanoMed")
/obj/item/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
@@ -261,7 +260,7 @@
/obj/item/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath)
build_path = typepath
name = "[vending_names_paths[build_path]] Vendor (Machine Board)"
req_components = list(initial(typepath.refill_canister) = initial(typepath.refill_count))
req_components = list(initial(typepath.refill_canister) = 1)
/obj/item/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M)
for(var/typepath in vending_names_paths)
@@ -865,14 +864,14 @@
build_path = /obj/machinery/vending/donksofttoyvendor
req_components = list(
/obj/item/stack/sheet/glass = 1,
/obj/item/vending_refill/donksoft = 3)
/obj/item/vending_refill/donksoft = 1)
/obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor
name = "Syndicate Donksoft Toy Vendor (Machine Board)"
build_path = /obj/machinery/vending/toyliberationstation
req_components = list(
/obj/item/stack/sheet/glass = 1,
/obj/item/vending_refill/donksoft = 3)
/obj/item/vending_refill/donksoft = 1)
/obj/item/circuitboard/machine/dish_drive
name = "Dish Drive (Machine Board)"
+4 -4
View File
@@ -19,7 +19,7 @@
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
w_class = WEIGHT_CLASS_TINY
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
throwforce = 0
throw_speed = 3
throw_range = 7
@@ -61,7 +61,7 @@
return
//I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.
//So this is a workaround. This also makes more sense from an IC standpoint. ~Carn
target.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
if(user.client && ((target in user.client.screen) && !user.is_holding(target)))
to_chat(user, "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>")
else if(istype(target, /obj/effect/decal/cleanable))
@@ -88,7 +88,7 @@
var/obj/effect/decal/cleanable/C = locate() in target
qdel(C)
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
target.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
target.wash_cream()
return
@@ -117,7 +117,7 @@
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50)
/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
M.SendSignal(COMSIG_ADD_MOOD_EVENT, "honk", /datum/mood_event/honk)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "honk", /datum/mood_event/honk)
return ..()
/obj/item/bikehorn/suicide_act(mob/user)
+6 -11
View File
@@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(PDAs)
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_TINY
slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
@@ -175,12 +175,12 @@ GLOBAL_LIST_EMPTY(PDAs)
return attack_self(M)
return ..()
/obj/item/pda/attack_self(mob/user)
/obj/item/pda/interact(mob/user)
if(!user.IsAdvancedToolUser())
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
. = ..()
..()
var/datum/asset/spritesheet/assets = get_asset_datum(/datum/asset/spritesheet/simple/pda)
assets.send(user)
@@ -519,16 +519,11 @@ GLOBAL_LIST_EMPTY(PDAs)
if("Ringtone")
var/t = input(U, "Please enter new ringtone", name, ttone) as text
if(in_range(src, U) && loc == U && t)
GET_COMPONENT(hidden_uplink, /datum/component/uplink)
if(hidden_uplink && (trim(lowertext(t)) == trim(lowertext(lock_code))))
hidden_uplink.locked = FALSE
hidden_uplink.interact(U)
to_chat(U, "The PDA softly beeps.")
if(SEND_SIGNAL(src, COMSIG_PDA_CHANGE_RINGTONE, U, t) & COMPONENT_STOP_RINGTONE_CHANGE)
U << browse(null, "window=pda")
src.mode = 0
return
else
t = copytext(sanitize(t), 1, 20)
ttone = t
ttone = copytext(sanitize(t), 1, 20)
else
U << browse(null, "window=pda")
return
+1 -1
View File
@@ -549,7 +549,7 @@ Code:
/obj/item/cartridge/Topic(href, href_list)
..()
if (!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
if(!usr.canUseTopic(src, !issilicon(usr)))
usr.unset_machine()
usr << browse(null, "window=pda")
return
+1 -1
View File
@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_BELT
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
var/flush = FALSE
var/mob/living/silicon/ai/AI
@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_BELT
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
/obj/item/anomaly_neutralizer/afterattack(atom/target, mob/user, proximity)
..()
@@ -14,7 +14,7 @@
item_state = "camera_bug"
throw_speed = 4
throw_range = 20
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
var/obj/machinery/camera/current = null
@@ -2,7 +2,8 @@
name = "chameleon-projector"
icon = 'icons/obj/device.dmi'
icon_state = "shield0"
flags_1 = CONDUCT_1 | NOBLUDGEON_1
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
slot_flags = ITEM_SLOT_BELT
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
@@ -49,7 +50,7 @@
return
if(iseffect(target))
if(!(istype(target, /obj/effect/decal))) //be a footprint
return
return
playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6)
to_chat(user, "<span class='notice'>Scanned [target].</span>")
var/obj/temp = new/obj()
@@ -9,7 +9,7 @@
w_class = WEIGHT_CLASS_SMALL
throw_range = 4
throw_speed = 1
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
force = 3
attack_verb = list("blown up", "exploded", "detonated")
materials = list(MAT_METAL=50, MAT_GLASS=30)
@@ -85,7 +85,7 @@
"<span class='danger'>You direct [src] to [M]'s eyes.</span>")
if(M.stat == DEAD || (M.has_trait(TRAIT_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind
to_chat(user, "<span class='warning'>[M]'s pupils don't react to the light!</span>")
else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-RAY vision
else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-ray vision
to_chat(user, "<span class='danger'>[M]'s pupils give an eerie glow!</span>")
else //they're okay!
to_chat(user, "<span class='notice'>[M]'s pupils narrow.</span>")
@@ -399,6 +399,11 @@
to_chat(user, "<span class='warning'>\The [src] needs time to recharge!</span>")
return
/obj/item/flashlight/emp/debug //for testing emp_act()
name = "debug EMP flashlight"
emp_max_charges = 100
emp_cur_charges = 100
// Glowsticks, in the uncomfortable range of similar to flares,
// but not similar enough to make it worth a refactor
/obj/item/flashlight/glowstick
@@ -530,5 +535,6 @@
desc = "This shouldn't exist outside of someone's head, how are you seeing this?"
brightness_on = 15
flashlight_power = 1
flags_1 = CONDUCT_1 | DROPDEL_1
flags_1 = CONDUCT_1
item_flags = DROPDEL
actions_types = list()
@@ -5,7 +5,7 @@
icon_state = "signmaker_engi"
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
@@ -105,4 +105,4 @@
/obj/structure/projected_forcefield/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
if(sound_effect)
play_attack_sound(damage_amount, damage_type, damage_flag)
generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0)
generator.shield_integrity = max(generator.shield_integrity - damage_amount, 0)
@@ -9,7 +9,7 @@
#define RAD_GRACE_PERIOD 2
/obj/item/geiger_counter //DISCLAIMER: I know nothing about how real-life Geiger counters work. This will not be realistic. ~Xhuis
name = "geiger counter"
name = "\improper Geiger counter"
desc = "A handheld device used for detecting and measuring radiation pulses."
icon = 'icons/obj/device.dmi'
icon_state = "geiger_off"
+3 -3
View File
@@ -34,7 +34,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
emped = TRUE
cut_overlay("working")
add_overlay("emp")
addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early
addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_UNIQUE|TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early
SStgui.close_uis(src) //Close the UI control if it is open.
/obj/item/gps/proc/reboot()
@@ -156,11 +156,11 @@ GLOBAL_LIST_EMPTY(GPS_list)
icon_state = "gps-b"
gpstag = "BORG0"
desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams."
flags_1 = NODROP_1
item_flags = NODROP
/obj/item/gps/internal
icon_state = null
flags_1 = ABSTRACT_1
item_flags = ABSTRACT
gpstag = "Eerie Signal"
desc = "Report to a coder immediately."
invisibility = INVISIBILITY_MAXIMUM
@@ -5,7 +5,8 @@
icon_state = "pointer"
item_state = "pen"
var/pointer_icon_state
flags_1 = CONDUCT_1 | NOBLUDGEON_1
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL=500, MAT_GLASS=500)
w_class = WEIGHT_CLASS_SMALL
@@ -41,7 +41,7 @@
/obj/item/lightreplacer
name = "light replacer"
desc = "A device to automatically replace lights. Refill with broken or working lightbulbs, or sheets of glass."
desc = "A device to automatically replace lights. Refill with broken or working light bulbs, or sheets of glass."
icon = 'icons/obj/janitor.dmi'
icon_state = "lightreplacer0"
+1 -1
View File
@@ -60,7 +60,7 @@
to_chat(user, "<span class='warning'>Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless.</span>")
return
if(io.io_type != selected_io.io_type)
to_chat(user, "<span class='warning'>Those two types of channels are incompatable. The first is a [selected_io.io_type], \
to_chat(user, "<span class='warning'>Those two types of channels are incompatible. The first is a [selected_io.io_type], \
while the second is a [io.io_type].</span>")
return
if(io.holder.assembly && io.holder.assembly != selected_io.holder.assembly)
+1 -1
View File
@@ -155,5 +155,5 @@
. = ..()
if (. & EMP_PROTECT_SELF)
return
if(pai)
if(pai && !pai.holoform)
pai.emp_act(severity)
@@ -3,7 +3,7 @@
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "labeler1"
item_state = "flight"
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
var/paint_color = "grey"
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
@@ -53,8 +53,8 @@
user.put_in_hands(A)
A.add_fingerprint(user)
if(src.flags_1 & NODROP_1)
A.flags_1 |= NODROP_1
if(item_flags & NODROP)
A.item_flags |= NODROP
else
return ..()
+4 -10
View File
@@ -47,6 +47,7 @@
return BRUTELOSS
/obj/item/radio/proc/set_frequency(new_frequency)
SEND_SIGNAL(src, COMSIG_RADIO_NEW_FREQUENCY, args)
remove_radio(src, frequency)
frequency = add_radio(src, new_frequency)
@@ -100,12 +101,11 @@
AddComponent(/datum/component/empprotection, EMP_PROTECT_WIRES)
/obj/item/radio/interact(mob/user)
if (..())
return
if(unscrewed && !isAI(user))
wires.interact(user)
add_fingerprint(user)
else
ui_interact(user)
..()
/obj/item/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
@@ -160,13 +160,7 @@
tune = tune * 10
. = TRUE
if(.)
frequency = sanitize_frequency(tune, freerange)
set_frequency(frequency)
GET_COMPONENT(hidden_uplink, /datum/component/uplink)
if(hidden_uplink && (frequency == traitor_frequency))
hidden_uplink.locked = FALSE
hidden_uplink.interact(usr)
ui.close()
set_frequency(sanitize_frequency(tune, freerange))
if("listen")
listening = !listening
. = TRUE
@@ -49,7 +49,7 @@
if(iscarbon(user))
var/mob/living/carbon/C = user
if(C.get_item_by_slot(SLOT_HEAD) == src)
if(flags_1 & NODROP_1 && !struggling)
if((item_flags & NODROP) && !struggling)
struggling = TRUE
var/fear_string
switch(time_left)
@@ -74,7 +74,7 @@
else
user.visible_message("<span class='warning'>The lock on [user]'s [name] pops open!</span>", \
"<span class='userdanger'>You force open the padlock!</span>", "<i>You hear a single, pronounced click!</i>")
flags_1 &= ~NODROP_1
item_flags &= ~NODROP
struggling = FALSE
else
..()
@@ -116,7 +116,7 @@
/obj/item/reverse_bear_trap/proc/reset()
ticking = FALSE
flags_1 &= ~NODROP_1
item_flags &= ~NODROP
soundloop.stop()
soundloop2.stop()
STOP_PROCESSING(SSprocessing, src)
@@ -125,7 +125,7 @@
ticking = TRUE
escape_chance = initial(escape_chance) //we keep these vars until re-arm, for tracking purposes
time_left = initial(time_left)
flags_1 |= NODROP_1
item_flags |= NODROP
soundloop.start()
soundloop2.mid_length = initial(soundloop2.mid_length)
soundloop2.start()
+32 -5
View File
@@ -68,7 +68,8 @@ SLIME SCANNER
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
flags_1 = CONDUCT_1 | NOBLUDGEON_1
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
slot_flags = ITEM_SLOT_BELT
throwforce = 3
w_class = WEIGHT_CLASS_TINY
@@ -256,7 +257,32 @@ SLIME SCANNER
// Species and body temperature
if(ishuman(M))
var/mob/living/carbon/human/H = M
to_chat(user, "<span class='info'>Species: [H.dna.species.name]</span>")
var/datum/species/S = H.dna.species
var/mutant = FALSE
if (H.dna.check_mutation(HULK))
mutant = TRUE
else if (S.mutantlungs != initial(S.mutantlungs))
mutant = TRUE
else if (S.mutant_brain != initial(S.mutant_brain))
mutant = TRUE
else if (S.mutant_heart != initial(S.mutant_heart))
mutant = TRUE
else if (S.mutanteyes != initial(S.mutanteyes))
mutant = TRUE
else if (S.mutantears != initial(S.mutantears))
mutant = TRUE
else if (S.mutanthands != initial(S.mutanthands))
mutant = TRUE
else if (S.mutanttongue != initial(S.mutanttongue))
mutant = TRUE
else if (S.mutanttail != initial(S.mutanttail))
mutant = TRUE
else if (S.mutantliver != initial(S.mutantliver))
mutant = TRUE
else if (S.mutantstomach != initial(S.mutantstomach))
mutant = TRUE
to_chat(user, "<span class='info'>Species: [S.name][mutant ? "-derived mutant" : ""]</span>")
to_chat(user, "<span class='info'>Body temperature: [round(M.bodytemperature-T0C,0.1)] &deg;C ([round(M.bodytemperature*1.8-459.67,0.1)] &deg;F)</span>")
// Time of death
@@ -348,7 +374,8 @@ SLIME SCANNER
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
flags_1 = CONDUCT_1 | NOBLUDGEON_1
flags_1 = CONDUCT_1
item_flags = NOBLUDGEON
slot_flags = ITEM_SLOT_BELT
throwforce = 0
throw_speed = 3
@@ -428,7 +455,7 @@ SLIME SCANNER
if(user.canUseTopic(src))
if(cooldown)
to_chat(user, "<span class='warning'>[src]'s barometer function is prepraring itself.</span>")
to_chat(user, "<span class='warning'>[src]'s barometer function is preparing itself.</span>")
return
var/turf/T = get_turf(user)
@@ -575,4 +602,4 @@ SLIME SCANNER
if(T.effectmod)
to_chat(user, "<span class='notice'>Core mutation in progress: [T.effectmod]</span>")
to_chat(user, "<span_class = 'notice'>Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]</span>")
to_chat(user, "========================")
to_chat(user, "========================")
+3 -3
View File
@@ -36,7 +36,7 @@
/obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6
name = "die"
desc = "A die with six sides. Basic and servicable."
desc = "A die with six sides. Basic and serviceable."
icon = 'icons/obj/dice.dmi'
icon_state = "d6"
w_class = WEIGHT_CLASS_TINY
@@ -111,7 +111,7 @@
/obj/item/dice/d00
name = "d00"
desc = "A die with ten sides. Works better for d100 rolls than a golfball."
desc = "A die with ten sides. Works better for d100 rolls than a golf ball."
icon_state = "d00"
sides = 10
@@ -123,7 +123,7 @@
/obj/item/dice/d20
name = "d20"
desc = "A die with twenty sides. The prefered die to throw at the GM."
desc = "A die with twenty sides. The preferred die to throw at the GM."
icon_state = "d20"
sides = 20
+3 -3
View File
@@ -98,12 +98,12 @@
add_mutations_static = list(HULK)
/obj/item/dnainjector/xraymut
name = "\improper DNA injector (Xray)"
name = "\improper DNA injector (X-ray)"
desc = "Finally you can see what the Captain does."
add_mutations_static = list(XRAY)
/obj/item/dnainjector/antixray
name = "\improper DNA injector (Anti-Xray)"
name = "\improper DNA injector (Anti-X-ray)"
desc = "It will make you see harder."
remove_mutations_static = list(XRAY)
@@ -160,7 +160,7 @@
/obj/item/dnainjector/antitour
name = "\improper DNA injector (Anti-Tour.)"
desc = "Will cure tourrets."
desc = "Will cure Tourette's."
remove_mutations_static = list(TOURETTES)
/obj/item/dnainjector/tourmut
+1 -1
View File
@@ -95,7 +95,7 @@ GLOBAL_LIST_EMPTY(possible_gifts)
var/list/gift_types_list = subtypesof(/obj/item)
for(var/V in gift_types_list)
var/obj/item/I = V
if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.flags_1) & ABSTRACT_1))
if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT))
gift_types_list -= V
GLOB.possible_gifts = gift_types_list
var/gift_type = pick(GLOB.possible_gifts)
+5 -5
View File
@@ -32,7 +32,7 @@
/obj/item/book/granter/action
var/granted_action
var/actionname = "catching bugs" //might not seem needed but this makes it so you can safely name aciton buttons toggle this or that without it fucking up the granter, also caps
var/actionname = "catching bugs" //might not seem needed but this makes it so you can safely name action buttons toggle this or that without it fucking up the granter, also caps
/obj/item/book/granter/action/attack_self(mob/user)
. = ..()
@@ -73,7 +73,7 @@
/datum/action/innate/drink_fling
name = "Drink Flinging"
desc = "Toggles your ability to satifyingly throw glasses without spilling them."
desc = "Toggles your ability to satisfyingly throw glasses without spilling them."
button_icon_state = "drinkfling_off"
check_flags = 0
@@ -151,7 +151,7 @@
spellname = "sacred flame"
icon_state ="booksacredflame"
desc = "Become one with the flames that burn within... and invite others to do so as well."
remarks = list("Well, it's one way to stop an attacker...", "I'm gonna need some good gear to stop myself from burning to death...", "Keep a fire extingusher handy, got it...", "I think I just burned my hand...", "Apply flame directly to chest for proper ignition...", "No pain, no gain...", "One with the flame...")
remarks = list("Well, it's one way to stop an attacker...", "I'm gonna need some good gear to stop myself from burning to death...", "Keep a fire extinguisher handy, got it...", "I think I just burned my hand...", "Apply flame directly to chest for proper ignition...", "No pain, no gain...", "One with the flame...")
/obj/item/book/granter/spell/smoke
spell = /obj/effect/proc_holder/spell/targeted/smoke
@@ -222,7 +222,7 @@
spellname = "forcewall"
icon_state ="bookforcewall"
desc = "This book has a dedication to mimes everywhere inside the front cover."
remarks = list("I can go through the wall! Neat.", "Why are there so many mime references...?", "This would cause much grief in a hallway...", "This is some suprisingly strong magic to create a wall nobody can pass through...", "Why the dumb stance? It's just a flick of the hand...", "Why are the pages so hard to turn, is this even paper?", "I can't mo Oh, i'm fine...")
remarks = list("I can go through the wall! Neat.", "Why are there so many mime references...?", "This would cause much grief in a hallway...", "This is some surprisingly strong magic to create a wall nobody can pass through...", "Why the dumb stance? It's just a flick of the hand...", "Why are the pages so hard to turn, is this even paper?", "I can't mo Oh, i'm fine...")
/obj/item/book/granter/spell/forcewall/recoil(mob/living/user)
..()
@@ -253,7 +253,7 @@
if(ishuman(user))
to_chat(user,"<font size='15' color='red'><b>HORSIE HAS RISEN</b></font>")
var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead
magichead.flags_1 |= NODROP_1 //curses!
magichead.item_flags |= NODROP //curses!
magichead.flags_inv &= ~HIDEFACE //so you can still see their face
magichead.voicechange = TRUE //NEEEEIIGHH
if(!user.dropItemToGround(user.wear_mask))
@@ -0,0 +1,17 @@
/obj/item/grenade/antigravity
name = "antigravity grenade"
icon_state = "emp"
item_state = "emp"
var/range = 7
var/forced_value = 0
var/duration = 300
/obj/item/grenade/antigravity/prime()
update_mob()
for(var/turf/T in view(range,src))
var/datum/component/C = T.AddComponent(/datum/component/forced_gravity,forced_value)
QDEL_IN(C,duration)
qdel(src)
@@ -75,6 +75,9 @@
return
to_chat(user, "<span class='notice'>You add [I] to the [initial(name)] assembly.</span>")
beakers += I
var/reagent_list = pretty_string_from_reagent_list(I.reagents)
add_logs(user, src, "inserted [I]", addition = "[reagent_list] inside.")
log_game("[key_name(user)] inserted [I] into [src] containing [reagent_list] ")
else
to_chat(user, "<span class='warning'>[I] is empty!</span>")
@@ -111,6 +114,11 @@
if(beakers.len)
for(var/obj/O in beakers)
O.forceMove(drop_location())
if(!O.reagents)
continue
var/reagent_list = pretty_string_from_reagent_list(O.reagents)
add_logs(user, src, "removed [O]", addition = "[reagent_list] inside.")
log_game("[key_name(user)] removed [O] from [src] containing [reagent_list]")
beakers = list()
to_chat(user, "<span class='notice'>You open the [initial(name)] assembly and remove the payload.</span>")
return // First use of the wrench remove beakers, then use the wrench to remove the activation mechanism.
@@ -155,6 +163,20 @@
if(nadeassembly)
nadeassembly.on_found(finder)
/obj/item/grenade/chem_grenade/log_grenade(mob/user, turf/T)
..()
var/reagent_string = ""
var/beaker_number = 1
for(var/obj/exploded_beaker in beakers)
if(!exploded_beaker.reagents)
continue
reagent_string += "[exploded_beaker] [beaker_number++] : " + pretty_string_from_reagent_list(exploded_beaker.reagents.reagent_list) + ";"
var/message = "[src] primed by [user] at [ADMIN_VERBOSEJMP(T)] contained [reagent_string]."
GLOB.bombers += message
message_admins(message)
log_game("[src] primed by [user] at [AREACOORD(T)] contained [reagent_string].")
add_logs(user, src, "primed", addition = "[reagent_string] inside.")
/obj/item/grenade/chem_grenade/prime()
if(stage != READY)
return
@@ -2,7 +2,7 @@
//Clusterbang
////////////////////
/obj/item/grenade/clusterbuster
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
desc = "Use of this weapon may constitute a war crime in your area, consult your local captain."
name = "clusterbang"
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang"
@@ -12,7 +12,6 @@
return
for(var/mob/living/M in get_hearers_in_view(7, flashbang_turf))
bang(get_turf(M), M)
qdel(src)
/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M)
+3 -2
View File
@@ -5,7 +5,8 @@
item_state = "plastic-explosive"
lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi'
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
flags_1 = NONE
det_time = 10
display_timer = 0
w_class = WEIGHT_CLASS_SMALL
@@ -217,7 +218,7 @@
return
if(loc == AM)
return
if(AM.SendSignal(COMSIG_CONTAINS_STORAGE) && !AM.SendSignal(COMSIG_IS_STORAGE_LOCKED))
if(SEND_SIGNAL(AM, COMSIG_CONTAINS_STORAGE) && !SEND_SIGNAL(AM, COMSIG_IS_STORAGE_LOCKED))
return
to_chat(user, "<span class='notice'>You start planting the bomb...</span>")
@@ -13,7 +13,7 @@
/obj/item/grenade/syndieminibomb/concussion
name = "HE Grenade"
desc = "A compact shrapnel grenade meant to devestate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction."
desc = "A compact shrapnel grenade meant to devastate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction."
icon_state = "concussion"
/obj/item/grenade/syndieminibomb/concussion/prime()
+3 -2
View File
@@ -297,7 +297,8 @@
armed = 1
icon_state = "e_snare"
trap_damage = 0
flags_1 = DROPDEL_1
item_flags = DROPDEL
flags_1 = NONE
/obj/item/restraints/legcuffs/beartrap/energy/New()
..()
@@ -361,4 +362,4 @@
var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
B.Crossed(hit_atom)
qdel(src)
..()
..()
+4 -4
View File
@@ -86,7 +86,7 @@
do_attack_animation(master, null, src)
master.emote("scream")
master.remove_status_effect(STATUS_EFFECT_HISGRACE)
flags_1 &= ~NODROP_1
item_flags &= ~NODROP
master.Knockdown(60)
master.adjustBruteLoss(master.maxHealth)
playsound(master, 'sound/effects/splat.ogg', 100, 0)
@@ -170,20 +170,20 @@
update_stats()
/obj/item/his_grace/proc/update_stats()
flags_1 &= ~NODROP_1
item_flags &= ~NODROP
var/mob/living/master = get_atom_on_turf(src, /mob/living)
switch(bloodthirst)
if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP)
if(HIS_GRACE_CONSUME_OWNER > prev_bloodthirst)
master.visible_message("<span class='userdanger'>[src] enters a frenzy!</span>")
if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER)
flags_1 |= NODROP_1
item_flags |= NODROP
if(HIS_GRACE_STARVING > prev_bloodthirst)
master.visible_message("<span class='boldwarning'>[src] is starving!</span>", "<span class='his_grace big'>[src]'s bloodlust overcomes you. [src] must be fed, or you will become His meal.\
[force_bonus < 15 ? " And still, His power grows.":""]</span>")
force_bonus = max(force_bonus, 15)
if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING)
flags_1 |= NODROP_1
item_flags |= NODROP
if(HIS_GRACE_FAMISHED > prev_bloodthirst)
master.visible_message("<span class='warning'>[src] is very hungry!</span>", "<span class='his_grace big'>Spines sink into your hand. [src] must feed immediately.\
[force_bonus < 10 ? " His power grows.":""]</span>")
+1 -2
View File
@@ -11,7 +11,7 @@
throwforce = 0
throw_speed = 3
throw_range = 7
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
var/list/signs = list()
var/max_signs = 10
var/creation_time = 0 //time to create a holosign in deciseconds.
@@ -122,4 +122,3 @@
for(var/H in signs)
qdel(H)
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
+4 -5
View File
@@ -229,7 +229,7 @@
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
name = "god hand"
desc = "This hand of yours glows with an awesome power!"
flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
item_flags = ABSTRACT | NODROP | DROPDEL
w_class = WEIGHT_CLASS_HUGE
hitsound = 'sound/weapons/sear.ogg'
damtype = BURN
@@ -307,7 +307,7 @@
slot_flags = ITEM_SLOT_BELT
/obj/item/nullrod/claymore/katana
name = "hanzo steel"
name = "\improper Hanzo steel"
desc = "Capable of cutting clean through a holy claymore."
icon_state = "katana"
item_state = "katana"
@@ -449,7 +449,6 @@
name = "possessed chainsaw sword"
desc = "Suffer not a heretic to live."
slot_flags = ITEM_SLOT_BELT
force = 30
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
@@ -473,7 +472,7 @@
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
w_class = WEIGHT_CLASS_HUGE
flags_1 = NODROP_1 | ABSTRACT_1
item_flags = NODROP | ABSTRACT
sharpness = IS_SHARP
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
@@ -544,7 +543,7 @@
item_state = "arm_blade"
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
flags_1 = ABSTRACT_1 | NODROP_1
item_flags = ABSTRACT | NODROP
w_class = WEIGHT_CLASS_HUGE
sharpness = IS_SHARP
+3 -3
View File
@@ -4,7 +4,7 @@
desc = "A label on the side of this potato reads \"Product of DonkCo Service Wing. Activate far away from populated areas. Device will only attach to sapient creatures.\" <span class='boldnotice'>You can attack anyone with it to force it on them instead of yourself!</span>"
icon = 'icons/obj/hydroponics/harvest.dmi'
icon_state = "potato"
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
force = 0
var/icon_off = "potato"
var/icon_on = "potato_active"
@@ -133,7 +133,7 @@
return
update_icon()
if(sticky)
flags_1 |= NODROP_1
item_flags |= NODROP
name = "primed [name]"
activation_time = timer + world.time
detonation_timerid = addtimer(CALLBACK(src, .proc/detonate), delay, TIMER_STOPPABLE)
@@ -146,7 +146,7 @@
/obj/item/hot_potato/proc/deactivate()
update_icon()
name = initial(name)
flags_1 &= ~NODROP_1
item_flags &= ~NODROP
deltimer(detonation_timerid)
STOP_PROCESSING(SSfastprocess, src)
detonation_timerid = null
+22 -8
View File
@@ -8,7 +8,7 @@
item_color = "b"
var/allow_multiple = FALSE
var/uses = -1
flags_1 = DROPDEL_1
item_flags = DROPDEL
/obj/item/implant/proc/trigger(emote, mob/living/carbon/source)
@@ -18,7 +18,7 @@
return
/obj/item/implant/proc/activate()
return
SEND_SIGNAL(src, COMSIG_IMPLANT_ACTIVATED)
/obj/item/implant/ui_action_click()
activate("action_button")
@@ -41,12 +41,26 @@
//return 1 if the implant injects
//return 0 if there is no room for implant / it fails
/obj/item/implant/proc/implant(mob/living/target, mob/user, silent = FALSE)
if(SEND_SIGNAL(src, COMSIG_IMPLANT_IMPLANTING, args) & COMPONENT_STOP_IMPLANTING)
return
LAZYINITLIST(target.implants)
if(!target.can_be_implanted() || !can_be_implanted_in(target))
return 0
return FALSE
for(var/X in target.implants)
if(istype(X, type))
var/obj/item/implant/imp_e = X
var/obj/item/implant/imp_e = X
var/flags = SEND_SIGNAL(imp_e, COMSIG_IMPLANT_OTHER, args, src)
if(flags & COMPONENT_DELETE_NEW_IMPLANT)
UNSETEMPTY(target.implants)
qdel(src)
return TRUE
if(flags & COMPONENT_DELETE_OLD_IMPLANT)
qdel(imp_e)
continue
if(flags & COMPONENT_STOP_IMPLANTING)
UNSETEMPTY(target.implants)
return FALSE
if(istype(imp_e, type))
if(!allow_multiple)
if(imp_e.uses < initial(imp_e.uses)*2)
if(uses == -1)
@@ -54,9 +68,9 @@
else
imp_e.uses = min(imp_e.uses + uses, initial(imp_e.uses)*2)
qdel(src)
return 1
return TRUE
else
return 0
return FALSE
forceMove(target)
imp_in = target
@@ -72,7 +86,7 @@
if(user)
add_logs(user, target, "implanted", "\a [name]")
return 1
return TRUE
/obj/item/implant/proc/removed(mob/living/source, silent = FALSE, special = 0)
moveToNullspace()
@@ -8,6 +8,7 @@
var/cooldown = 30
/obj/item/implant/abductor/activate()
. = ..()
if(cooldown == initial(cooldown))
home.Retrieve(imp_in,1)
cooldown = 0
@@ -37,6 +37,7 @@
activate(reagents.total_volume)
/obj/item/implant/chem/activate(cause)
. = ..()
if(!cause || !imp_in)
return 0
var/mob/living/carbon/R = imp_in
@@ -27,6 +27,7 @@
return dat
/obj/item/implant/explosive/activate(cause)
. = ..()
if(!cause || !imp_in || active)
return 0
if(cause == "action_button" && !popup)
@@ -7,6 +7,7 @@
/obj/item/implant/freedom/activate()
. = ..()
uses--
to_chat(imp_in, "You feel a faint click.")
if(iscarbon(imp_in))
@@ -15,6 +15,7 @@
return dat
/obj/item/implant/krav_maga/activate()
. = ..()
var/mob/living/carbon/human/H = imp_in
if(!ishuman(H))
return
@@ -31,6 +31,7 @@
return dat
/obj/item/implant/adrenalin/activate()
. = ..()
uses--
to_chat(imp_in, "<span class='notice'>You feel a sudden surge of energy!</span>")
imp_in.SetStun(0)
@@ -54,6 +55,7 @@
uses = 3
/obj/item/implant/emp/activate()
. = ..()
uses--
empulse(imp_in, 3, 5)
if(!uses)
@@ -88,6 +90,7 @@
icon_state = "walkietalkie"
/obj/item/implant/radio/activate()
. = ..()
// needs to be GLOB.deep_inventory_state otherwise it won't open
radio.ui_interact(usr, "main", null, FALSE, null, GLOB.deep_inventory_state)
@@ -6,7 +6,8 @@
var/max_slot_stacking = 4
/obj/item/implant/storage/activate()
SendSignal(COMSIG_TRY_STORAGE_SHOW, imp_in, TRUE)
. = ..()
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SHOW, imp_in, TRUE)
/obj/item/implant/storage/removed(source, silent = FALSE, special = 0)
. = ..()
@@ -11,32 +11,6 @@
. = ..()
AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, starting_tc)
/obj/item/implant/uplink/implant(mob/living/target, mob/user, silent = FALSE)
GET_COMPONENT(hidden_uplink, /datum/component/uplink)
if(hidden_uplink)
for(var/X in target.implants)
if(istype(X, type))
var/obj/item/implant/imp_e = X
GET_COMPONENT_FROM(their_hidden_uplink, /datum/component/uplink, imp_e)
if(their_hidden_uplink)
their_hidden_uplink.telecrystals += hidden_uplink.telecrystals
qdel(src)
return TRUE
else
qdel(imp_e) //INFERIOR AND EMPTY!
if(..())
if(hidden_uplink)
hidden_uplink.owner = "[user.key]"
return TRUE
return FALSE
/obj/item/implant/uplink/activate()
GET_COMPONENT(hidden_uplink, /datum/component/uplink)
if(hidden_uplink)
hidden_uplink.locked = FALSE
hidden_uplink.interact(usr)
/obj/item/implanter/uplink
name = "implanter (uplink)"
imp_type = /obj/item/implant/uplink
+1 -1
View File
@@ -137,7 +137,7 @@
icon_state = "bone_dagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
desc = "A sharpened bone. The bare mimimum in survival."
desc = "A sharpened bone. The bare minimum in survival."
force = 15
throwforce = 15
materials = list()
+46 -1
View File
@@ -31,7 +31,7 @@
/obj/item/melee/synthetic_arm_blade
name = "synthetic arm blade"
desc = "A grotesque blade that on closer inspection seems made of synthentic flesh, it still feels like it would hurt very badly as a weapon."
desc = "A grotesque blade that on closer inspection seems made of synthetic flesh, it still feels like it would hurt very badly as a weapon."
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "arm_blade"
item_state = "arm_blade"
@@ -88,6 +88,51 @@
if(istype(B))
playsound(B, 'sound/items/sheath.ogg', 25, 1)
/obj/item/melee/sabre/suicide_act(mob/living/user)
user.visible_message("<span class='suicide'>[user] is trying to cut off all [user.p_their()] limbs with [src]! it looks like [user.p_theyre()] trying to commit suicide!</span>")
var/i = 0
var/originally_nodropped = item_flags & NODROP
item_flags |= NODROP
if(iscarbon(user))
var/mob/living/carbon/Cuser = user
var/obj/item/bodypart/holding_bodypart = Cuser.get_holding_bodypart_of_item(src)
var/list/limbs_to_dismember
var/list/arms = list()
var/list/legs = list()
var/obj/item/bodypart/bodypart
for(bodypart in Cuser.bodyparts)
if(bodypart == holding_bodypart)
continue
if(bodypart.body_part & ARMS)
arms += bodypart
else if (bodypart.body_part & LEGS)
legs += bodypart
limbs_to_dismember = arms + legs
if(holding_bodypart)
limbs_to_dismember += holding_bodypart
var/speedbase = abs((4 SECONDS) / limbs_to_dismember.len)
for(bodypart in limbs_to_dismember)
i++
addtimer(CALLBACK(src, .proc/suicide_dismember, user, bodypart), speedbase * i)
addtimer(CALLBACK(src, .proc/manual_suicide, user, originally_nodropped), (5 SECONDS) * i)
return MANUAL_SUICIDE
/obj/item/melee/sabre/proc/suicide_dismember(mob/living/user, obj/item/bodypart/affecting)
if(!QDELETED(affecting) && affecting.dismemberable && affecting.owner == user && !QDELETED(user))
playsound(user, hitsound, 25, 1)
affecting.dismember(BRUTE)
user.adjustBruteLoss(20)
/obj/item/melee/sabre/proc/manual_suicide(mob/living/user, originally_nodropped)
if(!QDELETED(user))
user.adjustBruteLoss(200)
user.death(FALSE)
if(!originally_nodropped)
item_flags &= ~NODROP
/obj/item/melee/classic_baton
name = "police baton"
desc = "A wooden truncheon for beating criminal scum."
+13 -7
View File
@@ -17,6 +17,7 @@
var/mopcap = 5
var/mopspeed = 30
force_string = "robust... against germs"
var/insertable = TRUE
/obj/item/mop/New()
..()
@@ -25,7 +26,7 @@
/obj/item/mop/proc/clean(turf/A)
if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1) || reagents.has_reagent("cleaner", 1))
A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
for(var/obj/effect/O in A)
if(is_cleanable(O))
qdel(O)
@@ -62,14 +63,16 @@
/obj/item/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
J.put_in_cart(src, user)
J.mymop=src
J.update_icon()
if(insertable)
J.put_in_cart(src, user)
J.mymop=src
J.update_icon()
else
to_chat(user, "<span class='warning'>You are unable to fit your [name] into the [J.name].</span>")
return
/obj/item/mop/cyborg
/obj/item/mop/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
return
insertable = FALSE
/obj/item/mop/advanced
desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this!"
@@ -113,3 +116,6 @@
if(refill_enabled)
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/mop/advanced/cyborg
insertable = FALSE
+2 -2
View File
@@ -3,11 +3,11 @@
name = "data cable"
icon = 'icons/obj/power.dmi'
icon_state = "wire1"
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
var/obj/machinery/machine
/obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/living/user)
if(!user.transferItemToLoc(src, M))
return
user.visible_message("[user] inserts [src] into a data port on [M].", "<span class='notice'>You insert [src] into a data port on [M].</span>", "<span class='italics'>You hear the satisfying click of a wire jack fastening into place.</span>")
machine = M
machine = M
+4 -4
View File
@@ -151,7 +151,7 @@
/obj/item/borg/charger
name = "power connector"
icon_state = "charger_draw"
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
var/mode = "draw"
var/static/list/charge_machines = typecacheof(list(/obj/machinery/cell_charger, /obj/machinery/recharger, /obj/machinery/recharge_station, /obj/machinery/mech_bay_recharge_port))
var/static/list/charge_items = typecacheof(list(/obj/item/stock_parts/cell, /obj/item/gun/energy))
@@ -194,7 +194,7 @@
M.use_power(200)
to_chat(user, "<span class='notice'>You stop charging youself.</span>")
to_chat(user, "<span class='notice'>You stop charging yourself.</span>")
else if(is_type_in_list(target, charge_items))
var/obj/item/stock_parts/cell/cell = target
@@ -233,7 +233,7 @@
break
target.update_icon()
to_chat(user, "<span class='notice'>You stop charging youself.</span>")
to_chat(user, "<span class='notice'>You stop charging yourself.</span>")
else if(is_type_in_list(target, charge_items))
var/obj/item/stock_parts/cell/cell = target
@@ -693,7 +693,7 @@
/obj/item/borg/sight/xray
name = "\proper x-ray vision"
name = "\proper X-ray vision"
icon = 'icons/obj/decals.dmi'
icon_state = "securearea"
sight_mode = BORGXRAY
+3 -2
View File
@@ -181,8 +181,9 @@
to_chat(user, "<span class='warning'>Sticking a dead brain into the frame would sort of defeat the purpose!</span>")
return
if(jobban_isbanned(BM, "Cyborg"))
to_chat(user, "<span class='warning'>This [M.name] does not seem to fit!</span>")
if(jobban_isbanned(BM, "Cyborg") || QDELETED(src) || QDELETED(BM) || QDELETED(user) || QDELETED(M) || !Adjacent(user))
if(!QDELETED(M))
to_chat(user, "<span class='warning'>This [M.name] does not seem to fit!</span>")
return
if(!user.temporarilyRemoveItemFromInventory(W))
@@ -193,6 +193,60 @@
R.module.basic_modules += S
R.module.add_module(S, FALSE, TRUE)
/obj/item/borg/upgrade/tboh
name = "janitor cyborg trash bag of holding"
desc = "A trash bag of holding replace for the janiborgs standard trash bag."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/robot_module/janitor
/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R)
. = ..()
if(.)
for(var/obj/item/storage/bag/trash/cyborg/TB in R.module.modules)
R.module.remove_module(TB, TRUE)
var/obj/item/storage/bag/trash/bluespace/cyborg/B = new /obj/item/storage/bag/trash/bluespace/cyborg(R.module)
R.module.basic_modules += B
R.module.add_module(B, FALSE, TRUE)
/obj/item/borg/upgrade/tboh/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
for(var/obj/item/storage/bag/trash/bluespace/cyborg/B in R.module.modules)
R.module.remove_module(B, TRUE)
var/obj/item/storage/bag/trash/cyborg/TB = new (R.module)
R.module.basic_modules += TB
R.module.add_module(TB, FALSE, TRUE)
/obj/item/borg/upgrade/amop
name = "janitor cyborg advanced mop"
desc = "An advanced mop replacement from the janiborgs standard mop."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/robot_module/janitor
/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R)
. = ..()
if(.)
for(var/obj/item/mop/cyborg/M in R.module.modules)
R.module.remove_module(M, TRUE)
var/obj/item/mop/advanced/cyborg/A = new /obj/item/mop/advanced/cyborg(R.module)
R.module.basic_modules += A
R.module.add_module(A, FALSE, TRUE)
/obj/item/borg/upgrade/amop/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
for(var/obj/item/mop/advanced/cyborg/A in R.module.modules)
R.module.remove_module(A, TRUE)
var/obj/item/mop/cyborg/M = new (R.module)
R.module.basic_modules += M
R.module.add_module(M, FALSE, TRUE)
/obj/item/borg/upgrade/syndicate
name = "illegal equipment module"
desc = "Unlocks the hidden, deadlier functions of a cyborg."
@@ -543,3 +597,20 @@
var/obj/item/pinpointer/crew/PP = locate() in R.module
if (PP)
R.module.remove_module(PP, TRUE)
/obj/item/borg/upgrade/transform
name = "borg module picker (Standard)"
desc = "Allows you to to turn a cyborg into a standard cyborg."
icon_state = "cyborg_upgrade3"
var/obj/item/robot_module/new_module = /obj/item/robot_module/standard
/obj/item/borg/upgrade/transform/action(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
R.module.transform_to(new_module)
/obj/item/borg/upgrade/transform/clown
name = "borg module picker (Clown)"
desc = "Allows you to to turn a cyborg into a clown, honk."
icon_state = "cyborg_upgrade3"
new_module = /obj/item/robot_module/clown
+1 -1
View File
@@ -38,7 +38,7 @@
return ..()
/obj/item/shield/riot/roman
name = "roman shield"
name = "\improper Roman shield"
desc = "Bears an inscription on the inside: <i>\"Romanes venio domus\"</i>."
icon_state = "roman_shield"
item_state = "roman_shield"
+1 -1
View File
@@ -45,7 +45,7 @@
blink_mob(hit_atom)
use(1)
//Artifical bluespace crystal, doesn't give you much research.
//Artificial bluespace crystal, doesn't give you much research.
/obj/item/stack/ore/bluespace_crystal/artificial
name = "artificial bluespace crystal"
desc = "An artificially made bluespace crystal, it looks delicate."
+1 -1
View File
@@ -105,7 +105,7 @@
/obj/item/stack/medical/bruise_pack
name = "bruise pack"
singular_name = "bruise pack"
desc = "A theraputic gel pack and bandages designed to treat blunt-force trauma."
desc = "A therapeutic gel pack and bandages designed to treat blunt-force trauma."
icon_state = "brutepack"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
@@ -110,7 +110,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
if(QDELETED(src) && replace)
user.put_in_hands(RG)
else
to_chat(user, "<span class='warning'>You need one rod and one sheet of plamsa glass to make reinforced plasma glass!</span>")
to_chat(user, "<span class='warning'>You need one rod and one sheet of plasma glass to make reinforced plasma glass!</span>")
return
else
return ..()
@@ -173,7 +173,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
/obj/item/stack/sheet/plasmarglass
name = "reinforced plasma glass"
desc = "A glass sheet made out of a plasma-silicate alloy and a rod matrice. It looks hopelessly tough and nearly fire-proof!"
desc = "A glass sheet made out of a plasma-silicate alloy and a rod matrix. It looks hopelessly tough and nearly fire-proof!"
singular_name = "reinforced plasma glass sheet"
icon_state = "sheet-prglass"
item_state = "sheet-prglass"
@@ -149,6 +149,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \
new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5), \
new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5), \
new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \
new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2), \
new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \
))
@@ -187,7 +188,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \
singular_name = "hide plate"
max_amount = 6
novariants = FALSE
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_NORMAL
layer = MOB_LAYER
@@ -200,7 +201,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \
singular_name = "drake plate"
max_amount = 10
novariants = FALSE
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
w_class = WEIGHT_CLASS_NORMAL
layer = MOB_LAYER
@@ -310,7 +310,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \
point_value = 45
GLOBAL_LIST_INIT(plastitanium_recipes, list ( \
new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \
new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20), \
))
/obj/item/stack/sheet/mineral/plastitanium/Initialize(mapload, new_amount, merge = TRUE)
@@ -6,7 +6,7 @@
icon_state = "telecrystal"
w_class = WEIGHT_CLASS_TINY
max_amount = 50
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
/obj/item/stack/telecrystal/attack(mob/target, mob/user)
if(target == user) //You can't go around smacking people with crystals to find out if they have an uplink or not.
@@ -71,9 +71,9 @@
materials = list(MAT_TITANIUM=500)
/obj/item/stack/tile/mineral/plastitanium
name = "plas-titanium tile"
singular_name = "plas-titanium floor tile"
desc = "A tile made of plas-titanium, used for very evil shuttles."
name = "plastitanium tile"
singular_name = "plastitanium floor tile"
desc = "A tile made of plastitanium, used for very evil shuttles."
icon_state = "tile_darkshuttle"
turf_type = /turf/open/floor/mineral/plastitanium
mineralType = "plastitanium"
+2 -2
View File
@@ -9,7 +9,7 @@
desc = "Wrap packages with this festive paper to make gifts."
icon = 'icons/obj/stack_objects.dmi'
icon_state = "wrap_paper"
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
amount = 25
max_amount = 25
resistance_flags = FLAMMABLE
@@ -31,7 +31,7 @@
desc = "You can use this to wrap items in."
icon = 'icons/obj/stack_objects.dmi'
icon_state = "deliveryPaper"
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
amount = 25
max_amount = 25
resistance_flags = FLAMMABLE
+13 -7
View File
@@ -40,6 +40,7 @@
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
var/insertable = TRUE
/obj/item/storage/bag/trash/ComponentInitialize()
. = ..()
@@ -64,14 +65,16 @@
else icon_state = "[initial(icon_state)]3"
/obj/item/storage/bag/trash/cyborg
insertable = FALSE
/obj/item/storage/bag/trash/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
J.put_in_cart(src, user)
J.mybag=src
J.update_icon()
/obj/item/storage/bag/trash/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
return
if(insertable)
J.put_in_cart(src, user)
J.mybag=src
J.update_icon()
else
to_chat(user, "<span class='warning'>You are unable to fit your [name] into the [J.name].</span>")
return
/obj/item/storage/bag/trash/bluespace
name = "trash bag of holding"
@@ -85,6 +88,9 @@
STR.max_combined_w_class = 60
STR.max_items = 60
/obj/item/storage/bag/trash/bluespace/cyborg
insertable = FALSE
// -----------------------------
// Mining Satchel
// -----------------------------
@@ -136,7 +142,7 @@
if (box)
user.transferItemToLoc(A, box)
show_message = TRUE
else if(SendSignal(COMSIG_TRY_STORAGE_INSERT, A, user, TRUE))
else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE))
show_message = TRUE
else
if(!spam_protection)
+1 -1
View File
@@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
H.visible_message("<span class='notice'>[user] heals [H] with the power of [deity_name]!</span>")
to_chat(H, "<span class='boldnotice'>May the power of [deity_name] compel you to be healed!</span>")
playsound(src.loc, "punch", 25, 1, -1)
H.SendSignal(COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing)
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing)
return 1
/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
+2 -2
View File
@@ -535,7 +535,7 @@
STR.max_items = 8
/obj/item/storage/box/snappops/PopulateContents()
SendSignal(COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/toy/snappop)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/toy/snappop)
/obj/item/storage/box/matches
name = "matchbox"
@@ -553,7 +553,7 @@
STR.can_hold = typecacheof(list(/obj/item/match))
/obj/item/storage/box/matches/PopulateContents()
SendSignal(COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match)
/obj/item/storage/box/matches/attackby(obj/item/match/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/match))
+4 -4
View File
@@ -151,7 +151,7 @@
return
var/obj/item/clothing/mask/cigarette/W = locate(/obj/item/clothing/mask/cigarette) in contents
if(W && contents.len > 0)
SendSignal(COMSIG_TRY_STORAGE_TAKE, W, user)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, user)
user.put_in_hands(W)
contents -= W
to_chat(user, "<span class='notice'>You take \a [W] out of the pack.</span>")
@@ -190,7 +190,7 @@
if(cig)
if(M == user && contents.len > 0 && !user.wear_mask)
var/obj/item/clothing/mask/cigarette/W = cig
SendSignal(COMSIG_TRY_STORAGE_TAKE, W, M)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, M)
M.equip_to_slot_if_possible(W, SLOT_WEAR_MASK)
contents -= W
to_chat(user, "<span class='notice'>You take \a [W] out of the pack.</span>")
@@ -319,13 +319,13 @@
icon_state = "[initial(icon_state)]"
/obj/item/storage/fancy/cigarettes/cigars/cohiba
name = "\improper cohiba robusto cigar case"
name = "\improper Cohiba Robusto cigar case"
desc = "A case of imported Cohiba cigars, renowned for their strong flavor."
icon_state = "cohibacase"
spawn_type = /obj/item/clothing/mask/cigarette/cigar/cohiba
/obj/item/storage/fancy/cigarettes/cigars/havana
name = "\improper premium havanian cigar case"
name = "\improper premium Havanian cigar case"
desc = "A case of classy Havanian cigars."
icon_state = "cohibacase"
spawn_type = /obj/item/clothing/mask/cigarette/cigar/havana
+8 -8
View File
@@ -22,18 +22,18 @@
STR.locked = TRUE
/obj/item/storage/lockbox/attackby(obj/item/W, mob/user, params)
var/locked = SendSignal(COMSIG_IS_STORAGE_LOCKED)
var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)
if(W.GetID())
if(broken)
to_chat(user, "<span class='danger'>It appears to be broken.</span>")
return
if(allowed(user))
SendSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, !locked)
locked = SendSignal(COMSIG_IS_STORAGE_LOCKED)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, !locked)
locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)
if(locked)
icon_state = icon_locked
to_chat(user, "<span class='danger'>You lock the [src.name]!</span>")
SendSignal(COMSIG_TRY_STORAGE_HIDE_ALL)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_HIDE_ALL)
return
else
icon_state = icon_closed
@@ -50,7 +50,7 @@
/obj/item/storage/lockbox/emag_act(mob/user)
if(!broken)
broken = TRUE
SendSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE)
desc += "It appears to be broken."
icon_state = src.icon_broken
if(user)
@@ -107,13 +107,13 @@
/obj/item/storage/lockbox/medal/examine(mob/user)
..()
var/locked = SendSignal(COMSIG_IS_STORAGE_LOCKED)
var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)
if(!locked)
to_chat(user, "<span class='notice'>Alt-click to [open ? "close":"open"] it.</span>")
/obj/item/storage/lockbox/medal/AltClick(mob/user)
if(user.canUseTopic(src, BE_CLOSE))
if(!SendSignal(COMSIG_IS_STORAGE_LOCKED))
if(!SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED))
open = (open ? FALSE : TRUE)
update_icon()
..()
@@ -131,7 +131,7 @@
/obj/item/storage/lockbox/medal/update_icon()
cut_overlays()
var/locked = SendSignal(COMSIG_IS_STORAGE_LOCKED)
var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)
if(locked)
icon_state = "medalbox+l"
open = FALSE
+5 -5
View File
@@ -35,7 +35,7 @@
to_chat(user, text("The service panel is currently <b>[open ? "unscrewed" : "screwed shut"]</b>."))
/obj/item/storage/secure/attackby(obj/item/W, mob/user, params)
if(SendSignal(COMSIG_IS_STORAGE_LOCKED))
if(SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED))
if (istype(W, /obj/item/screwdriver))
if (W.use_tool(src, user, 20))
open =! open
@@ -64,7 +64,7 @@
return ..()
/obj/item/storage/secure/attack_self(mob/user)
var/locked = SendSignal(COMSIG_IS_STORAGE_LOCKED)
var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)
user.set_machine(src)
var/dat = text("<TT><B>[]</B><BR>\n\nLock Status: []",src, (locked ? "LOCKED" : "UNLOCKED"))
var/message = "Code"
@@ -88,7 +88,7 @@
l_code = code
l_set = 1
else if ((code == l_code) && (l_set == 1))
SendSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE)
cut_overlays()
add_overlay(icon_opened)
code = null
@@ -96,10 +96,10 @@
code = "ERROR"
else
if ((href_list["type"] == "R") && (!l_setshort))
SendSignal(COMSIG_TRY_STORAGE_SET_LOCKSTATE, TRUE)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, TRUE)
cut_overlays()
code = null
SendSignal(COMSIG_TRY_STORAGE_HIDE_FROM, usr)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_HIDE_FROM, usr)
else
code += text("[]", sanitize_text(href_list["type"]))
if (length(code) > 5)
+9 -5
View File
@@ -14,9 +14,10 @@
var/stunforce = 140
var/status = 0
var/obj/item/stock_parts/cell/high/cell
var/obj/item/stock_parts/cell/cell
var/hitcost = 1000
var/throw_hit_chance = 35
var/preload_cell_type //if not empty the baton starts with this type of cell
/obj/item/melee/baton/get_cell()
return cell
@@ -27,6 +28,11 @@
/obj/item/melee/baton/Initialize()
. = ..()
if(preload_cell_type)
if(!ispath(preload_cell_type,/obj/item/stock_parts/cell))
log_world("### MAP WARNING, [src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].")
else
cell = new preload_cell_type(src)
update_icon()
/obj/item/melee/baton/throw_impact(atom/hit_atom)
@@ -35,10 +41,8 @@
if(status && prob(throw_hit_chance) && iscarbon(hit_atom))
baton_stun(hit_atom)
/obj/item/melee/baton/loaded/Initialize() //this one starts with a cell pre-installed.
cell = new(src)
update_icon()
. = ..()
/obj/item/melee/baton/loaded //this one starts with a cell pre-installed.
preload_cell_type = /obj/item/stock_parts/cell/high
/obj/item/melee/baton/proc/deductcharge(chrgdeductamt)
if(cell)
+1 -1
View File
@@ -114,7 +114,7 @@
amount_per_transfer_from_this = 50
possible_transfer_amounts = list(25,50,100)
volume = 500
flags_1 = NOBLUDGEON_1
item_flags = NOBLUDGEON
container_type = OPENCONTAINER
slot_flags = 0
+1 -1
View File
@@ -129,7 +129,7 @@
if(isOn())
use(1)
var/turf/location = get_turf(user)
location.hotspot_expose(700, 50, 1)
location.hotspot_expose(550, 10, 1)
if(get_fuel() <= 0)
set_light(0)
+2 -2
View File
@@ -247,8 +247,8 @@
// Copied from /obj/item/melee/transforming/energy/sword/attackby
/obj/item/toy/sword/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/toy/sword))
if((W.flags_1 & NODROP_1) || (flags_1 & NODROP_1))
to_chat(user, "<span class='warning'>\the [flags_1 & NODROP_1 ? src : W] is stuck to your hand, you can't attach it to \the [flags_1 & NODROP_1 ? W : src]!</span>")
if((W.item_flags & NODROP) || (item_flags & NODROP))
to_chat(user, "<span class='warning'>\the [item_flags & NODROP ? src : W] is stuck to your hand, you can't attach it to \the [item_flags & NODROP ? W : src]!</span>")
return
else
to_chat(user, "<span class='notice'>You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool.</span>")
+2 -2
View File
@@ -121,7 +121,7 @@
name = "offhand"
icon_state = "offhand"
w_class = WEIGHT_CLASS_HUGE
flags_1 = ABSTRACT_1
item_flags = ABSTRACT
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
/obj/item/twohanded/offhand/Destroy()
@@ -338,7 +338,7 @@
icon_state = "dualsaber[item_color][wielded]"
else
icon_state = "dualsaber0"
SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
/obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user)
if(user.has_dna())
+24 -9
View File
@@ -18,19 +18,34 @@
throw_range = 7
w_class = WEIGHT_CLASS_BULKY
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30)
var/charges = list(0, 0, 0) //how many restocking "charges" the refill has for standard/contraband/coin products
var/init_charges = list(0, 0, 0)
// Built automatically from the corresponding vending machine.
// If null, considered to be full. Otherwise, is list(/typepath = amount).
var/list/products
var/list/contraband
var/list/premium
/obj/item/vending_refill/New(amt = -1)
..()
/obj/item/vending_refill/Initialize(mapload)
. = ..()
name = "\improper [machine_name] restocking unit"
if(isnum(amt) && amt > -1)
charges[1] = amt
/obj/item/vending_refill/examine(mob/user)
..()
if(charges[1] > 0)
to_chat(user, "It can restock [charges[1]+charges[2]+charges[3]] item(s).")
var/num = get_part_rating()
if (num == INFINITY)
to_chat(user, "It's sealed tight, completely full of supplies.")
else if (num == 0)
to_chat(user, "It's empty!")
else
to_chat(user, "It's empty!")
to_chat(user, "It can restock [num] item\s.")
/obj/item/vending_refill/get_part_rating()
if (!products || !contraband || !premium)
return INFINITY
. = 0
for(var/key in products)
. += products[key]
for(var/key in contraband)
. += contraband[key]
for(var/key in premium)
. += premium[key]
+11 -6
View File
@@ -17,7 +17,11 @@
/obj/item/banhammer/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is hitting [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to ban [user.p_them()]self from life.</span>")
return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
/*
oranges says: This is a meme relating to the english translation of the ss13 russian wiki page on lurkmore.
mrdoombringer sez: and remember kids, if you try and PR a fix for this item's grammar, you are admitting that you are, indeed, a newfriend.
for further reading, please see: https://github.com/tgstation/tgstation/pull/30173 and https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=%2F%2Flurkmore.to%2FSS13&edit-text=&act=url
*/
/obj/item/banhammer/attack(mob/M, mob/user)
if(user.zone_selected == BODY_ZONE_HEAD)
M.visible_message("<span class='danger'>[user] are stroking the head of [M] with a bangammer</span>", "<span class='userdanger'>[user] are stroking the head with a bangammer</span>", "you hear a bangammer stroking a head");
@@ -76,7 +80,8 @@
/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS
desc = "<b><i>THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!</i></b>\nActivate it in your hand to point to the nearest victim."
flags_1 = CONDUCT_1 | NODROP_1 | DROPDEL_1
flags_1 = CONDUCT_1
item_flags = NODROP | DROPDEL
slot_flags = null
block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY
light_range = 3
@@ -248,7 +253,7 @@
user.put_in_hands(S)
to_chat(user, "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>")
else if(istype(I, /obj/item/assembly/igniter) && !(I.flags_1 & NODROP_1))
else if(istype(I, /obj/item/assembly/igniter) && !(I.item_flags & NODROP))
var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod
remove_item_from_storage(user)
@@ -411,7 +416,7 @@
item_state = "mounted_chainsaw"
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
flags_1 = NODROP_1 | ABSTRACT_1 | DROPDEL_1
item_flags = NODROP | ABSTRACT | DROPDEL
w_class = WEIGHT_CLASS_HUGE
force = 24
throwforce = 0
@@ -591,7 +596,7 @@
icon_state = "madeyoulook"
force = 0
throwforce = 0
flags_1 = DROPDEL_1 | ABSTRACT_1
item_flags = DROPDEL | ABSTRACT
attack_verb = list("bopped")
/obj/item/slapper
@@ -601,7 +606,7 @@
item_state = "nothing"
force = 0
throwforce = 0
flags_1 = DROPDEL_1 | ABSTRACT_1
item_flags = DROPDEL | ABSTRACT
attack_verb = list("slapped")
hitsound = 'sound/effects/snap.ogg'