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

# Conflicts:
#	README.md
#	code/__defines/mobs.dm
#	code/__defines/subsystems.dm
#	code/_helpers/global_lists.dm
#	code/controllers/subsystems/garbage.dm
#	code/controllers/subsystems/overlays.dm
#	code/datums/datacore.dm
#	code/datums/supplypacks/munitions.dm
#	code/game/machinery/suit_storage_unit.dm
#	code/game/objects/items/devices/communicator/UI.dm
#	code/game/objects/items/weapons/id cards/station_ids.dm
#	code/game/objects/random/random.dm
#	code/game/turfs/simulated/floor.dm
#	code/game/turfs/simulated/floor_icon.dm
#	code/modules/awaymissions/gateway.dm
#	code/modules/client/preferences.dm
#	code/modules/ext_scripts/python.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/life.dm
#	code/modules/mob/living/carbon/human/species/station/station.dm
#	code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm
#	code/modules/mob/living/carbon/human/update_icons.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_defines.dm
#	code/modules/mob/living/simple_animal/animals/bear.dm
#	code/modules/mob/mob_helpers.dm
#	code/modules/mob/new_player/new_player.dm
#	code/modules/mob/new_player/preferences_setup.dm
#	code/modules/mob/new_player/sprite_accessories.dm
#	code/modules/organs/organ_external.dm
#	code/modules/organs/organ_icon.dm
#	code/modules/organs/robolimbs.dm
#	code/modules/reagents/reagent_containers/glass.dm
#	code/modules/reagents/reagent_containers/syringes.dm
#	html/changelogs/.all_changelog.yml
#	maps/southern_cross/southern_cross-1.dmm
#	maps/southern_cross/southern_cross-3.dmm
#	maps/southern_cross/southern_cross-4.dmm
#	maps/southern_cross/southern_cross-6.dmm
#	vorestation.dme
This commit is contained in:
Leshana
2018-03-15 22:41:14 -04:00
242 changed files with 21216 additions and 547364 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
item_state = "electronic"
w_class = ITEMSIZE_SMALL
slot_flags = SLOT_ID | SLOT_BELT
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/id.dmi')
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/id.dmi')
//Main variables
var/pdachoice = 1
@@ -69,16 +69,17 @@
im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"])
//Weather reports.
for(var/datum/planet/planet in planet_controller.planets)
if(planet.weather_holder && planet.weather_holder.current_weather)
var/list/W = list(
"Planet" = planet.name,
"Time" = planet.current_time.show_time("hh:mm"),
"Weather" = planet.weather_holder.current_weather.name,
"Temperature" = planet.weather_holder.temperature - T0C,
"High" = planet.weather_holder.current_weather.temp_high - T0C,
"Low" = planet.weather_holder.current_weather.temp_low - T0C)
weather[++weather.len] = W
if(planet_controller)
for(var/datum/planet/planet in planet_controller.planets)
if(planet.weather_holder && planet.weather_holder.current_weather)
var/list/W = list(
"Planet" = planet.name,
"Time" = planet.current_time.show_time("hh:mm"),
"Weather" = planet.weather_holder.current_weather.name,
"Temperature" = planet.weather_holder.temperature - T0C,
"High" = planet.weather_holder.current_weather.temp_high - T0C,
"Low" = planet.weather_holder.current_weather.temp_low - T0C)
weather[++weather.len] = W
injection = "<div>Test</div>"
@@ -251,4 +252,4 @@
set_light(fon * flum)
nanomanager.update_uis(src)
add_fingerprint(usr)
add_fingerprint(usr)
-1
View File
@@ -487,7 +487,6 @@
M.timeofdeath = 0
M.stat = UNCONSCIOUS //Life() can bring them back to consciousness if it needs to.
M.regenerate_icons()
M.failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath.
M.reload_fullscreen()
+2 -2
View File
@@ -7,7 +7,7 @@
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user."
icon_state = "modkit"
var/parts = MODKIT_FULL
var/target_species = "Human"
var/target_species = SPECIES_HUMAN
var/list/permitted_types = list(
/obj/item/clothing/head/helmet/space/void,
@@ -69,4 +69,4 @@
/obj/item/device/modkit/tajaran
name = "tajaran hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran."
target_species = "Tajara"
target_species = SPECIES_TAJ
@@ -3,11 +3,12 @@
desc = "An updated, modular intercom that fits over the head. Takes encryption keys"
var/radio_desc = ""
icon_state = "headset"
item_state = null //To remove the radio's state
matter = list(DEFAULT_WALL_MATERIAL = 75)
subspace_transmission = 1
canhear_range = 0 // can't hear headsets from very far away
slot_flags = SLOT_EARS
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ears.dmi')
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/ears.dmi')
var/translate_binary = 0
var/translate_hive = 0
@@ -63,6 +64,17 @@
return ..(freq, level)
return -1
/obj/item/device/radio/headset/get_worn_icon_state(var/slot_name)
var/append = ""
if(icon_override)
switch(slot_name)
if(slot_l_ear_str)
append = "_l"
if(slot_r_ear_str)
append = "_r"
return "[..()][append]"
/obj/item/device/radio/headset/syndicate
origin_tech = list(TECH_ILLEGAL = 3)
syndie = 1
+1 -1
View File
@@ -105,7 +105,7 @@ HALOGEN COUNTER - Radcount on mobs
BR = M.getBruteLoss() > 50 ? "<font color='red'><b>Severe anatomical damage detected</b></font>" : "Subject brute-force injury status O.K"
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "<span class='warning'>Severe oxygen deprivation detected</span>" : "Subject bloodstream oxygen level normal"
dat += "[OX] | [TX] | [BU] | [BR]"
dat += "[OX] | [TX] | [BU] | [BR]<br>"
if(M.radiation)
if(advscan >= 2 && showadvscan == 1)
var/severity = ""
+22 -22
View File
@@ -106,13 +106,13 @@
if (M.use(1))
var/obj/item/weapon/secbot_assembly/ed209_assembly/B = new /obj/item/weapon/secbot_assembly/ed209_assembly
B.loc = get_turf(src)
user << "<span class='notice'>You armed the robot frame.</span>"
to_chat(user, "<span class='notice'>You armed the robot frame.</span>")
if (user.get_inactive_hand()==src)
user.remove_from_mob(src)
user.put_in_inactive_hand(B)
qdel(src)
else
user << "<span class='warning'>You need one sheet of metal to arm the robot frame.</span>"
to_chat(user, "<span class='warning'>You need one sheet of metal to arm the robot frame.</span>")
if(istype(W, /obj/item/robot_parts/l_leg))
if(src.l_leg) return
user.drop_item()
@@ -149,9 +149,9 @@
src.chest = W
src.updateicon()
else if(!W:wires)
user << "<span class='warning'>You need to attach wires to it first!</span>"
to_chat(user, "<span class='warning'>You need to attach wires to it first!</span>")
else
user << "<span class='warning'>You need to attach a cell to it first!</span>"
to_chat(user, "<span class='warning'>You need to attach a cell to it first!</span>")
if(istype(W, /obj/item/robot_parts/head))
if(src.head) return
@@ -161,16 +161,16 @@
src.head = W
src.updateicon()
else
user << "<span class='warning'>You need to attach a flash to it first!</span>"
to_chat(user, "<span class='warning'>You need to attach a flash to it first!</span>")
if(istype(W, /obj/item/device/mmi))
var/obj/item/device/mmi/M = W
if(check_completion())
if(!istype(loc,/turf))
user << "<span class='warning'>You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.</span>"
to_chat(user, "<span class='warning'>You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.</span>")
return
if(!M.brainmob)
user << "<span class='warning'>Sticking an empty [W] into the frame would sort of defeat the purpose.</span>"
to_chat(user, "<span class='warning'>Sticking an empty [W] into the frame would sort of defeat the purpose.</span>")
return
if(!M.brainmob.key)
var/ghost_can_reenter = 0
@@ -181,15 +181,15 @@
to_chat(user, "<span class='notice'>\The [W] is completely unresponsive; though it may be able to auto-resuscitate.</span>") //Jamming a ghosted brain into a borg is likely detrimental, and may result in some problems.
return
if(!ghost_can_reenter)
user << "<span class='notice'>\The [W] is completely unresponsive; there's no point.</span>"
to_chat(user, "<span class='notice'>\The [W] is completely unresponsive; there's no point.</span>")
return
if(M.brainmob.stat == DEAD)
user << "<span class='warning'>Sticking a dead [W] into the frame would sort of defeat the purpose.</span>"
to_chat(user, "<span class='warning'>Sticking a dead [W] into the frame would sort of defeat the purpose.</span>")
return
if(jobban_isbanned(M.brainmob, "Cyborg"))
user << "<span class='warning'>This [W] does not seem to fit.</span>"
to_chat(user, "<span class='warning'>This [W] does not seem to fit.</span>")
return
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1)
@@ -228,7 +228,7 @@
qdel(src)
else
user << "<span class='warning'>The MMI must go in after everything else!</span>"
to_chat(user, "<span class='warning'>The MMI must go in after everything else!</span>")
if (istype(W, /obj/item/weapon/pen))
var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN)
@@ -245,22 +245,22 @@
..()
if(istype(W, /obj/item/weapon/cell))
if(src.cell)
user << "<span class='warning'>You have already inserted a cell!</span>"
to_chat(user, "<span class='warning'>You have already inserted a cell!</span>")
return
else
user.drop_item()
W.loc = src
src.cell = W
user << "<span class='notice'>You insert the cell!</span>"
to_chat(user, "<span class='notice'>You insert the cell!</span>")
if(istype(W, /obj/item/stack/cable_coil))
if(src.wires)
user << "<span class='warning'>You have already inserted wire!</span>"
to_chat(user, "<span class='warning'>You have already inserted wire!</span>")
return
else
var/obj/item/stack/cable_coil/coil = W
coil.use(1)
src.wires = 1.0
user << "<span class='notice'>You insert the wire!</span>"
to_chat(user, "<span class='notice'>You insert the wire!</span>")
return
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob)
@@ -269,14 +269,14 @@
if(istype(user,/mob/living/silicon/robot))
var/current_module = user.get_active_hand()
if(current_module == W)
user << "<span class='warning'>How do you propose to do that?</span>"
to_chat(user, "<span class='warning'>How do you propose to do that?</span>")
return
else
add_flashes(W,user)
else
add_flashes(W,user)
else if(istype(W, /obj/item/weapon/stock_parts/manipulator))
user << "<span class='notice'>You install some manipulators and modify the head, creating a functional spider-bot!</span>"
to_chat(user, "<span class='notice'>You install some manipulators and modify the head, creating a functional spider-bot!</span>")
new /mob/living/simple_animal/spiderbot(get_turf(loc))
user.drop_item()
qdel(W)
@@ -286,24 +286,24 @@
/obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta
if(src.flash1 && src.flash2)
user << "<span class='notice'>You have already inserted the eyes!</span>"
to_chat(user, "<span class='notice'>You have already inserted the eyes!</span>")
return
else if(src.flash1)
user.drop_item()
W.loc = src
src.flash2 = W
user << "<span class='notice'>You insert the flash into the eye socket!</span>"
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
else
user.drop_item()
W.loc = src
src.flash1 = W
user << "<span class='notice'>You insert the flash into the eye socket!</span>"
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
/obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user)
if(sabotaged)
user << "<span class='warning'>[src] is already sabotaged!</span>"
to_chat(user, "<span class='warning'>[src] is already sabotaged!</span>")
else
user << "<span class='warning'>You short out the safeties.</span>"
to_chat(user, "<span class='warning'>You short out the safeties.</span>")
sabotaged = 1
return 1
@@ -210,6 +210,7 @@
R.add_language(LANGUAGE_TRADEBAND, 1)
R.add_language(LANGUAGE_UNATHI, 1)
R.add_language(LANGUAGE_SIIK, 1)
R.add_language(LANGUAGE_AKHANI, 1)
R.add_language(LANGUAGE_SKRELLIAN, 1)
R.add_language(LANGUAGE_SKRELLIANFAR, 0)
R.add_language(LANGUAGE_GUTTER, 1)
@@ -89,6 +89,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/weldermes = "USER lights NAME with FLAME"
var/ignitermes = "USER lights NAME with FLAME"
var/brand
blood_sprite_state = null //Can't bloody these
/obj/item/clothing/mask/smokable/New()
..()
+29 -2
View File
@@ -18,7 +18,13 @@
var/cuff_sound = 'sound/weapons/handcuffs.ogg'
var/cuff_type = "handcuffs"
var/use_time = 30
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/handcuffs.dmi')
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/handcuffs.dmi')
/obj/item/weapon/handcuffs/get_worn_icon_state(var/slot_name)
if(slot_name == slot_handcuffed_str)
return "handcuff1" //Simple
return ..()
/obj/item/weapon/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user)
@@ -95,6 +101,13 @@
target.update_inv_handcuffed()
return 1
/obj/item/weapon/handcuffs/equipped(var/mob/living/user,var/slot)
. = ..()
if(slot == slot_handcuffed)
user.drop_r_hand()
user.drop_l_hand()
user.stop_pulling()
var/last_chew = 0
/mob/living/carbon/human/RestrainedClickOn(var/atom/A)
if (A != src) return ..()
@@ -111,7 +124,7 @@ var/last_chew = 0
if (!O) return
var/datum/gender/T = gender_datums[H.get_visible_gender()]
var/s = "<span class='warning'>[H.name] chews on [T.his] [O.name]!</span>"
H.visible_message(s, "<span class='warning'>You chew on your [O.name]!</span>")
add_attack_logs(H,H,"chewed own [O.name]")
@@ -207,6 +220,12 @@ var/last_chew = 0
breakouttime = 30
cuff_sound = 'sound/weapons/towelwipe.ogg' //Is there anything this sound can't do?
/obj/item/weapon/handcuffs/legcuffs/get_worn_icon_state(var/slot_name)
if(slot_name == slot_legcuffed_str)
return "legcuff1"
return ..()
/obj/item/weapon/handcuffs/legcuffs/bola/can_place(var/mob/target, var/mob/user)
if(user) //A ranged legcuff, until proper implementation as items it remains a projectile-only thing.
return 1
@@ -298,3 +317,11 @@ var/last_chew = 0
target.legcuffed = lcuffs
target.update_inv_legcuffed()
return 1
/obj/item/weapon/handcuffs/legcuffs/equipped(var/mob/living/user,var/slot)
. = ..()
if(slot == slot_legcuffed)
if(user.m_intent != "walk")
user.m_intent = "walk"
if(user.hud_used && user.hud_used.move_intent)
user.hud_used.move_intent.icon_state = "walking"
@@ -5,7 +5,7 @@
item_state = "card-id"
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/id.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/id.dmi'
)
var/access = list()
@@ -113,6 +113,12 @@
usr << "The fingerprint hash on the card is [fingerprint_hash]."
return
/obj/item/weapon/card/id/get_worn_icon_state(var/slot_name)
if(slot_name == slot_wear_id_str)
return "id" //Legacy, just how it is. There's only one sprite.
return ..()
/obj/item/weapon/card/id/initialize()
. = ..()
var/datum/job/J = job_master.GetJob(rank)
@@ -100,7 +100,7 @@
user.put_in_hands(S)
else
visible_message("[user] starts compacting the snowball.", "You start compacting the snowball.")
if(do_after(user, 2000))
if(do_after(user, 2 SECONDS))
var/atom/S = new /obj/item/weapon/material/snow/snowball/reinforced(user.loc)
del(src)
user.put_in_hands(S)
@@ -108,6 +108,6 @@
/obj/item/weapon/material/snow/snowball/reinforced
name = "snowball"
desc = "A well-formed and fun snowball. It looks kind of dangerous."
icon_state = "snowball-reinf"
//icon_state = "reinf-snowball"
force_divisor = 0.20
thrown_force_divisor = 0.25
thrown_force_divisor = 0.25
@@ -8,7 +8,7 @@
icon = 'icons/obj/clothing/backpack.dmi'
icon_state = "backpack"
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/back.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/back.dmi'
)
w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK
@@ -8,7 +8,7 @@
max_w_class = ITEMSIZE_NORMAL
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/belt.dmi')
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/belt.dmi')
var/show_above_suit = 0
@@ -22,6 +22,16 @@
show_above_suit = !show_above_suit
update_icon()
//Some belts have sprites to show icons
/obj/item/weapon/storage/belt/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0)
var/image/standing = ..()
if(!inhands && contents.len)
for(var/obj/item/i in contents)
var/i_state = i.item_state
if(!i_state) i_state = i.icon_state
standing.add_overlay(image(icon = INV_BELT_DEF_ICON, icon_state = i_state))
return standing
/obj/item/weapon/storage/update_icon()
if (ismob(src.loc))
var/mob/M = src.loc
@@ -23,7 +23,7 @@
name = "box"
desc = "It's just an ordinary box."
icon_state = "box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
item_state = "syringe_kit"
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
max_w_class = ITEMSIZE_SMALL
max_storage_space = INVENTORY_BOX_SPACE
@@ -354,12 +354,10 @@
//such as when picking up all the items on a tile with one click.
/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
if(!istype(W)) return 0
if(usr)
usr.remove_from_mob(W)
usr.update_icons() //update our overlays
W.forceMove(src)
W.on_enter_storage(src)
if(usr)
usr.remove_from_mob(W,target = src) //If given a target, handles forceMove()
W.on_enter_storage(src)
if (usr.client && usr.s_active != src)
usr.client.screen -= W
W.dropped(usr)
@@ -377,6 +375,10 @@
src.orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
else
W.forceMove(src)
W.on_enter_storage(src)
update_icon()
return 1
@@ -63,6 +63,12 @@
T.dismantle_wall(1)
qdel(src)
/obj/item/weapon/syndie/c4explosive/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/flame/lighter/zippo/c4detonator))
var/obj/item/weapon/flame/lighter/zippo/c4detonator/D = W
D.bomb = src
return
..()
/*Detonator, disguised as a lighter*/
/*Click it when closed to open, when open to bring up a prompt asking you if you want to close it or press the button.*/
@@ -8,7 +8,7 @@ var/list/global/tank_gauge_cache = list()
name = "tank"
icon = 'icons/obj/tank.dmi'
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/back.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/back.dmi'
)
var/gauge_icon = "indicator_tank"
+1 -1
View File
@@ -236,7 +236,7 @@
..()
/obj/item/weapon/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob)
if(user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable)))
if(istype(C) && user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable)))
usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\
"You cut \the [C]'s restraints with \the [src]!",\
"You hear cable being cut.")