mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 16:47:13 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into AnomalyFix
This commit is contained in:
@@ -32,7 +32,7 @@
|
||||
"aF" = (/turf/simulated/shuttle/wall,/area/awaymission/BMPship/Aft)
|
||||
"aG" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
|
||||
"aH" = (/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
|
||||
"aI" = (/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/structure/closet/crate,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
|
||||
"aI" = (/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/restraints/handcuffs,/obj/structure/closet/crate,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
|
||||
"aJ" = (/obj/item/weapon/scalpel,/obj/structure/closet/crate,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
|
||||
"aK" = (/obj/item/bodybag,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
|
||||
"aL" = (/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
|
||||
|
||||
@@ -591,7 +591,7 @@
|
||||
"ls" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/thunderdome)
|
||||
"lt" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/awaymission/centcomAway/thunderdome)
|
||||
"lu" = (/turf/simulated/floor{dir = 8; icon_state = "red"},/area/awaymission/centcomAway/thunderdome)
|
||||
"lv" = (/obj/structure/rack,/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/twohanded/fireaxe,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome)
|
||||
"lv" = (/obj/structure/rack,/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/twohanded/fireaxe,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome)
|
||||
"lw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome)
|
||||
"lx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome)
|
||||
"ly" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/centcomAway/thunderdome)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"aC" = (/turf/simulated/floor{dir = 4; heat_capacity = 1e+006; icon_state = "darkredcorners"; tag = "icon-darkredcorners (EAST)"},/area/awaycontent/a4{name = "Syndicate Outpost"})
|
||||
"aD" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 5; heat_capacity = 1e+006; icon_state = "darkred"; tag = "icon-darkred (NORTHEAST)"},/area/awaycontent/a4{name = "Syndicate Outpost"})
|
||||
"aE" = (/obj/structure/alien/weeds/node,/obj/structure/alien/resin/wall,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/mine/explored)
|
||||
"aF" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/structure/stool/bed/nest,/obj/effect/decal/cleanable/blood/gibs,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_impregnated"; item_state = "facehugger_impregnated"; stat = 2},/obj/item/clothing/under/rank/security/science,/obj/item/clothing/suit/armor/vest,/obj/item/weapon/melee/baton/loaded,/obj/item/clothing/head/helmet,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/mine/explored)
|
||||
"aF" = (/obj/structure/alien/weeds{icon_state = "weeds1"},/obj/structure/stool/bed/nest,/obj/effect/decal/cleanable/blood/gibs,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_impregnated"; item_state = "facehugger_impregnated"; stat = 2},/obj/item/clothing/under/rank/security,/obj/item/clothing/suit/armor/vest,/obj/item/weapon/melee/baton/loaded,/obj/item/clothing/head/helmet,/turf/simulated/floor/plating/asteroid{carbon_dioxide = 48.7; heat_capacity = 1e+006; nitrogen = 13.2; oxygen = 32.4; temperature = 251},/area/mine/explored)
|
||||
"aG" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 1; heat_capacity = 1e+006; icon_state = "darkredcorners"; tag = "icon-darkredcorners (NORTH)"},/area/awaycontent/a4{name = "Syndicate Outpost"})
|
||||
"aH" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor{dir = 1; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a4{name = "Syndicate Outpost"})
|
||||
"aI" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor{dir = 8; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a4{name = "Syndicate Outpost"})
|
||||
|
||||
@@ -64,15 +64,15 @@
|
||||
"bl" = (/obj/structure/table/reinforced,/obj/item/clothing/head/helmet/swat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
|
||||
"bm" = (/obj/machinery/computer/pod{id = "spacebattlepod3"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate2)
|
||||
"bn" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "spacebattlepod3"; name = "Front Hull Door"; opacity = 1},/turf/simulated/shuttle/plating,/area/awaymission/spacebattle/syndicate2)
|
||||
"bo" = (/obj/structure/table/reinforced,/obj/item/weapon/plastique,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
|
||||
"bo" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
|
||||
"bp" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
|
||||
"bq" = (/obj/structure/table/reinforced,/obj/item/weapon/plastique,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
|
||||
"bq" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
|
||||
"br" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
|
||||
"bs" = (/obj/structure/table/reinforced,/obj/item/weapon/handcuffs,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
|
||||
"bs" = (/obj/structure/table/reinforced,/obj/item/weapon/restraints/handcuffs,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
|
||||
"bt" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3)
|
||||
"bu" = (/obj/structure/stool/bed/chair,/mob/living/simple_animal/hostile/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
|
||||
"bv" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3)
|
||||
"bw" = (/obj/structure/table/reinforced,/obj/item/weapon/melee/energy/sword/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
|
||||
"bw" = (/obj/structure/table/reinforced,/obj/item/weapon/melee/energy/sword/saber/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate1)
|
||||
"bx" = (/obj/machinery/computer/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/spacebattle/syndicate3)
|
||||
"by" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3)
|
||||
"bz" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate3)
|
||||
@@ -257,7 +257,7 @@
|
||||
"eW" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
|
||||
"eX" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/condiment/saltshaker,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/spacebattle/cruiser)
|
||||
"eY" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/spacebattle/cruiser)
|
||||
"eZ" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/melee/energy/sword/red,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser)
|
||||
"eZ" = (/obj/effect/landmark/corpse/syndicatesoldier,/obj/item/weapon/melee/energy/sword/saber/red,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser)
|
||||
"fa" = (/obj/effect/landmark/corpse/bridgeofficer{mobname = "Kurt Kliest"; name = "Kurt Kliest"},/obj/item/weapon/gun/projectile/shotgun/combat,/obj/item/ammo_casing/shotgun,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser)
|
||||
"fb" = (/obj/item/ammo_casing/shotgun,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/spacebattle/cruiser)
|
||||
"fc" = (/obj/machinery/computer/crew,/turf/simulated/floor{tag = "icon-bluefull"; icon_state = "bluefull"},/area/awaymission/spacebattle/cruiser)
|
||||
@@ -359,7 +359,7 @@
|
||||
"gU" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/spacebattle/syndicate7)
|
||||
"gV" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/syndicate4)
|
||||
"gW" = (/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
|
||||
"gX" = (/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/item/weapon/ore/clown,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
|
||||
"gX" = (/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
|
||||
"gY" = (/obj/machinery/computer/operating,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)
|
||||
"gZ" = (/obj/effect/landmark/corpse/doctor{mobname = "Allan Yoshimaru"; name = "Allan Yoshimaru"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)
|
||||
"ha" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor{icon_state = "white"},/area/awaymission/spacebattle/cruiser)
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
"eu" = (/obj/structure/rack,/obj/item/key,/obj/item/key,/obj/item/key,/obj/item/key,/obj/item/key,/turf/simulated/floor/carpet,/area/awaymission)
|
||||
"ev" = (/obj/structure/stool/bed/chair/comfy,/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission)
|
||||
"ew" = (/obj/structure/stool/bed/chair/comfy,/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/flour{desc = "Probably."},/obj/effect/decal/cleanable/pie_smudge,/turf/simulated/floor/carpet,/area/awaymission)
|
||||
"ex" = (/obj/item/weapon/legcuffs,/turf/simulated/floor/engine/cult,/area/awaymission)
|
||||
"ex" = (/obj/item/weapon/restraints/legcuffs,/turf/simulated/floor/engine/cult,/area/awaymission)
|
||||
"ey" = (/obj/machinery/space_heater,/turf/simulated/floor/carpet,/area/awaymission)
|
||||
"ez" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission)
|
||||
"eA" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Not used to spy on hotel rooms."; dir = 1; network = "Hotel"; use_power = 0},/turf/simulated/floor/carpet,/area/awaymission)
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
"gX" = (/obj/effect/decal/remains/human,/turf/simulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/awaymission/arrivalblock)
|
||||
"gY" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/awaymission/arrivalblock)
|
||||
"gZ" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
|
||||
"ha" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/melee/baton,/obj/item/clothing/head/helmet/warden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
|
||||
"ha" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/melee/baton,/obj/item/clothing/head/warden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
|
||||
"hb" = (/obj/structure/closet/wardrobe/red,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
|
||||
"hc" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
|
||||
"hd" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/arrivalblock)
|
||||
@@ -400,7 +400,7 @@
|
||||
"hJ" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/awaymission/arrivalblock)
|
||||
"hK" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"hL" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"hM" = (/obj/structure/table,/obj/item/weapon/handcuffs,/obj/item/device/flash,/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"hM" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flash,/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"hN" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock)
|
||||
"hO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/effect/decal/remains/human,/turf/simulated/floor,/area/awaymission/midblock)
|
||||
"hP" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor,/area/awaymission/midblock)
|
||||
@@ -557,7 +557,7 @@
|
||||
"kK" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"kL" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"kM" = (/obj/structure/sink/kitchen{pixel_y = 32},/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"kN" = (/obj/item/weapon/melee/energy/sword/red,/obj/item/clothing/shoes/syndigaloshes,/obj/item/clothing/under/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/weapon/paper/sc_safehint_paper_hydro,/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"kN" = (/obj/item/weapon/melee/energy/sword/saber/red,/obj/item/clothing/shoes/syndigaloshes,/obj/item/clothing/under/syndicate,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/weapon/paper/sc_safehint_paper_hydro,/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"kO" = (/obj/machinery/hydroponics,/turf/simulated/floor,/area/awaymission/arrivalblock)
|
||||
"kP" = (/obj/structure/morgue,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
|
||||
"kQ" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -403,7 +403,7 @@
|
||||
"ahM" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/carpet,/area/security/brig)
|
||||
"ahN" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"ahO" = (/turf/simulated/floor{icon_state = "purplecorner"; dir = 4},/area/hallway/primary/central)
|
||||
"ahP" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/pen,/obj/machinery/door/firedoor/border_only{dir = 8; name = "hazard door west"},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "whitepurple"; dir = 8},/area/medical/research{name = "Research Division"})
|
||||
"ahP" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/pen,/obj/machinery/door/firedoor/border_only{dir = 8; name = "hazard door west"},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "whitepurple"; dir = 8},/area/medical/research{name = "Research Division"})
|
||||
"ahQ" = (/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"})
|
||||
"ahR" = (/obj/machinery/r_n_d/destructive_analyzer,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
|
||||
"ahS" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
|
||||
@@ -648,7 +648,7 @@
|
||||
"amx" = (/obj/machinery/conveyor{dir = 2; id = "recycler"},/turf/simulated/floor/plating,/area/hallway/primary/central)
|
||||
"amy" = (/obj/machinery/conveyor_switch/oneway{id = "recycler"; name = "recycler conveyor"},/turf/simulated/floor/plating,/area/hallway/primary/central)
|
||||
"amz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central)
|
||||
"amA" = (/obj/structure/table,/obj/item/clothing/head/welding,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/blueprints,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
||||
"amA" = (/obj/structure/table,/obj/item/clothing/head/welding,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/areaeditor/blueprints,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
||||
"amB" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/closet/crate/rcd,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
||||
"amC" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
||||
"amD" = (/obj/machinery/camera/autoname,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/light{dir = 1},/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
||||
@@ -979,7 +979,7 @@
|
||||
"asQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"asR" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 2; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access_txt = "57"},/obj/machinery/door/window/northright{name = "Reception Window"},/turf/simulated/floor/plating,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"asS" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/wall/r_wall,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"asT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"asT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"asU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/obj/machinery/requests_console{announcementConsole = 1; department = "Lieutenant Office"; departmentType = 5; name = "Lieutenant RC"; pixel_y = 30},/turf/simulated/floor,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"asV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/closet/crate/bin,/turf/simulated/floor,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
"asW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/heads{name = "\improper Job Assignment"})
|
||||
@@ -995,13 +995,13 @@
|
||||
"atg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"ath" = (/obj/structure/closet/crate/bin,/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||
"ati" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/crew_quarters/bar)
|
||||
"atj" = (/obj/structure/table,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/packageWrap,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/crew_quarters/bar)
|
||||
"atj" = (/obj/structure/table,/obj/item/weapon/book/manual/barman_recipes,/obj/item/stack/packageWrap,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/crew_quarters/bar)
|
||||
"atk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central)
|
||||
"atl" = (/obj/structure/table,/obj/machinery/door/window/southleft{layer = 3.1},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"atm" = (/obj/structure/table,/obj/machinery/door/window/southright{layer = 3.1},/turf/simulated/floor,/area/hallway/primary/central)
|
||||
"atn" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{dir = 2; name = "Chemistry Desk"; req_access_txt = "33"},/obj/item/clothing/glasses/science,/turf/simulated/floor/plating,/area/medical/medbay)
|
||||
"ato" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/pill_bottle/inaprovaline{pixel_x = 5; pixel_y = -2},/obj/item/weapon/storage/pill_bottle/inaprovaline{pixel_x = 5; pixel_y = -2},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
|
||||
"atp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/item/device/radio/headset/headset_med,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/obj/machinery/camera/autoname,/turf/simulated/floor{tag = "icon-whiteyellowcorner"; icon_state = "whiteyellowcorner"; dir = 2},/area/medical/medbay)
|
||||
"atp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/item/device/radio/headset/headset_med,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/obj/machinery/camera/autoname,/turf/simulated/floor{tag = "icon-whiteyellowcorner"; icon_state = "whiteyellowcorner"; dir = 2},/area/medical/medbay)
|
||||
"atq" = (/obj/machinery/smartfridge/chemistry,/turf/simulated/wall,/area/medical/medbay)
|
||||
"atr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{tag = "icon-whiteyellowcorner (WEST)"; icon_state = "whiteyellowcorner"; dir = 8},/area/medical/medbay)
|
||||
"ats" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/turf/simulated/floor{dir = 4; icon_state = "whiteblue"},/area/medical/medbay)
|
||||
|
||||
+599
-602
File diff suppressed because it is too large
Load Diff
@@ -39,12 +39,14 @@ This should ideally have /unary/ as parent, why doesn't it? //Donkie
|
||||
|
||||
if(showpipe)
|
||||
var/state
|
||||
var/col
|
||||
if(node)
|
||||
state = "pipe_intact"
|
||||
col = node.pipe_color
|
||||
else
|
||||
state = "pipe_exposed"
|
||||
|
||||
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', state, initialize_directions, node.pipe_color)
|
||||
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', state, initialize_directions, col)
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -36,12 +36,14 @@ Iconnery
|
||||
|
||||
if(showpipe)
|
||||
var/state
|
||||
var/col
|
||||
if(node)
|
||||
state = "pipe_intact"
|
||||
col = node.pipe_color
|
||||
else
|
||||
state = "pipe_exposed"
|
||||
|
||||
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', state, initialize_directions, node.pipe_color)
|
||||
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', state, initialize_directions, col)
|
||||
|
||||
/obj/machinery/atmospherics/unary/hide(var/intact)
|
||||
showpipe = !intact
|
||||
|
||||
@@ -15,41 +15,57 @@ Atmospheric Tanks
|
||||
initialize_directions = SOUTH
|
||||
density = 1
|
||||
can_unwrench = 0
|
||||
var/obj/machinery/atmospherics/node1
|
||||
var/obj/machinery/atmospherics/node
|
||||
var/showpipe = 0
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/New()
|
||||
initialize_directions = dir
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/hide(var/intact)
|
||||
showpipe = !intact
|
||||
update_icon()
|
||||
|
||||
..(intact)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/Destroy()
|
||||
if(node1)
|
||||
node1.disconnect(src)
|
||||
if(node)
|
||||
node.disconnect(src)
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/pipeline_expansion()
|
||||
return list(node1)
|
||||
return list(node)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/update_icon()
|
||||
if(node1)
|
||||
icon_state = "intact"
|
||||
dir = get_dir(src, node1)
|
||||
else
|
||||
icon_state = "exposed"
|
||||
underlays.Cut()
|
||||
if(showpipe)
|
||||
var/state
|
||||
var/col
|
||||
if(node)
|
||||
state = "pipe_intact"
|
||||
col = node.pipe_color
|
||||
else
|
||||
state = "pipe_exposed"
|
||||
|
||||
underlays += getpipeimage('icons/obj/atmospherics/pipe_tank.dmi', state, initialize_directions, col)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/initialize()
|
||||
var/connect_direction = dir
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
|
||||
if(target.initialize_directions & get_dir(target,src))
|
||||
node1 = target
|
||||
node = target
|
||||
break
|
||||
|
||||
if(level == 2)
|
||||
showpipe = 1
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
if(istype(node1, /obj/machinery/atmospherics/pipe))
|
||||
if(reference == node)
|
||||
if(istype(node, /obj/machinery/atmospherics/pipe))
|
||||
del(parent)
|
||||
node1 = null
|
||||
node = null
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
@@ -168,10 +168,10 @@ datum/controller/air_system
|
||||
atom/movable/proc/CanAtmosPass()
|
||||
return 1
|
||||
|
||||
atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
||||
return (!density || !height || air_group)
|
||||
atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
return (!density || !height)
|
||||
|
||||
turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0)
|
||||
turf/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
if(!target) return 0
|
||||
|
||||
if(istype(mover)) // turf/Enter(...) will perform more advanced checks
|
||||
@@ -182,10 +182,10 @@ turf/CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0)
|
||||
return 0
|
||||
|
||||
for(var/obj/obstacle in src)
|
||||
if(!obstacle.CanPass(mover, target, height, air_group))
|
||||
if(!obstacle.CanPass(mover, target, height))
|
||||
return 0
|
||||
for(var/obj/obstacle in target)
|
||||
if(!obstacle.CanPass(mover, src, height, air_group))
|
||||
if(!obstacle.CanPass(mover, src, height))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
@@ -115,7 +115,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_r_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/storage/id_kit(src)
|
||||
new /obj/item/weapon/storage/id_kit( src )
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
return
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
new /obj/item/weapon/storage/lockbox/loyalty(src)
|
||||
new /obj/item/weapon/storage/flashbang_kit(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/weapon/melee/baton(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
@@ -122,7 +122,7 @@
|
||||
new /obj/item/weapon/storage/backpack/satchel_sec(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
|
||||
@@ -34,8 +34,9 @@
|
||||
|
||||
#define CLICK_CD_MELEE 8
|
||||
#define CLICK_CD_RANGE 4
|
||||
#define CLICK_CD_HANDCUFFED 10
|
||||
#define CLICK_CD_BREAKOUT 100
|
||||
#define CLICK_CD_HANDCUFFED 10
|
||||
#define CLICK_CD_TKSTRANGLE 10
|
||||
#define CLICK_CD_RESIST 20
|
||||
//click cooldowns, in tenths of a second
|
||||
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
/proc/warning(msg)
|
||||
world.log << "## WARNING: [msg]"
|
||||
|
||||
//not an error or a warning, but worth to mention on the world log, just in case.
|
||||
#define NOTICE(MSG) notice(MSG)
|
||||
/proc/notice(msg)
|
||||
world.log << "## NOTICE: [msg]"
|
||||
|
||||
//print a testing-mode debug message to world.log
|
||||
/proc/testing(msg)
|
||||
#ifdef TESTING
|
||||
|
||||
@@ -763,17 +763,23 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
|
||||
else return get_step(ref, base_dir)
|
||||
|
||||
/proc/do_mob(var/mob/user , var/mob/target, var/time = 30) //This is quite an ugly solution but i refuse to use the old request system.
|
||||
if(!user || !target) return 0
|
||||
/proc/do_mob(var/mob/user , var/mob/target, var/time = 30, numticks = 5) //This is quite an ugly solution but i refuse to use the old request system.
|
||||
if(!user || !target)
|
||||
return 0
|
||||
if(numticks == 0)
|
||||
return 0
|
||||
var/user_loc = user.loc
|
||||
var/target_loc = target.loc
|
||||
var/holding = user.get_active_hand()
|
||||
sleep(time)
|
||||
if(!user || !target) return 0
|
||||
if ( user.loc == user_loc && target.loc == target_loc && user.get_active_hand() == holding && !( user.stat ) && ( !user.stunned && !user.weakened && !user.paralysis && !user.lying ) )
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
var/timefraction = round(time/numticks)
|
||||
for(var/i = 0, i<numticks, i++)
|
||||
sleep(timefraction)
|
||||
if(!user || !target)
|
||||
return 0
|
||||
if ( user.loc != user_loc || target.loc != target_loc || user.get_active_hand() != holding || user.stat || ( user.stunned || user.weakened || user.paralysis || user.lying ) )
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/proc/do_after(mob/user, delay, numticks = 5, needhand = 1)
|
||||
if(!user || isnull(user))
|
||||
|
||||
@@ -101,11 +101,9 @@
|
||||
if(!resolved && A && W)
|
||||
W.afterattack(A,src,1,params) // 1 indicates adjacency
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
UnarmedAttack(A)
|
||||
|
||||
//If we click on a mob make sure we add cooldown
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
return
|
||||
|
||||
if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that
|
||||
@@ -120,18 +118,15 @@
|
||||
if(!resolved && A && W)
|
||||
W.afterattack(A,src,1,params) // 1: clicking something Adjacent
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
UnarmedAttack(A, 1)
|
||||
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
return
|
||||
else // non-adjacent click
|
||||
if(W)
|
||||
W.afterattack(A,src,0,params) // 0: not Adjacent
|
||||
else
|
||||
RangedAttack(A, params)
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_RANGE)
|
||||
|
||||
return
|
||||
|
||||
@@ -154,6 +149,8 @@
|
||||
in human click code to allow glove touches only at melee range.
|
||||
*/
|
||||
/mob/proc/UnarmedAttack(var/atom/A, var/proximity_flag)
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
@@ -59,6 +59,15 @@
|
||||
adding += using
|
||||
action_intent = using
|
||||
|
||||
if(istype(mymob, /mob/living/carbon/alien/humanoid/hunter))
|
||||
mymob.leap_icon = new /obj/screen()
|
||||
mymob.leap_icon.name = "leap"
|
||||
mymob.leap_icon.icon = 'icons/mob/screen_alien.dmi'
|
||||
mymob.leap_icon.icon_state = "leap_off"
|
||||
mymob.leap_icon.screen_loc = ui_alien_storage_r
|
||||
mymob.leap_icon.layer = 20
|
||||
adding += mymob.leap_icon
|
||||
|
||||
using = new /obj/screen()
|
||||
using.name = "mov_intent"
|
||||
using.icon = 'icons/mob/screen_alien.dmi'
|
||||
|
||||
@@ -397,6 +397,10 @@
|
||||
if(issilicon(usr))
|
||||
var/mob/living/silicon/S = usr
|
||||
S.sensor_mode()
|
||||
if("leap")
|
||||
if(istype(usr, /mob/living/carbon/alien/humanoid))
|
||||
var/mob/living/carbon/alien/humanoid/hunter/AH = usr
|
||||
AH.toggle_leap()
|
||||
else
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
visible_message("<span class='danger'>[src] has been hit by [user] with [W].</span>")
|
||||
|
||||
/mob/living/attackby(obj/item/I, mob/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
I.attack(src, user)
|
||||
|
||||
/mob/living/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
|
||||
|
||||
@@ -81,7 +81,8 @@
|
||||
var/security_scaling_coeff = 8 //how much does the amount of players get divided by to determine open security officer positions
|
||||
|
||||
var/traitor_objectives_amount = 2
|
||||
var/protect_roles_from_antagonist = 0// If security and such can be traitor/cult/other
|
||||
var/protect_roles_from_antagonist = 0 //If security and such can be traitor/cult/other
|
||||
var/protect_assistant_from_antagonist = 0 //If assistants can be traitor/cult/other
|
||||
var/enforce_human_authority = 0 //If non-human species are barred from joining as a head of staff
|
||||
var/allow_latejoin_antagonists = 0 // If late-joining players can be traitor/changeling
|
||||
var/continuous_round_rev = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke.
|
||||
@@ -375,6 +376,8 @@
|
||||
|
||||
if("protect_roles_from_antagonist")
|
||||
config.protect_roles_from_antagonist = 1
|
||||
if("protect_assistant_from_antagonist")
|
||||
config.protect_assistant_from_antagonist = 1
|
||||
if("enforce_human_authority")
|
||||
config.enforce_human_authority = 1
|
||||
if("allow_latejoin_antagonists")
|
||||
|
||||
@@ -242,6 +242,6 @@ var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle
|
||||
var/turf/T = get_step(L, dir)
|
||||
if(T)
|
||||
for(var/obj/O in T) // For doors and such (kinda ugly but we can't have people opening doors)
|
||||
if(!O.CanPass(L, L.loc, 1, 0))
|
||||
if(!O.CanPass(L, L.loc, 1))
|
||||
return
|
||||
L.Move(get_step(L, dir), dir)
|
||||
@@ -43,7 +43,8 @@ Bonus
|
||||
|
||||
/datum/symptom/vomit/proc/Vomit(var/mob/living/M)
|
||||
|
||||
M.visible_message("<B>[M]</B> vomits on the floor!")
|
||||
M.visible_message("<span class='danger'>[M] vomits on the floor!</span>", \
|
||||
"<span class='userdanger'>You throw up on the floor!</span>")
|
||||
|
||||
M.nutrition -= 20
|
||||
M.adjustToxLoss(-3)
|
||||
@@ -84,7 +85,8 @@ Bonus
|
||||
/datum/symptom/vomit/blood/Vomit(var/mob/living/M)
|
||||
|
||||
M.Stun(1)
|
||||
M.visible_message("<B>[M]</B> vomits on the floor!")
|
||||
M.visible_message("<span class='danger'>[M] vomits on the floor!</span>", \
|
||||
"<span class='userdanger'>You throw up on the floor!</span>")
|
||||
|
||||
// They lose blood and health.
|
||||
var/brute_dam = M.getBruteLoss()
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
affected_mob.nutrition -= 95
|
||||
affected_mob.adjustToxLoss(-1)
|
||||
else
|
||||
affected_mob << "<span class='warning'>You gag as you want to throw up, but there's nothing in your stomach!</span>"
|
||||
affected_mob << "<span class='userdanger'>You gag as you want to throw up, but there's nothing in your stomach!</span>"
|
||||
affected_mob.Weaken(10)
|
||||
affected_mob.adjustToxLoss(3)
|
||||
|
||||
|
||||
@@ -35,6 +35,8 @@ client/verb/showrevinfo()
|
||||
src << "Revision unknown"
|
||||
src << "<b>Current Infomational Settings:</b>"
|
||||
src << "Protect Authority Roles From Traitor: [config.protect_roles_from_antagonist]"
|
||||
src << "Protect Assistant Role From Traitor: [config.protect_assistant_from_antagonist]"
|
||||
src << "Enforce Human Authority: [config.enforce_human_authority]"
|
||||
src << "Allow Latejoin Antagonists: [config.allow_latejoin_antagonists]"
|
||||
return
|
||||
src << "Protect Assistant From Antagonist: [config.protect_assistant_from_antagonist]"
|
||||
return
|
||||
|
||||
@@ -531,7 +531,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/large,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/large,
|
||||
/obj/item/weapon/storage/box/beakers,
|
||||
/obj/item/weapon/storage/box/syringes)
|
||||
/obj/item/weapon/storage/box/syringes,
|
||||
/obj/item/weapon/storage/box/bodybags)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/medical
|
||||
containername = "medical supplies crate"
|
||||
@@ -1104,8 +1105,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/datum/supply_packs/misc/randomised/contraband
|
||||
num_contained = 5
|
||||
contains = list(/obj/item/weapon/contraband/poster,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
|
||||
/obj/item/weapon/lipstick/random)
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco)
|
||||
name = "Contraband crate"
|
||||
cost = 30
|
||||
containername = "crate" //let's keep it subtle, eh?
|
||||
@@ -1145,6 +1145,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/obj/item/clothing/under/suit_jacket/navy,
|
||||
/obj/item/clothing/under/suit_jacket/burgundy,
|
||||
/obj/item/clothing/under/suit_jacket/checkered,
|
||||
/obj/item/clothing/under/suit_jacket/tan)
|
||||
/obj/item/clothing/under/suit_jacket/tan,
|
||||
/obj/item/weapon/lipstick/random)
|
||||
cost = 30 //Lots of very expensive items. You gotta pay up to look good!
|
||||
containername = "formal-wear crate"
|
||||
|
||||
+1
-1
@@ -203,7 +203,7 @@ its easier to just keep the beam vertical.
|
||||
/atom/proc/examine(mob/user)
|
||||
//This reformat names to get a/an properly working on item descriptions when they are bloody
|
||||
var/f_name = "\a [src]."
|
||||
if(src.blood_DNA)
|
||||
if(src.blood_DNA && !istype(src, /obj/effect/decal))
|
||||
if(gender == PLURAL)
|
||||
f_name = "some "
|
||||
else
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
var/throwing = 0
|
||||
var/throw_speed = 2
|
||||
var/throw_range = 7
|
||||
var/moved_recently = 0
|
||||
var/mob/pulledby = null
|
||||
var/languages = 0 //For say() and Hear()
|
||||
glide_size = 8
|
||||
@@ -130,7 +129,7 @@
|
||||
src.throwing = 0
|
||||
if(isobj(src))
|
||||
src.throw_impact(get_turf(src))
|
||||
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
/mob/living/simple_animal/hostile/blobspore/blob_act()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
/mob/living/simple_animal/hostile/blobspore/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(istype(mover, /obj/effect/blob))
|
||||
return 1
|
||||
return ..()
|
||||
@@ -131,6 +131,7 @@
|
||||
maxbodytemp = 360
|
||||
force_threshold = 10
|
||||
environment_smash = 3
|
||||
mob_size = 2
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blobbernaut/AttackingTarget()
|
||||
|
||||
@@ -16,6 +16,6 @@
|
||||
/obj/effect/blob/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
return
|
||||
|
||||
/obj/effect/blob/shield/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
/obj/effect/blob/shield/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
|
||||
return 0
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/effect/blob/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
/obj/effect/blob/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -43,6 +43,9 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
|
||||
var/num_changelings = 1
|
||||
|
||||
if(config.changeling_scaling_coeff)
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
|
||||
var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING)
|
||||
|
||||
var/num_changelings = 1
|
||||
|
||||
@@ -62,6 +62,9 @@
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
|
||||
for(var/datum/mind/player in antag_candidates)
|
||||
for(var/job in restricted_jobs)//Removing heads and such from the list
|
||||
if(player.assigned_role == job)
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
|
||||
for(var/datum/mind/player in antag_candidates)
|
||||
for(var/job in restricted_jobs)//Removing heads and such from the list
|
||||
if(player.assigned_role == job)
|
||||
|
||||
@@ -16,6 +16,7 @@ var/bomb_set
|
||||
var/obj/item/weapon/disk/nuclear/auth = null
|
||||
use_power = 0
|
||||
var/previous_level = ""
|
||||
var/lastentered = ""
|
||||
|
||||
/obj/machinery/nuclearbomb/process()
|
||||
if (src.timing)
|
||||
@@ -98,9 +99,15 @@ var/bomb_set
|
||||
src.yes_code = 0
|
||||
src.code = null
|
||||
else
|
||||
src.code += text("[]", href_list["type"])
|
||||
if (length(src.code) > 5)
|
||||
src.code = "ERROR"
|
||||
lastentered = text("[]", href_list["type"])
|
||||
if (text2num(lastentered) == null)
|
||||
var/turf/LOC = get_turf(usr)
|
||||
message_admins("[key_name_admin(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: <a href='?_src_=vars;Vars=\ref[src]'>[lastentered]</a> ! ([LOC ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[LOC.x];Y=[LOC.y];Z=[LOC.z]'>JMP</a>" : "null"])", 0)
|
||||
log_admin("EXPLOIT : [key_name(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: [lastentered] !")
|
||||
else
|
||||
src.code += lastentered
|
||||
if (length(src.code) > 5)
|
||||
src.code = "ERROR"
|
||||
if (src.yes_code)
|
||||
if (href_list["time"])
|
||||
var/time = text2num(href_list["time"])
|
||||
@@ -237,4 +244,4 @@ var/bomb_set
|
||||
del(src) //Needed to clear all references to it
|
||||
else
|
||||
ERROR("[src] was supposed to be destroyed, but we were unable to locate a blobstart landmark to spawn a new one.")
|
||||
return 1 // Cancel destruction.
|
||||
return 1 // Cancel destruction.
|
||||
|
||||
@@ -107,13 +107,13 @@ datum/objective_item/functionalai/check_special_completion(var/obj/item/device/a
|
||||
|
||||
datum/objective_item/steal/blueprints
|
||||
name = "the station blueprints"
|
||||
targetitem = /obj/item/blueprints
|
||||
targetitem = /obj/item/areaeditor/blueprints
|
||||
difficulty = 10
|
||||
excludefromjob = list("Chief Engineer")
|
||||
altitems = list(/obj/item/weapon/photo)
|
||||
|
||||
datum/objective_item/blueprints/check_special_completion(var/obj/item/I)
|
||||
if(istype(I, /obj/item/blueprints))
|
||||
if(istype(I, /obj/item/areaeditor/blueprints))
|
||||
return 1
|
||||
if(istype(I, /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P = I
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
|
||||
var/head_check = 0
|
||||
for(var/mob/new_player/player in player_list)
|
||||
if(player.mind.assigned_role in command_positions)
|
||||
|
||||
@@ -30,6 +30,9 @@
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
if(config.protect_assistant_from_antagonist)
|
||||
restricted_jobs += "Assistant"
|
||||
|
||||
var/num_traitors = 1
|
||||
|
||||
if(config.traitor_scaling_coeff)
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
if("doublebarrel")
|
||||
new /obj/item/weapon/gun/projectile/revolver/doublebarrel(get_turf(H))
|
||||
if("shotgun")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/(get_turf(H))
|
||||
new /obj/item/weapon/gun/projectile/shotgun(get_turf(H))
|
||||
if("combatshotgun")
|
||||
new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H))
|
||||
if("mateba")
|
||||
|
||||
@@ -14,8 +14,8 @@ Assistant
|
||||
minimal_access = list() //See /datum/job/assistant/get_access()
|
||||
|
||||
/datum/job/assistant/equip_items(var/mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/random(H), slot_w_uniform)
|
||||
|
||||
/datum/job/assistant/get_access()
|
||||
if(config.jobs_have_maint_access & ASSISTANTS_HAVE_MAINT_ACCESS) //Config has assistant maint access set
|
||||
|
||||
@@ -137,7 +137,7 @@ Cargo Technician
|
||||
department_head = list("Head of Personnel")
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
supervisors = "the quartermaster and the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
|
||||
@@ -75,7 +75,7 @@ Roboticist
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
spawn_positions = 1
|
||||
spawn_positions = 2
|
||||
supervisors = "research director"
|
||||
selection_color = "#ffeeff"
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ Warden
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store)
|
||||
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_l_hand)
|
||||
@@ -175,7 +175,7 @@ Security Officer
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_s_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store)
|
||||
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_r_store)
|
||||
|
||||
@@ -55,7 +55,7 @@ var/global/list/autolathe_recipes = list( \
|
||||
var/global/list/autolathe_recipes_hidden = list( \
|
||||
new /obj/item/weapon/flamethrower/full(), \
|
||||
new /obj/item/weapon/rcd(), \
|
||||
new /obj/item/device/radio/electropack(), \
|
||||
new /obj/item/device/electropack(), \
|
||||
new /obj/item/weapon/weldingtool/largetank(), \
|
||||
new /obj/item/weapon/restraints/handcuffs(), \
|
||||
new /obj/item/ammo_box/a357(), \
|
||||
|
||||
@@ -316,7 +316,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
/obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target)
|
||||
src.anchored = 1
|
||||
src.icon_state = "cleanbot-c"
|
||||
visible_message("<span class='danger'>[src] begins to clean up [target]</span>")
|
||||
visible_message("<span class='notice'>[src] begins to clean up [target]</span>")
|
||||
src.cleaning = 1
|
||||
spawn(50)
|
||||
src.cleaning = 0
|
||||
|
||||
@@ -345,15 +345,15 @@ Auto Patrol: []"},
|
||||
if(!src.arrest_type)
|
||||
if(!src.target.handcuffed) //he's not cuffed? Try to cuff him!
|
||||
mode = SECBOT_ARREST
|
||||
playsound(src.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2)
|
||||
target.visible_message("<span class='danger'>[src] is trying to put handcuffs on [src.target]!</span>",\
|
||||
"<span class='userdanger'>[src] is trying to put handcuffs on [src.target]!</span>")
|
||||
playsound(src.loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
target.visible_message("<span class='danger'>[src] is trying to put zipties on [src.target]!</span>",\
|
||||
"<span class='userdanger'>[src] is trying to put zipties on [src.target]!</span>")
|
||||
|
||||
spawn(60)
|
||||
if( !src.Adjacent(target) || !isturf(src.target.loc) ) //if he's in a closet or not adjacent, we cancel cuffing.
|
||||
return
|
||||
if(!src.target.handcuffed)
|
||||
src.target.handcuffed = new /obj/item/weapon/restraints/handcuffs(src.target)
|
||||
src.target.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(src.target)
|
||||
target.update_inv_handcuffed(0) //update the handcuffs overlay
|
||||
back_to_idle()
|
||||
else
|
||||
|
||||
@@ -76,14 +76,15 @@
|
||||
emped = emped+1 //Increase the number of consecutive EMP's
|
||||
var/thisemp = emped //Take note of which EMP this proc is for
|
||||
spawn(900)
|
||||
if(emped == thisemp) //Only fix it if the camera hasn't been EMP'd again
|
||||
network = previous_network
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~EMPED
|
||||
cancelCameraAlarm()
|
||||
if(can_use())
|
||||
cameranet.addCamera(src)
|
||||
emped = 0 //Resets the consecutive EMP count
|
||||
if(loc) //qdel limbo
|
||||
if(emped == thisemp) //Only fix it if the camera hasn't been EMP'd again
|
||||
network = previous_network
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~EMPED
|
||||
cancelCameraAlarm()
|
||||
if(can_use())
|
||||
cameranet.addCamera(src)
|
||||
emped = 0 //Resets the consecutive EMP count
|
||||
for(var/mob/O in mob_list)
|
||||
if (O.client && O.client.eye == src)
|
||||
O.unset_machine()
|
||||
|
||||
@@ -456,7 +456,7 @@
|
||||
visible_message("<span class='warning'> [user] dunks [W] into the [src]!</span>", 3)
|
||||
return
|
||||
|
||||
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if (istype(mover,/obj/item) && mover.throwing)
|
||||
var/obj/item/I = mover
|
||||
if(istype(I, /obj/item/projectile))
|
||||
@@ -468,7 +468,7 @@
|
||||
visible_message("<span class='danger'> \the [I] bounces off of \the [src]'s rim!</span>", 3)
|
||||
return 0
|
||||
else
|
||||
return ..(mover, target, height, air_group)
|
||||
return ..(mover, target, height)
|
||||
|
||||
|
||||
/obj/machinery/readybutton
|
||||
|
||||
@@ -38,8 +38,9 @@
|
||||
log_game("[user.ckey]([user]) has authorized early shuttle launch in ([x],[y],[z])")
|
||||
minor_announce("[src.auth_need - src.authorized.len] more authorization(s) needed until shuttle is launched early",null,1)
|
||||
else
|
||||
message_admins("[key_name(user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) has launched the emergency shuttle in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
log_game("[user.ckey]([user]) has launched the emergency shuttle in ([x],[y],[z])")
|
||||
var/time = emergency_shuttle.timeleft()
|
||||
message_admins("[key_name(user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) has launched the emergency shuttle in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) [time] seconds before launch.",0,1)
|
||||
log_game("[user.ckey]([user]) has launched the emergency shuttle in ([x],[y],[z]) [time] seconds before launch.")
|
||||
minor_announce("The emergency shuttle will launch in 10 seconds",null,1)
|
||||
emergency_shuttle.online = 1
|
||||
emergency_shuttle.settimeleft(10)
|
||||
@@ -62,8 +63,9 @@
|
||||
if(!emagged && emergency_shuttle.location == DOCKED && user.get_active_hand() == W)
|
||||
switch(choice)
|
||||
if("Launch")
|
||||
message_admins("[key_name(user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) has emagged the emergency shuttle in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
log_game("[user.ckey]([user]) has emagged the emergency shuttle in ([x],[y],[z])")
|
||||
var/time = emergency_shuttle.timeleft()
|
||||
message_admins("[key_name(user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) has emagged the emergency shuttle in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) [time] seconds before launch.",0,1)
|
||||
log_game("[user.ckey]([user]) has emagged the emergency shuttle in ([x],[y],[z]) [time] seconds before launch.")
|
||||
minor_announce("The emergency shuttle will launch in 10 seconds", "SYSTEM ERROR:",null,1)
|
||||
emergency_shuttle.settimeleft( 10 )
|
||||
emagged = 1
|
||||
|
||||
@@ -114,8 +114,8 @@ for reference:
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/barricade/wooden/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
|
||||
if(air_group || (height==0))
|
||||
/obj/structure/barricade/wooden/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff.
|
||||
if(height==0)
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
@@ -235,8 +235,8 @@ for reference:
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
|
||||
if(air_group || (height==0))
|
||||
/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff.
|
||||
if(height==0)
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
name = "airlock"
|
||||
icon = 'icons/obj/doors/Doorint.dmi'
|
||||
icon_state = "door_closed"
|
||||
power_channel = ENVIRON
|
||||
|
||||
var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
|
||||
var/hackProof = 0 // if 1, this door can't be hacked by the AI
|
||||
@@ -1031,7 +1030,7 @@ About the new airlock wires panel:
|
||||
if(locate(/mob/living) in get_turf(src))
|
||||
// playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) //THE BUZZING IT NEVER STOPS -Pete
|
||||
spawn (60)
|
||||
close()
|
||||
autoclose()
|
||||
return
|
||||
|
||||
crush()
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
opacity = 1
|
||||
density = 1
|
||||
layer = 2.7
|
||||
power_channel = ENVIRON
|
||||
|
||||
var/secondsElectrified = 0
|
||||
var/visible = 1
|
||||
@@ -74,8 +75,7 @@
|
||||
..()
|
||||
move_update_air(T)
|
||||
|
||||
/obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group) return 0
|
||||
/obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
icon_state = "door_open"
|
||||
opacity = 0
|
||||
density = 0
|
||||
power_channel = ENVIRON
|
||||
var/blocked = 0
|
||||
var/nextstate = null
|
||||
|
||||
@@ -111,11 +110,10 @@
|
||||
|
||||
flags = ON_BORDER
|
||||
|
||||
/obj/machinery/door/firedoor/border_only/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
/obj/machinery/door/firedoor/border_only/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return 1
|
||||
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
|
||||
if(air_group) return 0
|
||||
return !density
|
||||
else
|
||||
return 1
|
||||
|
||||
@@ -71,11 +71,10 @@
|
||||
flick(text("[]deny", src.base_state), src)
|
||||
return
|
||||
|
||||
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return 1
|
||||
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
|
||||
if(air_group) return 0
|
||||
return !density
|
||||
else
|
||||
return 1
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
bulb = null
|
||||
power_change()
|
||||
|
||||
else if (istype(W, /obj/item/device/flash))
|
||||
else if (istype(W, /obj/item/device/flash/handheld))
|
||||
if (!bulb)
|
||||
user.visible_message("<span class='notice'>[user] installs [W] into [src].</span>", "<span class='notice'>You install [W] into [src].</span>")
|
||||
user.drop_item()
|
||||
@@ -174,4 +174,4 @@
|
||||
icon_state = "launcherbtt"
|
||||
active = 0
|
||||
|
||||
return
|
||||
return
|
||||
|
||||
@@ -364,9 +364,9 @@
|
||||
emagged = 1
|
||||
|
||||
on=0
|
||||
sleep(rand(60,600))
|
||||
if(!on)
|
||||
on=1
|
||||
spawn(rand(60,600))
|
||||
if(!on)
|
||||
on=1
|
||||
|
||||
..()
|
||||
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
..()
|
||||
move_update_air(T)
|
||||
|
||||
/obj/machinery/shield/CanPass(atom/movable/mover, turf/target, height, air_group)
|
||||
if(!height || air_group) return 0
|
||||
/obj/machinery/shield/CanPass(atom/movable/mover, turf/target, height)
|
||||
if(!height) return 0
|
||||
else return ..()
|
||||
|
||||
/obj/machinery/shield/CanAtmosPass(var/turf/T)
|
||||
@@ -594,8 +594,8 @@
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
/obj/machinery/shieldwall/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return prob(20)
|
||||
|
||||
@@ -428,7 +428,7 @@
|
||||
var/mob/living/user = usr
|
||||
if(islocked)
|
||||
user.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
var/breakout_time = 2
|
||||
user << "<span class='notice'>You start kicking against the doors to escape! (This will take about [breakout_time] minutes.)</span>"
|
||||
visible_message("You see [user] kicking against the doors of the [src]!")
|
||||
|
||||
@@ -110,8 +110,9 @@
|
||||
wires.Interact(user)
|
||||
if(!open_panel)
|
||||
if(!active)
|
||||
settings(user)
|
||||
return
|
||||
spawn()
|
||||
settings(user)
|
||||
return
|
||||
else if(anchored)
|
||||
user << "<span class='notice'>The bomb is bolted to the floor!</span>"
|
||||
return
|
||||
@@ -205,10 +206,10 @@
|
||||
/obj/item/weapon/bombcore/training/proc/reset()
|
||||
var/obj/machinery/syndicatebomb/holder = src.loc
|
||||
if(istype(holder))
|
||||
holder.open_panel = 0
|
||||
if(holder.wires)
|
||||
holder.wires.Shuffle()
|
||||
holder.defused = 0
|
||||
holder.open_panel = 0
|
||||
holder.update_icon()
|
||||
holder.updateDialog()
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
AM.loc = src.loc
|
||||
do_transform(AM)
|
||||
|
||||
/obj/machinery/transformer/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
/obj/machinery/transformer/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(!ishuman(mover)) // Allows items to go through, to stop them from blocking the conveyour belt.
|
||||
var/dir = get_dir(src, mover)
|
||||
if(dir == EAST)
|
||||
|
||||
@@ -757,7 +757,7 @@
|
||||
vend_delay = 15
|
||||
vend_reply = "Have an enchanted evening!"
|
||||
product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!"
|
||||
products = list(/obj/item/clothing/head/wizard = 1,/obj/item/clothing/suit/wizrobe = 1,/obj/item/clothing/head/wizard/red = 1,/obj/item/clothing/suit/wizrobe/red = 1,/obj/item/clothing/shoes/sandal = 1,/obj/item/weapon/staff = 2)
|
||||
products = list(/obj/item/clothing/head/wizard = 1,/obj/item/clothing/suit/wizrobe = 1,/obj/item/clothing/head/wizard/red = 1,/obj/item/clothing/suit/wizrobe/red = 1,/obj/item/clothing/head/wizard/yellow = 1,/obj/item/clothing/suit/wizrobe/yellow = 1,/obj/item/clothing/shoes/sandal = 1,/obj/item/weapon/staff = 2)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave
|
||||
|
||||
/obj/machinery/vending/autodrobe
|
||||
|
||||
@@ -5,20 +5,9 @@
|
||||
var/list/destroyable_obj = list(/obj/mecha, /obj/structure/window, /obj/structure/grille, /turf/simulated/wall)
|
||||
internal_damage_threshold = 50
|
||||
maint_access = 0
|
||||
//add_req_access = 0
|
||||
//operation_req_access = list(access_hos)
|
||||
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
|
||||
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/range_action(target as obj|mob|turf)
|
||||
if(internal_damage&MECHA_INT_CONTROL_LOST)
|
||||
target = pick(view(3,target))
|
||||
if(selected_weapon)
|
||||
selected_weapon.fire(target)
|
||||
return
|
||||
*/
|
||||
|
||||
/obj/mecha/combat/melee_action(target as obj|mob|turf)
|
||||
if(internal_damage&MECHA_INT_CONTROL_LOST)
|
||||
target = safepick(oview(1,src))
|
||||
@@ -26,21 +15,10 @@
|
||||
if(istype(target, /mob/living))
|
||||
var/mob/living/M = target
|
||||
if(src.occupant.a_intent == "harm")
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
if(damtype == "brute")
|
||||
step_away(M,src,15)
|
||||
/*
|
||||
if(M.stat>1)
|
||||
M.gib()
|
||||
melee_can_hit = 0
|
||||
if(do_after(melee_cooldown))
|
||||
melee_can_hit = 1
|
||||
return
|
||||
*/
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = target
|
||||
// if (M.health <= 0) return
|
||||
|
||||
var/obj/item/organ/limb/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
|
||||
if(temp)
|
||||
var/update = 0
|
||||
@@ -48,14 +26,17 @@
|
||||
if("brute")
|
||||
H.Paralyse(1)
|
||||
update |= temp.take_damage(rand(force/2, force), 0)
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
if("fire")
|
||||
update |= temp.take_damage(0, rand(force/2, force))
|
||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
||||
if("tox")
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1)
|
||||
if(H.reagents)
|
||||
if(H.reagents.get_reagent_amount("carpotoxin") + force < force*2)
|
||||
H.reagents.add_reagent("carpotoxin", force)
|
||||
if(H.reagents.get_reagent_amount("cryptobiolin") + force < force*2)
|
||||
H.reagents.add_reagent("cryptobiolin", force)
|
||||
H.reagents.add_reagent("cryptobiolin", force/2)
|
||||
if(H.reagents.get_reagent_amount("toxin") + force < force*2)
|
||||
H.reagents.add_reagent("toxin", force/2.5)
|
||||
else
|
||||
return
|
||||
if(update) H.update_damage_overlays(0)
|
||||
@@ -66,14 +47,17 @@
|
||||
if("brute")
|
||||
M.Paralyse(1)
|
||||
M.take_overall_damage(rand(force/2, force))
|
||||
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
|
||||
if("fire")
|
||||
M.take_overall_damage(0, rand(force/2, force))
|
||||
playsound(src, 'sound/items/Welder.ogg', 50, 1)
|
||||
if("tox")
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1)
|
||||
if(M.reagents)
|
||||
if(M.reagents.get_reagent_amount("carpotoxin") + force < force*2)
|
||||
M.reagents.add_reagent("carpotoxin", force)
|
||||
if(M.reagents.get_reagent_amount("cryptobiolin") + force < force*2)
|
||||
M.reagents.add_reagent("cryptobiolin", force)
|
||||
M.reagents.add_reagent("cryptobiolin", force/2)
|
||||
if(M.reagents.get_reagent_amount("toxin") + force < force*2)
|
||||
M.reagents.add_reagent("toxin", force/2.5)
|
||||
else
|
||||
return
|
||||
M.updatehealth()
|
||||
@@ -109,134 +93,6 @@
|
||||
break
|
||||
return
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/proc/mega_shake(target)
|
||||
if(!istype(target, /obj) && !istype(target, /mob)) return
|
||||
if(istype(target, /mob))
|
||||
var/mob/M = target
|
||||
M.Dizzy(3)
|
||||
M.adjustBruteLoss(1)
|
||||
M.updatehealth()
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("[src.name] shakes [M] like a rag doll.")
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
if(energy>0 && can_move)
|
||||
if(step(src,direction))
|
||||
can_move = 0
|
||||
spawn(step_in) can_move = 1
|
||||
if(overload)
|
||||
energy = energy-2
|
||||
health--
|
||||
else
|
||||
energy--
|
||||
return 1
|
||||
|
||||
return 0
|
||||
*/
|
||||
/*
|
||||
/obj/mecha/combat/hear_talk(mob/M as mob, text)
|
||||
..()
|
||||
if(am && M==occupant)
|
||||
if(findtext(text,""))
|
||||
sam()
|
||||
return
|
||||
|
||||
/obj/mecha/combat/proc/sam()
|
||||
if(am)
|
||||
var/window = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
body {background:#000;color: #00ff00;font-family:"Courier",monospace;font-size:12px;}
|
||||
#target {word-wrap: break-word;width:100%;padding-right:2px;}
|
||||
#form {display:none;padding:0;margin:0;}
|
||||
#input {background:#000;color: #00ff00;font-family:"Courier",monospace;border:none;padding:0;margin:0;width:90%;font-size:12px;}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
var text = "SGNL RCVD\\nTAG ANL :: STTS ACCPTD \\nINITSOC{buff:{128,0,NIL};p:'-zxf';stddev;inenc:'bin';outenc:'plain'}\\nSOD ->\\n0010101100101011001000000101010001101000011010010111001100100000011011010110000101100011011010000110100101101110011001010010000001101001011100110010000001100100011010010111001101100011011010000110000101110010011001110110010101100100001000000110100101101110011101000110111100100000011110010110111101110101011100100010000001100011011000010111001001100101001000000010101100101011000011010000101000101011001010110010000001000110011010010110011101101000011101000010000001110111011010010111010001101000001000000111010001101000011010010111001100100000011011010110000101100011011010000110100101101110011001010010110000100000011000010110111001100100001000000110011101110101011000010111001001100100001000000110100101110100001000000110011001110010011011110110110100100000011101000110100001100101001000000111001101101000011000010110110101100101001000000110111101100110001000000110010001100101011001100110010101100001011101000010000000101011001010110000110100001010001010110010101100100000010100110110010101110010011101100110010100100000011101000110100001101001011100110010000001101101011000010110001101101000011010010110111001100101001011000010000001100001011100110010000001111001011011110111010100100000011101110110111101110101011011000110010000100000011010000110000101110110011001010010000001100110011010010110011101101000011101000010000001101001011101000010000001100110011011110111001000100000011110010110111101110101001000000010101100101011\\n<- EOD\\nSOCFLUSH\\n";
|
||||
var target_id = "target";
|
||||
var form_id = "form";
|
||||
var input_id = "input";
|
||||
var delay=5;
|
||||
var currentChar=0;
|
||||
var inter;
|
||||
var cur_el;
|
||||
var maiden_el;
|
||||
|
||||
function type()
|
||||
{
|
||||
maiden_el = cur_el = document.getElementById(target_id);
|
||||
if(cur_el && typeof(cur_el)!='undefined'){
|
||||
inter = setInterval(function(){appendText(cur_el)},delay);
|
||||
}
|
||||
}
|
||||
|
||||
function appendText(el){
|
||||
if(currentChar>text.length){
|
||||
maiden_el.style.border = 'none';
|
||||
clearInterval(inter);
|
||||
var form = document.getElementById(form_id);
|
||||
var input = document.getElementById(input_id);
|
||||
if((form && typeof(form)!='undefined') && (input && typeof(input)!='undefined')){
|
||||
form.style.display = 'block';
|
||||
input.focus();
|
||||
}
|
||||
return;
|
||||
}
|
||||
var tchar = text.substr(currentChar, 1);
|
||||
if(tchar=='\\n'){
|
||||
el = cur_el = document.createElement('div');
|
||||
maiden_el.appendChild(cur_el);
|
||||
currentChar++;
|
||||
return;
|
||||
}
|
||||
if(!el.firstChild){
|
||||
var tNode=document.createTextNode(tchar);
|
||||
el.appendChild(tNode);
|
||||
}
|
||||
else {
|
||||
el.firstChild.nodeValue = el.firstChild.nodeValue+tchar
|
||||
}
|
||||
currentChar++;
|
||||
}
|
||||
|
||||
function addSubmitEvent(form, input) {
|
||||
input.onkeydown = function(e) {
|
||||
e = e || window.event;
|
||||
if (e.keyCode == 13) {
|
||||
form.submit();
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
window.onload = function(){
|
||||
var form = document.getElementById(form_id);
|
||||
var input = document.getElementById(input_id);
|
||||
if((!form || typeof(form)=='undefined') || (!input || typeof(input)=='undefined')){
|
||||
return false;
|
||||
}
|
||||
addSubmitEvent(form,input);
|
||||
type();
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper"><div id="target"></div>
|
||||
<form id="form" name="form" action="byond://" method="get">
|
||||
<label for="input">></label><input name="saminput" type="text" id="input" value="" />
|
||||
<input type=\"hidden\" name=\"src\" value=\"\ref[src]\">
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
occupant << browse(window, "window=sam;size=800x600;")
|
||||
onclose(occupant, "sam", src)
|
||||
return
|
||||
*/
|
||||
/obj/mecha/combat/moved_inside(var/mob/living/carbon/human/H as mob)
|
||||
if(..())
|
||||
if(H.client)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/obj/mecha/combat/phazon
|
||||
desc = "An exosuit which can only be described as 'WTF?'."
|
||||
desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials."
|
||||
name = "\improper Phazon"
|
||||
icon_state = "phazon"
|
||||
step_in = 1
|
||||
dir_in = 1 //Facing North.
|
||||
step_in = 2
|
||||
dir_in = 2 //Facing South.
|
||||
step_energy_drain = 3
|
||||
health = 200
|
||||
deflect_chance = 30
|
||||
@@ -12,21 +12,11 @@
|
||||
infra_luminosity = 3
|
||||
wreckage = /obj/structure/mecha_wreckage/phazon
|
||||
add_req_access = 1
|
||||
//operation_req_access = list()
|
||||
internal_damage_threshold = 25
|
||||
force = 15
|
||||
var/phasing = 0
|
||||
var/phasing_energy_drain = 200
|
||||
max_equip = 4
|
||||
|
||||
|
||||
/obj/mecha/combat/phazon/New()
|
||||
..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/gravcatapult
|
||||
ME.attach(src)
|
||||
return
|
||||
max_equip = 3
|
||||
|
||||
/obj/mecha/combat/phazon/Bump(var/atom/obstacle)
|
||||
if(phasing && get_charge()>=phasing_energy_drain)
|
||||
@@ -51,20 +41,23 @@
|
||||
|
||||
/obj/mecha/combat/phazon/verb/switch_damtype()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Change melee damage type"
|
||||
set name = "Reconfigure arm microtool arrays"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
var/new_damtype = alert(src.occupant,"Melee Damage Type",null,"Brute","Fire","Toxic")
|
||||
var/new_damtype = alert(src.occupant,"Arm tool selection",null,"Fists","Torch","Toxic injector")
|
||||
switch(new_damtype)
|
||||
if("Brute")
|
||||
if("Fists")
|
||||
damtype = "brute"
|
||||
if("Fire")
|
||||
src.occupant_message("Your exosuit's hands form into fists.")
|
||||
if("Torch")
|
||||
damtype = "fire"
|
||||
if("Toxic")
|
||||
src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.")
|
||||
if("Toxic injector")
|
||||
damtype = "tox"
|
||||
src.occupant_message("Melee damage type switched to [new_damtype ]")
|
||||
src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.")
|
||||
playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1)
|
||||
return
|
||||
|
||||
/obj/mecha/combat/phazon/get_commands()
|
||||
@@ -72,7 +65,7 @@
|
||||
<div class='header'>Special</div>
|
||||
<div class='links'>
|
||||
<a href='?src=\ref[src];phasing=1'><span id="phasing_command">[phasing?"Dis":"En"]able phasing</span></a><br>
|
||||
<a href='?src=\ref[src];switch_damtype=1'>Change melee damage type</a><br>
|
||||
<a href='?src=\ref[src];switch_damtype=1'>Reconfigure arm microtool arrays</a><br>
|
||||
</div>
|
||||
</div>
|
||||
"}
|
||||
|
||||
@@ -233,164 +233,12 @@
|
||||
M.AdjustStunned(-4)
|
||||
M.AdjustWeakened(-4)
|
||||
M.AdjustStunned(-4)
|
||||
M.Paralyse(2)
|
||||
M.Weaken(2)
|
||||
M.Stun(2)
|
||||
if(M.reagents.get_reagent_amount("inaprovaline") < 5)
|
||||
M.reagents.add_reagent("inaprovaline", 5)
|
||||
S.chassis.use_power(S.energy_drain)
|
||||
S.update_equip_info()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer
|
||||
name = "cable layer"
|
||||
desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path."
|
||||
icon_state = "mecha_wire"
|
||||
var/datum/event/event
|
||||
var/turf/old_turf
|
||||
var/obj/structure/cable/last_piece
|
||||
var/obj/item/stack/cable_coil/cable
|
||||
var/max_cable = 1000
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New()
|
||||
cable = new(src)
|
||||
cable.amount = 0
|
||||
..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/can_attach(obj/mecha/working/M)
|
||||
if(..())
|
||||
if(istype(M))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach()
|
||||
..()
|
||||
event = chassis.events.addEvent("onMove",src,"layCable")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach()
|
||||
chassis.events.clearEvent("onMove",event)
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy()
|
||||
chassis.events.clearEvent("onMove",event)
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target)
|
||||
if(!action_checks(target))
|
||||
return
|
||||
var/result = load_cable(target)
|
||||
var/message
|
||||
if(isnull(result))
|
||||
message = "<span class='danger'>Unable to load [target] - no cable found.</span>"
|
||||
else if(!result)
|
||||
message = "Reel is full."
|
||||
else
|
||||
message = "[result] meters of cable successfully loaded."
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
occupant_message(message)
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list)
|
||||
..()
|
||||
if(href_list["toggle"])
|
||||
set_ready_state(!equip_ready)
|
||||
occupant_message("[src] [equip_ready?"dea":"a"]ctivated.")
|
||||
log_message("[equip_ready?"Dea":"A"]ctivated.")
|
||||
return
|
||||
if(href_list["cut"])
|
||||
if(cable && cable.amount)
|
||||
var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1)
|
||||
m = min(m, cable.amount)
|
||||
if(m)
|
||||
use_cable(m)
|
||||
var/obj/item/stack/cable_coil/CC = new (get_turf(chassis))
|
||||
CC.amount = m
|
||||
else
|
||||
occupant_message("There's no more cable on the reel.")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info()
|
||||
var/output = ..()
|
||||
if(output)
|
||||
return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- <a href='?src=\ref[src];toggle=1'>[!equip_ready?"Dea":"A"]ctivate</a>|<a href='?src=\ref[src];cut=1'>Cut</a>" : null]"
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC)
|
||||
if(istype(CC) && CC.amount)
|
||||
var/cur_amount = cable? cable.amount : 0
|
||||
var/to_load = max(max_cable - cur_amount,0)
|
||||
if(to_load)
|
||||
to_load = min(CC.amount, to_load)
|
||||
if(!cable)
|
||||
cable = new(src)
|
||||
cable.amount = 0
|
||||
cable.amount += to_load
|
||||
CC.use(to_load)
|
||||
return to_load
|
||||
else
|
||||
return 0
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount)
|
||||
if(!cable || cable.amount<1)
|
||||
set_ready_state(1)
|
||||
occupant_message("Cable depleted, [src] deactivated.")
|
||||
log_message("Cable depleted, [src] deactivated.")
|
||||
return
|
||||
if(cable.amount < amount)
|
||||
occupant_message("No enough cable to finish the task.")
|
||||
return
|
||||
cable.use(amount)
|
||||
update_equip_info()
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset()
|
||||
last_piece = null
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf)
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_tile.type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf)
|
||||
if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf))
|
||||
return reset()
|
||||
var/fdirn = turn(chassis.dir,180)
|
||||
for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already
|
||||
if(LC.d1 == fdirn || LC.d2 == fdirn)
|
||||
return reset()
|
||||
if(!use_cable(1))
|
||||
return reset()
|
||||
var/obj/structure/cable/NC = new(new_turf)
|
||||
NC.cableColor("red")
|
||||
NC.d1 = 0
|
||||
NC.d2 = fdirn
|
||||
NC.updateicon()
|
||||
|
||||
var/datum/powernet/PN
|
||||
if(last_piece && last_piece.d2 != chassis.dir)
|
||||
last_piece.d1 = min(last_piece.d2, chassis.dir)
|
||||
last_piece.d2 = max(last_piece.d2, chassis.dir)
|
||||
last_piece.updateicon()
|
||||
PN = last_piece.powernet
|
||||
|
||||
if(!PN)
|
||||
PN = new()
|
||||
powernets += PN
|
||||
NC.powernet = PN
|
||||
PN.cables += NC
|
||||
NC.mergeConnectedNetworks(NC.d2)
|
||||
|
||||
//NC.mergeConnectedNetworksOnTurf()
|
||||
last_piece = NC
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
|
||||
name = "exosuit syringe gun"
|
||||
desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur."
|
||||
|
||||
@@ -214,8 +214,8 @@
|
||||
range = MELEE|RANGED
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/New()
|
||||
create_reagents(200)
|
||||
reagents.add_reagent("water", 200)
|
||||
create_reagents(1000)
|
||||
reagents.add_reagent("water", 1000)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
if(do_after_cooldown(target))
|
||||
if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
|
||||
var/obj/o = target
|
||||
o.reagents.trans_to(src, 200)
|
||||
o.reagents.trans_to(src, 1000)
|
||||
occupant_message("<span class='notice'>Extinguisher refilled.</span>")
|
||||
playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
else
|
||||
@@ -379,6 +379,153 @@
|
||||
return "[..()] \[<a href='?src=\ref[src];mode=0'>D</a>|<a href='?src=\ref[src];mode=1'>C</a>|<a href='?src=\ref[src];mode=2'>A</a>\]"
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer
|
||||
name = "cable layer"
|
||||
desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path."
|
||||
icon_state = "mecha_wire"
|
||||
var/datum/event/event
|
||||
var/turf/old_turf
|
||||
var/obj/structure/cable/last_piece
|
||||
var/obj/item/stack/cable_coil/cable
|
||||
var/max_cable = 1000
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New()
|
||||
cable = new(src)
|
||||
cable.amount = 0
|
||||
..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/can_attach(obj/mecha/working/M)
|
||||
if(..())
|
||||
if(istype(M))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach()
|
||||
..()
|
||||
event = chassis.events.addEvent("onMove",src,"layCable")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach()
|
||||
chassis.events.clearEvent("onMove",event)
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy()
|
||||
chassis.events.clearEvent("onMove",event)
|
||||
return ..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target)
|
||||
if(!action_checks(target))
|
||||
return
|
||||
var/result = load_cable(target)
|
||||
var/message
|
||||
if(isnull(result))
|
||||
message = "<span class='danger'>Unable to load [target] - no cable found.</span>"
|
||||
else if(!result)
|
||||
message = "Reel is full."
|
||||
else
|
||||
message = "[result] meters of cable successfully loaded."
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
occupant_message(message)
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list)
|
||||
..()
|
||||
if(href_list["toggle"])
|
||||
set_ready_state(!equip_ready)
|
||||
occupant_message("[src] [equip_ready?"dea":"a"]ctivated.")
|
||||
log_message("[equip_ready?"Dea":"A"]ctivated.")
|
||||
return
|
||||
if(href_list["cut"])
|
||||
if(cable && cable.amount)
|
||||
var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1)
|
||||
m = min(m, cable.amount)
|
||||
if(m)
|
||||
use_cable(m)
|
||||
var/obj/item/stack/cable_coil/CC = new (get_turf(chassis))
|
||||
CC.amount = m
|
||||
else
|
||||
occupant_message("There's no more cable on the reel.")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info()
|
||||
var/output = ..()
|
||||
if(output)
|
||||
return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- <a href='?src=\ref[src];toggle=1'>[!equip_ready?"Dea":"A"]ctivate</a>|<a href='?src=\ref[src];cut=1'>Cut</a>" : null]"
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC)
|
||||
if(istype(CC) && CC.amount)
|
||||
var/cur_amount = cable? cable.amount : 0
|
||||
var/to_load = max(max_cable - cur_amount,0)
|
||||
if(to_load)
|
||||
to_load = min(CC.amount, to_load)
|
||||
if(!cable)
|
||||
cable = new(src)
|
||||
cable.amount = 0
|
||||
cable.amount += to_load
|
||||
CC.use(to_load)
|
||||
return to_load
|
||||
else
|
||||
return 0
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount)
|
||||
if(!cable || cable.amount<1)
|
||||
set_ready_state(1)
|
||||
occupant_message("Cable depleted, [src] deactivated.")
|
||||
log_message("Cable depleted, [src] deactivated.")
|
||||
return
|
||||
if(cable.amount < amount)
|
||||
occupant_message("No enough cable to finish the task.")
|
||||
return
|
||||
cable.use(amount)
|
||||
update_equip_info()
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset()
|
||||
last_piece = null
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf)
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_tile.type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf)
|
||||
if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf))
|
||||
return reset()
|
||||
var/fdirn = turn(chassis.dir,180)
|
||||
for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already
|
||||
if(LC.d1 == fdirn || LC.d2 == fdirn)
|
||||
return reset()
|
||||
if(!use_cable(1))
|
||||
return reset()
|
||||
var/obj/structure/cable/NC = new(new_turf)
|
||||
NC.cableColor("red")
|
||||
NC.d1 = 0
|
||||
NC.d2 = fdirn
|
||||
NC.updateicon()
|
||||
|
||||
var/datum/powernet/PN
|
||||
if(last_piece && last_piece.d2 != chassis.dir)
|
||||
last_piece.d1 = min(last_piece.d2, chassis.dir)
|
||||
last_piece.d2 = max(last_piece.d2, chassis.dir)
|
||||
last_piece.updateicon()
|
||||
PN = last_piece.powernet
|
||||
|
||||
if(!PN)
|
||||
PN = new()
|
||||
powernets += PN
|
||||
NC.powernet = PN
|
||||
PN.cables += NC
|
||||
NC.mergeConnectedNetworks(NC.d2)
|
||||
|
||||
//NC.mergeConnectedNetworksOnTurf()
|
||||
last_piece = NC
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/teleporter
|
||||
@@ -869,8 +1016,8 @@
|
||||
var/coeff = 100
|
||||
var/obj/item/stack/sheet/fuel
|
||||
var/max_fuel = 150000
|
||||
var/fuel_per_cycle_idle = 100
|
||||
var/fuel_per_cycle_active = 500
|
||||
var/fuel_per_cycle_idle = 25
|
||||
var/fuel_per_cycle_active = 200
|
||||
var/power_per_cycle = 20
|
||||
reliability = 1000
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
),
|
||||
"Ripley"=list(
|
||||
/obj/item/mecha_parts/chassis/ripley,
|
||||
/obj/item/mecha_parts/chassis/firefighter,
|
||||
/obj/item/mecha_parts/part/ripley_torso,
|
||||
/obj/item/mecha_parts/part/ripley_left_arm,
|
||||
/obj/item/mecha_parts/part/ripley_right_arm,
|
||||
@@ -93,7 +94,17 @@
|
||||
/obj/item/mecha_parts/part/honker_right_arm,
|
||||
/obj/item/mecha_parts/part/honker_left_leg,
|
||||
/obj/item/mecha_parts/part/honker_right_leg
|
||||
),
|
||||
),
|
||||
"Phazon"=list(
|
||||
/obj/item/mecha_parts/chassis/phazon,
|
||||
/obj/item/mecha_parts/part/phazon_torso,
|
||||
/obj/item/mecha_parts/part/phazon_head,
|
||||
/obj/item/mecha_parts/part/phazon_left_arm,
|
||||
/obj/item/mecha_parts/part/phazon_right_arm,
|
||||
/obj/item/mecha_parts/part/phazon_left_leg,
|
||||
/obj/item/mecha_parts/part/phazon_right_leg,
|
||||
/obj/item/mecha_parts/part/phazon_armor
|
||||
),
|
||||
"Exosuit Equipment"=list(
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/drill,
|
||||
@@ -101,8 +112,7 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/sleeper,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,
|
||||
/obj/item/mecha_parts/chassis/firefighter,
|
||||
///obj/item/mecha_parts/mecha_equipment/repair_droid,
|
||||
/obj/item/mecha_parts/mecha_equipment/repair_droid,
|
||||
/obj/item/mecha_parts/mecha_equipment/generator,
|
||||
///obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
|
||||
|
||||
@@ -468,9 +468,10 @@
|
||||
if ((HULK in user.mutations) && !prob(src.deflect_chance))
|
||||
src.take_damage(15)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
user.visible_message("<span class='userdanger'>[user] hits [src.name], doing some damage.</span>", "<span class='userdanger'>You hit [src.name] with all your might. The metal creaks and bends.</span>")
|
||||
user.visible_message("<span class='danger'>[user] hits [src.name], doing some damage.</span>", "<span class='danger'>You hit [src.name] with all your might. The metal creaks and bends.</span>")
|
||||
src.occupant_message("<span class='userdanger'>[user] hits [src.name], doing some damage.</span>")
|
||||
else
|
||||
user.visible_message("<span class='userdanger'>[user] hits [src.name]. Nothing happens</span>","<span class='userdanger'>You hit [src.name] with no visible effect.</span>")
|
||||
user.visible_message("<span class='danger'>[user] hits [src.name]. Nothing happens</span>","<span class='danger'>You hit [src.name] with no visible effect.</span>")
|
||||
src.log_append_to_last("Armor saved.")
|
||||
return
|
||||
|
||||
@@ -480,12 +481,14 @@
|
||||
|
||||
/obj/mecha/attack_alien(mob/user as mob)
|
||||
src.log_message("Attack by alien. Attacker - [user].",1)
|
||||
user.changeNext_move(CLICK_CD_MELEE) //Now stompy alien killer mechs are actually scary to aliens!
|
||||
if(!prob(src.deflect_chance))
|
||||
src.take_damage(15)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1)
|
||||
user << "<span class='danger'>You slash at the armored suit!</span>"
|
||||
visible_message("<span class='danger'>The [user] slashes at [src.name]'s armor!</span>")
|
||||
src.occupant_message("<span class='userdanger'>The [user] slashes at [src.name]'s armor!</span>")
|
||||
else
|
||||
src.log_append_to_last("Armor saved.")
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1)
|
||||
@@ -504,12 +507,13 @@
|
||||
var/damage = rand(user.melee_damage_lower, user.melee_damage_upper)
|
||||
src.take_damage(damage)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
visible_message("<span class='danger'><B>[user]</B> [user.attacktext] [src]!</span>")
|
||||
visible_message("<span class='danger'>[user] [user.attacktext] [src]!</span>")
|
||||
src.occupant_message("<span class='userdanger'>[user] [user.attacktext] [src]!</span>")
|
||||
add_logs(user, src, "attacked", admin=0)
|
||||
else
|
||||
src.log_append_to_last("Armor saved.")
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1)
|
||||
src.occupant_message("<span class='notice'>The [user]'s attack is stopped by the armor.</span>")
|
||||
src.occupant_message("<span class='notice'>[user]'s attack is stopped by the armor.</span>")
|
||||
visible_message("<span class='notice'>The [user] rebounds off [src.name]'s armor!</span>")
|
||||
add_logs(user, src, "attacked", admin=0)
|
||||
return
|
||||
@@ -537,6 +541,8 @@
|
||||
else if(istype(A, /obj))
|
||||
var/obj/O = A
|
||||
if(O.throwforce)
|
||||
src.occupant_message("<span class='userdanger'>[src.name] is hit by [A].</span>")
|
||||
src.visible_message("<span class='danger'>[src.name] is hit by [A].</span>")
|
||||
src.take_damage(O.throwforce)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
return
|
||||
@@ -562,6 +568,8 @@
|
||||
ignore_threshold = 1
|
||||
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
src.take_damage(Proj.damage,Proj.flag)
|
||||
src.occupant_message("<span class='userdanger'>[src.name] is hit by [Proj]!</span>")
|
||||
src.visible_message("<span class='danger'>[src.name] is hit by [Proj].</span>")
|
||||
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),ignore_threshold)
|
||||
Proj.on_hit(src)
|
||||
return
|
||||
@@ -644,7 +652,7 @@
|
||||
return 0
|
||||
else
|
||||
src.occupant_message("<span class='userdanger'>[user] hits [src] with [W].</span>")
|
||||
user.visible_message("<span class='userdanger'>[user] hits [src] with [W].</span>", "<span class='userdanger'>You hit [src] with [W].</span>")
|
||||
user.visible_message("<span class='danger'>[user] hits [src] with [W].</span>", "<span class='danger'>You hit [src] with [W].</span>")
|
||||
src.take_damage(W.force,W.damtype)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
return 1
|
||||
@@ -653,7 +661,7 @@
|
||||
////// AttackBy //////
|
||||
//////////////////////
|
||||
|
||||
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/mecha/attackby(obj/item/W as obj, mob/user as mob)
|
||||
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
if(mmi_move_inside(W,user))
|
||||
@@ -764,7 +772,7 @@
|
||||
user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src]")
|
||||
return
|
||||
|
||||
else
|
||||
else if(!(W.flags&NOBLUDGEON))
|
||||
call((proc_res["dynattackby"]||src), "dynattackby")(W,user)
|
||||
/*
|
||||
src.log_message("Attacked by [W]. Attacker - [user]")
|
||||
@@ -784,8 +792,6 @@
|
||||
*/
|
||||
return
|
||||
|
||||
|
||||
|
||||
/*
|
||||
/obj/mecha/attack_ai(var/mob/living/silicon/ai/user as mob)
|
||||
if(!istype(user, /mob/living/silicon/ai))
|
||||
@@ -797,6 +803,8 @@
|
||||
return
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////
|
||||
//////// Atmospheric stuff ////////
|
||||
/////////////////////////////////////
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -296,7 +296,7 @@
|
||||
|
||||
/obj/item/mecha_parts/chassis/phazon
|
||||
name = "\improper Phazon chassis"
|
||||
origin_tech = "materials=7"
|
||||
origin_tech = "materials=6"
|
||||
|
||||
/obj/item/mecha_parts/chassis/phazon/New()
|
||||
..()
|
||||
@@ -304,20 +304,23 @@
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_torso
|
||||
name="\improper Phazon torso"
|
||||
desc="A Phazon torso part. The socket for the bluespace core that powers the exosuit's unique phase drives is located in the middle."
|
||||
icon_state = "phazon_harness"
|
||||
construction_time = 300
|
||||
construction_cost = list("metal"=35000,"glass"=10000,"plasma"=20000)
|
||||
origin_tech = "programming=5;materials=7;bluespace=6;powerstorage=6"
|
||||
origin_tech = "programming=5;materials=6;bluespace=5;powerstorage=5"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_head
|
||||
name="\improper Phazon head"
|
||||
desc="A Phazon head. Its sensors are carefully calibrated to provide vision and data even when the exosuit is phasing."
|
||||
icon_state = "phazon_head"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=15000,"glass"=5000,"plasma"=10000)
|
||||
origin_tech = "programming=4;materials=5;magnets=6"
|
||||
origin_tech = "programming=4;materials=5;magnets=5"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_left_arm
|
||||
name="\improper Phazon left arm"
|
||||
desc="A Phazon left arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand."
|
||||
icon_state = "phazon_l_arm"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"plasma"=10000)
|
||||
@@ -325,6 +328,7 @@
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_right_arm
|
||||
name="\improper Phazon right arm"
|
||||
desc="A Phazon right arm. Several microtool arrays are located under the armor plating, which can be adjusted to the situation at hand."
|
||||
icon_state = "phazon_r_arm"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"plasma"=10000)
|
||||
@@ -332,6 +336,7 @@
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_left_leg
|
||||
name="\improper Phazon left leg"
|
||||
desc="A Phazon left leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged."
|
||||
icon_state = "phazon_l_leg"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"plasma"=10000)
|
||||
@@ -339,11 +344,19 @@
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_right_leg
|
||||
name="\improper Phazon right leg"
|
||||
desc="A Phazon right leg. It contains the unique phase drives that allow the exosuit to phase through solid matter when engaged."
|
||||
icon_state = "phazon_r_leg"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=20000,"plasma"=10000)
|
||||
origin_tech = "materials=5;bluespace=3;magnets=3"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_armor
|
||||
name="Phazon armor"
|
||||
desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties."
|
||||
icon_state = "phazon_armor"
|
||||
construction_time = 300
|
||||
construction_cost = list("metal"=45000,"plasma"=30000)
|
||||
origin_tech = "materials=6;bluespace=5;magnets=5"
|
||||
///////// Odysseus
|
||||
|
||||
|
||||
@@ -494,4 +507,16 @@
|
||||
name = "circuit board (Odysseus Central Control module)"
|
||||
icon_state = "mainboard"
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/phazon
|
||||
origin_tech = "programming=5"
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/phazon/peripherals
|
||||
name = "circuit board (Phazon Peripherals Control module)"
|
||||
icon_state = "mcontroller"
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/phazon/targeting
|
||||
name = "circuit board (Phazon Weapon Control and Targeting module)"
|
||||
icon_state = "mcontroller"
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/phazon/main
|
||||
name = "circuit board (Phazon Central Control module)"
|
||||
@@ -1,10 +1,13 @@
|
||||
/obj/mecha/working/ripley
|
||||
desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world."
|
||||
desc = "Autonomous Power Loader Unit. This newer model is refitted with powerful armour against the dangers of the EVA mining process."
|
||||
name = "\improper APLU \"Ripley\""
|
||||
icon_state = "ripley"
|
||||
step_in = 6
|
||||
step_in = 5
|
||||
max_temperature = 20000
|
||||
health = 200
|
||||
lights_power = 7
|
||||
deflect_chance = 15
|
||||
damage_absorption = list("brute"=0.6,"bomb"=0.2)
|
||||
wreckage = /obj/structure/mecha_wreckage/ripley
|
||||
var/list/cargo = new
|
||||
var/cargo_capacity = 15
|
||||
@@ -16,19 +19,49 @@
|
||||
*/
|
||||
|
||||
/obj/mecha/working/ripley/Destroy()
|
||||
while(src.damage_absorption.["brute"] < 0.6)
|
||||
new /obj/item/asteroid/goliath_hide(src.loc)
|
||||
src.damage_absorption.["brute"] = src.damage_absorption.["brute"] + 0.1 //If a goliath-plated ripley gets killed, all the plates drop
|
||||
for(var/atom/movable/A in src.cargo)
|
||||
A.loc = loc
|
||||
step_rand(A)
|
||||
cargo.Cut()
|
||||
..()
|
||||
|
||||
/obj/mecha/working/ripley/go_out()
|
||||
..()
|
||||
if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open")
|
||||
else if (src.damage_absorption.["brute"] == 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open")
|
||||
|
||||
/obj/mecha/working/ripley/moved_inside(var/mob/living/carbon/human/H as mob)
|
||||
..()
|
||||
if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g")
|
||||
else if (src.damage_absorption.["brute"] == 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full")
|
||||
|
||||
/obj/mecha/working/ripley/mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob)
|
||||
..()
|
||||
if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g")
|
||||
else if (src.damage_absorption.["brute"] == 0.3)
|
||||
src.overlays = null
|
||||
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full")
|
||||
|
||||
/obj/mecha/working/ripley/firefighter
|
||||
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
|
||||
name = "\improper APLU \"Firefighter\""
|
||||
icon_state = "firefighter"
|
||||
max_temperature = 65000
|
||||
health = 250
|
||||
lights_power = 8
|
||||
lights_power = 7
|
||||
damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
|
||||
wreckage = /obj/structure/mecha_wreckage/ripley/firefighter
|
||||
|
||||
@@ -38,7 +71,7 @@
|
||||
icon_state = "deathripley"
|
||||
step_in = 3
|
||||
opacity=0
|
||||
lights_power = 60
|
||||
lights_power = 7
|
||||
wreckage = /obj/structure/mecha_wreckage/ripley/deathripley
|
||||
step_energy_drain = 0
|
||||
|
||||
|
||||
@@ -140,8 +140,7 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/alien/resin/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group) return 0
|
||||
/obj/structure/alien/resin/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
/obj/effect/anomaly/flux/New()
|
||||
..()
|
||||
aSignal.origin_tech = "powerstorage=5;programming=3;plasmatech=2"
|
||||
aSignal.origin_tech = "powerstorage=6;programming=4;plasmatech=4"
|
||||
|
||||
/////////////////////
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
/obj/effect/anomaly/bluespace/New()
|
||||
..()
|
||||
aSignal.origin_tech = "bluespace=5;magnets=3;powerstorage=2"
|
||||
aSignal.origin_tech = "bluespace=5;magnets=5;powerstorage=3"
|
||||
|
||||
/obj/effect/anomaly/bluespace/Bumped(atom/A)
|
||||
if(isliving(A))
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
/obj/effect/anomaly/pyro/New()
|
||||
..()
|
||||
aSignal.origin_tech = "plasmatech=5;powerstorage=3;biotech=3"
|
||||
aSignal.origin_tech = "plasmatech=5;powerstorage=4;biotech=6"
|
||||
|
||||
/obj/effect/anomaly/pyro/anomalyEffect()
|
||||
..()
|
||||
@@ -129,7 +129,7 @@
|
||||
|
||||
/obj/effect/anomaly/bhole/New()
|
||||
..()
|
||||
aSignal.origin_tech = "materials=5;combat=4;engineering=3"
|
||||
aSignal.origin_tech = "materials=5;combat=4;engineering=4"
|
||||
|
||||
/obj/effect/anomaly/bhole/anomalyEffect()
|
||||
..()
|
||||
|
||||
@@ -370,8 +370,8 @@ steam.start() -- spawns the effect
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/effect/bad_smoke/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
/obj/effect/effect/bad_smoke/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
if(istype(mover, /obj/item/projectile/beam))
|
||||
var/obj/item/projectile/beam/B = mover
|
||||
B.damage = (B.damage/2)
|
||||
@@ -993,8 +993,7 @@ steam.start() -- spawns the effect
|
||||
else
|
||||
user << "<span class='notice'>You hit the metal foam to no effect.</span>"
|
||||
|
||||
/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
||||
if(air_group) return 0
|
||||
/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
return !density
|
||||
|
||||
/obj/structure/foamedmetal/CanAtmosPass()
|
||||
|
||||
@@ -59,8 +59,8 @@
|
||||
if(prob(50))
|
||||
icon_state = "stickyweb2"
|
||||
|
||||
/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
if(istype(mover, /mob/living/simple_animal/hostile/giant_spider))
|
||||
return 1
|
||||
else if(istype(mover, /mob/living))
|
||||
@@ -213,7 +213,7 @@
|
||||
var/mob/living/user = usr
|
||||
var/breakout_time = 2
|
||||
user.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
user << "<span class='notice'>You struggle against the tight bonds! (This will take about [breakout_time] minutes.)</span>"
|
||||
visible_message("You see something struggling and writhing in the [src]!")
|
||||
if(do_after(user,(breakout_time*60*10)))
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
/obj/item/blueprints
|
||||
name = "station blueprints"
|
||||
desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it."
|
||||
/obj/item/areaeditor
|
||||
name = "area modification item"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "blueprints"
|
||||
attack_verb = list("attacked", "bapped", "hit")
|
||||
var/fluffnotice = "Nobody's gonna read this stuff!"
|
||||
|
||||
var/const/AREA_ERRNONE = 0
|
||||
var/const/AREA_STATION = 1
|
||||
var/const/AREA_SPACE = 2
|
||||
@@ -19,67 +20,93 @@
|
||||
var/const/ROOM_ERR_SPACE = -1
|
||||
var/const/ROOM_ERR_TOOLARGE = -2
|
||||
|
||||
/obj/item/blueprints/attack_self(mob/M as mob)
|
||||
if (!istype(M,/mob/living/carbon/human))
|
||||
M << "<span class='info'>This stack of blue paper means nothing to you.</span>" //monkeys cannot into projecting
|
||||
return
|
||||
interact()
|
||||
return
|
||||
|
||||
/obj/item/blueprints/Topic(href, href_list)
|
||||
..()
|
||||
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
|
||||
/obj/item/areaeditor/attack_self(mob/user as mob)
|
||||
add_fingerprint(user)
|
||||
var/text = "<BODY><HTML><head><title>[src]</title></head> \
|
||||
<h2>[station_name()] [src.name]</h2> \
|
||||
<small>[fluffnotice]</small><hr>"
|
||||
switch(get_area_type())
|
||||
if(AREA_SPACE)
|
||||
text += "<p>According to the [src.name], you are now in <b>outer space</b>. Hold your breath.</p> \
|
||||
<p><a href='?src=\ref[src];create_area=1'>Mark this place as new area.</a></p>"
|
||||
if(AREA_SPECIAL)
|
||||
text += "<p>This place is not noted on the [src.name].</p>"
|
||||
return text
|
||||
|
||||
|
||||
/obj/item/areaeditor/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if (!href_list["action"])
|
||||
return
|
||||
switch(href_list["action"])
|
||||
if ("create_area")
|
||||
if (get_area_type()!=AREA_SPACE)
|
||||
interact()
|
||||
return
|
||||
if(href_list["create_area"])
|
||||
if(get_area_type()==AREA_SPACE)
|
||||
create_area()
|
||||
if ("edit_area")
|
||||
if (get_area_type()!=AREA_STATION)
|
||||
interact()
|
||||
return
|
||||
edit_area()
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/item/blueprints/interact()
|
||||
|
||||
//One-use area creation permits.
|
||||
/obj/item/areaeditor/permit
|
||||
name = "construction permit"
|
||||
icon_state = "permit"
|
||||
desc = "This is a one-use permit that allows the user to offically declare a built room as new addition to the station."
|
||||
fluffnotice = "Nanotrasen Engineering requires all on-station construction projects to be approved by a head of staff, as detailed in Nanotrasen Company Regulation 512-C (Mid-Shift Modifications to Company Property). \
|
||||
By submitting this form, you accept any fines, fees, or personal injury/death that may occur during construction."
|
||||
|
||||
|
||||
/obj/item/areaeditor/permit/attack_self(mob/user as mob)
|
||||
. = ..()
|
||||
var/area/A = get_area()
|
||||
var/text = {"<HTML><head><title>[src]</title></head><BODY>
|
||||
<h2>[station_name()] blueprints</h2>
|
||||
<small>Property of Nanotrasen. For heads of staff only. Store in high-secure storage.</small><hr>
|
||||
"}
|
||||
switch (get_area_type())
|
||||
if (AREA_SPACE)
|
||||
text += {"
|
||||
<p>According to the blueprints, you are now in <b>outer space</b>. Hold your breath.</p>
|
||||
<p><a href='?src=\ref[src];action=create_area'>Mark this place as new area.</a></p>
|
||||
"}
|
||||
if (AREA_STATION)
|
||||
text += {"
|
||||
<p>According to the blueprints, you are now in <b>\"[A.name]\"</b>.</p>
|
||||
<p>You may <a href='?src=\ref[src];action=edit_area'>
|
||||
move an amendment</a> to the drawing.</p>
|
||||
"}
|
||||
if (AREA_SPECIAL)
|
||||
text += {"
|
||||
<p>This place is not noted on the blueprint.</p>
|
||||
"}
|
||||
else
|
||||
return
|
||||
text += "</BODY></HTML>"
|
||||
usr << browse(text, "window=blueprints")
|
||||
if(get_area_type() == AREA_STATION)
|
||||
. += "<p>According to the [src], you are now in <b>\"[A.name]\"</b>.</p>"
|
||||
var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500)
|
||||
popup.set_content(.)
|
||||
popup.open()
|
||||
onclose(usr, "blueprints")
|
||||
|
||||
|
||||
/obj/item/blueprints/proc/get_area()
|
||||
/obj/item/areaeditor/permit/create_area()
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
|
||||
//Station blueprints!!!
|
||||
/obj/item/areaeditor/blueprints
|
||||
name = "station blueprints"
|
||||
desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "blueprints"
|
||||
fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage."
|
||||
|
||||
|
||||
/obj/item/areaeditor/blueprints/attack_self(mob/user as mob)
|
||||
. = ..()
|
||||
var/area/A = get_area()
|
||||
if(get_area_type() == AREA_STATION)
|
||||
. += "<p>According to the [src], you are now in <b>\"[A.name]\"</b>.</p>"
|
||||
. += "<p>You may <a href='?src=\ref[src];edit_area=1'> move an amendment</a> to the drawing.</p>"
|
||||
var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500)
|
||||
popup.set_content(.)
|
||||
popup.open()
|
||||
onclose(user, "blueprints")
|
||||
|
||||
|
||||
/obj/item/areaeditor/blueprints/Topic(href, href_list)
|
||||
..()
|
||||
if(href_list["edit_area"])
|
||||
if(get_area_type()!=AREA_STATION)
|
||||
return
|
||||
edit_area()
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
/obj/item/areaeditor/proc/get_area()
|
||||
var/turf/T = get_turf(usr)
|
||||
var/area/A = T.loc
|
||||
A = A.master
|
||||
return A
|
||||
|
||||
/obj/item/blueprints/proc/get_area_type(var/area/A = get_area())
|
||||
|
||||
/obj/item/areaeditor/proc/get_area_type(var/area/A = get_area())
|
||||
if (istype(A,/area/space))
|
||||
return AREA_SPACE
|
||||
var/list/SPECIALS = list(
|
||||
@@ -92,15 +119,14 @@ move an amendment</a> to the drawing.</p>
|
||||
/area/syndicate_station,
|
||||
/area/wizard_station,
|
||||
/area/prison
|
||||
// /area/derelict //commented out, all hail derelict-rebuilders!
|
||||
)
|
||||
for (var/type in SPECIALS)
|
||||
if ( istype(A,type) )
|
||||
return AREA_SPECIAL
|
||||
return AREA_STATION
|
||||
|
||||
/obj/item/blueprints/proc/create_area()
|
||||
//world << "DEBUG: create_area"
|
||||
|
||||
/obj/item/areaeditor/proc/create_area()
|
||||
var/res = detect_room(get_turf(usr))
|
||||
if(!istype(res,/list))
|
||||
switch(res)
|
||||
@@ -133,22 +159,16 @@ move an amendment</a> to the drawing.</p>
|
||||
move_turfs_to_area(turfs, A)
|
||||
A.SetDynamicLighting()
|
||||
|
||||
spawn(5)
|
||||
//ma = A.master ? "[A.master]" : "(null)"
|
||||
//world << "DEBUG: create_area(5): <br>A.name=[A.name]<br>A.tag=[A.tag]<br>A.master=[ma]"
|
||||
interact()
|
||||
interact()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/blueprints/proc/move_turfs_to_area(var/list/turf/turfs, var/area/A)
|
||||
/obj/item/areaeditor/proc/move_turfs_to_area(var/list/turf/turfs, var/area/A)
|
||||
A.contents.Add(turfs)
|
||||
//oldarea.contents.Remove(usr.loc) // not needed
|
||||
//T.loc = A //error: cannot change constant value
|
||||
|
||||
|
||||
/obj/item/blueprints/proc/edit_area()
|
||||
/obj/item/areaeditor/proc/edit_area()
|
||||
var/area/A = get_area()
|
||||
//world << "DEBUG: edit_area"
|
||||
var/prevname = "[A.name]"
|
||||
var/str = trim(stripped_input(usr,"New area name:", "Blueprint Editing", prevname, MAX_NAME_LEN))
|
||||
if(!str || !length(str) || str==prevname) //cancel
|
||||
@@ -164,8 +184,7 @@ move an amendment</a> to the drawing.</p>
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/blueprints/proc/set_area_machinery_title(var/area/A,var/title,var/oldtitle)
|
||||
/obj/item/areaeditor/proc/set_area_machinery_title(var/area/A,var/title,var/oldtitle)
|
||||
if (!oldtitle) // or replacetext goes to infinite loop
|
||||
return
|
||||
for(var/area/RA in A.related)
|
||||
@@ -181,7 +200,8 @@ move an amendment</a> to the drawing.</p>
|
||||
M.name = replacetext(M.name,oldtitle,title)
|
||||
//TODO: much much more. Unnamed airlocks, cameras, etc.
|
||||
|
||||
/obj/item/blueprints/proc/check_tile_is_border(var/turf/T2,var/dir)
|
||||
|
||||
/obj/item/areaeditor/proc/check_tile_is_border(var/turf/T2,var/dir)
|
||||
if (istype(T2, /turf/space))
|
||||
return BORDER_SPACE //omg hull breach we all going to die here
|
||||
if (istype(T2, /turf/simulated/shuttle))
|
||||
@@ -208,7 +228,8 @@ move an amendment</a> to the drawing.</p>
|
||||
|
||||
return BORDER_NONE
|
||||
|
||||
/obj/item/blueprints/proc/detect_room(var/turf/first)
|
||||
|
||||
/obj/item/areaeditor/proc/detect_room(var/turf/first)
|
||||
var/list/turf/found = new
|
||||
var/list/turf/pending = list(first)
|
||||
while(pending.len)
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
desc = "A folded bag designed for the storage and transportation of cadavers."
|
||||
icon = 'icons/obj/bodybag.dmi'
|
||||
icon_state = "bodybag_folded"
|
||||
var/unfoldedbag_path = /obj/structure/closet/body_bag
|
||||
w_class = 2
|
||||
|
||||
/obj/item/bodybag/attack_self(mob/user)
|
||||
var/obj/structure/closet/body_bag/R = new /obj/structure/closet/body_bag(user.loc)
|
||||
var/obj/structure/closet/body_bag/R = new unfoldedbag_path(user.loc)
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
@@ -36,7 +37,9 @@
|
||||
icon_state = "bodybag_closed"
|
||||
icon_closed = "bodybag_closed"
|
||||
icon_opened = "bodybag_open"
|
||||
var/foldedbag_path = /obj/item/bodybag
|
||||
density = 0
|
||||
mob_storage_capacity = 2
|
||||
|
||||
|
||||
/obj/structure/closet/body_bag/attackby(obj/item/I, mob/user)
|
||||
@@ -77,13 +80,36 @@
|
||||
if(contents.len)
|
||||
return 0
|
||||
visible_message("<span class='notice'>[usr] folds up [src].</span>")
|
||||
var/obj/item/bodybag/B = new /obj/item/bodybag(get_turf(src))
|
||||
var/obj/item/bodybag/B = new foldedbag_path(get_turf(src))
|
||||
usr.put_in_hands(B)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/closet/bodybag/update_icon()
|
||||
/obj/structure/closet/body_bag/update_icon()
|
||||
if(!opened)
|
||||
icon_state = icon_closed
|
||||
else
|
||||
icon_state = icon_opened
|
||||
|
||||
|
||||
// Bluespace bodybag
|
||||
|
||||
/obj/item/bodybag/bluespace
|
||||
name = "bluespace body bag"
|
||||
desc = "A folded bluespace body bag designed for the storage and transportation of cadavers."
|
||||
icon = 'icons/obj/bodybag.dmi'
|
||||
icon_state = "bluebodybag_folded"
|
||||
unfoldedbag_path = /obj/structure/closet/body_bag/bluespace
|
||||
w_class = 2
|
||||
|
||||
/obj/structure/closet/body_bag/bluespace
|
||||
name = "bluespace body bag"
|
||||
desc = "A bluespace body bag designed for the storage and transportation of cadavers."
|
||||
icon = 'icons/obj/bodybag.dmi'
|
||||
icon_state = "bluebodybag_closed"
|
||||
icon_closed = "bluebodybag_closed"
|
||||
icon_opened = "bluebodybag_open"
|
||||
foldedbag_path = /obj/item/bodybag/bluespace
|
||||
density = 0
|
||||
mob_storage_capacity = 15
|
||||
max_mob_size = 2
|
||||
@@ -23,15 +23,15 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/burn_out(var/mob/user) //Made so you can override it if you want to have an invincible flash from R&D or something.
|
||||
/obj/item/device/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
|
||||
broken = 1
|
||||
icon_state = "[initial(icon_state)]burnt"
|
||||
user.visible_message("<span class='notice'>The [src.name] burns out!</span>")
|
||||
visible_message("<span class='notice'>The [src.name] burns out!</span>")
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/flash_recharge(var/mob/user)
|
||||
if(prob(times_used * 2)) //if you use it 5 times in a minute it has a 10% chance to break!
|
||||
burn_out(user)
|
||||
burn_out()
|
||||
return 0
|
||||
|
||||
var/deciseconds_passed = world.time - last_used
|
||||
@@ -156,4 +156,6 @@
|
||||
name = "memorizer"
|
||||
desc = "If you see this, you're not likely to remember it any time soon."
|
||||
icon_state = "memorizer"
|
||||
item_state = "nullrod"
|
||||
item_state = "nullrod"
|
||||
|
||||
/obj/item/device/flash/handheld //this is now the regular pocket flashes
|
||||
@@ -1,24 +1,27 @@
|
||||
/obj/item/device/radio/electropack
|
||||
/obj/item/device/electropack
|
||||
name = "electropack"
|
||||
desc = "Dance my monkeys! DANCE!!!"
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
icon_state = "electropack0"
|
||||
item_state = "electropack"
|
||||
frequency = 1449
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 5.0
|
||||
g_amt = 2500
|
||||
m_amt = 10000
|
||||
var/on = 1
|
||||
var/code = 2
|
||||
var/frequency = 1449
|
||||
var/shock_cooldown = 0
|
||||
|
||||
/obj/item/device/radio/electropack/initialize()
|
||||
/obj/item/device/electropack/initialize()
|
||||
radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
/obj/item/device/radio/electropack/New()
|
||||
/obj/item/device/electropack/New()
|
||||
if(radio_controller)
|
||||
radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
/obj/item/device/radio/electropack/attack_hand(mob/user)
|
||||
/obj/item/device/electropack/attack_hand(mob/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
if(src == C.back)
|
||||
@@ -26,12 +29,9 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/device/radio/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/item/device/electropack/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/clothing/head/helmet))
|
||||
if(!b_stat)
|
||||
user << "<span class='notice'>[src] is not ready to be attached!</span>"
|
||||
return
|
||||
var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user )
|
||||
A.icon = 'icons/obj/assemblies.dmi'
|
||||
|
||||
@@ -52,15 +52,16 @@
|
||||
if(src.flags & NODROP)
|
||||
A.flags |= NODROP
|
||||
|
||||
/obj/item/device/radio/electropack/Topic(href, href_list)
|
||||
/obj/item/device/electropack/Topic(href, href_list)
|
||||
//..()
|
||||
if(usr.stat || usr.restrained())
|
||||
return
|
||||
if(((istype(usr, /mob/living/carbon/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf)))))
|
||||
usr.set_machine(src)
|
||||
if(href_list["freq"])
|
||||
var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"]))
|
||||
set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = sanitize_frequency(frequency + text2num(href_list["freq"]))
|
||||
radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
else
|
||||
if(href_list["code"])
|
||||
code += text2num(href_list["code"])
|
||||
@@ -90,20 +91,19 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/radio/electropack/receive_signal(datum/signal/signal)
|
||||
/obj/item/device/electropack/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.encryption != code)
|
||||
return
|
||||
|
||||
if(ismob(loc) && on)
|
||||
if(shock_cooldown != 0)
|
||||
return
|
||||
shock_cooldown = 1
|
||||
spawn(100)
|
||||
shock_cooldown = 0
|
||||
var/mob/M = loc
|
||||
var/turf/T = M.loc
|
||||
if(istype(T, /turf))
|
||||
if(!M.moved_recently && M.last_move)
|
||||
M.moved_recently = 1
|
||||
step(M, M.last_move)
|
||||
sleep(50)
|
||||
if(M)
|
||||
M.moved_recently = 0
|
||||
step(M, pick(cardinal))
|
||||
|
||||
M << "<span class='danger'>You feel a sharp shock!</span>"
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, M)
|
||||
@@ -111,17 +111,17 @@
|
||||
|
||||
M.Weaken(5)
|
||||
|
||||
if(master && !isWireCut(WIRE_SIGNAL))
|
||||
if(master)
|
||||
master.receive_signal()
|
||||
return
|
||||
|
||||
/obj/item/device/radio/electropack/attack_self(mob/user as mob, flag1)
|
||||
/obj/item/device/electropack/attack_self(mob/user)
|
||||
|
||||
if(!istype(user, /mob/living/carbon/human))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = {"<TT>
|
||||
<A href='?src=\ref[src];power=1'>Turn [on ? "Off" : "On"]</A><BR>
|
||||
var/dat = {"<TT>Turned [on ? "On" : "Off"] -
|
||||
<A href='?src=\ref[src];power=1'>Toggle</A><BR>
|
||||
<B>Frequency/Code</B> for electropack:<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];freq=-10'>-</A>
|
||||
|
||||
@@ -20,6 +20,13 @@
|
||||
keyslot1 = new /obj/item/device/encryptionkey/
|
||||
recalculateChannels()
|
||||
|
||||
/obj/item/device/radio/headset/Destroy()
|
||||
qdel(keyslot1)
|
||||
qdel(keyslot2)
|
||||
keyslot1 = null
|
||||
keyslot2 = null
|
||||
..()
|
||||
|
||||
/obj/item/device/radio/headset/talk_into(mob/living/M as mob, message, channel)
|
||||
if (!listening)
|
||||
return
|
||||
|
||||
@@ -50,7 +50,10 @@
|
||||
initialize()
|
||||
|
||||
/obj/item/device/radio/Destroy()
|
||||
remove_radio_all(src) //Just to be sure.
|
||||
qdel(wires)
|
||||
wires = null
|
||||
remove_radio_all(src) //Just to be sure
|
||||
..()
|
||||
|
||||
/obj/item/device/radio/MouseDrop(obj/over_object as obj, src_location, over_location)
|
||||
var/mob/M = usr
|
||||
@@ -218,7 +221,7 @@
|
||||
the signal gets processed and logged, and an audible transmission gets sent
|
||||
to each individual headset.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
be prepared to disregard any comments in all of tcomms code. i tried my best to keep them somewhat up-to-date, but eh
|
||||
*/
|
||||
|
||||
@@ -331,8 +331,8 @@
|
||||
|
||||
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/device/flash))
|
||||
var/obj/item/device/flash/F = W
|
||||
if(istype(W, /obj/item/device/flash/handheld))
|
||||
var/obj/item/device/flash/handheld/F = W
|
||||
if(src.flash1 && src.flash2)
|
||||
user << "<span class='notice'>You have already inserted the eyes!</span>"
|
||||
return
|
||||
|
||||
@@ -95,9 +95,7 @@
|
||||
|
||||
hp -= Proj.damage
|
||||
if(hp <= 0)
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << "<span class='danger'>[src] breaks into tiny pieces and collapses!</span>"
|
||||
visible_message("<span class='warning'>[src] breaks into tiny pieces and collapses!</span>")
|
||||
qdel(src)
|
||||
|
||||
// Create a temporary object to represent the damage
|
||||
|
||||
@@ -92,6 +92,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
|
||||
new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \
|
||||
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \
|
||||
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/wood, 2), \
|
||||
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \
|
||||
new/datum/stack_recipe("wooden chair", /obj/structure/stool/bed/chair/wood/normal, 3, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
title+= "[R.title]"
|
||||
title+= " ([R.req_amount] [src.singular_name]\s)"
|
||||
if (can_build)
|
||||
t1 += text("<A href='?src=\ref[];make=[]'>[]</A> ", src, i, title)
|
||||
t1 += text("<A href='?src=\ref[];make=[];multiplier=1'>[]</A> ", src, i, title)
|
||||
else
|
||||
t1 += text("[]", title)
|
||||
continue
|
||||
@@ -117,7 +117,8 @@
|
||||
|
||||
var/datum/stack_recipe/R = recipes[text2num(href_list["make"])]
|
||||
var/multiplier = text2num(href_list["multiplier"])
|
||||
if (!multiplier) multiplier = 1
|
||||
if (!multiplier ||(multiplier <= 0)) //href protection
|
||||
return
|
||||
if (src.get_amount() < R.req_amount*multiplier)
|
||||
if (R.req_amount*multiplier>1)
|
||||
usr << "<span class='danger'>You haven't got enough [src] to build \the [R.req_amount*multiplier] [R.title]\s!</span>"
|
||||
|
||||
@@ -58,9 +58,8 @@
|
||||
|
||||
add_logs(user, target, "injected", object="[name]")
|
||||
|
||||
user.drop_item()
|
||||
inject(target, user) //Now we actually do the heavy lifting.
|
||||
loc = null //garbage collect
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/dnainjector/antihulk
|
||||
|
||||
@@ -79,12 +79,12 @@
|
||||
/*
|
||||
* Wrapping Paper
|
||||
*/
|
||||
/obj/item/weapon/wrapping_paper
|
||||
/obj/item/stack/wrapping_paper
|
||||
name = "wrapping paper"
|
||||
desc = "You can use this to wrap items in."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "wrap_paper"
|
||||
amount = 25
|
||||
|
||||
|
||||
/obj/item/weapon/wrapping_paper/attack_self(mob/user)
|
||||
/obj/item/stack/wrapping_paper/attack_self(mob/user)
|
||||
user << "<span class='notice'>You need to use it on a package that has already been wrapped!</span>"
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
if(!C.handcuffed)
|
||||
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
C.visible_message("<span class='danger'>[user] is trying to put zipties on [C]!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to put zipeties on [C]!</span>")
|
||||
"<span class='userdanger'>[user] is trying to put zipties on [C]!</span>")
|
||||
if(do_mob(user, C, 30))
|
||||
if(!C.handcuffed)
|
||||
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
|
||||
@@ -117,7 +117,6 @@
|
||||
trashtype = /obj/item/weapon/restraints/handcuffs/cable/zipties/used
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/zipties/used
|
||||
name = "used zipties"
|
||||
desc = "A pair of broken zipties."
|
||||
icon_state = "cuff_white_used"
|
||||
|
||||
|
||||
@@ -83,18 +83,14 @@
|
||||
/obj/item/weapon/melee/telebaton/attack_self(mob/user as mob)
|
||||
on = !on
|
||||
if(on)
|
||||
user.visible_message("<span class ='warning'>With a flick of their wrist, [user] extends their telescopic baton.</span>",\
|
||||
"<span class ='warning'>You extend the baton.</span>",\
|
||||
"You hear an ominous click.")
|
||||
user << "<span class ='warning'>You extend the baton.</span>"
|
||||
icon_state = "telebaton_1"
|
||||
item_state = "nullrod"
|
||||
w_class = 4 //doesnt fit in backpack when its on for balance
|
||||
force = 10 //seclite damage
|
||||
attack_verb = list("smacked", "struck", "cracked", "beaten")
|
||||
else
|
||||
user.visible_message("<span class ='notice'>[user] collapses their telescopic baton.</span>",\
|
||||
"<span class ='notice'>You collapse the baton.</span>",\
|
||||
"You hear a click.")
|
||||
user << "<span class ='notice'>You collapse the baton.</span>"
|
||||
icon_state = "telebaton_0"
|
||||
item_state = "telebaton_0" //no sprite in other words
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
@@ -94,7 +94,8 @@
|
||||
/obj/item/weapon/storage/pill_bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/extinguisher/mini
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/weapon/reagent_containers/hypospray
|
||||
)
|
||||
|
||||
|
||||
@@ -111,7 +112,7 @@
|
||||
/obj/item/weapon/grenade/flashbang,
|
||||
/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
/obj/item/weapon/restraints/handcuffs,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/device/flash/handheld,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_box,
|
||||
|
||||
@@ -119,6 +119,21 @@
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe( src )
|
||||
|
||||
/obj/item/weapon/storage/box/medipens
|
||||
name = "box of medipens"
|
||||
desc = "A box full of inaprovaline MediPens."
|
||||
icon_state = "syringe"
|
||||
|
||||
/obj/item/weapon/storage/box/medipens/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
|
||||
|
||||
/obj/item/weapon/storage/box/beakers
|
||||
name = "box of beakers"
|
||||
icon_state = "beaker"
|
||||
@@ -146,20 +161,6 @@
|
||||
new /obj/item/weapon/dnainjector/m2h(src)
|
||||
new /obj/item/weapon/dnainjector/m2h(src)
|
||||
|
||||
/*/obj/item/weapon/storage/box/blanks //Blanks removed, go home
|
||||
name = "box of blank shells"
|
||||
desc = "It has a picture of a gun and several warning symbols on the front."
|
||||
|
||||
/obj/item/weapon/storage/box/blanks/New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)
|
||||
new /obj/item/ammo_casing/shotgun/blank(src)*/
|
||||
|
||||
/obj/item/weapon/storage/box/flashbangs
|
||||
name = "box of flashbangs (WARNING)"
|
||||
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.</B>"
|
||||
@@ -182,12 +183,12 @@
|
||||
|
||||
/obj/item/weapon/storage/box/flashes/New()
|
||||
..()
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
|
||||
/obj/item/weapon/storage/box/teargas
|
||||
name = "box of tear gas grenades (WARNING)"
|
||||
@@ -343,6 +344,19 @@
|
||||
for(var/i = 1; i <= 5; i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/permits
|
||||
name = "box of construction permits"
|
||||
desc = "A box for containing construction permits, used to officially declare built rooms as additions to the station."
|
||||
icon_state = "id"
|
||||
|
||||
/obj/item/weapon/storage/box/permits/New() //There's only a few, so blueprints are still useful beyond setting every room's name to PRIMARY FART STORAGE
|
||||
..()
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/ids
|
||||
name = "box of spare IDs"
|
||||
desc = "Has so many empty IDs."
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
var/wall_mounted = 0 //never solid (You can always pass over it)
|
||||
var/health = 100
|
||||
var/lastbang
|
||||
var/max_mob_size = 1 //Biggest mob_size accepted by the container
|
||||
var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet.
|
||||
var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate
|
||||
//then open it in a populated area to crash clients.
|
||||
|
||||
@@ -25,8 +27,8 @@
|
||||
/obj/structure/closet/alter_health()
|
||||
return get_turf(src)
|
||||
|
||||
/obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0 || wall_mounted)) return 1
|
||||
/obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0 || wall_mounted) return 1
|
||||
return (!density)
|
||||
|
||||
/obj/structure/closet/proc/can_open()
|
||||
@@ -82,8 +84,14 @@
|
||||
|
||||
if(istype(AM, /mob/living))
|
||||
var/mob/living/L = AM
|
||||
if(L.buckled)
|
||||
if(L.buckled || L.mob_size > max_mob_size) //buckled mobs and mobs too big for the container don't get inside closets.
|
||||
return 0
|
||||
if(L.mob_size > 0)
|
||||
var/mobs_stored = 0
|
||||
for(var/mob/living/M in contents)
|
||||
mobs_stored++
|
||||
if(mobs_stored >= mob_storage_capacity)
|
||||
return 0
|
||||
if(L.client)
|
||||
L.client.perspective = EYE_PERSPECTIVE
|
||||
L.client.eye = src
|
||||
@@ -197,7 +205,7 @@
|
||||
if(user.drop_item())
|
||||
W.Move(loc)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/packageWrap))
|
||||
else if(istype(W, /obj/item/stack/packageWrap))
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
new /obj/item/weapon/storage/backpack/industrial(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel_eng(src)
|
||||
new /obj/item/blueprints(src)
|
||||
new /obj/item/areaeditor/blueprints(src)
|
||||
new /obj/item/weapon/storage/box/permits(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
new /obj/item/clothing/head/hardhat/white(src)
|
||||
new /obj/item/clothing/head/welding(src)
|
||||
@@ -29,7 +30,7 @@
|
||||
new /obj/item/weapon/airlock_painter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
new /obj/item/clothing/shoes/sneakers/brown (src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/CMO(src)
|
||||
return
|
||||
|
||||
@@ -135,9 +135,9 @@
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/device/assembly/signaler(src)
|
||||
new /obj/item/device/radio/electropack(src)
|
||||
new /obj/item/device/radio/electropack(src)
|
||||
new /obj/item/device/radio/electropack(src)
|
||||
new /obj/item/device/electropack(src)
|
||||
new /obj/item/device/electropack(src)
|
||||
new /obj/item/device/electropack(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/suit/armor/reactive(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/device/laser_pointer(src)
|
||||
new /obj/item/clothing/under/rank/research_director/alt(src)
|
||||
return
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
new /obj/item/weapon/storage/box/ids(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/weapon/mining_voucher(src)
|
||||
return
|
||||
@@ -79,7 +79,7 @@
|
||||
new /obj/item/weapon/shield/riot/tele(src)
|
||||
new /obj/item/clothing/mask/gas/sechailer/hos(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
@@ -134,7 +134,7 @@
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/device/radio/headset/headset_sec/alt(src)
|
||||
new /obj/item/clothing/mask/gas/sechailer(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
@@ -247,7 +247,7 @@
|
||||
var/id = null
|
||||
|
||||
/obj/structure/closet/secure_closet/brig/New()
|
||||
new /obj/item/clothing/under/color/orange( src )
|
||||
new /obj/item/clothing/under/rank/prisoner( src )
|
||||
new /obj/item/clothing/shoes/sneakers/orange( src )
|
||||
return
|
||||
|
||||
|
||||
@@ -126,9 +126,9 @@
|
||||
icon_closed = "orange"
|
||||
|
||||
/obj/structure/closet/wardrobe/orange/New()
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/under/rank/prisoner(src)
|
||||
new /obj/item/clothing/under/rank/prisoner(src)
|
||||
new /obj/item/clothing/under/rank/prisoner(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
new /obj/item/clothing/shoes/sneakers/orange(src)
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
if(opened)
|
||||
close()
|
||||
else
|
||||
if(rigged && locate(/obj/item/device/radio/electropack) in src)
|
||||
if(rigged && locate(/obj/item/device/electropack) in src)
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.electrocute_act(17, src))
|
||||
@@ -333,7 +333,7 @@
|
||||
return
|
||||
if(W)
|
||||
W.loc = src.loc
|
||||
else if(istype(W, /obj/item/weapon/packageWrap))
|
||||
else if(istype(W, /obj/item/stack/packageWrap))
|
||||
return
|
||||
else if(istype(W, /obj/item/stack/cable_coil))
|
||||
if(rigged)
|
||||
@@ -346,7 +346,7 @@
|
||||
else
|
||||
user << "<span class='warning'>You need 5 lengths of cable to rig [src].</span>"
|
||||
return
|
||||
else if(istype(W, /obj/item/device/radio/electropack))
|
||||
else if(istype(W, /obj/item/device/electropack))
|
||||
if(rigged)
|
||||
user << "<span class='notice'>You attach [W] to [src].</span>"
|
||||
user.drop_item()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user