mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
modified: _maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm
modified: _maps/RandomZLevels/Academy.dmm modified: _maps/RandomZLevels/caves.dmm modified: _maps/RandomZLevels/research.dmm modified: _maps/map_files/MetaStation/MetaStation.dmm modified: _maps/map_files/MiniStation/cargopacks.dm modified: _maps/map_files/TgStation/tgstation.2.1.3.dmm modified: _maps/map_files/generic/z2.dmm modified: code/__DEFINES/clothing.dm modified: code/__DEFINES/flags.dm modified: code/__DEFINES/hud.dm modified: code/__DEFINES/is_helpers.dm modified: code/__DEFINES/layers.dm modified: code/__DEFINES/machines.dm modified: code/__DEFINES/misc.dm modified: code/__DEFINES/role_preferences.dm modified: code/__DEFINES/say.dm modified: code/__DEFINES/wires.dm modified: code/__HELPERS/global_lists.dm modified: code/__HELPERS/matrices.dm modified: code/__HELPERS/mobs.dm modified: code/__HELPERS/type2type.dm modified: code/__HELPERS/unsorted.dm modified: code/_globalvars/lists/flavor_misc.dm modified: code/_onclick/click.dm modified: code/_onclick/hud/_defines.dm modified: code/_onclick/hud/alien.dm modified: code/_onclick/hud/alien_larva.dm modified: code/_onclick/hud/fullscreen.dm modified: code/_onclick/hud/hud.dm modified: code/_onclick/hud/human.dm modified: code/_onclick/hud/monkey.dm modified: code/_onclick/hud/other_mobs.dm modified: code/_onclick/hud/robot.dm modified: code/_onclick/hud/screen_objects.dm modified: code/controllers/subsystem/minimap.dm new file: code/controllers/subsystem/orbit.dm modified: code/controllers/subsystem/spacedrift.dm modified: code/controllers/subsystem/ticker.dm modified: code/datums/diseases/advance/advance.dm modified: code/datums/diseases/advance/symptoms/damage_converter.dm modified: code/datums/diseases/advance/symptoms/heal.dm modified: code/datums/hud.dm modified: code/datums/mind.dm modified: code/datums/outfit.dm modified: code/datums/wires/airalarm.dm modified: code/datums/wires/airlock.dm modified: code/datums/wires/apc.dm modified: code/datums/wires/autolathe.dm modified: code/datums/wires/explosive.dm modified: code/datums/wires/particle_accelerator.dm modified: code/datums/wires/radio.dm modified: code/datums/wires/suit_storage_unit.dm modified: code/datums/wires/vending.dm modified: code/datums/wires/wires.dm modified: code/game/area/Space_Station_13_areas.dm modified: code/game/area/areas.dm modified: code/game/atoms_movable.dm modified: code/game/data_huds.dm modified: code/game/gamemodes/antag_spawner.dm modified: code/game/gamemodes/blob/blob.dm modified: code/game/gamemodes/blob/blobs/core.dm modified: code/game/gamemodes/clock_cult/clock_items.dm modified: code/game/gamemodes/clock_cult/clock_machines.dm modified: code/game/gamemodes/clock_cult/clock_mobs.dm new file: code/game/gamemodes/clock_cult/clock_powerdrain.dm modified: code/game/gamemodes/clock_cult/clock_scripture.dm modified: code/game/gamemodes/clock_cult/clock_structures.dm modified: code/game/gamemodes/cult/ritual.dm modified: code/game/gamemodes/cult/runes.dm modified: code/game/gamemodes/cult/talisman.dm modified: code/game/gamemodes/game_mode.dm deleted: code/game/gamemodes/handofgod/_handofgod.dm deleted: code/game/gamemodes/handofgod/actions.dm deleted: code/game/gamemodes/handofgod/god.dm deleted: code/game/gamemodes/handofgod/objectives.dm deleted: code/game/gamemodes/handofgod/powers.dm deleted: code/game/gamemodes/handofgod/structures.dm modified: code/game/gamemodes/miniantags/abduction/abduction_gear.dm modified: code/game/gamemodes/miniantags/revenant/revenant_blight.dm modified: code/game/gamemodes/miniantags/slaughter/slaughter.dm modified: code/game/gamemodes/nuclear/nuclearbomb.dm modified: code/game/gamemodes/wizard/soulstone.dm modified: code/game/machinery/computer/computer.dm modified: code/game/machinery/doors/windowdoor.dm new file: code/game/machinery/limbgrower.dm modified: code/game/machinery/machinery.dm modified: code/game/machinery/recharger.dm modified: code/game/machinery/syndicatebomb.dm modified: code/game/machinery/vending.dm modified: code/game/mecha/mecha_defense.dm modified: code/game/mecha/working/ripley.dm modified: code/game/objects/effects/decals/Cleanable/aliens.dm modified: code/game/objects/effects/decals/Cleanable/humans.dm modified: code/game/objects/effects/decals/Cleanable/misc.dm modified: code/game/objects/effects/decals/Cleanable/robots.dm modified: code/game/objects/effects/decals/cleanable.dm modified: code/game/objects/effects/decals/crayon.dm modified: code/game/objects/effects/effect_system/effects_smoke.dm modified: code/game/objects/effects/overlays.dm modified: code/game/objects/effects/step_triggers.dm modified: code/game/objects/items.dm modified: code/game/objects/items/blueprints.dm modified: code/game/objects/items/devices/PDA/PDA.dm modified: code/game/objects/items/devices/chameleonproj.dm modified: code/game/objects/items/devices/megaphone.dm renamed: code/game/gamemodes/handofgod/items.dm -> code/game/objects/items/religion.dm modified: code/game/objects/items/robot/robot_items.dm modified: code/game/objects/items/stacks/stack.dm modified: code/game/objects/items/weapons/cigs_lighters.dm modified: code/game/objects/items/weapons/grenades/grenade.dm modified: code/game/objects/items/weapons/grenades/spawnergrenade.dm modified: code/game/objects/items/weapons/implants/implant_loyality.dm modified: code/game/objects/items/weapons/kitchen.dm modified: code/game/objects/items/weapons/melee/energy.dm modified: code/game/objects/items/weapons/melee/misc.dm modified: code/game/objects/items/weapons/mop.dm modified: code/game/objects/items/weapons/storage/belt.dm modified: code/game/objects/items/weapons/storage/uplink_kits.dm modified: code/game/objects/items/weapons/tools.dm modified: code/game/objects/items/weapons/vending_items.dm modified: code/game/objects/items/weapons/weaponry.dm modified: code/game/objects/objs.dm modified: code/game/objects/structures/crates_lockers/closets/fitness.dm new file: code/game/objects/structures/divine.dm modified: code/game/objects/structures/flora.dm modified: code/game/objects/structures/fluff.dm modified: code/game/objects/structures/grille.dm modified: code/game/objects/structures/kitchen_spike.dm modified: code/game/objects/structures/tables_racks.dm renamed: code/game/gamemodes/handofgod/traps.dm -> code/game/objects/structures/traps.dm modified: code/game/objects/structures/window.dm modified: code/game/turfs/simulated/dirtystation.dm modified: code/game/turfs/simulated/floor/fancy_floor.dm modified: code/game/turfs/simulated/floor/light_floor.dm modified: code/game/turfs/simulated/floor/misc_floor.dm modified: code/game/turfs/simulated/floor/plating.dm modified: code/game/turfs/turf.dm modified: code/modules/admin/player_panel.dm modified: code/modules/admin/verbs/onlyone.dm modified: code/modules/admin/verbs/pray.dm modified: code/modules/assembly/flash.dm modified: code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm modified: code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm modified: code/modules/awaymissions/capture_the_flag.dm modified: code/modules/cargo/packs.dm modified: code/modules/client/client_colour.dm modified: code/modules/client/preferences.dm modified: code/modules/client/preferences_savefile.dm modified: code/modules/clothing/clothing.dm modified: code/modules/clothing/glasses/glasses.dm modified: code/modules/clothing/glasses/hud.dm modified: code/modules/clothing/spacesuits/hardsuit.dm modified: code/modules/clothing/suits/miscellaneous.dm modified: code/modules/clothing/suits/wiz_robe.dm modified: code/modules/clothing/under/jobs/civilian.dm modified: code/modules/clothing/under/shorts.dm modified: code/modules/events/holiday/halloween.dm modified: code/modules/events/shuttle_loan.dm modified: code/modules/food_and_drinks/food/snacks/meat.dm modified: code/modules/food_and_drinks/food/snacks_burgers.dm modified: code/modules/food_and_drinks/food/snacks_other.dm modified: code/modules/food_and_drinks/kitchen_machinery/processor.dm modified: code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm modified: code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm modified: code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm modified: code/modules/holodeck/areas.dm modified: code/modules/holodeck/turfs.dm modified: code/modules/jobs/job_types/cargo_service.dm modified: code/modules/mining/abandoned_crates.dm modified: code/modules/mining/lavaland/necropolis_chests.dm modified: code/modules/mining/machine_vending.dm modified: code/modules/mining/mine_areas.dm modified: code/modules/mining/mine_turfs.dm modified: code/modules/mob/dead/observer/observer.dm modified: code/modules/mob/inventory.dm modified: code/modules/mob/living/carbon/alien/larva/life.dm modified: code/modules/mob/living/carbon/carbon.dm modified: code/modules/mob/living/carbon/carbon_defense.dm modified: code/modules/mob/living/carbon/human/human_defense.dm modified: code/modules/mob/living/carbon/human/inventory.dm modified: code/modules/mob/living/carbon/human/life.dm modified: code/modules/mob/living/carbon/human/species.dm modified: code/modules/mob/living/carbon/human/species_types.dm modified: code/modules/mob/living/carbon/human/update_icons.dm modified: code/modules/mob/living/carbon/inventory.dm modified: code/modules/mob/living/carbon/life.dm modified: code/modules/mob/living/carbon/monkey/punpun.dm modified: code/modules/mob/living/carbon/say.dm modified: code/modules/mob/living/carbon/update_icons.dm modified: code/modules/mob/living/death.dm modified: code/modules/mob/living/life.dm modified: code/modules/mob/living/living.dm modified: code/modules/mob/living/say.dm modified: code/modules/mob/living/silicon/ai/life.dm modified: code/modules/mob/living/silicon/login.dm modified: code/modules/mob/living/silicon/pai/life.dm modified: code/modules/mob/living/silicon/robot/login.dm modified: code/modules/mob/living/silicon/robot/robot.dm modified: code/modules/mob/living/silicon/robot/robot_modules.dm modified: code/modules/mob/living/simple_animal/friendly/cockroach.dm modified: code/modules/mob/living/simple_animal/friendly/drone/_drone.dm modified: code/modules/mob/living/simple_animal/hostile/hostile.dm modified: code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm modified: code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm modified: code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm modified: code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm modified: code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm modified: code/modules/mob/living/simple_animal/hostile/skeleton.dm modified: code/modules/mob/living/simple_animal/simple_animal.dm modified: code/modules/mob/mob.dm modified: code/modules/mob/mob_helpers.dm modified: code/modules/mob/new_player/new_player.dm modified: code/modules/mob/new_player/sprite_accessories.dm modified: code/modules/mob/transform_procs.dm modified: code/modules/modular_computers/computers/item/computer.dm modified: code/modules/modular_computers/computers/item/computer_components.dm modified: code/modules/modular_computers/computers/item/computer_damage.dm modified: code/modules/modular_computers/computers/item/computer_power.dm modified: code/modules/modular_computers/computers/item/computer_ui.dm modified: code/modules/modular_computers/computers/item/processor.dm modified: code/modules/modular_computers/computers/item/tablet.dm modified: code/modules/modular_computers/computers/machinery/console_presets.dm modified: code/modules/modular_computers/computers/machinery/modular_computer.dm modified: code/modules/modular_computers/computers/machinery/modular_console.dm deleted: code/modules/modular_computers/documentation.dm new file: code/modules/modular_computers/documentation.md modified: code/modules/modular_computers/file_system/program.dm modified: code/modules/modular_computers/file_system/programs/antagonist/dos.dm modified: code/modules/modular_computers/file_system/programs/antagonist/revelation.dm modified: code/modules/modular_computers/file_system/programs/card.dm modified: code/modules/modular_computers/file_system/programs/configurator.dm modified: code/modules/modular_computers/file_system/programs/file_browser.dm modified: code/modules/modular_computers/file_system/programs/ntdownloader.dm modified: code/modules/modular_computers/file_system/programs/ntnrc_client.dm modified: code/modules/modular_computers/file_system/programs/nttransfer.dm modified: code/modules/modular_computers/hardware/CPU.dm modified: code/modules/modular_computers/hardware/_hardware.dm modified: code/modules/modular_computers/hardware/battery_module.dm modified: code/modules/modular_computers/hardware/card_slot.dm modified: code/modules/modular_computers/hardware/hard_drive.dm modified: code/modules/modular_computers/hardware/network_card.dm modified: code/modules/modular_computers/hardware/portable_disk.dm modified: code/modules/modular_computers/hardware/printer.dm modified: code/modules/modular_computers/hardware/recharger.dm modified: code/modules/modular_computers/laptop_vendor.dm new file: code/modules/orbit/orbit.dm modified: code/modules/power/lighting.dm modified: code/modules/power/supermatter/supermatter.dm modified: code/modules/power/tesla/coil.dm modified: code/modules/power/tesla/energy_ball.dm modified: code/modules/projectiles/ammunition.dm modified: code/modules/projectiles/ammunition/ammo_casings.dm modified: code/modules/projectiles/ammunition/energy.dm modified: code/modules/projectiles/ammunition/special.dm modified: code/modules/projectiles/firing.dm modified: code/modules/projectiles/guns/energy/kinetic_accelerator.dm modified: code/modules/projectiles/guns/energy/stun.dm modified: code/modules/projectiles/projectile.dm modified: code/modules/projectiles/projectile/beams.dm modified: code/modules/projectiles/projectile/bullets.dm modified: code/modules/projectiles/projectile/energy.dm modified: code/modules/projectiles/projectile/reusable.dm modified: code/modules/projectiles/projectile/special.dm modified: code/modules/reagents/chemistry/machinery/pandemic.dm modified: code/modules/reagents/chemistry/reagents/alcohol_reagents.dm modified: code/modules/reagents/chemistry/reagents/drink_reagents.dm modified: code/modules/reagents/chemistry/reagents/other_reagents.dm modified: code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm modified: code/modules/reagents/chemistry/reagents/toxin_reagents.dm modified: code/modules/reagents/chemistry/recipes.dm modified: code/modules/reagents/chemistry/recipes/pyrotechnics.dm modified: code/modules/reagents/chemistry/recipes/toxins.dm modified: code/modules/reagents/reagent_containers/glass.dm new file: code/modules/research/designs/limbgrower_designs.dm modified: code/modules/research/designs/weapon_designs.dm modified: code/modules/research/research.dm modified: code/modules/stock_market/computer.dm modified: code/modules/surgery/bodyparts/bodyparts.dm modified: code/modules/surgery/bodyparts/dismemberment.dm modified: code/modules/surgery/bodyparts/helpers.dm modified: code/modules/surgery/organs/augments_arms.dm modified: code/modules/surgery/organs/augments_chest.dm modified: code/modules/surgery/organs/organ_internal.dm modified: config/tips.txt modified: html/changelog.html modified: html/changelogs/.all_changelog.yml deleted: html/changelogs/AutoChangeLog-pr-20404.yml deleted: html/changelogs/AutoChangeLog-pr-20419.yml deleted: html/changelogs/AutoChangeLog-pr-20447.yml deleted: html/changelogs/AutoChangeLog-pr-20467.yml deleted: html/changelogs/AutoChangeLog-pr-20479.yml modified: icons/effects/blood.dmi new file: icons/effects/bubblegum.dmi modified: icons/effects/effects.dmi modified: icons/mob/hud.dmi modified: icons/mob/human_parts_greyscale.dmi modified: icons/mob/inhands/items_lefthand.dmi modified: icons/mob/inhands/items_righthand.dmi modified: icons/mob/mask.dmi modified: icons/mob/mutant_bodyparts.dmi modified: icons/mob/screen_gen.dmi modified: icons/mob/screen_midnight.dmi modified: icons/mob/screen_operative.dmi modified: icons/mob/screen_plasmafire.dmi modified: icons/mob/screen_retro.dmi modified: icons/mob/screen_slimecore.dmi modified: icons/mob/suit.dmi modified: icons/mob/uniform.dmi modified: icons/obj/clothing/glasses.dmi modified: icons/obj/clothing/masks.dmi modified: icons/obj/clothing/suits.dmi modified: icons/obj/food/burgerbread.dmi modified: icons/obj/food/food.dmi new file: icons/obj/machines/limbgrower.dmi modified: icons/obj/modular_tablet.dmi modified: icons/obj/projectiles.dmi modified: icons/obj/weapons.dmi modified: interface/skin.dmf new file: sound/effects/pop_expl.ogg
This commit is contained in:
@@ -3,9 +3,6 @@
|
||||
/obj/effect/decal/cleanable/xenoblood
|
||||
name = "xeno blood"
|
||||
desc = "It's green and acidic. It looks like... <i>blood?</i>"
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "xfloor1"
|
||||
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
|
||||
@@ -43,9 +40,9 @@
|
||||
/obj/effect/decal/cleanable/xenoblood/xgibs
|
||||
name = "xeno gibs"
|
||||
desc = "Gnarly..."
|
||||
gender = PLURAL
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "xgib1"
|
||||
layer = LOW_OBJ_LAYER
|
||||
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6")
|
||||
|
||||
/obj/effect/decal/cleanable/xenoblood/xgibs/ex_act()
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
/obj/effect/decal/cleanable/blood
|
||||
name = "blood"
|
||||
desc = "It's red and gooey. Perhaps it's the chef's cooking?"
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_NORMAL_TURF_LAYER
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "floor1"
|
||||
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
|
||||
@@ -29,16 +26,12 @@
|
||||
/obj/effect/decal/cleanable/blood/tracks
|
||||
icon_state = "tracks"
|
||||
desc = "They look like tracks left by wheels."
|
||||
gender = PLURAL
|
||||
random_icon_states = null
|
||||
|
||||
/obj/effect/decal/cleanable/trail_holder //not a child of blood on purpose
|
||||
name = "blood"
|
||||
icon_state = "ltrails_1"
|
||||
desc = "Your instincts say you shouldn't be following these."
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
random_icon_states = null
|
||||
var/list/existing_dirs = list()
|
||||
blood_DNA = list()
|
||||
@@ -51,11 +44,9 @@
|
||||
/obj/effect/decal/cleanable/blood/gibs
|
||||
name = "gibs"
|
||||
desc = "They look bloody and gruesome."
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "gibbl5"
|
||||
layer = LOW_OBJ_LAYER
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/New()
|
||||
@@ -108,7 +99,6 @@
|
||||
/obj/effect/decal/cleanable/blood/drip
|
||||
name = "drips of blood"
|
||||
desc = "It's red."
|
||||
gender = PLURAL
|
||||
icon_state = "1"
|
||||
random_icon_states = list("drip1","drip2","drip3","drip4","drip5")
|
||||
bloodiness = 0
|
||||
@@ -125,7 +115,6 @@
|
||||
icon = 'icons/effects/footprints.dmi'
|
||||
icon_state = "nothingwhatsoever"
|
||||
desc = "where might they lead?"
|
||||
gender = PLURAL
|
||||
random_icon_states = null
|
||||
var/entered_dirs = 0
|
||||
var/exited_dirs = 0
|
||||
|
||||
@@ -1,16 +1,12 @@
|
||||
/obj/effect/decal/cleanable/generic
|
||||
name = "clutter"
|
||||
desc = "Someone should clean that up."
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "shards"
|
||||
|
||||
/obj/effect/decal/cleanable/ash
|
||||
name = "ashes"
|
||||
desc = "Ashes to ashes, dust to dust, and into space."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "ash"
|
||||
|
||||
@@ -24,25 +20,16 @@
|
||||
name = "dirt"
|
||||
desc = "Someone should clean that up."
|
||||
icon_state = "dirt"
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/decal/cleanable/flour
|
||||
name = "flour"
|
||||
desc = "It's still good. Four second rule!"
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
icon_state = "flour"
|
||||
|
||||
/obj/effect/decal/cleanable/greenglow
|
||||
name = "glowing goo"
|
||||
desc = "Jeez. I hope that's not for lunch."
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
luminosity = 1
|
||||
icon_state = "greenglow"
|
||||
|
||||
@@ -52,36 +39,34 @@
|
||||
/obj/effect/decal/cleanable/cobweb
|
||||
name = "cobweb"
|
||||
desc = "Somebody should remove that."
|
||||
density = 0
|
||||
layer = OBJ_LAYER
|
||||
gender = NEUTER
|
||||
layer = WALL_OBJ_LAYER
|
||||
icon_state = "cobweb1"
|
||||
burntime = 1
|
||||
|
||||
/obj/effect/decal/cleanable/cobweb/fire_act()
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/cleanable/cobweb2
|
||||
name = "cobweb"
|
||||
desc = "Somebody should remove that."
|
||||
gender = NEUTER
|
||||
layer = WALL_OBJ_LAYER
|
||||
icon_state = "cobweb2"
|
||||
|
||||
/obj/effect/decal/cleanable/cobweb2/fire_act()
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/cleanable/molten_item
|
||||
name = "gooey grey mass"
|
||||
desc = "It looks like a melted... something."
|
||||
density = 0
|
||||
layer = OBJ_LAYER
|
||||
gender = NEUTER
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "molten"
|
||||
|
||||
/obj/effect/decal/cleanable/cobweb2
|
||||
name = "cobweb"
|
||||
desc = "Somebody should remove that."
|
||||
density = 0
|
||||
layer = OBJ_LAYER
|
||||
icon_state = "cobweb2"
|
||||
|
||||
//Vomit (sorry)
|
||||
/obj/effect/decal/cleanable/vomit
|
||||
name = "vomit"
|
||||
desc = "Gosh, how unpleasant."
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "vomit_1"
|
||||
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
|
||||
@@ -112,38 +97,34 @@
|
||||
/obj/effect/decal/cleanable/tomato_smudge
|
||||
name = "tomato smudge"
|
||||
desc = "It's red."
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
gender = NEUTER
|
||||
icon = 'icons/effects/tomatodecal.dmi'
|
||||
random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
|
||||
|
||||
/obj/effect/decal/cleanable/plant_smudge
|
||||
name = "plant smudge"
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
gender = NEUTER
|
||||
icon = 'icons/effects/tomatodecal.dmi'
|
||||
random_icon_states = list("smashed_plant")
|
||||
|
||||
/obj/effect/decal/cleanable/egg_smudge
|
||||
name = "smashed egg"
|
||||
desc = "Seems like this one won't hatch."
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
gender = NEUTER
|
||||
icon = 'icons/effects/tomatodecal.dmi'
|
||||
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
|
||||
|
||||
/obj/effect/decal/cleanable/pie_smudge //honk
|
||||
name = "smashed pie"
|
||||
desc = "It's pie cream from a cream pie."
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
gender = NEUTER
|
||||
icon = 'icons/effects/tomatodecal.dmi'
|
||||
random_icon_states = list("smashed_pie")
|
||||
|
||||
/obj/effect/decal/cleanable/chem_pile
|
||||
name = "chemical pile"
|
||||
desc = "A pile of chemicals. You can't quite tell what's inside it."
|
||||
gender = PLURAL
|
||||
gender = NEUTER
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "ash"
|
||||
|
||||
@@ -152,8 +133,6 @@
|
||||
desc = "The shredded remains of what appears to be clothing."
|
||||
icon_state = "shreds"
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
|
||||
/obj/effect/decal/cleanable/shreds/New()
|
||||
pixel_x = rand(-5, 5)
|
||||
@@ -165,3 +144,4 @@
|
||||
desc = "A sizable pile of table salt. Someone must be upset."
|
||||
icon = 'icons/effects/tomatodecal.dmi'
|
||||
icon_state = "salt_pile"
|
||||
gender = NEUTER
|
||||
|
||||
@@ -3,11 +3,9 @@
|
||||
/obj/effect/decal/cleanable/robot_debris
|
||||
name = "robot debris"
|
||||
desc = "It's a useless heap of junk... <i>or is it?</i>"
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
icon_state = "gib1"
|
||||
layer = LOW_OBJ_LAYER
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
|
||||
blood_state = BLOOD_STATE_OIL
|
||||
bloodiness = MAX_SHOE_BLOODINESS
|
||||
@@ -45,9 +43,6 @@
|
||||
/obj/effect/decal/cleanable/oil
|
||||
name = "motor oil"
|
||||
desc = "It's black and greasy. Looks like Beepsky made another mess."
|
||||
gender = PLURAL
|
||||
density = 0
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
icon_state = "floor1"
|
||||
var/viruses = list()
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/obj/effect/decal/cleanable
|
||||
gender = PLURAL
|
||||
layer = ABOVE_NORMAL_TURF_LAYER
|
||||
var/list/random_icon_states = list()
|
||||
var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA
|
||||
var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints
|
||||
|
||||
@@ -3,15 +3,9 @@
|
||||
desc = "Graffiti. Damn kids."
|
||||
icon = 'icons/effects/crayondecal.dmi'
|
||||
icon_state = "rune1"
|
||||
layer = ABOVE_NORMAL_TURF_LAYER
|
||||
gender = NEUTER
|
||||
var/do_icon_rotate = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/examine()
|
||||
set src in view(2)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/New(location, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune", var/rotation = 0, var/alt_icon = null)
|
||||
..()
|
||||
loc = location
|
||||
|
||||
@@ -287,10 +287,10 @@
|
||||
var/more = ""
|
||||
if(M)
|
||||
more = "(<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</a>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[M]'>FLW</A>) "
|
||||
message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1)
|
||||
message_admins("Smoke: ([whereLink])[contained]. Key: [carry.my_atom.fingerprintslast][more].", 0, 1)
|
||||
log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].")
|
||||
else
|
||||
message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1)
|
||||
message_admins("Smoke: ([whereLink])[contained]. No associated key.", 0, 1)
|
||||
log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.")
|
||||
|
||||
|
||||
|
||||
@@ -55,12 +55,13 @@
|
||||
duration = 5
|
||||
randomdir = FALSE
|
||||
layer = BELOW_MOB_LAYER
|
||||
var/splatter_type = "splatter"
|
||||
|
||||
/obj/effect/overlay/temp/dir_setting/bloodsplatter/New(loc, set_dir)
|
||||
if(set_dir in diagonals)
|
||||
icon_state = "splatter[pick(1, 2, 6)]"
|
||||
icon_state = "[splatter_type][pick(1, 2, 6)]"
|
||||
else
|
||||
icon_state = "splatter[pick(3, 4, 5)]"
|
||||
icon_state = "[splatter_type][pick(3, 4, 5)]"
|
||||
..()
|
||||
var/target_pixel_x = 0
|
||||
var/target_pixel_y = 0
|
||||
@@ -90,44 +91,35 @@
|
||||
layer = ABOVE_MOB_LAYER
|
||||
animate(src, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = duration)
|
||||
|
||||
/obj/effect/overlay/temp/dir_setting/bloodsplatter/xenosplatter
|
||||
splatter_type = "xsplatter"
|
||||
|
||||
/obj/effect/overlay/temp/heal //color is white by default, set to whatever is needed
|
||||
name = "healing glow"
|
||||
icon_state = "heal"
|
||||
duration = 15
|
||||
/obj/effect/overlay/temp/dir_setting/firing_effect
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "firing_effect"
|
||||
duration = 2
|
||||
|
||||
/obj/effect/overlay/temp/heal/New(loc, colour)
|
||||
/obj/effect/overlay/temp/dir_setting/firing_effect/setDir(newdir)
|
||||
switch(newdir)
|
||||
if(NORTH)
|
||||
layer = BELOW_MOB_LAYER
|
||||
pixel_x = rand(-3,3)
|
||||
pixel_y = rand(4,6)
|
||||
if(SOUTH)
|
||||
pixel_x = rand(-3,3)
|
||||
pixel_y = rand(-1,1)
|
||||
else
|
||||
pixel_x = rand(-1,1)
|
||||
pixel_y = rand(-1,1)
|
||||
..()
|
||||
pixel_x = rand(-12, 12)
|
||||
pixel_y = rand(-9, 0)
|
||||
if(colour)
|
||||
color = colour
|
||||
|
||||
/obj/effect/overlay/temp/kinetic_blast
|
||||
name = "kinetic explosion"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "kinetic_blast"
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
duration = 4
|
||||
/obj/effect/overlay/temp/dir_setting/firing_effect/energy
|
||||
icon_state = "firing_effect_energy"
|
||||
duration = 3
|
||||
|
||||
/obj/effect/overlay/temp/explosion
|
||||
name = "explosion"
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "explosion"
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
duration = 8
|
||||
|
||||
/obj/effect/overlay/temp/explosion/fast
|
||||
icon_state = "explosionfast"
|
||||
duration = 4
|
||||
|
||||
/obj/effect/overlay/temp/blob
|
||||
name = "blob"
|
||||
icon_state = "blob_attack"
|
||||
alpha = 140
|
||||
randomdir = 0
|
||||
duration = 6
|
||||
/obj/effect/overlay/temp/dir_setting/firing_effect/magic
|
||||
icon_state = "shieldsparkles"
|
||||
duration = 3
|
||||
|
||||
/obj/effect/overlay/temp/dir_setting/ninja
|
||||
name = "ninja shadow"
|
||||
@@ -344,7 +336,7 @@
|
||||
|
||||
/obj/effect/overlay/temp/emp/pulse
|
||||
name = "emp pulse"
|
||||
icon_state = "emp pulse"
|
||||
icon_state = "emppulse"
|
||||
duration = 8
|
||||
randomdir = 0
|
||||
|
||||
@@ -393,6 +385,80 @@
|
||||
/obj/effect/overlay/temp/sparkle/tailsweep
|
||||
icon_state = "tailsweep"
|
||||
|
||||
|
||||
/obj/effect/overlay/temp/heal //color is white by default, set to whatever is needed
|
||||
name = "healing glow"
|
||||
icon_state = "heal"
|
||||
duration = 15
|
||||
|
||||
/obj/effect/overlay/temp/heal/New(loc, colour)
|
||||
..()
|
||||
pixel_x = rand(-12, 12)
|
||||
pixel_y = rand(-9, 0)
|
||||
if(colour)
|
||||
color = colour
|
||||
|
||||
/obj/effect/overlay/temp/kinetic_blast
|
||||
name = "kinetic explosion"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "kinetic_blast"
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
duration = 4
|
||||
|
||||
/obj/effect/overlay/temp/explosion
|
||||
name = "explosion"
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "explosion"
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
duration = 8
|
||||
|
||||
/obj/effect/overlay/temp/explosion/fast
|
||||
icon_state = "explosionfast"
|
||||
duration = 4
|
||||
|
||||
/obj/effect/overlay/temp/blob
|
||||
name = "blob"
|
||||
icon_state = "blob_attack"
|
||||
alpha = 140
|
||||
randomdir = 0
|
||||
duration = 6
|
||||
|
||||
/obj/effect/overlay/temp/impact_effect
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "impact_bullet"
|
||||
duration = 5
|
||||
|
||||
/obj/effect/overlay/temp/impact_effect/New(loc, atom/target, obj/item/projectile/P)
|
||||
if(target == P.original) //the projectile hit the target originally clicked
|
||||
pixel_x = P.p_x + target.pixel_x - 16 + rand(-4,4)
|
||||
pixel_y = P.p_y + target.pixel_y - 16 + rand(-4,4)
|
||||
else
|
||||
pixel_x = target.pixel_x + rand(-4,4)
|
||||
pixel_y = target.pixel_y + rand(-4,4)
|
||||
..()
|
||||
|
||||
/obj/effect/overlay/temp/impact_effect/red_laser
|
||||
icon_state = "impact_laser"
|
||||
duration = 4
|
||||
|
||||
/obj/effect/overlay/temp/impact_effect/blue_laser
|
||||
icon_state = "impact_laser_blue"
|
||||
duration = 4
|
||||
|
||||
/obj/effect/overlay/temp/impact_effect/green_laser
|
||||
icon_state = "impact_laser_green"
|
||||
duration = 4
|
||||
|
||||
/obj/effect/overlay/temp/impact_effect/purple_laser
|
||||
icon_state = "impact_laser_purple"
|
||||
duration = 4
|
||||
|
||||
/obj/effect/overlay/temp/impact_effect/ion
|
||||
icon_state = "shieldsparkles"
|
||||
duration = 6
|
||||
|
||||
|
||||
/obj/effect/overlay/palmtree_r
|
||||
name = "Palm tree"
|
||||
icon = 'icons/misc/beach2.dmi'
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/obj/effect/step_trigger
|
||||
var/affect_ghosts = 0
|
||||
var/stopper = 1 // stops throwers
|
||||
var/mobs_only = 0
|
||||
var/mobs_only = FALSE
|
||||
invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit
|
||||
anchored = 1
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
/obj/effect/step_trigger/message
|
||||
var/message //the message to give to the mob
|
||||
var/once = 1
|
||||
mobs_only = TRUE
|
||||
|
||||
/obj/effect/step_trigger/message/Trigger(mob/M)
|
||||
if(M.client)
|
||||
|
||||
@@ -344,6 +344,8 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
|
||||
var/datum/action/A = X
|
||||
A.Remove(user)
|
||||
if(DROPDEL & flags)
|
||||
//Prevents infinite loops where Destroy() calls an objects dropped() function
|
||||
flags &= ~DROPDEL
|
||||
qdel(src)
|
||||
|
||||
// called just as an item is picked up (loc is not yet changed)
|
||||
@@ -585,3 +587,8 @@ obj/item/proc/item_action_slot_check(slot, mob/user)
|
||||
. = "<span class='notice'>[user] lights [A] with [src].</span>"
|
||||
else
|
||||
. = ""
|
||||
|
||||
|
||||
//when an item modify our speech spans when in our active hand. Override this to modify speech spans.
|
||||
/obj/item/proc/get_held_item_speechspans(mob/living/carbon/user)
|
||||
return
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage."
|
||||
var/list/image/showing = list()
|
||||
var/client/viewing
|
||||
var/legend = FALSE //Viewing the wire legend
|
||||
|
||||
|
||||
/obj/item/areaeditor/blueprints/Destroy()
|
||||
@@ -63,15 +64,25 @@
|
||||
|
||||
/obj/item/areaeditor/blueprints/attack_self(mob/user)
|
||||
. = ..()
|
||||
var/area/A = get_area()
|
||||
if(get_area_type() == AREA_STATION)
|
||||
. += "<p>According to \the [src], you are now in <b>\"[html_encode(A.name)]\"</b>.</p>"
|
||||
. += "<p>You may <a href='?src=\ref[src];edit_area=1'>make an amendment</a> to the drawing.</p>"
|
||||
if(!viewing)
|
||||
. += "<p><a href='?src=\ref[src];view_blueprints=1'>View structural data</a></p>"
|
||||
if(!legend)
|
||||
var/area/A = get_area()
|
||||
if(get_area_type() == AREA_STATION)
|
||||
. += "<p>According to \the [src], you are now in <b>\"[html_encode(A.name)]\"</b>.</p>"
|
||||
. += "<p>You may <a href='?src=\ref[src];edit_area=1'>make an amendment</a> to the drawing.</p>"
|
||||
. += "<p><a href='?src=\ref[src];view_legend=1'>View wire colour legend</a></p>"
|
||||
if(!viewing)
|
||||
. += "<p><a href='?src=\ref[src];view_blueprints=1'>View structural data</a></p>"
|
||||
else
|
||||
. += "<p><a href='?src=\ref[src];refresh=1'>Refresh structural data</a></p>"
|
||||
. += "<p><a href='?src=\ref[src];hide_blueprints=1'>Hide structural data</a></p>"
|
||||
else
|
||||
. += "<p><a href='?src=\ref[src];refresh=1'>Refresh structural data</a></p>"
|
||||
. += "<p><a href='?src=\ref[src];hide_blueprints=1'>Hide structural data</a></p>"
|
||||
if(legend == TRUE)
|
||||
. += "<a href='?src=\ref[src];exit_legend=1'><< Back</a>"
|
||||
. += view_wire_devices(user);
|
||||
else
|
||||
//legend is a wireset
|
||||
. += "<a href='?src=\ref[src];view_legend=1'><< Back</a>"
|
||||
. += view_wire_set(user, legend)
|
||||
var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500)
|
||||
popup.set_content(.)
|
||||
popup.open()
|
||||
@@ -84,6 +95,12 @@
|
||||
if(get_area_type()!=AREA_STATION)
|
||||
return
|
||||
edit_area()
|
||||
if(href_list["exit_legend"])
|
||||
legend = FALSE;
|
||||
if(href_list["view_legend"])
|
||||
legend = TRUE;
|
||||
if(href_list["view_wireset"])
|
||||
legend = href_list["view_wireset"];
|
||||
if(href_list["view_blueprints"])
|
||||
set_viewer(usr, "<span class='notice'>You flip the blueprints over to view the complex information diagram.</span>")
|
||||
if(href_list["hide_blueprints"])
|
||||
@@ -122,6 +139,7 @@
|
||||
/obj/item/areaeditor/blueprints/dropped(mob/user)
|
||||
..()
|
||||
clear_viewer()
|
||||
legend = FALSE
|
||||
|
||||
|
||||
/obj/item/areaeditor/proc/get_area()
|
||||
@@ -149,6 +167,26 @@
|
||||
return AREA_SPECIAL
|
||||
return AREA_STATION
|
||||
|
||||
/obj/item/areaeditor/blueprints/proc/view_wire_devices(mob/user)
|
||||
var/message = "<br>You examine the wire legend.<br>"
|
||||
for(var/wireset in wire_color_directory)
|
||||
message += "<br><a href='?src=\ref[src];view_wireset=[wireset]'>[wire_name_directory[wireset]]</a>"
|
||||
message += "</p>"
|
||||
return message
|
||||
|
||||
/obj/item/areaeditor/blueprints/proc/view_wire_set(mob/user, wireset)
|
||||
//for some reason you can't use wireset directly as a derefencer so this is the next best :/
|
||||
for(var/device in wire_color_directory)
|
||||
if("[device]" == wireset) //I know... don't change it...
|
||||
var/message = "<p><b>[wire_name_directory[device]]:</b>"
|
||||
for(var/Col in wire_color_directory[device])
|
||||
var/wire_name = wire_color_directory[device][Col]
|
||||
if(!findtext(wire_name, WIRE_DUD_PREFIX)) //don't show duds
|
||||
message += "<p><span style='color: [Col]'>[Col]</span>: [wire_name]</p>"
|
||||
message += "</p>"
|
||||
return message
|
||||
return ""
|
||||
|
||||
/proc/create_area(mob/living/creator)
|
||||
var/res = detect_room(get_turf(creator))
|
||||
if(!istype(res,/list))
|
||||
|
||||
@@ -50,6 +50,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
var/image/photo = null //Scanned photo
|
||||
|
||||
var/list/contained_item = list(/obj/item/weapon/pen, /obj/item/toy/crayon, /obj/item/weapon/lipstick, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/cigarette)
|
||||
var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above.
|
||||
|
||||
/obj/item/device/pda/pickup(mob/user)
|
||||
..()
|
||||
@@ -74,7 +76,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
PDAs += src
|
||||
if(default_cartridge)
|
||||
cartridge = new default_cartridge(src)
|
||||
new /obj/item/weapon/pen(src)
|
||||
inserted_item = new /obj/item/weapon/pen(src)
|
||||
|
||||
/obj/item/device/pda/proc/update_label()
|
||||
name = "PDA-[owner] ([ownjob])" //Name generalisation
|
||||
@@ -314,10 +316,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
update_label()
|
||||
if("Eject")//Ejects the cart, only done from hub.
|
||||
if (!isnull(cartridge))
|
||||
var/turf/T = loc
|
||||
if(ismob(T))
|
||||
T = T.loc
|
||||
cartridge.loc = T
|
||||
U.put_in_hands(cartridge)
|
||||
U << "<span class='notice'>You remove [cartridge] from [src].</span>"
|
||||
scanmode = 0
|
||||
if (cartridge.radio)
|
||||
cartridge.radio.hostpda = null
|
||||
@@ -704,18 +704,16 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
return
|
||||
|
||||
if (usr.canUseTopic(src))
|
||||
var/obj/item/weapon/pen/O = locate() in src
|
||||
if(O)
|
||||
if (istype(loc, /mob))
|
||||
if(inserted_item)
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
if(M.get_active_held_item() == null)
|
||||
M.put_in_hands(O)
|
||||
usr << "<span class='notice'>You remove \the [O] from \the [src].</span>"
|
||||
return
|
||||
O.loc = get_turf(src)
|
||||
M.put_in_hands(inserted_item)
|
||||
else
|
||||
inserted_item.forceMove(loc)
|
||||
usr << "<span class='notice'>You remove \the [inserted_item] from \the [src].</span>"
|
||||
inserted_item = null
|
||||
else
|
||||
usr << "<span class='warning'>This PDA does not have a pen in it!</span>"
|
||||
|
||||
/obj/item/device/pda/proc/id_check(mob/user, choice as num)//To check for IDs; 1 for in-pda use, 2 for out of pda use.
|
||||
if(choice == 1)
|
||||
if (id)
|
||||
@@ -775,15 +773,15 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
pai = C
|
||||
user << "<span class='notice'>You slot \the [C] into [src].</span>"
|
||||
updateUsrDialog()
|
||||
else if(istype(C, /obj/item/weapon/pen))
|
||||
var/obj/item/weapon/pen/O = locate() in src
|
||||
if(O)
|
||||
user << "<span class='warning'>There is already a pen in \the [src]!</span>"
|
||||
else if(is_type_in_list(C, contained_item)) //Checks if there is a pen
|
||||
if(inserted_item)
|
||||
user << "<span class='warning'>There is already \a [inserted_item] in \the [src]!</span>"
|
||||
else
|
||||
if(!user.unEquip(C))
|
||||
return
|
||||
C.loc = src
|
||||
C.forceMove(src)
|
||||
user << "<span class='notice'>You slide \the [C] into \the [src].</span>"
|
||||
inserted_item = C
|
||||
else if(istype(C, /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P = C
|
||||
photo = P.img
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
disrupt()
|
||||
|
||||
/obj/item/device/chameleon/equipped()
|
||||
..()
|
||||
disrupt()
|
||||
|
||||
/obj/item/device/chameleon/attack_self()
|
||||
|
||||
@@ -6,54 +6,22 @@
|
||||
w_class = 2
|
||||
flags = FPRINT
|
||||
siemens_coefficient = 1
|
||||
|
||||
var/spamcheck = 0
|
||||
var/emagged = 0
|
||||
var/insults = 0
|
||||
var/voicespan = "command_headset" // sic
|
||||
var/list/insultmsg = list("FUCK EVERYONE!", "DEATH TO LIZARDS!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!", "VIVA!", "HONK!")
|
||||
|
||||
/obj/item/device/megaphone/attack_self(mob/living/carbon/human/user)
|
||||
if(user.client)
|
||||
if(user.client.prefs.muted & MUTE_IC)
|
||||
src << "<span class='warning'>You cannot speak in IC (muted).</span>"
|
||||
return
|
||||
|
||||
if(!ishuman(user))
|
||||
user << "<span class='warning'>You don't know how to use this!</span>"
|
||||
return
|
||||
var/list/voicespan = list(SPAN_COMMAND)
|
||||
|
||||
/obj/item/device/megaphone/get_held_item_speechspans(mob/living/carbon/user)
|
||||
if(spamcheck > world.time)
|
||||
user << "<span class='warning'>\The [src] needs to recharge!</span>"
|
||||
return
|
||||
|
||||
var/message = copytext(sanitize(input(user, "Shout a message?", "Megaphone", null) as text),1,MAX_MESSAGE_LEN)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
message = capitalize(message)
|
||||
if(!user.can_speak(message))
|
||||
user << "<span class='warning'>You find yourself unable to speak at all!</span>"
|
||||
return
|
||||
|
||||
if ((src.loc == user && user.stat == 0))
|
||||
if(emagged)
|
||||
if(insults)
|
||||
user.say(pick(insultmsg),"machine", list(voicespan))
|
||||
insults--
|
||||
else
|
||||
user << "<span class='warning'>*BZZZZzzzzzt*</span>"
|
||||
else
|
||||
user.say(message,"machine", list(voicespan))
|
||||
|
||||
else
|
||||
playsound(loc, 'sound/items/megaphone.ogg', 100, 0, 1)
|
||||
spamcheck = world.time + 50
|
||||
return
|
||||
return voicespan
|
||||
|
||||
/obj/item/device/megaphone/emag_act(mob/user)
|
||||
user << "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>"
|
||||
emagged = 1
|
||||
insults = rand(1, 3) //to prevent dickflooding
|
||||
voicespan = list(SPAN_REALLYBIG, "userdanger")
|
||||
|
||||
/obj/item/device/megaphone/sec
|
||||
name = "security megaphone"
|
||||
@@ -71,4 +39,4 @@
|
||||
name = "clown's megaphone"
|
||||
desc = "Something that should not exist."
|
||||
icon_state = "megaphone-clown"
|
||||
voicespan = "clown"
|
||||
voicespan = list(SPAN_CLOWN)
|
||||
@@ -0,0 +1,189 @@
|
||||
/obj/item/weapon/banner
|
||||
name = "banner"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "banner"
|
||||
item_state = "banner"
|
||||
desc = "A banner with Nanotrasen's logo on it."
|
||||
var/moralecooldown = 0
|
||||
var/moralewait = 600
|
||||
|
||||
/obj/item/weapon/banner/attack_self(mob/living/carbon/human/user)
|
||||
if(moralecooldown + moralewait > world.time)
|
||||
return
|
||||
user << "<span class='notice'>You increase the morale of your fellows!</span>"
|
||||
moralecooldown = world.time
|
||||
|
||||
for(var/mob/living/carbon/human/H in range(4,get_turf(src)))
|
||||
H << "<span class='notice'>Your morale is increased by [user]'s banner!</span>"
|
||||
H.adjustBruteLoss(-15)
|
||||
H.adjustFireLoss(-15)
|
||||
H.AdjustStunned(-2)
|
||||
H.AdjustWeakened(-2)
|
||||
H.AdjustParalysis(-2)
|
||||
|
||||
|
||||
/obj/item/weapon/banner/red
|
||||
name = "red banner"
|
||||
icon_state = "banner-red"
|
||||
item_state = "banner-red"
|
||||
desc = "A banner with the logo of the red deity."
|
||||
|
||||
/obj/item/weapon/banner/blue
|
||||
name = "blue banner"
|
||||
icon_state = "banner-blue"
|
||||
item_state = "banner-blue"
|
||||
desc = "A banner with the logo of the blue deity"
|
||||
|
||||
/obj/item/weapon/storage/backpack/bannerpack
|
||||
name = "nanotrasen banner backpack"
|
||||
desc = "It's a backpack with lots of extra room. A banner with Nanotrasen's logo is attached, that can't be removed."
|
||||
max_combined_w_class = 27 //6 more then normal, for the tradeoff of declaring yourself an antag at all times.
|
||||
icon_state = "bannerpack"
|
||||
|
||||
/obj/item/weapon/storage/backpack/bannerpack/red
|
||||
name = "red banner backpack"
|
||||
desc = "It's a backpack with lots of extra room. A red banner is attached, that can't be removed."
|
||||
icon_state = "bannerpack-red"
|
||||
|
||||
/obj/item/weapon/storage/backpack/bannerpack/blue
|
||||
name = "blue banner backpack"
|
||||
desc = "It's a backpack with lots of extra room. A blue banner is attached, that can't be removed."
|
||||
icon_state = "bannerpack-blue"
|
||||
|
||||
//this is all part of one item set
|
||||
/obj/item/clothing/suit/armor/plate/crusader
|
||||
name = "Crusader's Armour"
|
||||
desc = "Armour that's comprised of metal and cloth."
|
||||
icon_state = "crusader"
|
||||
w_class = 4 //bulky
|
||||
slowdown = 2.0 //gotta pretend we're balanced.
|
||||
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/plate/crusader/red
|
||||
icon_state = "crusader-red"
|
||||
|
||||
/obj/item/clothing/suit/armor/plate/crusader/blue
|
||||
icon_state = "crusader-blue"
|
||||
|
||||
/obj/item/clothing/head/helmet/plate/crusader
|
||||
name = "Crusader's Hood"
|
||||
desc = "A brownish hood."
|
||||
icon_state = "crusader"
|
||||
w_class = 3 //normal
|
||||
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/plate/crusader/blue
|
||||
icon_state = "crusader-blue"
|
||||
|
||||
/obj/item/clothing/head/helmet/plate/crusader/red
|
||||
icon_state = "crusader-red"
|
||||
|
||||
//Prophet helmet
|
||||
/obj/item/clothing/head/helmet/plate/crusader/prophet
|
||||
name = "Prophet's Hat"
|
||||
desc = "A religious-looking hat."
|
||||
alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
|
||||
flags = 0
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 50, bomb = 70, bio = 50, rad = 50) //religion protects you from disease and radiation, honk.
|
||||
worn_x_dimension = 64
|
||||
worn_y_dimension = 64
|
||||
|
||||
/obj/item/clothing/head/helmet/plate/crusader/prophet/red
|
||||
icon_state = "prophet-red"
|
||||
|
||||
/obj/item/clothing/head/helmet/plate/crusader/prophet/blue
|
||||
icon_state = "prophet-blue"
|
||||
|
||||
//Structure conversion staff
|
||||
/obj/item/weapon/godstaff
|
||||
name = "godstaff"
|
||||
desc = "It's a stick..?"
|
||||
icon_state = "godstaff-red"
|
||||
var/conversion_color = "#ffffff"
|
||||
var/staffcooldown = 0
|
||||
var/staffwait = 30
|
||||
|
||||
|
||||
/obj/item/weapon/godstaff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
if(staffcooldown + staffwait > world.time)
|
||||
return
|
||||
user.visible_message("[user] chants deeply and waves their staff!")
|
||||
if(do_after(user, 20,1,src))
|
||||
target.color = conversion_color //wololo
|
||||
staffcooldown = world.time
|
||||
|
||||
/obj/item/weapon/godstaff/red
|
||||
icon_state = "godstaff-red"
|
||||
conversion_color = "#ff0000"
|
||||
|
||||
/obj/item/weapon/godstaff/blue
|
||||
icon_state = "godstaff-blue"
|
||||
conversion_color = "#0000ff"
|
||||
|
||||
/obj/item/clothing/gloves/plate
|
||||
name = "Plate Gauntlets"
|
||||
icon_state = "crusader"
|
||||
desc = "They're like gloves, but made of metal."
|
||||
siemens_coefficient = 0
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/gloves/plate/red
|
||||
icon_state = "crusader-red"
|
||||
|
||||
/obj/item/clothing/gloves/plate/blue
|
||||
icon_state = "crusader-blue"
|
||||
|
||||
/obj/item/clothing/shoes/plate
|
||||
name = "Plate Boots"
|
||||
desc = "Metal boots, they look heavy."
|
||||
icon_state = "crusader"
|
||||
w_class = 3 //normal
|
||||
armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0) //does this even do anything on boots?
|
||||
flags = NOSLIP
|
||||
cold_protection = FEET
|
||||
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
|
||||
heat_protection = FEET
|
||||
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/plate/red
|
||||
icon_state = "crusader-red"
|
||||
|
||||
/obj/item/clothing/shoes/plate/blue
|
||||
icon_state = "crusader-blue"
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/itemset/crusader
|
||||
name = "Crusader's Armour Set" //i can't into ck2 references
|
||||
desc = "This armour is said to be based on the armor of kings on another world thousands of years ago, who tended to assassinate, conspire, and plot against everyone who tried to do the same to them. Some things never change."
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/itemset/crusader/blue/New()
|
||||
..()
|
||||
contents = list()
|
||||
sleep(1)
|
||||
new /obj/item/clothing/suit/armor/plate/crusader/blue(src)
|
||||
new /obj/item/clothing/head/helmet/plate/crusader/blue(src)
|
||||
new /obj/item/clothing/gloves/plate/blue(src)
|
||||
new /obj/item/clothing/shoes/plate/blue(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/itemset/crusader/red/New()
|
||||
..()
|
||||
contents = list()
|
||||
sleep(1)
|
||||
new /obj/item/clothing/suit/armor/plate/crusader/red(src)
|
||||
new /obj/item/clothing/head/helmet/plate/crusader/red(src)
|
||||
new /obj/item/clothing/gloves/plate/red(src)
|
||||
new /obj/item/clothing/shoes/plate/red(src)
|
||||
|
||||
|
||||
/obj/item/weapon/claymore/weak
|
||||
desc = "This one is rusted."
|
||||
force = 30
|
||||
armour_penetration = 15
|
||||
@@ -10,15 +10,16 @@
|
||||
icon_state = "elecarm"
|
||||
var/charge_cost = 30
|
||||
|
||||
/obj/item/borg/stun/attack(mob/living/M, mob/living/silicon/robot/user)
|
||||
/obj/item/borg/stun/attack(mob/living/M, mob/living/user)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.check_shields(0, "[M]'s [name]", src, MELEE_ATTACK))
|
||||
playsound(M, 'sound/weapons/Genhit.ogg', 50, 1)
|
||||
return 0
|
||||
|
||||
if(!user.cell.use(charge_cost))
|
||||
return
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!R.cell.use(charge_cost))
|
||||
return
|
||||
|
||||
user.do_attack_animation(M)
|
||||
M.Weaken(5)
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
if (R.max_res_amount > 1)
|
||||
var/obj/item/stack/new_item = O
|
||||
new_item.amount = R.res_amount*multiplier
|
||||
new_item.update_icon()
|
||||
|
||||
if(new_item.amount <= 0)//if the stack is empty, i.e it has been merged with an existing stack and has been garbage collected
|
||||
return
|
||||
@@ -232,7 +233,7 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/stack/AltClick(mob/user)
|
||||
/obj/item/stack/AltClick(mob/living/user)
|
||||
if(user.incapacitated())
|
||||
user << "<span class='warning'>You can't do that right now!</span>"
|
||||
return
|
||||
|
||||
@@ -573,3 +573,177 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
user << "<span class='warning'>You need to dry this first!</span>"
|
||||
else
|
||||
..()
|
||||
|
||||
///////////////
|
||||
//VAPE NATION//
|
||||
///////////////
|
||||
/obj/item/clothing/mask/vape
|
||||
name = "E-Cigarette"
|
||||
desc = "A classy and highly sophisticated electronic cigarette, for classy and dignified gentlemen. A warning label reads \"Warning: do not fill with flamable materials\""//<<< i'd vape to that.
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_state = null
|
||||
item_state = null
|
||||
var/chem_volume = 100
|
||||
var/vapetime = 0 //this so it won't puff out clouds every tick
|
||||
var/screw = 0 // kinky
|
||||
var/super = 0 //for the fattest vapes dude.
|
||||
var/emagged = 0 //LET THE GRIEF BEGIN
|
||||
|
||||
/obj/item/clothing/mask/vape/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is puffin hard on dat vape, they trying to join the vape life on a whole notha plane!")//it doesn't give you cancer, it is cancer
|
||||
return (TOXLOSS|OXYLOSS)
|
||||
|
||||
|
||||
/obj/item/clothing/mask/vape/New(loc, var/param_color = null)
|
||||
..()
|
||||
create_reagents(chem_volume)
|
||||
reagents.set_reacting(FALSE) // so it doesn't react until you light it
|
||||
reagents.add_reagent("nicotine", 50)
|
||||
if(!icon_state)
|
||||
if(!param_color)
|
||||
param_color = pick("red","blue","black","white","green","purple","yellow","orange")
|
||||
icon_state = "[param_color]_vape"
|
||||
item_state = "[param_color]_vape"
|
||||
|
||||
/obj/item/clothing/mask/vape/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/glass))
|
||||
if(reagents.total_volume < chem_volume)
|
||||
if(O.reagents.total_volume > 0)
|
||||
O.reagents.trans_to(src,25)
|
||||
user << "<span class='notice'>You add the contents of [O] to the [src]</span>"
|
||||
else
|
||||
user << "<span class='warning'>The [O] is empty!</span>"
|
||||
else
|
||||
user << "<span class='warning'>[src] can't hold anymore reagents!</span>"
|
||||
|
||||
if(istype(O, /obj/item/weapon/screwdriver))
|
||||
if(!screw)
|
||||
screw = 1
|
||||
user << "<span class='notice'>You open the cap on the [src]</span>"
|
||||
if(super)
|
||||
add_overlay(image(icon, "vapeopen_med"))
|
||||
else
|
||||
add_overlay(image(icon, "vapeopen_low"))
|
||||
else
|
||||
screw = 0
|
||||
user << "<span class='notice'>You close the cap on the [src]</span>"
|
||||
cut_overlays()
|
||||
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
if(screw && !emagged)//also kinky
|
||||
if(!super)
|
||||
cut_overlays()
|
||||
super = 1
|
||||
user << "<span class='notice'>You increase the voltage in the [src]</span>"
|
||||
add_overlay(image(icon, "vapeopen_med"))
|
||||
else
|
||||
cut_overlays()
|
||||
super = 0
|
||||
user << "<span class='notice'>You decrease the voltage in the [src]</span>"
|
||||
add_overlay(image(icon, "vapeopen_low"))
|
||||
|
||||
if(screw && emagged)
|
||||
user << "<span class='notice'>The [name] can't be modified!</span>"
|
||||
|
||||
|
||||
/obj/item/clothing/mask/vape/emag_act(mob/user)// I WON'T REGRET WRITTING THIS, SURLY.
|
||||
if(screw)
|
||||
if(!emagged)
|
||||
cut_overlays()
|
||||
emagged = 1
|
||||
super = 0
|
||||
user << "<span class='warning'>You maximize the voltage in the [src]</span>"
|
||||
add_overlay(image(icon, "vapeopen_high"))
|
||||
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect
|
||||
sp.set_up(5, 1, src)
|
||||
sp.start()
|
||||
else
|
||||
user << "<span class='warning'>The [name] is already emagged!</span>"
|
||||
else
|
||||
user << "<span class='notice'>You need to open the cap to do that</span>"
|
||||
|
||||
/obj/item/clothing/mask/vape/attack_self(mob/user)
|
||||
if(reagents.total_volume > 0)
|
||||
user << "<span class='notice'>you empty [src] of all reagents.</span>"
|
||||
reagents.clear_reagents()
|
||||
return
|
||||
|
||||
/obj/item/clothing/mask/vape/equipped(mob/user, slot)
|
||||
if(slot == slot_wear_mask)
|
||||
if(!screw)
|
||||
user << "<span class='notice'>You start puffing on that dank vape</span>"
|
||||
reagents.set_reacting(TRUE)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else //it will not start if the vape is opened.
|
||||
user << "<span class='warning'>You need to close the cap first!</span>"
|
||||
|
||||
/obj/item/clothing/mask/vape/dropped(mob/user)
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.get_item_by_slot(slot_wear_mask) == src)
|
||||
reagents.set_reacting(FALSE)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/mask/vape/proc/hand_reagents()//had to rename to avoid duplicate error
|
||||
if(reagents.total_volume)
|
||||
if(iscarbon(loc))
|
||||
var/mob/living/carbon/C = loc
|
||||
if (src == C.wear_mask) // if it's in the human/monkey mouth, transfer reagents to the mob
|
||||
var/fraction = min(REAGENTS_METABOLISM/reagents.total_volume, 1) //this will react instantly, making them a little more dangerous than cigarettes
|
||||
reagents.reaction(C, INGEST, fraction)
|
||||
reagents.trans_to(C, REAGENTS_METABOLISM)
|
||||
if(reagents.get_reagent_amount("welding_fuel"))
|
||||
//HOT STUFF
|
||||
C.fire_stacks = 2
|
||||
C.IgniteMob()
|
||||
|
||||
if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire
|
||||
var/datum/effect_system/reagents_explosion/e = new()
|
||||
e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0)
|
||||
e.start()
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.unEquip(src, 1)
|
||||
qdel(src)
|
||||
return
|
||||
reagents.remove_any(REAGENTS_METABOLISM)
|
||||
|
||||
/obj/item/clothing/mask/vape/process()
|
||||
var/mob/living/M = loc
|
||||
|
||||
if(isliving(loc))
|
||||
M.IgniteMob()
|
||||
|
||||
vapetime++
|
||||
|
||||
if(!reagents.total_volume)
|
||||
if(ismob(loc))
|
||||
M << "<span class='notice'>The [name] is empty!</span>"
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
//it's reusable so it won't unequip when empty
|
||||
return
|
||||
//open flame removed because vapes are a closed system, they wont light anything on fire
|
||||
|
||||
if(super && vapetime > 3)//Time to start puffing those fat vapes, yo.
|
||||
var/datum/effect_system/smoke_spread/chem/s = new
|
||||
s.set_up(reagents, 1, loc)
|
||||
s.start()
|
||||
vapetime = 0
|
||||
|
||||
if(emagged && vapetime > 3)
|
||||
var/datum/effect_system/smoke_spread/chem/s = new
|
||||
s.set_up(reagents, 4, loc)
|
||||
s.start()
|
||||
vapetime = 0
|
||||
if(prob(5))//small chance for the vape to break and deal damage if it's emagged
|
||||
playsound(get_turf(src), 'sound/effects/pop_expl.ogg', 50, 0)
|
||||
M.apply_damage(20, BURN, "head")
|
||||
M.unEquip(src, 1)
|
||||
M.Weaken(15, 1, 0)
|
||||
qdel(src)
|
||||
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread
|
||||
sp.set_up(5, 1, src)
|
||||
sp.start()
|
||||
M << "<span class='userdanger'>The [name] suddenly explodes in your mouth!</span>"
|
||||
|
||||
if(reagents && reagents.total_volume)
|
||||
hand_reagents()
|
||||
|
||||
@@ -52,10 +52,10 @@
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(src)]"
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]"
|
||||
bombers += message
|
||||
message_admins(message)
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(src)].")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
|
||||
@@ -17,15 +17,8 @@
|
||||
for(var/mob/living/carbon/C in viewers(T, null))
|
||||
C.flash_act()
|
||||
|
||||
for(var/i=1, i<=deliveryamt, i++)
|
||||
var/atom/movable/x = new spawner_type
|
||||
x.admin_spawned = admin_spawned
|
||||
x.loc = T
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(x, pick(NORTH,SOUTH,EAST,WEST))
|
||||
|
||||
// Spawn some hostile syndicate critters
|
||||
// Spawn some hostile syndicate critters and spread them out
|
||||
spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=admin_spawned)
|
||||
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
return -1
|
||||
if(target.mind in ticker.mode.revolutionaries)
|
||||
ticker.mode.remove_revolutionary(target.mind)
|
||||
if((target.mind in ticker.mode.cult) || (target.mind in ticker.mode.blue_deity_prophets|ticker.mode.red_deity_prophets|ticker.mode.red_deity_followers|ticker.mode.blue_deity_followers))
|
||||
if(target.mind in ticker.mode.cult)
|
||||
target << "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>"
|
||||
else
|
||||
target << "<span class='notice'>You feel a sense of peace and security. You are now protected from brainwashing.</span>"
|
||||
@@ -46,7 +46,6 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/mindshield
|
||||
name = "implanter (mindshield)"
|
||||
|
||||
|
||||
@@ -121,6 +121,7 @@
|
||||
desc = "A sharpened bone. The bare mimimum in survival."
|
||||
force = 15
|
||||
throwforce = 15
|
||||
materials = list()
|
||||
|
||||
/obj/item/weapon/kitchen/knife/combat/cyborg
|
||||
name = "cyborg knife"
|
||||
|
||||
@@ -238,7 +238,6 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/dropped()
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
|
||||
return
|
||||
|
||||
@@ -21,6 +21,17 @@
|
||||
user.visible_message("<span class='suicide'>[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/weapon/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."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "arm_blade"
|
||||
item_state = "arm_blade"
|
||||
origin_tech = "combat=5,biotech=5"
|
||||
w_class = 5.0
|
||||
force = 15
|
||||
throwforce = 10
|
||||
sharpness = IS_SHARP
|
||||
|
||||
/obj/item/weapon/melee/sabre
|
||||
name = "officer's sabre"
|
||||
@@ -36,7 +47,7 @@
|
||||
armour_penetration = 75
|
||||
sharpness = IS_SHARP
|
||||
origin_tech = "combat=5"
|
||||
attack_verb = list("lunged at", "stabbed")
|
||||
attack_verb = list("slashed", "cut")
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
materials = list(MAT_METAL = 1000)
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune))
|
||||
|
||||
/obj/item/weapon/mop
|
||||
desc = "The world of janitalia wouldn't be complete without a mop."
|
||||
name = "mop"
|
||||
@@ -42,16 +40,14 @@ obj/item/weapon/mop/proc/clean(turf/A)
|
||||
user << "<span class='warning'>Your mop is dry!</span>"
|
||||
return
|
||||
|
||||
var/turf/turf = A
|
||||
if(is_cleanable(A))
|
||||
turf = A.loc
|
||||
var/turf/T = get_turf(A)
|
||||
|
||||
if(istype(turf))
|
||||
user.visible_message("[user] begins to clean \the [turf] with [src].", "<span class='notice'>You begin to clean \the [turf] with [src]...</span>")
|
||||
if(T)
|
||||
user.visible_message("[user] begins to clean \the [T] with [src].", "<span class='notice'>You begin to clean \the [T] with [src]...</span>")
|
||||
|
||||
if(do_after(user, src.mopspeed, target = turf))
|
||||
if(do_after(user, src.mopspeed, target = T))
|
||||
user << "<span class='notice'>You finish mopping.</span>"
|
||||
clean(turf)
|
||||
clean(T)
|
||||
|
||||
|
||||
/obj/effect/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
@@ -431,6 +431,23 @@
|
||||
/obj/item/weapon/melee/sabre
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/examine(mob/user)
|
||||
..()
|
||||
if(contents.len)
|
||||
user << "<span class='notice'>Alt-click it to quickly draw the blade.</span>"
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/AltClick(mob/user)
|
||||
if(!ishuman(user) || !user.canUseTopic(src))
|
||||
return
|
||||
if(contents.len)
|
||||
var/obj/item/I = contents[1]
|
||||
user.visible_message("[user] takes [I] out of [src].", "<span class='notice'>You take [I] out of [src].</span>",\
|
||||
)
|
||||
user.put_in_hands(I)
|
||||
update_icon()
|
||||
else
|
||||
user << "[src] is empty."
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/update_icon()
|
||||
icon_state = "sheath"
|
||||
item_state = "sheath"
|
||||
@@ -442,6 +459,7 @@
|
||||
L.regenerate_icons()
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/sabre/New()
|
||||
..()
|
||||
new /obj/item/weapon/melee/sabre(src)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/syndicate/New()
|
||||
..()
|
||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "lordsingulo" = 1, "darklord" = 1, "sniper" = 1, "metaops" = 1)))
|
||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "lordsingulo" = 1, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
|
||||
if("bloodyspai") // 27 tc now this is more right
|
||||
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
|
||||
new /obj/item/clothing/mask/chameleon(src) // Goes with above
|
||||
@@ -131,6 +131,19 @@
|
||||
new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc
|
||||
new /obj/item/weapon/card/emag(src) // 6 tc
|
||||
return
|
||||
|
||||
if("ninja") // 33 tc worth
|
||||
new /obj/item/weapon/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc?
|
||||
new /obj/item/weapon/implanter/adrenalin(src) // 8 tc
|
||||
new /obj/item/weapon/throwing_star(src) // ~5 tc for all 6
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/throwing_star(src)
|
||||
new /obj/item/weapon/storage/belt/military/assault(src) // 3 tc
|
||||
new /obj/item/weapon/card/id/syndicate(src) // 2 tc
|
||||
new /obj/item/device/chameleon(src) // 7 tc
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit
|
||||
name = "box"
|
||||
|
||||
@@ -518,6 +518,7 @@ obj/item/weapon/weldingtool/proc/switched_off(mob/user)
|
||||
can_off_process = 1
|
||||
light_intensity = 1
|
||||
toolspeed = 2
|
||||
var/nextrefueltick = 0
|
||||
|
||||
/obj/item/weapon/weldingtool/experimental/brass
|
||||
name = "brass welding tool"
|
||||
@@ -526,20 +527,11 @@ obj/item/weapon/weldingtool/proc/switched_off(mob/user)
|
||||
item_state = "brasswelder"
|
||||
|
||||
|
||||
//Proc to make the experimental welder generate fuel, optimized as fuck -Sieve
|
||||
//i don't think this is actually used, yaaaaay -Pete
|
||||
/obj/item/weapon/weldingtool/experimental/proc/fuel_gen()
|
||||
if(!welding && !last_gen)
|
||||
last_gen = 1
|
||||
reagents.add_reagent("welding_fuel",1)
|
||||
spawn(10)
|
||||
last_gen = 0
|
||||
|
||||
/obj/item/weapon/weldingtool/experimental/process()
|
||||
..()
|
||||
if(reagents.total_volume < max_fuel)
|
||||
fuel_gen()
|
||||
|
||||
if(get_fuel() < max_fuel && nextrefueltick < world.time)
|
||||
nextrefueltick = world.time + 10
|
||||
reagents.add_reagent("welding_fuel", 1)
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
/obj/item/weapon/vending_refill/cigarette
|
||||
machine_name = "ShadyCigs Deluxe"
|
||||
icon_state = "refill_smoke"
|
||||
charges = list(12, 1, 2)// of 36 standard, 3 contraband, 6 premium
|
||||
init_charges = list(12, 1, 2)
|
||||
charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium
|
||||
init_charges = list(12, 3, 2)
|
||||
|
||||
/obj/item/weapon/vending_refill/autodrobe
|
||||
machine_name = "AutoDrobe"
|
||||
@@ -69,5 +69,5 @@
|
||||
/obj/item/weapon/vending_refill/clothing
|
||||
machine_name = "ClothesMate"
|
||||
icon_state = "refill_clothes"
|
||||
charges = list(31, 3, 4)// of 101 standard, 7 contraband, 10 premium(?)
|
||||
init_charges = list(31, 2, 4)
|
||||
charges = list(31, 4, 4)// of 101 standard, 12 contraband, 10 premium(?)
|
||||
init_charges = list(31, 4, 4)
|
||||
|
||||
@@ -82,10 +82,14 @@
|
||||
var/highlander_claymores = 0
|
||||
/obj/item/weapon/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 = CONDUCT | NODROP
|
||||
slot_flags = null
|
||||
block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY
|
||||
attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved", "gored") //ONLY THE MOST VISCERAL ATTACK VERBS
|
||||
attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS
|
||||
var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE
|
||||
var/announced = FALSE //IF WE ARE THE ONLY ONE LEFT STANDING
|
||||
var/bloodthirst_level = 0 //HOW THIRSTY WE ARE FOR BLOOD
|
||||
var/obj/item/weapon/disk/nuclear/nuke_disk //OUR STORED NUKE DISK
|
||||
|
||||
/obj/item/weapon/claymore/highlander/New()
|
||||
..()
|
||||
@@ -95,19 +99,27 @@ var/highlander_claymores = 0
|
||||
/obj/item/weapon/claymore/highlander/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
highlander_claymores--
|
||||
if(nuke_disk)
|
||||
nuke_disk.forceMove(get_turf(src))
|
||||
nuke_disk.visible_message("<span class='warning'>The nuke disk is vulnerable!</span>")
|
||||
nuke_disk = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/claymore/highlander/process()
|
||||
if(isliving(loc))
|
||||
var/mob/living/L = loc
|
||||
if(L.stat != DEAD)
|
||||
if(!announced)
|
||||
handle_bloodthirst(L)
|
||||
if(announced || admin_spawned || highlander_claymores > 1)
|
||||
return
|
||||
announced = TRUE
|
||||
L.fully_heal()
|
||||
world << "<span class='userdanger'>[L.real_name] IS THE ONLY ONE LEFT STANDING!</span>"
|
||||
world << "<span class='userdanger'>[uppertext(L.real_name)] IS THE ONLY ONE LEFT STANDING!</span>"
|
||||
world << sound('sound/misc/highlander_only_one.ogg')
|
||||
L << "<span class='notice'>YOU ARE THE ONLY ONE LEFT STANDING!</span>"
|
||||
for(var/obj/item/weapon/bloodcrawl/B in L)
|
||||
qdel(B)
|
||||
|
||||
/obj/item/weapon/claymore/highlander/pickup(mob/living/user)
|
||||
user << "<span class='notice'>The power of Scotland protects you! You are shielded from all stuns and knockdowns.</span>"
|
||||
@@ -120,12 +132,18 @@ var/highlander_claymores = 0
|
||||
/obj/item/weapon/claymore/highlander/examine(mob/user)
|
||||
..()
|
||||
user << "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade."
|
||||
if(nuke_disk)
|
||||
user << "<span class='boldwarning'>It's holding the nuke disk!</span>"
|
||||
|
||||
/obj/item/weapon/claymore/highlander/attack(mob/living/target, mob/living/user)
|
||||
var/old_target_stat = target.stat
|
||||
. = ..()
|
||||
bloodthirst_level = max(bloodthirst_level - (target.mind && target.mind.special_role == "highlander" ? 15 : 5), 0)
|
||||
if(target && target.stat == DEAD && old_target_stat != DEAD && target.mind && target.mind.special_role == "highlander")
|
||||
user.fully_heal() //STEAL THE LIFE OF OUR FALLEN FOES
|
||||
if(bloodthirst_level >= 30)
|
||||
user << "<span class='notice'>[src] shakes greedily as it devours [target]'s soul. Its bloodthirst is quenched for the moment...</span>"
|
||||
bloodthirst_level = 0
|
||||
add_notch(user)
|
||||
target.visible_message("<span class='warning'>[target] crumbles to dust beneath [user]'s blows!</span>", "<span class='userdanger'>As you fall, your body crumbles to dust!</span>")
|
||||
target.dust()
|
||||
@@ -138,6 +156,7 @@ var/highlander_claymores = 0
|
||||
closest_victim = H
|
||||
if(!closest_victim)
|
||||
user << "<span class='warning'>[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.</span>"
|
||||
return
|
||||
user << "<span class='danger'>[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].</span>"
|
||||
|
||||
/obj/item/weapon/claymore/highlander/IsReflect()
|
||||
@@ -196,6 +215,22 @@ var/highlander_claymores = 0
|
||||
name = new_name
|
||||
playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1)
|
||||
|
||||
/obj/item/weapon/claymore/highlander/proc/handle_bloodthirst(mob/living/S) //THE BLADE THIRSTS FOR BLOOD AND WILL PUNISH THE WEAK OR PACIFISTIC
|
||||
bloodthirst_level += (1 + min(notches, 10))
|
||||
if(bloodthirst_level == 30)
|
||||
S << "<span class='warning'>[src] shudders in your hand. It hungers for battle...</span>"
|
||||
if(bloodthirst_level == 60)
|
||||
S << "<span class='boldwarning'>[src] trembles violently. Kill someone already!</span>"
|
||||
if(bloodthirst_level == 90)
|
||||
S << "<span class='userdanger'>[src] starts shaking viciously! Shed blood or it'll give you away!</span>"
|
||||
if(bloodthirst_level >= 120)
|
||||
var/turf/T = get_turf(S)
|
||||
for(var/mob/M in player_list - S)
|
||||
if(M.z == T.z)
|
||||
M << "<span class='userdanger'>THERE IS A COWARD WHO DOES NOT FIGHT TO THE [uppertext(dir2text(get_dir(M, T)))]. THEIR NAME IS [uppertext(S.real_name)] - SLAUGHTER THEM.</span>"
|
||||
S << "<span class='notice'>you fucked up</span>"
|
||||
bloodthirst_level = 100
|
||||
|
||||
/obj/item/weapon/katana
|
||||
name = "katana"
|
||||
desc = "Woefully underpowered in D20"
|
||||
|
||||
@@ -216,10 +216,10 @@
|
||||
if(burn)
|
||||
Item.fire_act() //Set them on fire, too
|
||||
|
||||
/obj/proc/tesla_act(var/power)
|
||||
/obj/proc/tesla_act(power, explosive = FALSE)
|
||||
being_shocked = 1
|
||||
var/power_bounced = power / 2
|
||||
tesla_zap(src, 3, power_bounced)
|
||||
tesla_zap(src, 3, power_bounced, explosive)
|
||||
addtimer(src, "reset_shocked", 10)
|
||||
|
||||
/obj/proc/reset_shocked()
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
new /obj/item/clothing/under/shorts/red(src)
|
||||
new /obj/item/clothing/under/shorts/blue(src)
|
||||
new /obj/item/clothing/under/shorts/green(src)
|
||||
if(prob(3))
|
||||
new /obj/item/clothing/under/jabroni(src)
|
||||
|
||||
|
||||
/obj/structure/closet/boxinggloves
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/obj/structure/sacrificealtar
|
||||
name = "sacrificial altar"
|
||||
desc = "An altar designed to perform blood sacrifice for a deity."
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
icon_state = "sacrificealtar"
|
||||
anchored = 1
|
||||
density = 0
|
||||
can_buckle = 1
|
||||
|
||||
/obj/structure/sacrificealtar/attack_hand(mob/living/user)
|
||||
..()
|
||||
if(!has_buckled_mobs())
|
||||
return
|
||||
var/mob/living/L = locate() in buckled_mobs
|
||||
if(!L)
|
||||
return
|
||||
user << "<span class='notice'>You attempt to sacrifice [L] by invoking the sacrificial ritual.</span>"
|
||||
L.gib()
|
||||
message_admins("[key_name_admin(user)] has sacrificed [key_name_admin(L)] on the sacrifical altar.")
|
||||
|
||||
/obj/structure/healingfountain
|
||||
name = "healing fountain"
|
||||
desc = "A fountain containing the waters of life."
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
icon_state = "fountain"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/time_between_uses = 1800
|
||||
var/last_process = 0
|
||||
|
||||
/obj/structure/healingfountain/attack_hand(mob/living/user)
|
||||
if(last_process + time_between_uses > world.time)
|
||||
user << "<span class='notice'>The fountain appears to be empty.</span>"
|
||||
return
|
||||
last_process = world.time
|
||||
user << "<span class='notice'>The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.</span>"
|
||||
user.reagents.add_reagent("godblood",20)
|
||||
update_icons()
|
||||
addtimer(src, "update_icons", time_between_uses)
|
||||
|
||||
|
||||
/obj/structure/healingfountain/proc/update_icons()
|
||||
if(last_process + time_between_uses > world.time)
|
||||
icon_state = "fountain"
|
||||
else
|
||||
icon_state = "fountain-red"
|
||||
@@ -25,6 +25,7 @@
|
||||
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
|
||||
icon = 'icons/obj/flora/pinetrees.dmi'
|
||||
icon_state = "tree_stump"
|
||||
density = 0
|
||||
pixel_x = -16
|
||||
name += " stump"
|
||||
cut = TRUE
|
||||
|
||||
@@ -120,3 +120,43 @@
|
||||
name = "dense stack of papers"
|
||||
desc = "A stack of various papers, childish scribbles scattered across each page."
|
||||
icon_state = "paperstack"
|
||||
|
||||
|
||||
/obj/structure/fluff/divine
|
||||
name = "Miracle"
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
/obj/structure/fluff/divine/nexus
|
||||
name = "nexus"
|
||||
desc = "It anchors a deity to this world. It radiates an unusual aura. It looks well protected from explosive shock."
|
||||
icon_state = "nexus-neutral"
|
||||
|
||||
/obj/structure/fluff/divine/conduit
|
||||
name = "conduit"
|
||||
desc = "It allows a deity to extend their reach. Their powers are just as potent near a conduit as a nexus."
|
||||
icon_state = "conduit-neutral"
|
||||
|
||||
/obj/structure/fluff/divine/convertaltar
|
||||
name = "conversion altar"
|
||||
desc = "An altar dedicated to a deity."
|
||||
icon_state = "convertaltar-neutral"
|
||||
density = 0
|
||||
can_buckle = 1
|
||||
|
||||
/obj/structure/fluff/divine/powerpylon
|
||||
name = "power pylon"
|
||||
desc = "A pylon which increases the deity's rate it can influence the world."
|
||||
icon_state = "powerpylon"
|
||||
can_buckle = 1
|
||||
|
||||
/obj/structure/fluff/divine/defensepylon
|
||||
name = "defense pylon"
|
||||
desc = "A pylon which is blessed to withstand many blows, and fire strong bolts at nonbelievers. A god can toggle it."
|
||||
icon_state = "defensepylon"
|
||||
|
||||
/obj/structure/fluff/divine/shrine
|
||||
name = "shrine"
|
||||
desc = "A shrine dedicated to a deity."
|
||||
icon_state = "shrine"
|
||||
@@ -264,17 +264,8 @@
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
if(C)
|
||||
var/mob/living/closest_mob
|
||||
for(var/A in oview(src, 3))
|
||||
if(istype(A, /mob/living))
|
||||
var/dist = get_dist(src, A)
|
||||
if(dist <= 3)
|
||||
closest_mob = A
|
||||
if(closest_mob)
|
||||
var/shock_damage = C.powernet.avail * 0.0002//setting shock damage for later. equals 1/5000 the power in the grid
|
||||
src.Beam(closest_mob, icon_state="lightning[rand(1,12)]", time=5)
|
||||
closest_mob.electrocute_act(shock_damage, src, 1)//ZAP, damage should be about 40 with 200000W
|
||||
playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
|
||||
playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
|
||||
tesla_zap(src, 3, C.powernet.avail * 0.01) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot.
|
||||
take_damage(tforce)
|
||||
|
||||
/obj/structure/grille/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
|
||||
|
||||
@@ -20,6 +20,22 @@
|
||||
var/obj/F = new /obj/structure/kitchenspike(src.loc,)
|
||||
transfer_fingerprints_to(F)
|
||||
qdel(src)
|
||||
else if(istype(I, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = I
|
||||
if(!WT.remove_fuel(0, user))
|
||||
return
|
||||
user << "<span class='notice'>You begin cutting \the [src] apart...</span>"
|
||||
playsound(src.loc, "sound/items/Welder.ogg", 40, 1)
|
||||
if(do_after(user, 40/WT.toolspeed, 1, target = src))
|
||||
if(!WT.isOn())
|
||||
return
|
||||
playsound(src.loc, "sound/items/Welder.ogg", 50, 1)
|
||||
visible_message("<span class='notice'>[user] slices apart \the [src].</span>",
|
||||
"<span class='notice'>You cut \the [src] apart with \the [WT].</span>",
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
new /obj/item/stack/sheet/metal(src.loc, 4)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -391,6 +391,7 @@
|
||||
icon = 'icons/obj/smooth_structures/brass_table.dmi'
|
||||
icon_state = "brass_table"
|
||||
frame = /obj/structure/table_frame/brass
|
||||
framestack = /obj/item/stack/sheet/brass
|
||||
buildstack = /obj/item/stack/sheet/brass
|
||||
framestackamount = 1
|
||||
buildstackamount = 1
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/obj/structure/trap
|
||||
name = "IT'S A TARP"
|
||||
desc = "stepping on me is a guaranteed bad day"
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
icon_state = "trap"
|
||||
density = 0
|
||||
alpha = 30 //initially quite hidden when not "recharging"
|
||||
var/last_trigger = 0
|
||||
var/time_between_triggers = 600 //takes a minute to recharge
|
||||
|
||||
/obj/structure/trap/Crossed(atom/movable/AM)
|
||||
if(last_trigger + time_between_triggers > world.time)
|
||||
return
|
||||
alpha = initial(alpha)
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
last_trigger = world.time
|
||||
alpha = 200
|
||||
trap_effect(L)
|
||||
animate(src, alpha = initial(alpha), time = time_between_triggers)
|
||||
|
||||
/obj/structure/trap/examine(mob/user)
|
||||
..()
|
||||
if(!isliving(user)) //bad ghosts, stop trying to powergame from beyond the grave
|
||||
return
|
||||
user << "You reveal a trap!"
|
||||
alpha = 200
|
||||
animate(src, alpha = initial(alpha), time = time_between_triggers)
|
||||
|
||||
|
||||
/obj/structure/trap/proc/trap_effect(mob/living/L)
|
||||
return
|
||||
|
||||
/obj/structure/trap/stun
|
||||
name = "shock trap"
|
||||
desc = "A trap that will shock you, it will burn your flesh and render you immobile, You'd better avoid it."
|
||||
icon_state = "trap-shock"
|
||||
|
||||
/obj/structure/trap/stun/trap_effect(mob/living/L)
|
||||
L << "<span class='danger'><B>You are paralyzed from the intense shock!</B></span>"
|
||||
L.Weaken(5)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/particle_effect/sparks/electricity(Lturf)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
|
||||
|
||||
/obj/structure/trap/fire
|
||||
name = "flame trap"
|
||||
desc = "A trap that will set you ablaze. You'd better avoid it."
|
||||
icon_state = "trap-fire"
|
||||
|
||||
|
||||
/obj/structure/trap/fire/trap_effect(mob/living/L)
|
||||
L << "<span class='danger'><B>Spontaneous combustion!</B></span>"
|
||||
L.Weaken(1)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/hotspot(Lturf)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
|
||||
|
||||
/obj/structure/trap/chill
|
||||
name = "frost trap"
|
||||
desc = "A trap that will chill you to the bone. You'd better avoid it."
|
||||
icon_state = "trap-frost"
|
||||
|
||||
|
||||
/obj/structure/trap/chill/trap_effect(mob/living/L)
|
||||
L << "<span class='danger'><B>You're frozen solid!</B></span>"
|
||||
L.Weaken(1)
|
||||
L.bodytemperature -= 300
|
||||
new /obj/effect/particle_effect/sparks(get_turf(L))
|
||||
|
||||
|
||||
/obj/structure/trap/damage
|
||||
name = "earth trap"
|
||||
desc = "A trap that will summon a small earthquake, just for you. You'd better avoid it."
|
||||
icon_state = "trap-earth"
|
||||
|
||||
|
||||
/obj/structure/trap/damage/trap_effect(mob/living/L)
|
||||
L << "<span class='danger'><B>The ground quakes beneath your feet!</B></span>"
|
||||
L.Weaken(5)
|
||||
L.adjustBruteLoss(35)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
new /obj/structure/flora/rock(Lturf)
|
||||
|
||||
|
||||
/obj/structure/trap/ward
|
||||
name = "divine ward"
|
||||
desc = "A divine barrier, It looks like you could destroy it with enough effort, or wait for it to dissipate..."
|
||||
icon_state = "ward"
|
||||
density = 1
|
||||
time_between_triggers = 1200 //Exists for 2 minutes
|
||||
|
||||
|
||||
/obj/structure/trap/ward/New()
|
||||
..()
|
||||
QDEL_IN(src, time_between_triggers)
|
||||
@@ -516,19 +516,20 @@
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/New(loc, direct)
|
||||
..()
|
||||
for(var/obj/item/I in debris)
|
||||
debris -= I
|
||||
qdel(I)
|
||||
if(!fulltile)
|
||||
if(direct)
|
||||
var/obj/effect/E = PoolOrNew(/obj/effect/overlay/temp/ratvar/window/single, get_turf(src))
|
||||
setDir(direct)
|
||||
E.setDir(direct)
|
||||
made_glow = TRUE
|
||||
debris += new/obj/item/stack/sheet/brass(src, 1)
|
||||
else
|
||||
PoolOrNew(/obj/effect/overlay/temp/ratvar/window, get_turf(src))
|
||||
made_glow = TRUE
|
||||
for(var/obj/item/I in debris)
|
||||
debris -= I
|
||||
qdel(I)
|
||||
debris += new/obj/item/stack/sheet/brass(src)
|
||||
debris += new/obj/item/stack/sheet/brass(src, 2)
|
||||
change_construction_value(fulltile ? 3 : 2)
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/setDir(direct)
|
||||
|
||||
Reference in New Issue
Block a user