diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index 46295ba5ae..59faa2de85 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -70,6 +70,7 @@ var/datum/antagonist/raider/raiders /obj/item/weapon/gun/energy/mindflayer, /obj/item/weapon/gun/energy/toxgun, /obj/item/weapon/gun/energy/stunrevolver, + /obj/item/weapon/gun/energy/stunrevolver/vintage, /obj/item/weapon/gun/energy/ionrifle, /obj/item/weapon/gun/energy/taser, /obj/item/weapon/gun/energy/crossbow/largecrossbow, diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index d939519125..9963ebb172 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -163,6 +163,7 @@ /obj/item/weapon/melee/baton, /obj/item/weapon/gun/energy/taser, /obj/item/weapon/gun/energy/stunrevolver, + /obj/item/weapon/gun/energy/stunrevolver/vintage, /obj/item/weapon/gun/magnetic/railgun/heater/pistol, /obj/item/weapon/gun/energy/gun, /obj/item/weapon/flame/lighter, diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index 8be31ebb7f..fa67823bcc 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -49,7 +49,7 @@ var/list/random_weighted_donuts = list( update_icon() /obj/item/weapon/storage/box/donut/update_icon() - overlays.Cut() + cut_overlays() var/x_offset = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents) var/mutable_appearance/ma = mutable_appearance(icon = icon, icon_state = D.overlay_state) diff --git a/code/game/objects/random/guns_and_ammo.dm b/code/game/objects/random/guns_and_ammo.dm index 736565b14d..cb8362879d 100644 --- a/code/game/objects/random/guns_and_ammo.dm +++ b/code/game/objects/random/guns_and_ammo.dm @@ -31,6 +31,7 @@ prob(4);/obj/item/weapon/gun/energy/taser, prob(2);/obj/item/weapon/gun/energy/crossbow/largecrossbow, prob(4);/obj/item/weapon/gun/energy/stunrevolver, + prob(2);/obj/item/weapon/gun/energy/stunrevolver/vintage, prob(3);/obj/item/weapon/gun/energy/gun/compact) /obj/random/energy/sec diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 1d71064953..caeb616216 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -228,6 +228,7 @@ /obj/item/clothing/accessory/badge/holo/detective, /obj/item/clothing/gloves/black, /obj/item/gunbox, + /obj/item/weapon/gun/energy/stunrevolver/vintage, /obj/item/weapon/storage/belt/detective, /obj/item/weapon/storage/box/evidence, /obj/item/device/radio/headset/headset_sec, diff --git a/code/game/objects/structures/props/esoteric.dm b/code/game/objects/structures/props/esoteric.dm new file mode 100644 index 0000000000..7ed9b1567e --- /dev/null +++ b/code/game/objects/structures/props/esoteric.dm @@ -0,0 +1,50 @@ +/obj/structure/prop/esoteric + name = "some esoteric thing" + desc = "Perhaps it's of ritual significance?" + icon = 'icons/obj/props/decor.dmi' + +/obj/structure/prop/esoteric/nt_pedestal0_old + name = "pedestal" + desc = "A pedestal with a mysterious slot at its center." + icon_state = "nt_pedestal0_old" + +/obj/structure/prop/esoteric/nt_pedestal1_old + name = "pedestal" + desc = "A pedestal with some kind of sword slotted securely in the center." + icon_state = "nt_pedestal1_old" + +// eye of the protector from Eris +/obj/structure/prop/esoteric/eotp + icon = 'icons/obj/props/decor32x64.dmi' + icon_state = "eotp" + +// neotheology cruciform reader from Eris +/obj/structure/prop/esoteric/reader + name = "electronic altar" + desc = "It looks like you're meant to scan something here." + icon = 'icons/obj/props/decor.dmi' + icon_state = "nt_reader_off" + +/obj/structure/prop/esoteric/reader/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "nt_reader_off" + if("on") + icon_state = "nt_reader_on" + if("no_cruciform") + cut_overlay("nt_reader_c_green") + cut_overlay("nt_reader_c_red") + if("red_cruciform") + cut_overlay("nt_reader_c_green") + cut_overlay("nt_reader_c_red") + add_overlay("nt_reader_c_red") + if("green_cruciform") + cut_overlay("nt_reader_c_red") + cut_overlay("nt_reader_c_green") + add_overlay("nt_reader_c_green") + if("panel_open") + cut_overlay("nt_reader_panel") + add_overlay("nt_reader_panel") + if("panel_closed") + cut_overlay("nt_reader_panel") diff --git a/code/game/objects/structures/props/fences.dm b/code/game/objects/structures/props/fences.dm new file mode 100644 index 0000000000..0d7ac7dbe2 --- /dev/null +++ b/code/game/objects/structures/props/fences.dm @@ -0,0 +1,7 @@ +// fences from TGMC +// You'll need to 'create instances from icon_states' in an editor to use these well +/obj/structure/prop/fence + name = "fence" + desc = "It's a fence! Not much else to say about it." + icon = 'icons/obj/props/decor_fences.dmi' + diff --git a/code/game/objects/structures/props/machines.dm b/code/game/objects/structures/props/machines.dm new file mode 100644 index 0000000000..9ad19fec1e --- /dev/null +++ b/code/game/objects/structures/props/machines.dm @@ -0,0 +1,564 @@ +/obj/structure/prop/machine + name = "doodad" + desc = "Some kind of machine." + icon = 'icons/obj/props/decor.dmi' + +//Eris Bluespace Beacon + +/obj/structure/prop/machine/bsb_off + name = "beacon" + icon_state = "bsb_off" + +/obj/structure/prop/machine/bsb_on + name = "beacon" + icon_state = "bsb_on" + +/obj/structure/prop/machine/biosyphon + icon_state = "biosyphon" + +/obj/structure/prop/machine/von_krabin + icon_state = "von_krabin" + +/obj/structure/prop/machine/last_shelter + icon_state = "last_shelter" + +/obj/structure/prop/machine/complicator + icon_state = "complicator" + +/obj/structure/prop/machine/random_radio + name = "radio" + icon_state = "random_radio" + +// vatgrowing thing from /tg/ +/obj/structure/prop/machine/green_egg + icon_state = "gel_cocoon" + +// gravity generator from Eris +/obj/structure/prop/machine/gravygen + icon = 'icons/obj/props/decor64x64.dmi' + icon_state = "bigdice" + bound_width = 64 + bound_height = 64 + +// dna vault from /tg/ +/obj/structure/prop/dna_vault + icon = 'icons/obj/props/decor96x96.dmi' + icon_state = "vault" + +/** + * Possible 'state' options for change_state(state) are: + * off: Looks boring and off + * on: candles lit and stuff + * no_cruciform: No cruciform (the little triangle thing) inserted + * red_cruciform: Red light cruciform inserted + * green_cruciform: Green light cruciform inserted + * panel_open: The panel is open (wiring) + * panel_closed: The panel is closed + */ + +/** + * Possible 'state' options for change_state(state) are: + * panel_open: The panel is opened + * panel_closed: The panel is closed + */ +// neotheology cloning biocan from Eris +/obj/structure/prop/machine/nt_biocan + icon = 'icons/obj/props/decor.dmi' + icon_state = "nt_biocan" + +/obj/structure/prop/nt_biocan/change_state(state) + . = ..() + switch(state) + if("panel_open") + cut_overlay("nt_biocan_panel") + add_overlay("nt_biocan_panel") + if("panel_closed") + cut_overlay("nt_biocan_panel") + +/** + * Possible 'state' options for change_state(state) are: + * blue, red, orange, yellow, green, purple: Set that color + * damaged: add damage overlay + * undamaged: remove damage overlay + * broken: become damaged + * plain: undamaged white version, otherwise use a color + */ +// dominator console from /tg/ +/obj/structure/prop/dominator + icon = 'icons/obj/props/decor.dmi' + icon_state = "dominator" + +/obj/structure/prop/dominator/change_state(state) + . = ..() + switch(state) + if("blue") + icon_state = "dominator-blue" + if("red") + icon_state = "dominator-red" + if("orange") + icon_state = "dominator-orange" + if("yellow") + icon_state = "dominator-yellow" + if("green") + icon_state = "dominator-green" + if("purple") + icon_state = "dominator-purple" + if("damaged") + add_overlay("dom_damage") + if("undamaged") + cut_overlay("dom_damage") + if("broken") + icon_state = "dominator-broken" + if("plain") + icon_state = "dominator" + +/obj/structure/prop/dominator/blue + icon_state = "dominator-blue" +/obj/structure/prop/dominator/red + icon_state = "dominator-red" +/obj/structure/prop/dominator/orange + icon_state = "dominator-orange" +/obj/structure/prop/dominator/yellow + icon_state = "dominator-yellow" +/obj/structure/prop/dominator/green + icon_state = "dominator-green" +/obj/structure/prop/dominator/purple + icon_state = "dominator-purple" + +/** + * Possible 'state' options for change_state(state) are: + * off: Default, boring + * on: Pumping or something + */ +// some neotheology thing from Eris +/obj/structure/prop/machine/solifier + icon_state = "nt_solidifier" + +/obj/structure/prop/machine/solifier/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "nt_solidifier" + if("on") + icon_state = "nt_solidifier_on" + +/obj/structure/prop/machine/solifier/starts_on + icon_state = "nt_solidifier_on" + +/** + * Possible 'state' options for change_state(state) are: + * off: Boring, round + * on: Spinny glowy + */ +// conduit of soul from Eris +/obj/structure/prop/machine/conduit + icon_state = "conduit_off" + +/obj/structure/prop/machine/conduit/change_state(state) + . = ..() + switch(state) + if("on") + icon_state = "conduit_spin" + flick("conduit_starting", src) + if("off") + icon_state = "conduit_off" + flick("conduit_stopping", src) + +/obj/structure/prop/machine/conduit/starts_on + icon_state = "conduit_spin" + +/** + * Possible 'state' options for change_state(state) are: + * on: Doing some kinda worky thing + * off: Not doing much of anything + * empty: No blue crystal thingy + * loaded: off but without the animation + */ +// some kinda NT thing from Eris +/obj/structure/prop/machine/core + icon_state = "core_inactive" + +/obj/structure/prop/machine/core/change_state(state) + . = ..() + switch(state) + if("on") + icon_state = "core_active" + flick("core_warmup", src) + if("off") + icon_state = "core_inactive" + flick("core_shutdown", src) + if("empty") + icon_state = "core_empty" + if("loaded") + icon_state = "core_inactive" + +/obj/structure/prop/machine/core/starts_on + icon_state = "core_active" + +/** + * Possible 'state' options for change_state(state) are: + * down: In the ground, glowing + * up: Out of the ground, open + */ +// experimental science destructor from /tg/ +/obj/structure/prop/machine/tube + icon = 'icons/obj/props/decor32x64.dmi' + icon_state = "tube_open" + +/obj/structure/prop/machine/tube/change_state(state) + . = ..() + switch(state) + if("down") + icon_state = "tube_on" + flick("tube_down", src) + if("up") + icon_state = "tube_open" + flick("tube_up", src) + +/obj/structure/prop/machine/tube/starts_down + icon_state = "tube_on" + +/** + * Possible 'state' options for change_state(state) are: + * off: Boring, static + * on: Turny and blinky + */ +// experimental science destructor from /tg/ +/obj/structure/prop/machine/comm_tower + icon = 'icons/obj/props/decor.dmi' + icon = 'icons/obj/props/decor96x96.dmi' + icon_state = "comm_tower" + +/obj/structure/prop/machine/comm_tower/change_state(state) + . = ..() + switch(state) + if("on") + icon_state = "comm_tower_on" + if("off") + icon_state = "comm_tower" + +/obj/structure/prop/machine/comm_tower/starts_on + icon_state = "comm_tower_on" + +/** + * Possible 'state' options for change_state(state) are: + * off: Not doing much + * on: Stamping mysterious substances + */ +// sheetizer from /tg/ +/obj/structure/prop/machine/stamper + icon = 'icons/obj/props/decor.dmi' + icon_state = "stamper" + +/obj/structure/prop/machine/stamper/change_state(state) + . = ..() + switch(state) + if("off") + cut_overlays() + if("on") + add_overlay("stamper_proc") + add_overlay("stamper_but") + +/obj/structure/prop/machine/stamper/starts_on + icon_state = "stamper_on" + +/obj/structure/prop/machine/stamper/starts_on/Initialize() + add_overlay("stamper_proc") + add_overlay("stamper_but") + + +/** + * Possible 'state' options for change_state(state) are: + * whole: Not doing much + * broken: Stamping mysterious substances + */ +// alien autopsy thing from TGMC +/obj/structure/prop/machine/alien_tank + icon_state = "tank_larva" + +/obj/structure/prop/machine/alien_tank/change_state(state) + . = ..() + switch(state) + if("whole") + icon_state = "tank_larva" + if("broken") + icon_state = "tank_broken" + +/obj/structure/prop/machine/alien_tank/starts_broken + icon_state = "tank_broken" + +/** + * Possible 'state' options for change_state(state) are: + * idle: The default look + * active: Glowy lights underneath + * panel_open: Opened panel (wiring) + * panel_closed: Closed panel + */ +// neotheology optable from Eris +/obj/structure/prop/machine/nt_optable + icon_state = "nt_optable-idle" + +/obj/structure/prop/machine/nt_optable/change_state(state) + . = ..() + switch(state) + if("idle") + icon_state = "nt_optable-idle" + if("active") + icon_state = "nt_optable-active" + if("panel_open") + cut_overlay("nt_optable_panel") + add_overlay("nt_optable_panel") + if("panel_closed") + cut_overlay("nt_optable_panel") + +/obj/structure/prop/nt_optable/starts_active + icon_state = "nt_optable-active" + +/** + * Possible 'state' options for change_state(state) are: + * idle: The default look + * active: Glowy lights in the center + * panel_open: Opened panel (wiring) + * panel_closed: Closed panel + */ +// trade beacon from Eris +/obj/structure/prop/machine/tradebeacon + icon_state = "tradebeacon" + +/obj/structure/prop/machine/tradebeacon/change_state(state) + . = ..() + switch(state) + if("idle") + icon_state = "tradebeacon" + if("active") + icon_state = "tradebeacon_active" + if("panel_open") + cut_overlay("tradebeacon_panel") + add_overlay("tradebeacon_panel") + if("panel_closed") + cut_overlay("tradebeacon_panel") + +/obj/structure/prop/machine/tradebeacon/starts_active + icon_state = "tradebeacon_active" + +/** + * Possible 'state' options for change_state(state) are: + * idle: The default look + * active: Glowy lights in the center + * panel_open: Opened panel (wiring) + * panel_closed: Closed panel + */ +// another trade beacon from Eris +/obj/structure/prop/machine/tradebeacon2 + icon_state = "tradebeacon" + +/obj/structure/prop/machine/tradebeacon2/change_state(state) + . = ..() + switch(state) + if("idle") + icon_state = "tradebeacon_sending" + if("active") + icon_state = "tradebeacon_sending_active" + if("panel_open") + cut_overlay("tradebeacon_sending_panel") + add_overlay("tradebeacon_sending_panel") + if("panel_closed") + cut_overlay("tradebeacon_sending_panel") + +/obj/structure/prop/machine/tradebeacon2/starts_active + icon_state = "tradebeacon_sending_active" + +/** + * Possible 'state' options for change_state(state) are: + * off: Non-spinny + * on: Spinny and floaty + */ +// neotheology decorative(?) obelisk from Eris +/obj/structure/prop/machine/nt_obelisk + icon = 'icons/obj/props/decor.dmi' + icon_state = "nt_obelisk" + +/obj/structure/prop/machine/nt_obelisk/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "nt_obelisk" + if("on") + icon_state = "nt_obelisk_on" + +/obj/structure/prop/machine/nt_obelisk/starts_on + icon_state = "nt_obelisk_on" + +/** + * Possible 'state' options for change_state(state) are: + * off: Inert + * on: Hand destroying machinery + */ +// 'sorter' from Eris +/obj/structure/prop/machine/sorter + icon = 'icons/obj/props/decor.dmi' + icon_state = "sorter" + +/obj/structure/prop/machine/sorter/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "sorter" + if("on") + icon_state = "sorter-process" + +/obj/structure/prop/machine/sorter/starts_on + icon_state = "sorter-process" + +/** + * Possible 'state' options for change_state(state) are: + * off: Inert + * on: Hand destroying machinery + */ +// 'smelter' from Eris +/obj/structure/prop/machine/smelter + icon = 'icons/obj/props/decor.dmi' + icon_state = "smelter" + +/obj/structure/prop/machine/smelter/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "smelter" + if("on") + icon_state = "smelter-process" + +/obj/structure/prop/machine/smelter/starts_on + icon_state = "smelter-process" + +/** + * Possible 'state' options for change_state(state) are: + * idle: Not doing anything, with yellow template exposed + * work: busy doing work + * pause: paused work + */ +// cruciform forge from Eris +/obj/structure/prop/machine/nt_cruciforge + icon = 'icons/obj/props/decor.dmi' + icon_state = "nt_cruciforge" + +/obj/structure/prop/machine/nt_cruciforge/change_state(state) + . = ..() + switch(state) + if("idle") + icon_state = "nt_cruciforge" + flick("nt_cruciforge_finish", src) // 8ds + if("work") + icon_state = "nt_cruciforge_work" + flick("nt_cruciforge_start", src) // 8ds + if("pause") + icon_state = "nt_cruciforge_pause" + +/obj/structure/prop/machine/nt_cruciforge/starts_working + icon_state = "nt_cruciforge_work" + +/** + * Possible 'state' options for change_state(state) are: + * off: Default, boring + * on: Showing a display/powered up + */ +// A console from TGMC +/obj/structure/prop/machine/tgmc_console1 + name = "console" + icon = 'icons/obj/props/decor.dmi' + icon_state = "tgmc_console1" + +/obj/structure/prop/machine/tgmc_console1/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "tgmc_console1" + if("on") + icon_state = "tgmc_console1_on" + +/obj/structure/prop/machine/tgmc_console1/starts_on + icon_state = "tgmc_console1_on" + +/** + * Possible 'state' options for change_state(state) are: + * off: Default, boring + * on: Showing a display/powered up + */ +// A console from TGMC +/obj/structure/prop/machine/tgmc_console2 + name = "console" + icon_state = "tgmc_console2" + +/obj/structure/prop/machine/tgmc_console2/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "tgmc_console2" + if("on") + icon_state = "tgmc_console2_on" + +/obj/structure/prop/machine/tgmc_console2/starts_on + icon_state = "tgmc_console2_on" + +/** + * Possible 'state' options for change_state(state) are: + * off: Default, boring + * on: Showing a display/powered up + */ +// A console from TGMC +/obj/structure/prop/machine/tgmc_console3 + name = "console" + icon_state = "tgmc_console3" + +/obj/structure/prop/machine/tgmc_console3/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "tgmc_console3" + if("on") + icon_state = "tgmc_console3_on" + +/obj/structure/prop/machine/tgmc_console3/starts_on + icon_state = "tgmc_console3_on" + +/** + * Possible 'state' options for change_state(state) are: + * off: Default, boring + * on: Showing a display/powered up + */ +// A console from TGMC +/obj/structure/prop/machine/tgmc_console4 + name = "console" + icon_state = "tgmc_console4" + +/obj/structure/prop/machine/tgmc_console4/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "tgmc_console4" + if("on") + icon_state = "tgmc_console4_on" + +/obj/structure/prop/machine/tgmc_console4/starts_on + icon_state = "tgmc_console4_on" + +/** + * Possible 'state' options for change_state(state) are: + * off: Default, boring + * on: Showing a display/powered up + */ +// A console from TGMC +/obj/structure/prop/machine/tgmc_console5 + name = "console" + icon_state = "tgmc_console5" + +/obj/structure/prop/machine/tgmc_console5/change_state(state) + . = ..() + switch(state) + if("off") + icon_state = "tgmc_console5" + if("on") + icon_state = "tgmc_console5_on" + +/obj/structure/prop/machine/tgmc_console5/starts_on + icon_state = "tgmc_console5_on" \ No newline at end of file diff --git a/code/game/objects/structures/props/prop.dm b/code/game/objects/structures/props/prop.dm index fea5815674..5d57dfb648 100644 --- a/code/game/objects/structures/props/prop.dm +++ b/code/game/objects/structures/props/prop.dm @@ -1,13 +1,26 @@ -//The base 'prop' for PoIs or other large junk. +/** + * Decorative items for PoIs etc. + * These are generally sprites ported from other servers, which don't have any unique code. + * They can be used by mappers for decorating their maps. They're mostly here so people who aren't + * rummaging around in the sprites can be aware of some neat sprites they can use. + * + * Obviously you can swipe the sprites for real structures and add code, but please don't add any code + * (beyond decorative things like maybe light) directly to these types or this file! + * Take the icon and state and make your own type under /obj/structure. + * + * Some of these do have a SMIDGE of code to allow a mapper to twirl them through states/animations without + * much effort, but beyond 'visuals logic', I'd rather keep all the logic out of here. + */ /obj/structure/prop - name = "something" - desc = "My description is broken, bug a developer." + name = "mysterious structure" + desc = "You're not sure what this is." icon = 'icons/obj/structures.dmi' icon_state = "safe" density = TRUE anchored = TRUE var/interaction_message = null + var/state /obj/structure/prop/attack_hand(mob/living/user) // Used to tell the player that this isn't useful for anything. if(!istype(user)) @@ -16,3 +29,41 @@ return ..() else to_chat(user, interaction_message) + +/obj/structure/prop/proc/change_state(state) + SHOULD_CALL_PARENT(TRUE) + src.state = state + +/// Helper so admins can varedit the state easily. +/obj/structure/prop/vv_edit_var(var_name, var_value) + if(var_name == "state") + change_state(var_value) + + +//Misc stuff that fits no category + +// ship memorial from TGMC +/obj/structure/prop/memorial + name = "engraved wall" + desc = "A finely engraved list on dark stone." + icon = 'icons/obj/props/decor64x64.dmi' + icon_state = "ship_memorial" + bound_width = 64 + +/** + * + Notes on change_state + * + * tl;dr "You can varedit 'state' on these to the things in the comments below to get cool animations" + * + * These items have some logic to handle some fun animations on them. Mappers can call the 'change_state(state)' proc + * while referring to the comments here for what states they can use. You'll notice some crazy overlay handling, + * and that's because I don't want to add any vars to these mappers think they can fiddle with, which requires + * more logic than I'm willing to do at the moment. So we get crazy cut/add operations instead. + * + * There's also a VV helper so if you varedit 'state' to these during the game, you can get that to work. + * + * Like, I don't want to add a state machine to decorative objects. You can if you want. + * + */ + diff --git a/code/game/objects/structures/props/rocks.dm b/code/game/objects/structures/props/rocks.dm index 5d343c0744..e1deeb4898 100644 --- a/code/game/objects/structures/props/rocks.dm +++ b/code/game/objects/structures/props/rocks.dm @@ -38,4 +38,15 @@ density = FALSE /obj/structure/prop/rock/small/wateralt - icon_state = "waterrocks2" \ No newline at end of file + icon_state = "waterrocks2" + +// bluespace crystal from Eris +/obj/structure/prop/crystal + name = "crystal" + icon = 'icons/obj/props/decor.dmi' + icon_state = "bsc" + +/obj/structure/prop/crystal_dust + name = "crystal dust" + icon = 'icons/obj/props/decor.dmi' + icon_state = "bsc_dust" \ No newline at end of file diff --git a/code/game/objects/structures/props/statue.dm b/code/game/objects/structures/props/statue.dm new file mode 100644 index 0000000000..1fe74ffba0 --- /dev/null +++ b/code/game/objects/structures/props/statue.dm @@ -0,0 +1,65 @@ +//Eris statues + +/obj/structure/prop/statue + name = "statue" + desc = "It's art!" + icon = 'icons/obj/props/decor.dmi' + icon_state = "artwork_statue" + +/obj/structure/prop/statue/statue1 + icon_state = "artwork_statue_1" + +/obj/structure/prop/statue/statue2 + icon_state = "artwork_statue_2" + +/obj/structure/prop/statue/statue3 + icon_state = "artwork_statue_3" + +/obj/structure/prop/statue/statue4 + icon_state = "artwork_statue_4" + +/obj/structure/prop/statue/statue5 + icon_state = "artwork_statue_5" + +//TGMC Ship Mast + +/obj/structure/prop/statue/stump_plaque + name = "commemorative stump" + desc = "A wooden stump adorned with a little plaque." + icon = 'icons/obj/props/decor.dmi' + icon_state = "stump" + +//World Server statues + +/obj/structure/prop/statue + name = "statue" + desc = "A statue." + icon = 'icons/obj/props/decor32x64.dmi' + icon_state = "venus" + +/obj/structure/prop/statue/lion + icon_state = "lion" + +/obj/structure/prop/statue/angel + icon = 'icons/obj/props/decor.dmi' + icon_state = "angel" + +/obj/structure/prop/statue/phoron + name = "phoronic cascade" + desc = "A sculpture made of pure phoron. It is covered in a lacquer that prevents erosion and renders it fireproof. It's safe. Probably." + icon_state = "phoronic" + layer = ABOVE_WINDOW_LAYER + interaction_message = "Cool to touch and unbelievable smooth. You can almost see your reflection in it." + +/obj/structure/prop/statue/phoron/New() + set_light(2, 3, "#cc66ff") + +/obj/structure/prop/statue/pillar + name = "pillar" + desc = "A pillar." + icon_state = "pillar" + +/obj/structure/prop/statue/pillar/dark + name = "pillar" + desc = "A dark pillar." + icon_state = "dark_pillar" \ No newline at end of file diff --git a/code/game/objects/structures/props/warfare.dm b/code/game/objects/structures/props/warfare.dm new file mode 100644 index 0000000000..c295599c39 --- /dev/null +++ b/code/game/objects/structures/props/warfare.dm @@ -0,0 +1,167 @@ +/obj/structure/prop/war + name = "military hardware" + desc = "What is it good for?" + icon = 'icons/obj/props/decor.dmi' + +// warheads from TGMC +/obj/structure/prop/war/warhead1 + name = "nuclear warhead" + icon_state = "ob_warhead_1" + +/obj/structure/prop/war/warhead2 + name = "incindiary warhead" + icon_state = "ob_warhead_2" + +/obj/structure/prop/war/warhead3 + name = "bluespace warhead" + icon_state = "ob_warhead_3" + +/obj/structure/prop/war/warhead4 + name = "phoron warhead" + icon_state = "ob_warhead_4" + +// minirocket pod from TGMC +/obj/structure/prop/war/minirocket_pod + name = "rocket pod" + icon_state = "minirocket_pod" + +// sentry console from TGMC +/obj/structure/prop/war/sentry_control + name = "portable sentry gun" + desc = "Needs a dispenser." + icon_state = "tgmc_sentry" + +// various weapons from TGMC +/obj/structure/prop/war/tgmc_missile + name = "missile" + desc = "It seems to be some sort of spacecraft-tier ordinance." + icon = 'icons/obj/props/decor64x64.dmi' + icon_state = "single" + bound_width = 64 + +/obj/structure/prop/war/tgmc_missile/double + icon_state = "widowmaker" + +/obj/structure/prop/war/tgmc_missile/banshee + icon_state = "banshee" + +/obj/structure/prop/war/tgmc_missile/keeper + icon_state = "keeper" + +/obj/structure/prop/war/tgmc_missile/fatty + icon_state = "fatty" + +/obj/structure/prop/war/tgmc_missile/napalm + icon_state = "napalm" + +/** + * Possible 'state' options for change_state(state) are: + * empty, single, banshee, keeper, fatty, napalm + */ +// ship weapons from TGMC +/obj/structure/prop/tgmc_missile_rack + name = "missile launcher" + desc = "Some sort of spacecraft-tier missile weapon." + icon = 'icons/obj/props/decor64x64.dmi' + icon_state = "rocket_pod" + bound_height = 64 + +/obj/structure/prop/war/tgmc_missile_rack/change_state(state) + . = ..() + switch(state) + if("empty") + icon_state = "rocket_pod" + if("single") + icon_state = "rocket_pod_loaded" + if("banshee") + icon_state = "rocket_pod_loadedb" + if("keeper") + icon_state = "rocket_pod_loadedk" + if("fatty") + icon_state = "rocket_pod_loadedf" + if("napalm") + icon_state = "rocket_pod_loadedn" + +/obj/structure/prop/war/tgmc_missile_rack/single + icon_state = "rocket_pod_loaded" +/obj/structure/prop/war/tgmc_missile_rack/banshee + icon_state = "rocket_pod_loadedb" +/obj/structure/prop/war/tgmc_missile_rack/keeper + icon_state = "rocket_pod_loadedk" +/obj/structure/prop/war/tgmc_missile_rack/fatty + icon_state = "rocket_pod_loadedf" +/obj/structure/prop/war/tgmc_missile_rack/napalm + icon_state = "rocket_pod_loadedn" + +/** + * Possible 'state' options for change_state(state) are: + * empty, loaded + */ +// ship weapons from TGMC +/obj/structure/prop/war/tgmc_minirockets + name = "rocket pod" + desc = "Some sort of spacecraft-tier rocket weapon." + icon = 'icons/obj/props/decor64x64.dmi' + icon_state = "minirocket_pod" + bound_height = 64 + +/obj/structure/prop/war/tgmc_minirockets/change_state(state) + . = ..() + switch(state) + if("empty") + icon_state = "minirocket_pod" + if("loaded") + icon_state = "minirocket_pod_loaded" + +/obj/structure/prop/war/tgmc_minirockets/loaded + icon_state = "minirocket_pod_loaded" + +/** + * Possible 'state' options for change_state(state) are: + * empty, loaded + */ +// ship weapons from TGMC +/obj/structure/prop/war/tgmc_laser + name = "laser cannon" + desc = "Some sort of spacecraft-tier energy weapon." + icon = 'icons/obj/props/decor64x64.dmi' + icon_state = "laser_beam" + bound_height = 64 + +/obj/structure/prop/war/tgmc_laser/change_state(state) + . = ..() + switch(state) + if("empty") + icon_state = "laser_beam" + if("loaded") + icon_state = "laser_beam_loaded" + +/obj/structure/prop/war/tgmc_laser/loaded + icon_state = "laser_beam_loaded" + +/** + * Possible 'state' options for change_state(state) are: + * empty, loaded, loadedempty + */ +// ship weapons from TGMC +/obj/structure/prop/war/tgmc_30mm + name = "30mm cannon" + desc = "Some sort of spacecraft-tier rotary cannon weapon." + icon = 'icons/obj/props/decor64x64.dmi' + icon_state = "30mm_cannon" + bound_height = 64 + +/obj/structure/prop/war/tgmc_30mm/change_state(state) + . = ..() + switch(state) + if("empty") + icon_state = "30mm_cannon" + if("loaded") + icon_state = "30mm_cannon_loaded1" + if("loadedempty") + icon_state = "30mm_cannon_loaded0" + +/obj/structure/prop/war/tgmc_30mm/loaded + icon_state = "30mm_cannon_loaded1" +/obj/structure/prop/war/tgmc_30mm/loadedempty + icon_state = "30mm_cannon_loaded0" \ No newline at end of file diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index e14ffb5921..40f9f3a685 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -41,7 +41,7 @@ update_icon() /obj/structure/toilet/update_icon() - icon_state = "toilet[initial(icon_state)][open][cistern]" + icon_state = "[initial(icon_state)][open][cistern]" /obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob) if(I.is_crowbar()) diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 25ac9dbaee..c428801f62 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -115,7 +115,7 @@ var/list/_client_preferences_by_type key = "SOUND_AIRPUMP" enabled_description = "Audible" disabled_description = "Silent" - + /datum/client_preference/old_door_sounds description ="Old Door Sounds" key = "SOUND_OLDDOORS" @@ -270,13 +270,13 @@ var/list/_client_preferences_by_type key = "RUNECHAT_BORDER" enabled_description = "Show" disabled_description = "Hide" - enabled_by_default = FALSE + enabled_by_default = TRUE /datum/client_preference/runechat_long_messages description = "Runechat Message Length" key = "RUNECHAT_LONG" - enabled_description = "ERP KING" - disabled_description = "Normie" + enabled_description = "Long" + disabled_description = "Short" enabled_by_default = FALSE /datum/client_preference/status_indicators/toggled(mob/preference_mob, enabled) diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index c4c9fe564e..c4dd57d681 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -677,3 +677,14 @@ whitelisted = SPECIES_TESHARI sort_category = "Xenowear" cost = 4 + +/datum/gear/shoes/teshwrap + display_name = "Teshari legwraps" + path = /obj/item/clothing/shoes/footwraps/teshari + sort_category = "Xenowear" + whitelisted = SPECIES_TESHARI + cost = 1 + +/datum/gear/shoes/teshwrap/New() + ..() + gear_tweaks += gear_tweak_free_color_choice diff --git a/code/modules/clothing/shoes/xeno/teshari.dm b/code/modules/clothing/shoes/xeno/teshari.dm new file mode 100644 index 0000000000..8b1680a2c8 --- /dev/null +++ b/code/modules/clothing/shoes/xeno/teshari.dm @@ -0,0 +1,8 @@ +/obj/item/clothing/shoes/footwraps/teshari + name = "Teshari legwraps" + desc = "Traditional Teshari footwear, consisting of a cloth wrapping to cover the foot and lower leg." + icon = 'icons/obj/clothing/species/teshari/shoes.dmi' + icon_state = "teshwrap" + item_state = "teshwrap" + shoes_under_pants = 1 //these are thin and wrapped around the leg, clothing would go over it + species_restricted = list(SPECIES_TESHARI) \ No newline at end of file diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index 939ac35cfc..d35ada73d8 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -60,7 +60,7 @@ data["replaces_nutriment"] = replaces_nutriment data["collects_produce"] = collects_produce data["removes_dead"] = removes_dead - + return data @@ -83,22 +83,22 @@ /mob/living/bot/farmbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) if(..()) return TRUE - + add_fingerprint(usr) switch(action) if("power") - if(!access_scanner.allowed(src)) + if(!access_scanner.allowed(usr)) return FALSE if(on) turn_off() else turn_on() . = TRUE - + if(locked) return TRUE - + switch(action) if("water") waters_trays = !waters_trays diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index 292a4eeacd..ad36943a5b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -57,7 +57,8 @@ icon_living = "mouse_[body_color]" icon_dead = "mouse_[body_color]_dead" icon_rest = "mouse_[body_color]_sleep" - desc = "A small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself." + if (body_color != "rat") + desc = "A small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself." /mob/living/simple_mob/animal/passive/mouse/Crossed(atom/movable/AM as mob|obj) if(AM.is_incorporeal()) @@ -106,6 +107,8 @@ /mob/living/simple_mob/animal/passive/mouse/rat name = "rat" + tt_desc = "E Rattus rattus" + desc = "A large rodent, often seen hiding in maintenance areas and making a nuisance of itself." body_color = "rat" icon_state = "mouse_rat" maxHealth = 20 diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index ea684e2bb9..b3e5193db4 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -30,17 +30,6 @@ charge_cost = 800 recharge_time = 0.5 SECONDS -/obj/item/weapon/gun/energy/stunrevolver - name = "stun revolver" - desc = "A LAEP20 Aktzin. Designed and produced by Lawson Arms under the wing of Hephaestus, several TSCs have been trying to get a hold of the blueprints for half a decade." - description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, often sold alongside MarsTech projectile weapons to security and law enforcement agencies. \ - The Aktzin's capsule-based stun ammunition is a closely guarded Hephaestus Industries patent, and the company has been particularly litigious towards any attempted imitators." - icon_state = "stunrevolver" - item_state = "stunrevolver" - origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) - projectile_type = /obj/item/projectile/energy/electrode/strong - charge_cost = 300 - /obj/item/weapon/gun/energy/crossbow name = "mini energy-crossbow" desc = "A weapon favored by many mercenary stealth specialists." @@ -80,4 +69,45 @@ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 3) fire_delay = 20 charge_cost = 600 - projectile_type = /obj/item/projectile/energy/plasmastun \ No newline at end of file + projectile_type = /obj/item/projectile/energy/plasmastun + +//Stun Revolvers + +/obj/item/weapon/gun/energy/stunrevolver + name = "stun revolver" + desc = "A LAEP20 Aktzin. Designed and produced by Lawson Arms under the wing of Hephaestus, \ + several TSCs have been trying to get a hold of the blueprints for half a decade." + description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, \ + often sold alongside MarsTech projectile weapons to security and law enforcement agencies. \ + The Aktzin's capsule-based stun ammunition is a closely guarded Hephaestus Industries patent, \ + and the company has been particularly litigious towards any attempted imitators." + icon_state = "stunrevolver" + item_state = "stunrevolver" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) + projectile_type = /obj/item/projectile/energy/electrode/strong + charge_cost = 300 + +/obj/item/weapon/gun/energy/stunrevolver/vintage + name = "vintage stun revolver" + desc = "An older model stun revolver that is still in service across the frontier." + description_fluff = "The LTX1020 Bolter, a Firefly Co. staple from when the company was in its hayday. \ + While Firefly Co. has sadly been dissmantled due to bankruptcy, their iconic weapons can still be found \ + across the frontier as anything from collectors items to surplus equipment. The LTX1020 falls under \ + the latter category. Several companies have been known to use the base tech within the Bolter to create \ + their own variants of the Stun Revolver." + icon_state = "vinstunrevolver" + item_state = "stunrevolver" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) + +/obj/item/weapon/gun/energy/stunrevolver/snubnose + name = "snub stun revolver" + desc = "A snub nose stun revolver sporting a rather elegant look." + description_fluff = "The LTX1010 Stubby, a Firefly Co. staple from when the company was in its hayday. \ + While Firefly Co. has sadly been dissmantled due to bankruptcy, their iconic weapons can still be found \ + across the frontier as anything from collectors items to surplus equipment. The LTX1010 falls under \ + the latter category. Gangsters and other gentlemanly criminals alike use the Stubby as a means of policing \ + within their ranks." + icon_state = "snubstunrevolver" + item_state = "stunrevolver" + w_class = ITEMSIZE_SMALL + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) \ No newline at end of file diff --git a/code/modules/research/designs/weapons.dm b/code/modules/research/designs/weapons.dm index a32b01b90c..da5a382b5b 100644 --- a/code/modules/research/designs/weapons.dm +++ b/code/modules/research/designs/weapons.dm @@ -70,6 +70,13 @@ build_path = /obj/item/weapon/gun/energy/floragun sort_string = "MAAAG" +/datum/design/item/weapon/energy/vinstunrevolver + id = "vinstunrevolver" + req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) + materials = list(MAT_STEEL = 4000) + build_path = /obj/item/weapon/gun/energy/stunrevolver/vintage + sort_string = "MAAAH" + // Ballistic weapons /datum/design/item/weapon/ballistic/AssembleDesignName() diff --git a/icons/mob/species/teshari/shoes.dmi b/icons/mob/species/teshari/shoes.dmi index 66f18f37bb..273f36d28e 100644 Binary files a/icons/mob/species/teshari/shoes.dmi and b/icons/mob/species/teshari/shoes.dmi differ diff --git a/icons/obj/clothing/species/teshari/shoes.dmi b/icons/obj/clothing/species/teshari/shoes.dmi new file mode 100644 index 0000000000..1fc31f73cc Binary files /dev/null and b/icons/obj/clothing/species/teshari/shoes.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 9e2f5f10a4..871b922c9b 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/props/decor.dmi b/icons/obj/props/decor.dmi new file mode 100644 index 0000000000..f5b5ee5460 Binary files /dev/null and b/icons/obj/props/decor.dmi differ diff --git a/icons/obj/props/decor32x64.dmi b/icons/obj/props/decor32x64.dmi new file mode 100644 index 0000000000..ceb577bb2c Binary files /dev/null and b/icons/obj/props/decor32x64.dmi differ diff --git a/icons/obj/props/decor64x64.dmi b/icons/obj/props/decor64x64.dmi new file mode 100644 index 0000000000..e9ac905d19 Binary files /dev/null and b/icons/obj/props/decor64x64.dmi differ diff --git a/icons/obj/props/decor96x96.dmi b/icons/obj/props/decor96x96.dmi new file mode 100644 index 0000000000..7229e30f23 Binary files /dev/null and b/icons/obj/props/decor96x96.dmi differ diff --git a/icons/obj/props/decor_fences.dmi b/icons/obj/props/decor_fences.dmi new file mode 100644 index 0000000000..155d5bef68 Binary files /dev/null and b/icons/obj/props/decor_fences.dmi differ diff --git a/polaris.dme b/polaris.dme index d6652bafda..e5b4b76b92 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1289,14 +1289,19 @@ #include "code\game\objects\structures\props\alien_props.dm" #include "code\game\objects\structures\props\beam_prism.dm" #include "code\game\objects\structures\props\blackbox.dm" +#include "code\game\objects\structures\props\esoteric.dm" #include "code\game\objects\structures\props\fake_ai.dm" +#include "code\game\objects\structures\props\fences.dm" +#include "code\game\objects\structures\props\machines.dm" #include "code\game\objects\structures\props\nest.dm" #include "code\game\objects\structures\props\projectile_lock.dm" #include "code\game\objects\structures\props\prop.dm" #include "code\game\objects\structures\props\puzzledoor.dm" #include "code\game\objects\structures\props\rocks.dm" +#include "code\game\objects\structures\props\statue.dm" #include "code\game\objects\structures\props\swarm.dm" #include "code\game\objects\structures\props\transmitter.dm" +#include "code\game\objects\structures\props\warfare.dm" #include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm" #include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" #include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm" @@ -1632,6 +1637,7 @@ #include "code\modules\clothing\shoes\leg_guards.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" +#include "code\modules\clothing\shoes\xeno\teshari.dm" #include "code\modules\clothing\spacesuits\alien.dm" #include "code\modules\clothing\spacesuits\breaches.dm" #include "code\modules\clothing\spacesuits\miscellaneous.dm"