Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-02-24

# Conflicts:
#	maps/southern_cross/southern_cross-1.dmm
This commit is contained in:
Leshana
2018-02-24 13:19:10 -05:00
28 changed files with 311122 additions and 11355 deletions

View File

@@ -1084,4 +1084,47 @@
/obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5)
//everything after the power cell had no amounts, I improvised. -Sayu
req_log_access = access_rd
has_logs = 1
has_logs = 1
/obj/machinery/vending/giftvendor
name = "AlliCo Baubles and Confectionaries"
desc = "For that special someone!"
icon_state = "giftvendor"
vend_delay = 15
products = list(/obj/item/weapon/storage/fancy/heartbox = 5,
/obj/item/toy/bouquet = 5,
/obj/item/toy/bouquet/fake = 4,
/obj/item/weapon/paper/card/smile = 3,
/obj/item/weapon/paper/card/heart = 3,
/obj/item/weapon/paper/card/cat = 3,
/obj/item/weapon/paper/card/flower = 3,
/obj/item/clothing/accessory/bracelet/friendship = 5,
/obj/item/toy/plushie/therapy/red = 2,
/obj/item/toy/plushie/therapy/purple = 2,
/obj/item/toy/plushie/therapy/blue = 2,
/obj/item/toy/plushie/therapy/yellow = 2,
/obj/item/toy/plushie/therapy/orange = 2,
/obj/item/toy/plushie/therapy/green = 2)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne = 1
/* Handbuzzer to be added later */)
premium = list(/obj/item/toy/plushie/nymph = 2,
/obj/item/toy/plushie/mouse = 2,
/obj/item/toy/plushie/kitten = 2,
/obj/item/toy/plushie/lizard = 2,
/obj/item/toy/plushie/spider = 2,
/obj/item/toy/plushie/farwa = 2)
// /obj/item/weapon/storage/trinketbox = 2 (readding later due to conflict)
prices = list(/obj/item/weapon/storage/fancy/heartbox = 15,
/obj/item/toy/bouquet = 10,
/obj/item/toy/bouquet/fake = 3,
/obj/item/weapon/paper/card/smile = 1,
/obj/item/weapon/paper/card/heart = 1,
/obj/item/weapon/paper/card/cat = 1,
/obj/item/weapon/paper/card/flower = 1,
/obj/item/clothing/accessory/bracelet/friendship = 5,
/obj/item/toy/plushie/therapy/red = 20,
/obj/item/toy/plushie/therapy/purple = 20,
/obj/item/toy/plushie/therapy/blue = 20,
/obj/item/toy/plushie/therapy/yellow = 20,
/obj/item/toy/plushie/therapy/orange = 20,
/obj/item/toy/plushie/therapy/green = 20)

View File

@@ -103,7 +103,7 @@
build_delay = 50
build_type = "airlock"
build_other = /obj/machinery/door/airlock
else if(!deconstruct && (istype(T,/turf/space) || istype(T,get_base_turf_by_area(T))))
else if(!deconstruct && isturf(T) && (istype(T,/turf/space) || istype(T,get_base_turf_by_area(T))))
build_cost = 1
build_type = "floor"
build_turf = /turf/simulated/floor/airless

View File

@@ -60,6 +60,11 @@
/obj/item/clothing/mask/breath
)
/obj/item/weapon/storage/box/survival/synth
name = "synthetic supply box"
desc = "A survival box issued to synthetic crew members for use in emergency situations."
starts_with = list()
/obj/item/weapon/storage/box/survival/comp
name = "emergency supply box"
desc = "A comprehensive survival box issued to crew members for use in emergency situations. Contains additional supplies."

View File

@@ -307,6 +307,8 @@
/obj/item/weapon/storage/fancy/heartbox
icon_state = "heartbox"
name = "box of chocolates"
icon_type = "chocolate"
var/startswith = 6
max_storage_space = ITEMSIZE_COST_SMALL * 6
can_hold = list(

View File

@@ -670,3 +670,59 @@
can_hold[I.type]++
max_w_class = max(I.w_class, max_w_class)
max_storage_space += I.get_storage_cost()
/*
* Trinket Box - READDING SOON
*/
/*
/obj/item/weapon/storage/trinketbox
name = "trinket box"
desc = "A box that can hold small trinkets, such as a ring."
icon = 'icons/obj/items.dmi'
icon_state = "trinketbox"
var/open = 0
storage_slots = 1
can_hold = list(
/obj/item/clothing/gloves/ring,
/obj/item/weapon/coin,
/obj/item/clothing/accessory/medal
)
var/open_state
var/closed_state
/obj/item/weapon/storage/trinketbox/update_icon()
overlays.Cut()
if(open)
icon_state = open_state
if(contents.len >= 1)
var/contained_image = null
if(istype(contents[1], /obj/item/clothing/gloves/ring))
contained_image = "ring_trinket"
else if(istype(contents[1], /obj/item/weapon/coin))
contained_image = "coin_trinket"
else if(istype(contents[1], /obj/item/clothing/accessory/medal))
contained_image = "medal_trinket"
if(contained_image)
overlays += contained_image
else
icon_state = closed_state
/obj/item/weapon/storage/trinketbox/New()
if(!open_state)
open_state = "[initial(icon_state)]_open"
if(!closed_state)
closed_state = "[initial(icon_state)]"
..()
/obj/item/weapon/storage/trinketbox/attack_self()
open = !open
update_icon()
..()
/obj/item/weapon/storage/trinketbox/examine(mob/user)
..()
if(open && contents.len)
var/display_item = contents[1]
to_chat(user, "<span class='notice'>\The [src] contains \the [display_item]!</span>")
*/

View File

@@ -80,6 +80,11 @@ var/list/flooring_types
icon_base = "snowyplating"
flags = null
/decl/flooring/snow/ice
name = "ice"
desc = "Looks slippery."
icon_base = "ice"
/decl/flooring/snow/plating/drift
icon_base = "snowyplayingdrift"

View File

@@ -40,4 +40,17 @@
var/obj/S = new /obj/item/stack/material/snow(user.loc)
user.put_in_hands(S)
visible_message("[user] scoops up a pile of snow.", "You scoop up a pile of snow.")
return
return
/turf/simulated/floor/outdoors/ice
name = "ice"
icon_state = "ice"
desc = "Looks slippery."
/turf/simulated/floor/outdoors/ice/Entered(var/mob/living/M)
sleep(1 * world.tick_lag)
if(istype(M, /mob/living))
if(M.stunned == 0)
to_chat(M, "<span class='warning'>You slide across the ice!</span>")
M.SetStunned(2)
step(M,M.dir)

View File

@@ -117,6 +117,13 @@ var/list/_client_preferences_by_type
enabled_description = "Show"
disabled_description = "Hide"
/datum/client_preference/hotkeys_default
description ="Hotkeys Default"
key = "HUD_HOTKEYS"
enabled_description = "Enabled"
disabled_description = "Disabled"
enabled_by_default = FALSE // Backwards compatibility
/datum/client_preference/show_typing_indicator
description ="Typing indicator"
key = "SHOW_TYPING"

View File

@@ -15,19 +15,7 @@
/obj/item/clothing/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/clothing/accessory))
if(!valid_accessory_slots || !valid_accessory_slots.len)
usr << "<span class='warning'>You cannot attach accessories of any kind to \the [src].</span>"
return
var/obj/item/clothing/accessory/A = I
if(can_attach_accessory(A))
user.drop_item()
attach_accessory(user, A)
return
else
user << "<span class='warning'>You cannot attach more accessories of this type to [src].</span>"
return
attempt_attach_accessory(I, user)
if(accessories.len)
for(var/obj/item/clothing/accessory/A in accessories)
@@ -79,10 +67,19 @@
* user is the user doing the attaching. Can be null, such as when attaching
* items on spawn
*/
/obj/item/clothing/proc/update_accessory_slowdown()
slowdown = initial(slowdown)
for(var/obj/item/clothing/accessory/A in accessories)
slowdown += A.slowdown
/obj/item/clothing/proc/attempt_attach_accessory(mob/user, obj/item/clothing/accessory/A)
if(!valid_accessory_slots || !valid_accessory_slots.len)
to_chat(user, "<span class='warning'>You cannot attach accessories of any kind to \the [src].</span>")
return FALSE
var/obj/item/clothing/accessory/acc = A
if(can_attach_accessory(acc))
user.drop_item()
attach_accessory(user, acc)
return TRUE
else
to_chat(user, "<span class='warning'>You cannot attach more accessories of this type to [src].</span>")
return FALSE
/obj/item/clothing/proc/attach_accessory(mob/user, obj/item/clothing/accessory/A)
accessories += A
@@ -100,6 +97,11 @@
update_accessory_slowdown()
update_clothing_icon()
/obj/item/clothing/proc/update_accessory_slowdown()
slowdown = initial(slowdown)
for(var/obj/item/clothing/accessory/A in accessories)
slowdown += A.slowdown
/obj/item/clothing/proc/removetie_verb()
set name = "Remove Accessory"
set category = "Object"

View File

@@ -7,6 +7,8 @@
/datum/lore/codex/page/article1,
/datum/lore/codex/page/article2,
/datum/lore/codex/page/article3,
/datum/lore/codex/page/article4,
/datum/lore/codex/page/article5,
/datum/lore/codex/page/about_news,
)
@@ -55,3 +57,21 @@
Harper proceeded to unilaterally declare Vounna's independence from SolGov, claiming sovereignty over the system as the first Chairperson of the \"Aetolian Council\". Speaker of the Shadow Coalition ISA-5 has urged their government to treat the developing situation with caution but decried Harper's rhetoric, stating in a press release, \"While I know well the injustices visited on myself and my people by misguided forbearers, it is important to treat any emerging technology with respect. Current policies regarding the Prometheans are designed to limit risk during sociological trials on Aetolus and beyond. As for myself, I doubt the sincerity of this human who claims to speak for the Prometheans, when the Prometheans are perfectly equipped to speak for themselves.\"\
<br><br>\
NanoTrasen is expected to redouble their Promethean research programs in the Vir system until stability is restored to Vounna."
/datum/lore/codex/page/article4
name = "2/14/62-- SCG Denounces Aetolian Coup; Mobilizes Fleet"
data = "Dismissing claims of inaction, a spokesperson for the Solar Confederate Government today confirmed that the Colonial Assembly has voted overwhelmingly in favor of swift military action in response to the coup on Aetolus earlier this month. Icarus Front Chairperson Mackenzie West was quick to make a damning official statement: \"Dr. Harper and her radical agitators cannot be excused for their violent, despicable attempts to destabilize the flourishing economy of the Almach Rim. The ruthless murder of innocents, and illegal seizure of private property are crimes that cannot merely be met with strong words and gentle slaps to the wrist\"...\"I am proud to announce that two units of brave Solar marines have been assigned to the SCG-R Song Shi rapid response cruiser, with the full backing of the Icarus Front - and I hope with my heart, the backing of all patriotic Solar citizens.\"\
<br><br>\
The decision faced resistance from more laissez faire Assembly member states, including prominent SEO governor Bruno Ofako, delaying an earlier consensus. Supporters of the action hope that this decisive display of military strength will encourage the rebels to stand down without further bloodshed, and submit to prosecution by the Lunar High Courts.\
<br><br>\
The Icarus Front has also proposed a temporary ban on continued Promethean research, though this motion has yet to gain any traction."
/datum/lore/codex/page/article5
name = "2/23/62-- \"Almach Association\" Shocks Nation"
data = "Shocking the nation, in the wee hours UTC a number of governments in the Almach Rim announced their intent to secede from the Confederacy as a unified political organization they refer to as the Almach Association, joining the already-declared Aetolian Council. Among the half-dozen affected systems is Angessa's Pearl, through which the Song Shi was passing en route to Aetolus. The Association has already issued a political manifesto and a foundational charter, leading political scientists across the galaxy to suspect back-doors collusion and possible Shelfican interference, a hypothesis made more likely by Morpheus Cyberkinetics' exonet site voicing support for the Association. Others suspect a moment of political crystallization, not unlike that in the Golden Hour three centuries ago. These researchers are already referring to this morning's events as the Gray Hour.\
<br><br>\
The Association's official manifesto repudiates the Five Points, calling them \"an archaic and distinctly human invention\". Experts agree that this bold declaration puts the Movement more in line with the Golden Hour than with the Age of Secession, and many fear that nothing short of a miracle like the discovery of the positronics will spare humanity from a bloody civil war.\
<br><br>\
While the Association currently lists only a handful of Almach Rim systems as \"Constituent Organizations\", it has named Shelf, the Free Relan Federation, and the Eutopian Foreign Relations Board as \"observers\". The implications of this status are yet to be identified.\
<br><br>\
The fate of the SCG-R Song Shi and her crew remain unknown."

View File

@@ -15,6 +15,8 @@
mob_swap_flags = ~HEAVY
mob_push_flags = HEAVY
used_weapon = /obj/item/weapon/gun/energy/taser
var/shot_delay = 4
var/last_shot = 0
@@ -30,7 +32,7 @@
new /obj/item/weapon/secbot_assembly/ed209_assembly(Tsec)
var/obj/item/weapon/gun/energy/taser/G = new /obj/item/weapon/gun/energy/taser(Tsec)
var/obj/item/weapon/gun/energy/taser/G = new used_weapon(Tsec)
G.power_supply.charge = 0
if(prob(50))
new /obj/item/robot_parts/l_leg(Tsec)

View File

@@ -28,6 +28,8 @@
var/xeno_harm_strength = 15 // Ditto.
var/baton_glow = "#FF6A00"
var/used_weapon = /obj/item/weapon/melee/baton //Weapon used by the bot
var/list/threat_found_sounds = list('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg')
var/list/preparing_arrest_sounds = list('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/bcreep.ogg')
var/list/fighting_sounds = list('sound/voice/biamthelaw.ogg', 'sound/voice/bradio.ogg', 'sound/voice/bjustice.ogg')
@@ -56,6 +58,7 @@
baton_glow = "#33CCFF"
req_one_access = list(access_research, access_robotics)
botcard_access = list(access_research, access_robotics, access_xenobiology, access_xenoarch, access_tox, access_tox_storage, access_maint_tunnels)
used_weapon = /obj/item/weapon/melee/baton/slime
/mob/living/bot/secbot/slime/slimesky
name = "Doctor Slimesky"
@@ -298,7 +301,7 @@
Sa.overlays += image('icons/obj/aibots.dmi', "hs_hole")
Sa.created_name = name
new /obj/item/device/assembly/prox_sensor(Tsec)
new /obj/item/weapon/melee/baton(Tsec)
new used_weapon(Tsec)
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)

View File

@@ -32,7 +32,6 @@ This saves us from having to call add_fingerprint() any time something is put in
qdel(W)
return null
/mob/living/carbon/human/proc/has_organ(name)
var/obj/item/organ/external/O = organs_by_name[name]
return (O && !O.is_stump())
@@ -318,9 +317,12 @@ This saves us from having to call add_fingerprint() any time something is put in
W.loc = src.back
if(slot_tie)
for(var/obj/item/clothing/C in worn_clothing)
C.attackby(W, usr)
if(istype(W, /obj/item/clothing/accessory))
var/obj/item/clothing/accessory/A = W
if(C.attempt_attach_accessory(usr, A))
return
else
src << "<font color='red'>You are trying to eqip this item to an unsupported inventory slot. How the heck did you manage that? Stop it...</font>"
src << "<font color='red'>You are trying to equip this item to an unsupported inventory slot. How the heck did you manage that? Stop it...</font>"
return
if((W == src.l_hand) && (slot != slot_l_hand))

View File

@@ -236,29 +236,33 @@
/datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 0,var/comprehensive = 0)
var/boxtype = /obj/item/weapon/storage/box/survival //Default survival box
if(H.isSynthetic())
boxtype = /obj/item/weapon/storage/box //Empty box for synths
var/synth = H.isSynthetic()
//Special box for engineers
if(comprehensive)
//Empty box for synths
if(synth)
boxtype = /obj/item/weapon/storage/box/survival/synth
//Special box with extra equipment
else if(comprehensive)
boxtype = /obj/item/weapon/storage/box/survival/comp
//Create the box
var/obj/item/weapon/storage/box/box = new boxtype(H)
//Create a tank (if such a thing exists for this species)
var/tanktext = "/obj/item/weapon/tank/emergency/" + "[breath_type]"
var/obj/item/weapon/tank/emergency/tankpath //Will force someone to come look here if they ever alter this path.
if(extendedtank)
tankpath = text2path(tanktext + "/engi")
if(!tankpath) //Is it just that there's no /engi?
tankpath = text2path(tanktext + "/double")
if(!synth)
//Create a tank (if such a thing exists for this species)
var/tanktext = "/obj/item/weapon/tank/emergency/" + "[breath_type]"
var/obj/item/weapon/tank/emergency/tankpath //Will force someone to come look here if they ever alter this path.
if(extendedtank)
tankpath = text2path(tanktext + "/engi")
if(!tankpath) //Is it just that there's no /engi?
tankpath = text2path(tanktext + "/double")
if(!tankpath)
tankpath = text2path(tanktext)
if(!tankpath)
tankpath = text2path(tanktext)
if(tankpath)
new tankpath(box)
if(tankpath)
new tankpath(box)
box.calibrate_size()

View File

@@ -5,7 +5,8 @@
show_laws(0)
winset(src, null, "mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5")
// Override the DreamSeeker macro with the borg version!
client.set_hotkeys_macro("borgmacro", "borghotkeymode")
// Forces synths to select an icon relevant to their module
if(!icon_selected)

View File

@@ -57,4 +57,4 @@
recalculate_vis()
//set macro to normal incase it was overriden (like cyborg currently does)
winset(src, null, "mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5")
client.set_hotkeys_macro("macro", "hotkeymode")

View File

@@ -771,16 +771,19 @@
if(status_flags & CANSTUN)
facing_dir = null
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
update_canmove() //updates lying, canmove and icons
return
/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
if(status_flags & CANSTUN)
stunned = max(amount,0)
update_canmove() //updates lying, canmove and icons
return
/mob/proc/AdjustStunned(amount)
if(status_flags & CANSTUN)
stunned = max(stunned + amount,0)
update_canmove() //updates lying, canmove and icons
return
/mob/proc/Weaken(amount)
@@ -793,7 +796,7 @@
/mob/proc/SetWeakened(amount)
if(status_flags & CANWEAKEN)
weakened = max(amount,0)
update_canmove() //updates lying, canmove and icons
update_canmove() //can you guess what this does yet?
return
/mob/proc/AdjustWeakened(amount)

View File

@@ -1608,6 +1608,16 @@
glass_name = "wine"
glass_desc = "A very classy looking drink."
/datum/reagent/ethanol/wine/champagne
name = "Champagne"
id = "champagne"
description = "A sparkling wine made with Pinot Noir, Pinot Meunier, and Chardonnay."
taste_description = "fizzy bitter sweetness"
color = "#D1B166"
glass_name = "champagne"
glass_desc = "An even classier looking drink."
/datum/reagent/ethanol/cider
name = "Cider"

View File

@@ -540,3 +540,12 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/New()
..()
reagents.add_reagent("sake", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne
name = "Gilthari Luxury Champagne"
desc = "For those special occassions."
icon_state = "champagne"
/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/New()
..()
reagents.add_reagent("champagne", 100)

View File

@@ -0,0 +1,5 @@
author: Leshana
delete-after: True
changes:
- rscadd: "Added a client preference setting for wether Hotkeys Mode should be enabled or disabled by default."
- bugfix: "CTRL+NUMPAD8 while playing a robot won't runtime anymore."

View File

@@ -0,0 +1,38 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: Schnayy
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Added Gilthari Luxury Champagne. Drink responsibly."
- rscadd: "Added a singular AlliCo Baubles and Confectionaries vending machine in the locker rooms. Dispenses a variety of gifts."
- rscdel: "Removed hot drinks vendor from locker room."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 199 KiB

View File

@@ -188,3 +188,14 @@ Any-Mode: (hotkey doesn't need to be on)
src << other
if(holder)
src << admin
// Set the DreamSeeker input macro to the type appropriate for its mob
/client/proc/set_hotkeys_macro(macro_name = "macro", hotkey_macro_name = "hotkeymode", hotkeys_enabled = null)
// If hotkeys mode was not specified, fall back to choice of default in client preferences.
if(isnull(hotkeys_enabled))
hotkeys_enabled = is_preference_enabled(/datum/client_preference/hotkeys_default)
if(hotkeys_enabled)
winset(src, null, "mainwindow.macro=[hotkey_macro_name] hotkey_toggle.is-checked=true mapwindow.map.focus=true")
else
winset(src, null, "mainwindow.macro=[macro_name] hotkey_toggle.is-checked=false input.focus=true")

View File

@@ -995,7 +995,7 @@ macro "borgmacro"
is-disabled = false
elem
name = "CTRL+NUMPAD8"
command = "body-head-toggle"
command = "body-toggle-head"
is-disabled = false
elem
name = "F1"

File diff suppressed because it is too large Load Diff