Merge branch 'master' of https://github.com/PolarisSS13/Polaris into food2021

This commit is contained in:
Cerebulon
2021-08-27 21:09:46 +01:00
140 changed files with 2807 additions and 311235 deletions
@@ -9,6 +9,7 @@
/datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S)
S["lastchangelog"] >> pref.lastchangelog
S["lastnews"] >> pref.lastnews
S["lastlorenews"] >> pref.lastlorenews
S["default_slot"] >> pref.default_slot
S["preferences"] >> pref.preferences_enabled
S["preferences_disabled"] >> pref.preferences_disabled
@@ -16,6 +17,7 @@
/datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S)
S["lastchangelog"] << pref.lastchangelog
S["lastnews"] << pref.lastnews
S["lastlorenews"] << pref.lastlorenews
S["default_slot"] << pref.default_slot
S["preferences"] << pref.preferences_enabled
S["preferences_disabled"] << pref.preferences_disabled
@@ -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"
@@ -253,6 +253,12 @@ var/list/_client_preferences_by_type
enabled_description = "Show"
disabled_description = "Hide"
/datum/client_preference/radio_sounds
description = "Radio Sounds"
key = "RADIO_SOUNDS"
enabled_description = "On"
disabled_description = "Off"
/datum/client_preference/runechat_mob
description = "Runechat (Mobs)"
key = "RUNECHAT_MOB"
@@ -270,13 +276,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)
@@ -285,6 +291,13 @@ var/list/_client_preferences_by_type
var/datum/plane_holder/PH = preference_mob.plane_holder
PH.set_vis(VIS_STATUS, enabled)
/datum/client_preference/show_lore_news
description = "Lore News Popup"
key = "NEWS_POPUP"
enabled_by_default = TRUE
enabled_description = "Popup New On Login"
disabled_description = "Do Nothing"
/********************
* Staff Preferences *
********************/
@@ -203,6 +203,10 @@
display_name = "hat, tophat"
path = /obj/item/clothing/head/that
/datum/gear/head/panama
display_name = "hat, panama"
path = /obj/item/clothing/head/panama
/datum/gear/head/wig/philosopher
display_name = "natural philosopher's wig"
path = /obj/item/clothing/head/philosopher_wig
@@ -559,6 +559,18 @@
display_name = "department jacket, medical"
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
/datum/gear/suit/miscellaneous/light_jacket
display_name = "light jacket selection"
path = /obj/item/clothing/suit/storage/toggle/light_jacket
/datum/gear/suit/miscellaneous/light_jacket/New()
..()
var/list/jacket = list(
"grey light jacket" = /obj/item/clothing/suit/storage/toggle/light_jacket,
"dark blue light jacket" = /obj/item/clothing/suit/storage/toggle/light_jacket/blue
)
gear_tweaks += new/datum/gear_tweak/path(jacket)
/datum/gear/suit/miscellaneous/peacoat
display_name = "peacoat"
path = /obj/item/clothing/suit/storage/toggle/peacoat
@@ -57,6 +57,22 @@
jumpclothes[initial(jumps.name)] = jumps
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes))
/datum/gear/uniform/qipao
display_name = "qipao"
path = /obj/item/clothing/under/qipao
/datum/gear/uniform/qipao/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/uniform/qipao2
display_name = "qipao, slim"
path = /obj/item/clothing/under/qipao2
/datum/gear/uniform/qipao2/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/uniform/skirt
display_name = "skirt selection"
path = /obj/item/clothing/under/skirt
@@ -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
+1
View File
@@ -139,6 +139,7 @@ var/list/preferences_datums = list()
var/datum/browser/panel
var/lastnews // Hash of last seen lobby news content.
var/lastlorenews //ID of last seen lore news article.
var/examine_text_mode = 0 // Just examine text, include usage (description_info), switch to examine panel.
var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off
@@ -238,7 +238,7 @@
SScharacter_setup.queue_preferences_save(prefs)
feedback_add_details("admin_verb","TAirPumpNoise")
/client/verb/toggle_old_door_sounds()
set name = "Toggle Old Door Sounds"
set category = "Preferences"
@@ -253,7 +253,7 @@
SScharacter_setup.queue_preferences_save(prefs)
feedback_add_details("admin_verb","TOldDoorSounds")
/client/verb/toggle_department_door_sounds()
set name = "Toggle Department Door Sounds"
set category = "Preferences"
@@ -378,6 +378,19 @@
feedback_add_details("admin_verb","TStatusIndicators")
/client/verb/toggle_radio_sounds()
set name = "Toggle Radio Sounds"
set category = "Preferences"
set desc = "Enable/Disable hearing a sound when somebody speaks over your headset."
var/pref_path = /datum/client_preference/radio_sounds
toggle_preference(pref_path)
SScharacter_setup.queue_preferences_save(prefs)
to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/radio_sounds)) ? "hear" : "not hear"] radio sounds.")
feedback_add_details("admin_verb","TRadioSounds")
// Not attached to a pref datum because those are strict binary toggles
/client/verb/toggle_examine_mode()
set name = "Toggle Examine Mode"
+5
View File
@@ -103,6 +103,11 @@
siemens_coefficient = 0.9
body_parts_covered = 0
/obj/item/clothing/head/panama
name = "panama hat"
icon_state = "panama"
desc = "Columbian Pure."
/obj/item/clothing/head/redcoat
name = "redcoat's hat"
icon_state = "redcoat"
@@ -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)
@@ -715,6 +715,19 @@
item_state_slots = list(slot_r_hand_str = "med_dep_jacket", slot_l_hand_str = "med_dep_jacket")
flags_inv = HIDEHOLSTER
/obj/item/clothing/suit/storage/toggle/light_jacket
name = "grey light jacket"
desc = "A light, cozy jacket. Now in grey."
icon_state = "grey_dep_jacket"
item_state_slots = list(slot_r_hand_str = "grey_dep_jacket", slot_l_hand_str = "grey_dep_jacket")
flags_inv = HIDEHOLSTER
/obj/item/clothing/suit/storage/toggle/light_jacket/blue
name = "dark blue light jacket"
desc = "A light, cozy jacket. Now in dark blue."
icon_state = "blue_dep_jacket"
item_state_slots = list(slot_r_hand_str = "blue_dep_jacket", slot_l_hand_str = "blue_dep_jacket")
/*
* Track Jackets
*/
@@ -813,6 +813,18 @@ Uniforms and such
desc = "It is a dark blue cheongsam dress."
icon_state = "cheongsam-darkblue"
/obj/item/clothing/under/qipao
name = "qipao"
desc = "A traditional Chinese women's garment, typically made from silk."
icon_state = "qipao"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/qipao2
name = "slim qipao"
desc = "A traditional Chinese women's garment, typically made from silk. This one is fairly slim."
icon_state = "qipao2"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/under/blazer
name = "blue blazer"
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
+7 -6
View File
@@ -60,6 +60,7 @@
emagged = 0 //Ignores if somebody doesn't have card access to that machine.
var/seconds_electrified = 0 //Shock customers like an airlock.
var/shoot_inventory = 0 //Fire items at customers! We're broken!
var/shoot_inventory_chance = 1
var/scan_id = 1
var/obj/item/weapon/coin/coin
@@ -662,7 +663,7 @@ GLOBAL_LIST_EMPTY(vending_products)
speak(slogan)
last_slogan = world.time
if(shoot_inventory && prob(2))
if(shoot_inventory && prob(shoot_inventory_chance))
throw_item()
return
@@ -702,20 +703,20 @@ GLOBAL_LIST_EMPTY(vending_products)
//Somebody cut an important wire and now we're following a new definition of "pitch."
/obj/machinery/vending/proc/throw_item()
var/obj/throw_item = null
var/obj/item/throw_item = null
var/mob/living/target = locate() in view(7,src)
if(!target)
return 0
for(var/datum/stored_item/vending_product/R in product_records)
for(var/datum/stored_item/vending_product/R in shuffle(product_records))
throw_item = R.get_product(loc)
if(!throw_item)
continue
break
if(!throw_item)
return 0
spawn(0)
throw_item.throw_at(target, 16, 3, src)
return FALSE
throw_item.vendor_action(src)
INVOKE_ASYNC(throw_item, /atom/movable.proc/throw_at, target, rand(3, 10), rand(1, 3), src)
visible_message("<span class='warning'>\The [src] launches \a [throw_item] at \the [target]!</span>")
return 1
+21 -36
View File
@@ -843,23 +843,18 @@
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/Initialize()
. = ..()
reagents.add_reagent("protein", 3)
reagents.add_reagent(toxin_type, toxin_amount)
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
desc = "A fillet of sivian fish meat."
filling_color = "#2c2cff"
color = "#2c2cff"
toxin_type = "neurotoxic_protein"
toxin_amount = 2
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
toxin_type = "murk_protein"
reagents.add_reagent("seafood", 3)
if(toxin_type && toxin_amount)
reagents.add_reagent(toxin_type, toxin_amount)
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
desc = "A fillet of fish meat."
toxin_type = "neurotoxic_protein"
toxin_amount = 1
toxin_type = null
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
desc = "A fillet of sivian fish meat."
filling_color = "#2c2cff"
color = "#2c2cff"
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
name = "Fish Fingers"
@@ -871,7 +866,7 @@
/obj/item/weapon/reagent_containers/food/snacks/fishfingers/Initialize()
. = ..()
reagents.add_reagent("protein", 4)
reagents.add_reagent("seafood", 4)
/obj/item/weapon/reagent_containers/food/snacks/zestfish
name = "Zesty Fish"
@@ -883,11 +878,11 @@
/obj/item/weapon/reagent_containers/food/snacks/zestfish/Initialize()
. = ..()
reagents.add_reagent("protein", 4)
reagents.add_reagent("seafood", 4)
/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
name = "huge mushroom slice"
desc = "A slice from a huge mushroom."
/obj/item/weapon/reagent_containers/food/snacks/mushroomslice
name = "mushroom slice"
desc = "A slice of mushroom."
icon_state = "hugemushroomslice"
filling_color = "#E0D7C5"
center_of_mass = list("x"=17, "y"=16)
@@ -895,7 +890,7 @@
nutriment_desc = list("raw" = 2, "mushroom" = 2)
bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/Initialize()
/obj/item/weapon/reagent_containers/food/snacks/mushroomslice/Initialize()
. = ..()
reagents.add_reagent("psilocybin", 3)
@@ -3601,19 +3596,6 @@
nutriment_amt = 3
nutriment_desc = list("bread" = 3)
// potato + knife = raw sticks
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W, mob/user)
if(seed && seed.kitchen_tag && seed.kitchen_tag == "potato" && istype(W,/obj/item/weapon/material/knife))
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
to_chat(user, "<span class='notice'>You cut the potato.</span>")
qdel(src)
else if(seed && seed.kitchen_tag && seed.kitchen_tag == "sunflower" && istype(W,/obj/item/weapon/material/knife))
new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
to_chat(user, "<span class='notice'>You remove the seeds from the flower, slightly damaging them.</span>")
qdel(src)
else
. = ..()
/obj/item/weapon/reagent_containers/food/snacks/rawsticks
name = "raw potato sticks"
desc = "Raw fries, not very tasty."
@@ -4002,7 +3984,8 @@
/obj/item/weapon/reagent_containers/food/snacks/wormsickly/Initialize()
. = ..()
reagents.add_reagent("fishbait", 10)
reagents.add_reagent("fishbait", 9)
reagents.add_reagent("protein", 3)
/obj/item/weapon/reagent_containers/food/snacks/worm
name = "strange worm"
@@ -4015,7 +3998,8 @@
/obj/item/weapon/reagent_containers/food/snacks/worm/Initialize()
. = ..()
reagents.add_reagent("fishbait", 20)
reagents.add_reagent("fishbait", 15)
reagents.add_reagent("protein", 5)
/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe
name = "deluxe worm"
@@ -4028,7 +4012,8 @@
/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe/Initialize()
. = ..()
reagents.add_reagent("fishbait", 40)
reagents.add_reagent("fishbait", 30)
reagents.add_reagent("protein", 10)
/obj/item/weapon/reagent_containers/food/snacks/siffruit
name = "pulsing fruit"
+2 -2
View File
@@ -339,7 +339,7 @@ I said no!
result = /obj/item/weapon/reagent_containers/food/snacks/caramelapple
/datum/recipe/twobread
reagents = list("wine" = 5)
reagents = list("redwine" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
@@ -790,7 +790,7 @@ I said no!
result = /obj/item/weapon/reagent_containers/food/snacks/chilicheesefries
/datum/recipe/risotto
reagents = list("wine" = 5, "rice" = 10, "spacespice" = 1)
reagents = list("redwine" = 5, "rice" = 10, "spacespice" = 1)
fruit = list("mushroom" = 1)
reagent_mix = RECIPE_REAGENT_REPLACE //Get that rice and wine outta here
result = /obj/item/weapon/reagent_containers/food/snacks/risotto
+26 -9
View File
@@ -191,13 +191,17 @@
pocell.charge = pocell.maxcharge
qdel(src)
return
else if(W.sharp)
if(W.sharp)
if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful.
user.show_message("<span class='notice'>You carve a face into [src]!</span>", 1)
new /obj/item/clothing/head/pumpkinhead (user.loc)
qdel(src)
return
else if(seed.chems)
if(seed.chems)
if(W.sharp && W.edge && !isnull(seed.chems["woodpulp"]))
user.show_message("<span class='notice'>You make planks out of \the [src]!</span>", 1)
playsound(src, 'sound/effects/woodcutting.ogg', 50, 1)
@@ -215,36 +219,49 @@
to_chat(user, "You add the newly-formed wood to the stack. It now contains [NG.amount] planks.")
qdel(src)
return
else if(!isnull(seed.chems["potato"]))
if(seed.kitchen_tag == "sunflower")
new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
to_chat(user, SPAN_NOTICE("You remove the seeds from the flower, slightly damaging them."))
qdel(src)
return
if(seed.kitchen_tag == "potato" || !isnull(seed.chems["potato"]))
to_chat(user, "You slice \the [src] into sticks.")
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
qdel(src)
return
else if(!isnull(seed.chems["carrotjuice"]))
if(!isnull(seed.chems["carrotjuice"]))
to_chat(user, "You slice \the [src] into sticks.")
new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src))
qdel(src)
return
else if(!isnull(seed.chems["pineapplejuice"]))
if(!isnull(seed.chems["pineapplejuice"]))
to_chat(user, "You slice \the [src] into rings.")
new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(get_turf(src))
qdel(src)
return
else if(!isnull(seed.chems["soymilk"]))
if(!isnull(seed.chems["soymilk"]))
to_chat(user, "You roughly chop up \the [src].")
new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src))
qdel(src)
return
else if(seed.get_trait(TRAIT_FLESH_COLOUR))
if(seed.get_trait(TRAIT_FLESH_COLOUR))
to_chat(user, "You slice up \the [src].")
var/slices = rand(3,5)
var/reagents_to_transfer = round(reagents.total_volume/slices)
for(var/i=1; i<=slices; i++)
var/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/F = new(get_turf(src),seed)
if(reagents_to_transfer) reagents.trans_to_obj(F,reagents_to_transfer)
if(reagents_to_transfer)
reagents.trans_to_obj(F,reagents_to_transfer)
qdel(src)
return
..()
. = ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
. = ..()
@@ -3,6 +3,3 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
plantname = "ambrosiadeus"
/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod
plantname = "sifbulb"
+39
View File
@@ -0,0 +1,39 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/sif
var/seeds = 0
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/Initialize(mapload, planttype) // Wild Sifplants have some seeds you can extract with a knife.
. = ..()
seeds = rand(1, 2)
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/examine(mob/user)
. = ..()
if(seeds)
to_chat(user, SPAN_NOTICE("You can see [seeds] seed\s in \the [src]. You might be able to extract them with a sharp object."))
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/attackby(var/obj/item/weapon/W, var/mob/living/user)
if(seed && W.sharp && seeds > 0)
var/take_seeds = min(seeds, rand(1,2))
seeds -= take_seeds
to_chat(user, SPAN_NOTICE("You stick \the [W] into \the [src] and lever out [take_seeds] seed\s."))
for(var/i = 1 to take_seeds)
new /obj/item/seeds(get_turf(src), seed.name)
return
. = ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod
plantname = "sifbulb"
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback
plantname = "wabback"
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback
plantname = "blackwabback"
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback
plantname = "wildwabback"
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs
plantname = "eyebulbs"
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs
plantname = "cavebulbs"
+3 -1
View File
@@ -13,7 +13,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
var/datum/seed/seed
var/modified = 0
/obj/item/seeds/Initialize()
/obj/item/seeds/Initialize(var/ml, var/_seed_type)
if(_seed_type in plant_controller.seeds)
seed_type = _seed_type
update_seed()
. = ..()
+40 -35
View File
@@ -43,41 +43,46 @@
..()
wires = new(src)
if(!contraband_seeds.len)
contraband_seeds = pick(list(
list(
/obj/item/seeds/ambrosiavulgarisseed = 3,
/obj/item/seeds/greengrapeseed = 3,
/obj/item/seeds/reishimycelium = 2,
/obj/item/seeds/bloodtomatoseed = 1
),
list(
/obj/item/seeds/ambrosiavulgarisseed = 3,
/obj/item/seeds/plastiseed = 3,
/obj/item/seeds/kudzuseed = 2,
/obj/item/seeds/rose/blood = 1
),
list(
/obj/item/seeds/ambrosiavulgarisseed = 3,
/obj/item/seeds/amanitamycelium = 3,
/obj/item/seeds/libertymycelium = 2,
/obj/item/seeds/glowshroom = 1
),
list(
/obj/item/seeds/ambrosiavulgarisseed = 3,
/obj/item/seeds/glowberryseed = 3,
/obj/item/seeds/icepepperseed = 2,
/obj/item/seeds/bluetomatoseed = 1
),
list(
/obj/item/seeds/durian = 2,
/obj/item/seeds/ambrosiadeusseed = 1,
/obj/item/seeds/killertomatoseed = 1
),
list(
/obj/item/seeds/ambrosiavulgarisseed = 3,
/obj/item/seeds/random = 6
)
))
contraband_seeds = pick( /// Some form of ambrosia in all lists.
prob(30);list( /// General produce
/obj/item/seeds/ambrosiavulgarisseed = 3,
/obj/item/seeds/greengrapeseed = 3,
/obj/item/seeds/icepepperseed = 2,
/obj/item/seeds/kudzuseed = 1
),
prob(30);list( ///Mushroom batch
/obj/item/seeds/ambrosiavulgarisseed = 1,
/obj/item/seeds/glowberryseed = 2,
/obj/item/seeds/libertymycelium = 1,
/obj/item/seeds/reishimycelium = 2,
/obj/item/seeds/sporemycelium = 1
),
prob(15);list( /// Survivalist
/obj/item/seeds/ambrosiadeusseed = 2,
/obj/item/seeds/redtowermycelium = 2,
/obj/item/seeds/vale = 2,
/obj/item/seeds/siflettuce = 2
),
prob(20);list( /// Cold plants
/obj/item/seeds/ambrosiavulgarisseed = 2,
/obj/item/seeds/thaadra = 2,
/obj/item/seeds/icepepperseed = 2,
/obj/item/seeds/siflettuce = 1
),
prob(10);list( ///Poison party
/obj/item/seeds/ambrosiavulgarisseed = 3,
/obj/item/seeds/surik = 1,
/obj/item/seeds/telriis = 1,
/obj/item/seeds/nettleseed = 2,
/obj/item/seeds/poisonberryseed = 1
),
prob(5);list( /// Extra poison party!
/obj/item/seeds/ambrosiainfernusseed = 1,
/obj/item/seeds/amauri = 1,
/obj/item/seeds/surik = 1,
/obj/item/seeds/deathberryseed = 1 /// Very ow.
)
)
return
/obj/machinery/seed_storage/process()
+1 -1
View File
@@ -43,7 +43,7 @@
/datum/seed/apple/sif
name = "sifbulb"
seed_name = "sivian tree"
seed_name = "sivian pod"
display_name = "sivian pod"
kitchen_tag = "apple"
chems = list("nutriment" = list(1,5),"sifsap" = list(10,20))
@@ -22,6 +22,16 @@
/obj/machinery/portable_atmospherics/hydroponics/soil/CanPass()
return 1
/obj/machinery/portable_atmospherics/hydroponics/soil/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/weapon/shovel) && user.a_intent == I_HURT)
user.visible_message(SPAN_NOTICE("\The [user] begins filling in \the [src]."))
if(do_after(user, 3 SECONDS) && !QDELETED(src))
user.visible_message(SPAN_NOTICE("\The [user] fills in \the [src]."))
qdel(src)
return
. = ..()
// Holder for vine plants.
// Icons for plants are generated as overlays, so setting it to invisible wouldn't work.
// Hence using a blank icon.
@@ -112,6 +112,12 @@
/datum/lore/codex/page/about_news,
)
var/newsindex
/datum/lore/codex/category/main_news/New()
..()
newsindex = LAZYLEN(children)
/datum/lore/codex/page/about_news
name = "About the Publisher"
data = "The <i>Daedalus Pocket Newscaster</i> is produced and maintained by Occulum Broadcast, the foremost authority on media distribution \
@@ -42,7 +42,9 @@
new /datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"),
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"),
new /datum/stack_recipe("shovel", /obj/item/weapon/shovel/wood, 2, time = 10, on_floor = TRUE, supplied_material = "[name]")
)
/datum/material/wood/sif
@@ -20,7 +20,7 @@
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
user.visible_message("<span class='notice'>\The [user] starts cutting hair off \the [src]</span>", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
var/scraped = 0
while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide
while(amount > 0 && do_after(user, 2.5 SECONDS, user))
//Try locating an exisitng stack on the tile and add to there if possible
var/obj/item/stack/hairlesshide/H = null
for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf
+20
View File
@@ -128,6 +128,26 @@
edge = 1
var/digspeed = 40
/obj/item/weapon/shovel/wood
icon_state = "whiteshovel"
item_state = "whiteshovel"
var/datum/material/material
/obj/item/weapon/shovel/wood/Initialize(var/ml, var/_mat)
. = ..()
material = get_material_by_name(_mat)
if(!istype(material))
material = null
else
name = "[material.display_name] shovel"
matter = list("[material.name]" = 50)
update_icon()
/obj/item/weapon/shovel/wood/update_icon()
. = ..()
color = material ? material.icon_colour : initial(color)
alpha = min(max(255 * material.opacity, 80), 255)
/obj/item/weapon/shovel/spade
name = "spade"
desc = "A small tool for digging and moving dirt."
+21 -7
View File
@@ -6,24 +6,25 @@ var/list/mining_overlay_cache = list()
icon = 'icons/turf/walls.dmi'
icon_state = "rock-dark"
density = 1
/turf/simulated/mineral //wall piece
name = "rock"
icon = 'icons/turf/walls.dmi'
icon_state = "rock"
var/rock_side_icon_state = "rock_side"
var/sand_icon_state = "asteroid"
var/rock_icon_state = "rock"
var/random_icon = 0
oxygen = 0
nitrogen = 0
opacity = 1
density = 1
blocks_air = 1
temperature = T0C
can_dirty = FALSE
var/floor_name = "sand"
var/rock_side_icon_state = "rock_side"
var/sand_icon_state = "asteroid"
var/rock_icon_state = "rock"
var/random_icon = 0
var/ore/mineral
var/sand_dug
var/mined_ore = 0
@@ -65,6 +66,10 @@ var/list/mining_overlay_cache = list()
has_resources = 1
/turf/simulated/mineral/ChangeTurf(turf/N, tell_universe, force_lighting_update, preserve_outdoors)
clear_ore_effects()
. = ..()
// Alternative rock wall sprites.
/turf/simulated/mineral/light
icon_state = "rock-light"
@@ -109,6 +114,14 @@ var/list/mining_overlay_cache = list()
blocks_air = 0
can_build_into_floor = TRUE
/turf/simulated/mineral/floor/mud
icon_state = "mud"
sand_icon_state = "mud"
/turf/simulated/mineral/floor/dirt
icon_state = "dirt"
sand_icon_state = "dirt"
//Alternative sand floor sprite.
/turf/simulated/mineral/floor/light
icon_state = "sand-light"
@@ -140,6 +153,7 @@ var/list/mining_overlay_cache = list()
opacity = 0
blocks_air = 0
can_build_into_floor = TRUE
clear_ore_effects()
update_general()
/turf/simulated/mineral/proc/make_wall()
@@ -223,7 +237,7 @@ var/list/mining_overlay_cache = list()
//We are a sand floor
else
name = "sand"
name = floor_name
icon = 'icons/turf/flooring/asteroid.dmi'
icon_state = sand_icon_state
+1 -1
View File
@@ -75,7 +75,7 @@ var/list/slot_equipment_priority = list( \
/mob/proc/equip_voidsuit_to_slot_or_del_with_refit(obj/item/clothing/suit/space/void/W as obj, slot, species = SPECIES_HUMAN)
W.refit_for_species(species)
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
/mob/proc/equip_voidhelm_to_slot_or_del_with_refit(obj/item/clothing/head/helmet/space/void/W as obj, slot, species = SPECIES_HUMAN)
W.refit_for_species(species)
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
+5 -5
View File
@@ -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
@@ -249,13 +249,13 @@
cold_discomfort_level = 215
has_organ = list( //No appendix.
O_HEART = /obj/item/organ/internal/heart,
O_HEART = /obj/item/organ/internal/heart/tajaran,
O_LUNGS = /obj/item/organ/internal/lungs,
O_VOICE = /obj/item/organ/internal/voicebox,
O_LIVER = /obj/item/organ/internal/liver,
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_BRAIN = /obj/item/organ/internal/brain,
O_EYES = /obj/item/organ/internal/eyes,
O_EYES = /obj/item/organ/internal/eyes/tajaran,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
+2 -2
View File
@@ -301,7 +301,7 @@
if(istype(H.w_uniform, /obj/item/clothing/under))
suit = H.w_uniform
var/list/slots = list()
for(var/entry in H.species.hud.gear)
var/list/slot_ref = H.species.hud.gear[entry]
@@ -316,7 +316,7 @@
)))
data["slots"] = slots
var/list/specialSlots = list()
if(H.species.hud.has_hands)
specialSlots.Add(list(list(
@@ -129,7 +129,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/javelin)
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
/datum/category_item/catalogue/fauna/icebass
name = "Sivian Fauna - Glitter Bass"
@@ -156,7 +156,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/icebass)
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
var/max_red = 150
var/min_red = 50
@@ -245,7 +245,7 @@
var/image/head_image
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
/mob/living/simple_mob/animal/passive/fish/rockfish/Initialize()
. = ..()
@@ -292,7 +292,7 @@
has_eye_glow = TRUE
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
/datum/category_item/catalogue/fauna/murkin
name = "Sivian Fauna - Murkfish"
@@ -319,4 +319,4 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/murkin)
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
@@ -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
+10 -2
View File
@@ -72,12 +72,20 @@
output += "<p>[href(src, list("give_feedback" = 1), "Give Feedback")]</p>"
if(GLOB.news_data.station_newspaper)
output += "<a href='byond://?src=\ref[src];open_station_news=1'>Show [using_map.station_name] News</A>"
if(client.prefs.lastlorenews == GLOB.news_data.newsindex)
output += "<p><a href='byond://?src=\ref[src];open_station_news=1'>Show [using_map.station_name] News</A></p>"
else
output += "<p><b><a href='byond://?src=\ref[src];open_station_news=1'>Show [using_map.station_name] News (NEW!)</A></b></p>"
output += "</div>"
if(GLOB.news_data.station_newspaper && !client.seen_news)
if (client.prefs.lastlorenews == GLOB.news_data.newsindex)
client.seen_news = 1
if(GLOB.news_data.station_newspaper && !client.seen_news && client.is_preference_enabled(/datum/client_preference/show_lore_news))
show_latest_news(GLOB.news_data.station_newspaper)
client.prefs.lastlorenews = GLOB.news_data.newsindex
SScharacter_setup.queue_preferences_save(client.prefs)
panel = new(src, "Welcome","Welcome", 500, 480, src)
panel.set_window_options("can_close=0")
+152 -103
View File
@@ -1679,159 +1679,223 @@ shaved
///////////////////////////////////
*/
/datum/sprite_accessory/hair/una_spines_long
//Unathi Head-Bits
/datum/sprite_accessory/hair/una
name = "Long Unathi Spines"
icon_state = "soghun_longspines"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/hair/una_spines_short
/datum/sprite_accessory/hair/una/spines_short
name = "Short Unathi Spines"
icon_state = "soghun_shortspines"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/hair/una_frills_long
/datum/sprite_accessory/hair/una/frills_long
name = "Long Unathi Frills"
icon_state = "soghun_longfrills"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/hair/una_frills_short
/datum/sprite_accessory/hair/una/frills_short
name = "Short Unathi Frills"
icon_state = "soghun_shortfrills"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/hair/una_horns
/datum/sprite_accessory/hair/una/horns
name = "Unathi Horns"
icon_state = "soghun_horns"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/hair/una_bighorns
/datum/sprite_accessory/hair/una/bighorns
name = "Unathi Big Horns"
icon_state = "unathi_bighorn"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/hair/una_smallhorns
/datum/sprite_accessory/hair/una/smallhorns
name = "Unathi Small Horns"
icon_state = "unathi_smallhorn"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/hair/una_ramhorns
/datum/sprite_accessory/hair/una/ramhorns
name = "Unathi Ram Horns"
icon_state = "unathi_ramhorn"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/hair/una_sidefrills
/datum/sprite_accessory/hair/una/sidefrills
name = "Unathi Side Frills"
icon_state = "unathi_sidefrills"
species_allowed = list(SPECIES_UNATHI)
//Skrell 'hairstyles'
/datum/sprite_accessory/hair/skr_tentacle_veryshort
name = "Skrell Short Tentacles"
icon_state = "skrell_hair_short"
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
gender = MALE
/datum/sprite_accessory/hair/skr_tentacle_short
/datum/sprite_accessory/hair/skr
name = "Skrell Average Tentacles"
icon_state = "skrell_hair_average"
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/hair/skr_tentacle_average
/datum/sprite_accessory/hair/skr/tentacle_veryshort
name = "Skrell Short Tentacles"
icon_state = "skrell_hair_short"
gender = MALE
/datum/sprite_accessory/hair/skr/tentacle_average
name = "Skrell Long Tentacles"
icon_state = "skrell_hair_long"
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/hair/skr_tentacle_verylong
/datum/sprite_accessory/hair/skr/tentacle_verylong
name = "Skrell Very Long Tentacles"
icon_state = "skrell_hair_verylong"
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
//Tajaran hairstyles
/datum/sprite_accessory/hair/taj_ears
/datum/sprite_accessory/hair/taj
name = "Tajaran Ears"
icon_state = "ears_plain"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_clean
name = "Tajaran Clean"
icon_state = "hair_clean"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_bangs
/datum/sprite_accessory/hair/taj/bangs
name = "Tajaran Bangs"
icon_state = "hair_bangs"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj/bangs_alt
name = "Tajaran Bangs (Alt)"
icon_state = "hair_bangs_alt"
/datum/sprite_accessory/hair/taj_ears_braid
/datum/sprite_accessory/hair/taj/short_fringe
name = "Tajaran Short Fringe"
icon_state = "hair_shortfringe"
/datum/sprite_accessory/hair/taj/braid
name = "Tajaran Braid"
icon_state = "hair_tbraid"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_shaggy
/datum/sprite_accessory/hair/taj/clean
name = "Tajaran Clean"
icon_state = "hair_clean"
/datum/sprite_accessory/hair/taj/gman
name = "Tajaran G-Man"
icon_state = "hair_gman"
/datum/sprite_accessory/hair/taj/greaser
name = "Tajaran Greaser"
icon_state = "hair_greaser"
/datum/sprite_accessory/hair/taj/bun
name = "Tajaran Bun"
icon_state = "hair_tajbun"
/datum/sprite_accessory/hair/taj/bunsmall
name = "Tajaran Bun (Small)"
icon_state = "hair_tajsmallbun"
/datum/sprite_accessory/hair/taj/bunlow
name = "Tajaran Bun (Low)"
icon_state = "hair_tajbunlow"
/datum/sprite_accessory/hair/taj/bunlowsmall
name = "Tajaran Bun (Low, Small)"
icon_state = "hair_tajbunlowsmall"
/datum/sprite_accessory/hair/taj/_wedge
name = "Tajaran Wedge"
icon_state = "hair_wedge"
/datum/sprite_accessory/hair/taj/shaggy
name = "Tajaran Shaggy"
icon_state = "hair_shaggy"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_mohawk
/datum/sprite_accessory/hair/taj/mohawk
name = "Tajaran Mohawk"
icon_state = "hair_mohawk"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_plait
/datum/sprite_accessory/hair/taj/plait
name = "Tajaran Plait"
icon_state = "hair_plait"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_straight
/datum/sprite_accessory/hair/taj/_sidepony
name = "Tajaran Side Ponytail"
icon_state = "hair_sidepony"
/datum/sprite_accessory/hair/taj/straight
name = "Tajaran Straight"
icon_state = "hair_straight"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_long
/datum/sprite_accessory/hair/taj/long
name = "Tajaran Long"
icon_state = "hair_long"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_rattail
/datum/sprite_accessory/hair/taj/tresses
name = "Tajaran Tresses"
icon_state = "hair_tresses"
/datum/sprite_accessory/hair/taj/shoulderparted
name = "Tajaran Shoulder Parted"
icon_state = "hair_shoulderparted"
/datum/sprite_accessory/hair/taj/shoulderpartedsmall
name = "Tajaran Shoulder Parted (Small)"
icon_state = "hair_shoulderpartedsmall"
/datum/sprite_accessory/hair/taj/shoulderpartedlong
name = "Tajaran Shoulder Parted (Long)"
icon_state = "hair_shoulderpartedlong"
/datum/sprite_accessory/hair/taj/sidepartedleft
name = "Tajaran Side Parted (Left)"
icon_state = "hair_sidepartedleft"
/datum/sprite_accessory/hair/taj/sidepartedright
name = "Tajaran Side Parted (Right)"
icon_state = "hair_sidepartedright"
/datum/sprite_accessory/hair/taj/shoulderlength
name = "Tajaran Shoulder Length"
icon_state = "hair_shoulderlength"
/datum/sprite_accessory/hair/taj/shoulderlengthalt
name = "Tajaran Shoulder Length (Alt)"
icon_state = "hair_shoulderlengthalt"
/datum/sprite_accessory/hair/taj/cascading
name = "Tajaran Cascading"
icon_state = "hair_cascading"
/datum/sprite_accessory/hair/taj/cascadingalt
name = "Tajaran Cascading (Alt)"
icon_state = "hair_cascadingalt"
/datum/sprite_accessory/hair/taj/rattail
name = "Tajaran Rat Tail"
icon_state = "hair_rattail"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_spiky
/datum/sprite_accessory/hair/taj/spiky
name = "Tajaran Spiky"
icon_state = "hair_tajspiky"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_messy
/datum/sprite_accessory/hair/taj/fringeup
name = "Tajaran Fringe Spike"
icon_state = "hair_fringeup"
/datum/sprite_accessory/hair/taj/messy
name = "Tajaran Messy"
icon_state = "hair_messy"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_curls
/datum/sprite_accessory/hair/taj/curls
name = "Tajaran Curly"
icon_state = "hair_curly"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_wife
/datum/sprite_accessory/hair/taj/curlsalt
name = "Tajaran Curly, alt"
icon_state = "hair_curlyalt"
/datum/sprite_accessory/hair/taj/mane
name = "Tajaran Mane"
icon_state = "hair_mane"
/datum/sprite_accessory/hair/taj/wife
name = "Tajaran Housewife"
icon_state = "hair_wife"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_victory
/datum/sprite_accessory/hair/taj/victory
name = "Tajaran Victory Curls"
icon_state = "hair_victory"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_bob
/datum/sprite_accessory/hair/taj/bob
name = "Tajaran Bob"
icon_state = "hair_tbob"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/hair/taj_ears_fingercurl
/datum/sprite_accessory/hair/taj/fingercurl
name = "Tajaran Finger Curls"
icon_state = "hair_fingerwave"
species_allowed = list(SPECIES_TAJ)
//Teshari things
/datum/sprite_accessory/hair/teshari
@@ -1891,8 +1955,6 @@ shaved
name = "Teshari Mushroom"
icon_state = "teshari_mushroom"
//Tesh things ported from Ark Station
/datum/sprite_accessory/hair/teshari/twies
name = "Teshari Twies"
icon_state = "teshari_twies"
@@ -1914,102 +1976,89 @@ shaved
icon_state = "teshari_fluffymohawk"
// Vox things
/datum/sprite_accessory/hair/vox_braid_long
/datum/sprite_accessory/hair/vox
name = "Long Vox braid"
icon_state = "vox_longbraid"
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/hair/vox_braid_short
/datum/sprite_accessory/hair/vox/braid_short
name = "Short Vox Braid"
icon_state = "vox_shortbraid"
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/hair/vox_quills_short
/datum/sprite_accessory/hair/vox/quills_short
name = "Short Vox Quills"
icon_state = "vox_shortquills"
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/hair/vox_quills_kingly
/datum/sprite_accessory/hair/vox/quills_kingly
name = "Kingly Vox Quills"
icon_state = "vox_kingly"
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/hair/vox_quills_mohawk
/datum/sprite_accessory/hair/vox/quills_mohawk
name = "Quill Mohawk"
icon_state = "vox_mohawk"
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/facial_hair/taj_sideburns
//Tajaran Facial Hair
/datum/sprite_accessory/facial_hair/taj
name = "Tajaran Sideburns"
icon_state = "facial_sideburns"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/facial_hair/taj_mutton
/datum/sprite_accessory/facial_hair/taj/mutton
name = "Tajaran Mutton"
icon_state = "facial_mutton"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/facial_hair/taj_pencilstache
/datum/sprite_accessory/facial_hair/taj/pencilstache
name = "Tajaran Pencilstache"
icon_state = "facial_pencilstache"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/facial_hair/taj_moustache
/datum/sprite_accessory/facial_hair/taj/moustache
name = "Tajaran Moustache"
icon_state = "facial_moustache"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/facial_hair/taj_goatee
/datum/sprite_accessory/facial_hair/taj/goatee
name = "Tajaran Goatee"
icon_state = "facial_goatee"
species_allowed = list(SPECIES_TAJ)
/datum/sprite_accessory/facial_hair/taj_smallstache
/datum/sprite_accessory/facial_hair/taj/smallstache
name = "Tajaran Smallsatche"
icon_state = "facial_smallstache"
species_allowed = list(SPECIES_TAJ)
//unathi horn beards and the like
/datum/sprite_accessory/facial_hair/una_chinhorn
/datum/sprite_accessory/facial_hair/una
name = "Unathi Chin Horn"
icon_state = "facial_chinhorns"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/facial_hair/una_hornadorns
/datum/sprite_accessory/facial_hair/una/hornadorns
name = "Unathi Horn Adorns"
icon_state = "facial_hornadorns"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/facial_hair/una_spinespikes
/datum/sprite_accessory/facial_hair/una/spinespikes
name = "Unathi Spine Spikes"
icon_state = "facial_spikes"
species_allowed = list(SPECIES_UNATHI)
/datum/sprite_accessory/facial_hair/una_dorsalfrill
/datum/sprite_accessory/facial_hair/una/dorsalfrill
name = "Unathi Dorsal Frill"
icon_state = "facial_dorsalfrill"
species_allowed = list(SPECIES_UNATHI)
//Teshari things
/datum/sprite_accessory/facial_hair/teshari_beard
//Teshari face things
/datum/sprite_accessory/facial_hair/teshari
name = "Teshari Beard"
icon_state = "teshari_chin"
species_allowed = list(SPECIES_TESHARI)
gender = NEUTER
/datum/sprite_accessory/facial_hair/teshari_scraggly
/datum/sprite_accessory/facial_hair/teshari/scraggly
name = "Teshari Scraggly"
icon_state = "teshari_scraggly"
species_allowed = list(SPECIES_TESHARI)
gender = NEUTER
/datum/sprite_accessory/facial_hair/teshari_chops
/datum/sprite_accessory/facial_hair/teshari/chops
name = "Teshari Chops"
icon_state = "teshari_gap"
species_allowed = list(SPECIES_TESHARI)
gender = NEUTER
/*
////////////////////////////
@@ -344,13 +344,43 @@
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/elfs2
name = "pointed ears"
desc = ""
icon_state = "ears_pointy"
do_colouration = 1
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/elfs
name = "elven ears"
name = "pointed ears (tall)"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/elfs3
name = "pointed ears (down)"
desc = ""
icon_state = "ears_pointy_down"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/elfs4
name = "pointed ears (long)"
desc = ""
icon_state = "ears_pointy_long"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/elfs5
name = "pointed ears (long, down)"
desc = ""
icon_state = "ears_pointy_long_down"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/sleek
+5
View File
@@ -7,6 +7,7 @@ GLOBAL_DATUM_INIT(news_data, /datum/lore/news, new)
/datum/lore/news
var/datum/feed_channel/station_newspaper
var/datum/lore/codex/category/main_news/news_codex = new()
var/newsindex
/datum/lore/news/New()
..()
@@ -17,6 +18,10 @@ GLOBAL_DATUM_INIT(news_data, /datum/lore/news, new)
break
spawn(300) // Yes, again.
fill_codex_news()
if (!news_codex.newsindex)
return
else
newsindex = news_codex.newsindex
/datum/lore/news/proc/fill_codex_news()
if(!news_network)
+7
View File
@@ -0,0 +1,7 @@
/obj/item/organ/internal/eyes/tajaran
icon_state = "tajaran_eyes"
/obj/item/organ/internal/heart/tajaran
icon_state = "tajaran_heart-on"
dead_icon = "tajaran_heart-off"
+42 -12
View File
@@ -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
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)
@@ -1,7 +1,8 @@
// For all intents and purposes, these work exactly the same as pump shotguns. It's unnecessary to make their own procs for them.
////////Base Rifle////////
/obj/item/weapon/gun/projectile/shotgun/pump/rifle
name = "bolt action rifle"
name = "bolt-action rifle"
desc = "The Hedberg-Hammarstrom Volsung is a modern interpretation of an almost ancient weapon design. The model is popular among hunters and collectors due to its reliability. Uses 7.62mm rounds."
description_fluff = "Sifs largest home-grown firearms manufacturer, the Hedberg-Hammarstrom company offers a range of high-quality, high-cost hunting rifles and shotguns designed with the Sivian wilderness - and its wildlife - in mind. \
The company operates just one production plant in Kalmar, but their weapons have found popularity on garden worlds as far afield as the Tajaran homeworld due to their excellent build quality, precision, and stopping power."
@@ -14,20 +15,25 @@
ammo_type = /obj/item/ammo_casing/a762
load_method = SINGLE_CASING|SPEEDLOADER
action_sound = 'sound/weapons/riflebolt.ogg'
pump_animation = null
pump_animation = "boltaction-cycling"
////////Practice Rifle////////
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice // For target practice
name = "practice bolt-action rifle"
icon_state = "boltaction_practice"
desc = "A bolt-action rifle with a lightweight synthetic wood stock, designed for competitive shooting. Comes shipped with practice rounds pre-loaded into the gun. Popular among professional marksmen. Uses 7.62mm rounds."
ammo_type = /obj/item/ammo_casing/a762/practice
pump_animation = "boltaction_practice-cycling"
////////Ceremonial Rifle////////
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial
name = "ceremonial bolt-action rifle"
desc = "A bolt-action rifle with a heavy, high-quality wood stock that has a beautiful finish. Clearly not intended to be used in combat. Uses 7.62mm rounds."
icon_state = "boltaction_c"
item_state = "boltaction_c"
icon_state = "ceremonial_rifle"
ammo_type = /obj/item/ammo_casing/a762/blank
pump_animation = "ceremonial_rifle-cycling"
// Stole hacky terrible code from doublebarrel shotgun. -Spades
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial/attackby(var/obj/item/A as obj, mob/user as mob)
if(istype(A, /obj/item/weapon/surgical/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != ITEMSIZE_NORMAL)
to_chat(user, "<span class='notice'>You begin to shorten the barrel and stock of \the [src].</span>")
@@ -37,7 +43,7 @@
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='danger'>The rifle goes off in your face!</span>")
return
if(do_after(user, 30))
icon_state = "sawnrifle"
icon_state = "sawn_rifle"
w_class = ITEMSIZE_NORMAL
recoil = 2 // Owch
accuracy = -15 // You know damn well why.
@@ -46,11 +52,14 @@
slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not.
name = "sawn-off rifle"
desc = "The firepower of a rifle, now the size of a pistol, with an effective combat range of about three feet. Uses 7.62mm rounds."
pump_animation = "sawn_rifle-cycling"
to_chat(user, "<span class='warning'>You shorten the barrel and stock of \the [src]!</span>")
else
..()
//Lever actions are the same thing, but bigger.
////////Standard Lever Action Rifle////////
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever
name = "lever-action rifle"
desc = "The Hedberg-Hammarstrom Edda is the latest version of an almost ancient weapon design from the 19th century, popular with some due to its simplistic design. This one uses a lever-action to move new rounds into the chamber. Uses 7.62mm rounds."
@@ -61,10 +70,12 @@
max_shells = 5
caliber = "7.62mm"
load_method = SINGLE_CASING
pump_animation = "leveraction-cycling"
////////Vintage Lever Action Rifle////////
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/vintage
name = "vintage repeater"
desc = "An iconic manually operated lever action rifle, offering adequate stopping power due to it's still powerful cartridge while at the same time having a rather respectable firing rate due to it's mechanism. It is very probable this is a replica instead of a museum piece, but rifles of this pattern still see usage as colonist guns in some far off regions. Uses 7.62mm rounds."
item_state = "levercarabine" // That isn't how carbine is spelled ya knob! :U
icon_state = "levercarabine"
pump_animation = "levercarabine-cycling"
item_state = "levercarbine"
icon_state = "levercarbine"
pump_animation = "levercarbine-cycling"
@@ -24,6 +24,8 @@
icon_state = "[initial(icon_state)]-e"
//Bastard child of a revolver and a semi-auto rifle.
//Standard Revolving Rifle
/obj/item/weapon/gun/projectile/revolvingrifle
name = "revolving rifle"
desc = "The Gungnir is a novel, antique idea brought into the modern era by Hedberg-Hammarstrom. The semi-automatic revolving mechanism offers no real advantage, but some colonists swear by it. Uses .44 magnum revolver rounds."
@@ -31,7 +33,7 @@
The company operates just one production plant in Kalmar, but their weapons have found popularity on garden worlds as far afield as the Tajaran homeworld due to their excellent build quality, \
precision, and stopping power."
icon_state = "revolvingrifle"
item_state = "boltaction"
item_state = "rifle"
w_class = ITEMSIZE_LARGE
caliber = ".44"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
@@ -41,8 +43,9 @@
max_shells = 6
ammo_type = /obj/item/ammo_casing/a44/rifle
/obj/item/weapon/gun/projectile/revolvingrifle/update_icon()
if(ammo_magazine)
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]-e"
//Vintage Revolving Rifle
/obj/item/weapon/gun/projectile/revolvingrifle/vintage
name = "vintage revolving rifle"
desc = "The Willhem is the Gungir's older cousin by Hedberg-Hammarstrom, the perfect collector piece. The semi-automatic revolving mechanism offers no real advantage, but some colonists swear by it. Uses .44 magnum revolver rounds."
icon_state = "vintagerevolvingrifle"
+14 -6
View File
@@ -24,6 +24,9 @@ var/global/list/map_count = list()
var/floor_type = /turf/simulated/floor
var/target_turf_type
var/skip_dense = FALSE
var/keep_outside = FALSE
// Storage for the final iteration of the map.
var/list/map = list() // Actual map.
@@ -61,11 +64,16 @@ var/global/list/map_count = list()
rand_seed(seed)
priority_process = 1
var/failed = FALSE
for(var/i = 0;i<max_attempts;i++)
if(generate())
if(!do_not_announce) admin_notice("<span class='danger'>[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>", R_DEBUG)
return
if(!do_not_announce) admin_notice("<span class='danger'>[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.</span>", R_DEBUG)
if(!generate())
failed = TRUE
if(!do_not_announce)
if(!failed)
admin_notice("<span class='danger'>[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>", R_DEBUG)
else
admin_notice("<span class='danger'>[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.</span>", R_DEBUG)
/datum/random_map/proc/get_map_cell(var/x,var/y)
if(!map)
@@ -162,11 +170,11 @@ var/global/list/map_count = list()
if(!current_cell)
return 0
var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z)
if(!T || (target_turf_type && !istype(T,target_turf_type)))
if(!T || (skip_dense && T.density) || (target_turf_type && !istype(T,target_turf_type)))
return 0
var/newpath = get_appropriate_path(map[current_cell])
if(newpath)
T.ChangeTurf(newpath)
T.ChangeTurf(newpath, preserve_outdoors = keep_outside)
get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y))
return T
@@ -399,7 +399,7 @@
name = "Singulo"
id = "singulo"
result = "singulo"
required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
required_reagents = list("vodka" = 5, "radium" = 1, "redwine" = 5)
result_amount = 10
/decl/chemical_reaction/instant/drinks/alliescocktail
@@ -505,14 +505,14 @@
name = "Acid Spit"
id = "acidspit"
result = "acidspit"
required_reagents = list("sacid" = 1, "wine" = 5)
required_reagents = list("sacid" = 1, "redwine" = 5)
result_amount = 6
/decl/chemical_reaction/instant/drinks/amasec
name = "Amasec"
id = "amasec"
result = "amasec"
required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
required_reagents = list("iron" = 1, "redwine" = 5, "vodka" = 5)
result_amount = 10
/decl/chemical_reaction/instant/drinks/changelingsting
@@ -661,7 +661,7 @@
name = "Melon Spritzer"
id = "melonspritzer"
result = "melonspritzer"
required_reagents = list("watermelonjuice" = 2, "wine" = 2, "applejuice" = 1, "limejuice" = 1)
required_reagents = list("watermelonjuice" = 2, "redwine" = 2, "applejuice" = 1, "limejuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/fauxfizz
@@ -915,7 +915,7 @@
name = "Wine brandy"
id = "winebrandy"
result = "winebrandy"
required_reagents = list("wine" = 10)
required_reagents = list("redwine" = 10)
catalysts = list("enzyme" = 10) //10u enzyme so it requires more than is usually added. Stops overlap with wine recipe
result_amount = 5
@@ -937,7 +937,7 @@
name = "Vesper"
id = "vesper"
result = "vesper"
required_reagents = list("gin" = 3, "vodka" = 1, "wine" = 1)
required_reagents = list("gin" = 3, "vodka" = 1, "redwine" = 1)
result_amount = 4
/decl/chemical_reaction/instant/drinks/rotgut
@@ -1105,14 +1105,12 @@
name = "Neutralize Carpotoxin"
id = "carpotoxin_neutral"
result = "protein"
required_reagents = list("radium" = 1, "carpotoxin" = 1, "sifsap" = 1)
catalysts = list("sifsap" = 10)
result_amount = 2
required_reagents = list("enzyme" = 1, "carpotoxin" = 1, "sifsap" = 1)
result_amount = 1
/decl/chemical_reaction/instant/neutralize_spidertoxin
name = "Neutralize Spidertoxin"
id = "spidertoxin_neutral"
result = "protein"
required_reagents = list("radium" = 1, "spidertoxin" = 1, "sifsap" = 1)
catalysts = list("sifsap" = 10)
result_amount = 2
required_reagents = list("enzyme" = 1, "spidertoxin" = 1, "sifsap" = 1)
result_amount = 1
@@ -155,6 +155,7 @@
"milk",
"mint",
"orangejuice",
"redwine",
"rum",
"sake",
"sodawater",
@@ -172,8 +173,7 @@
"vodka",
"water",
"watermelonjuice",
"whiskey",
"wine")
"whiskey")
/obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user)
return
@@ -297,13 +297,6 @@
color = "#FFFFAA"
allergen_type = ALLERGEN_EGGS //Eggs contain egg
/datum/reagent/nutriment/protein/murk
name = "murkfin protein"
id = "murk_protein"
taste_description = "mud"
color = "#664330"
allergen_type = ALLERGEN_FISH //Murkfin is fish
/datum/reagent/nutriment/honey
name = "Honey"
id = "honey"
+4 -3
View File
@@ -627,10 +627,11 @@
M.adjustToxLoss(2 * removed)
M.adjustCloneLoss(2 * removed)
/datum/reagent/fishbait
/datum/reagent/nutriment/fishbait
name = "Fish Bait"
id = "fishbait"
description = "A natural slurry that particularily appeals to fish."
taste_description = "earthy"
taste_description = "slimy dirt"
reagent_state = LIQUID
color = "#62764E"
color = "#62764E"
nutriment_factor = 15
+1 -1
View File
@@ -67,7 +67,7 @@
/datum/reagent/toxin/neurotoxic_protein
name = "toxic protein"
id = "neurotoxic_protein"
description = "A weak neurotoxic chemical commonly found in Sivian fish meat."
description = "A weak neurotoxic chemical."
taste_description = "fish"
reagent_state = LIQUID
color = "#005555"
+7
View File
@@ -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()
+2 -2
View File
@@ -202,8 +202,8 @@ research holder datum.
id = TECH_DATA
/datum/tech/syndicate
name = "Illegal Technologies Research"
desc = "The study of technologies that violate standard government regulations."
name = "Transgressive Technologies Research"
desc = "The study of technologies that sit on the very boundaries of legality and ethics."
id = TECH_ILLEGAL
level = 0
@@ -275,7 +275,7 @@
newsign.data["vmask"] = 0
newsign.data["level"] = list()
var/pass = S.relay_information(newsign, "/obj/machinery/telecomms/hub")
var/pass = S.relay_information(newsign, /obj/machinery/telecomms/hub)
if(!pass)
S.relay_information(newsign, "/obj/machinery/telecomms/broadcaster") // send this simple message to broadcasters
S.relay_information(newsign, /obj/machinery/telecomms/broadcaster) // send this simple message to broadcasters
+3 -5
View File
@@ -473,11 +473,9 @@
if(clean_name)
var/okay = alert(target,"New name will be '[clean_name]', ok?", "Confirmation","Cancel","Ok")
if(okay == "Ok")
new_name = clean_name
new_name = sanitizeName(new_name, allow_numbers = TRUE)
target.name = new_name
target.real_name = target.name
target.name = new_name
target.real_name = target.name
return
/datum/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
+34 -10
View File
@@ -60,14 +60,30 @@
return 1
/obj/structure/table/MouseDrop_T(obj/O as obj, mob/user as mob)
/obj/structure/table/MouseDrop_T(obj/O, mob/user, src_location, over_location, src_control, over_control, params)
if(ismob(O.loc)) //If placing an item
if(!isitem(O) || user.get_active_hand() != O)
return ..()
if(isrobot(user))
return
user.drop_item()
if(O.loc != src.loc)
step(O, get_dir(O, src))
if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O))
return ..()
if(isrobot(user))
return
user.unEquip(O, 0, src.loc)
return
else if(isturf(O.loc) && isitem(O)) //If pushing an item on the tabletop
var/obj/item/I = O
if(I.anchored)
return
if((isliving(user)) && (Adjacent(user)) && !(user.incapacitated()))
if(O.w_class <= user.can_pull_size)
O.forceMove(loc)
auto_align(I, params, TRUE)
else
to_chat(user, SPAN_WARNING("\The [I] is too big for you to move!"))
return
return ..()
/obj/structure/table/attackby(obj/item/W as obj, mob/user as mob, var/hit_modifier, var/click_parameters)
@@ -159,7 +175,7 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen
/obj/item/var/list/center_of_mass = list("x" = 16,"y" = 16)
/obj/structure/table/proc/auto_align(obj/item/W, click_parameters)
/obj/structure/table/proc/auto_align(obj/item/W, click_parameters, var/animate = FALSE)
if(!W.center_of_mass)
W.randpixel_xy()
return
@@ -176,8 +192,16 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen
var/cell_x = max(0, min(CELLS-1, round(mouse_x/CELLSIZE)))
var/cell_y = max(0, min(CELLS-1, round(mouse_y/CELLSIZE)))
W.pixel_x = (CELLSIZE * (0.5 + cell_x)) - W.center_of_mass["x"]
W.pixel_y = (CELLSIZE * (0.5 + cell_y)) - W.center_of_mass["y"]
var/target_x = (CELLSIZE * (cell_x + 0.5)) - W.center_of_mass["x"]
var/target_y = (CELLSIZE * (cell_y + 0.5)) - W.center_of_mass["y"]
if(animate)
var/dist_x = abs(W.pixel_x - target_x)
var/dist_y = abs(W.pixel_y - target_y)
var/dist = sqrt((dist_x*dist_x)+(dist_y*dist_y))
animate(W, pixel_x=target_x, pixel_y=target_y,time=dist*0.5)
else
W.pixel_x = target_x
W.pixel_y = target_y
#undef CELLS
#undef CELLSIZE