mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-07-21 13:13:29 +01:00
Merge branch 'dev' into ofMechfabAndPanic
Conflicts: code/__defines/research.dm code/game/mecha/equipment/tools/tools.dm code/game/mecha/mecha_parts.dm code/modules/research/designs.dm maps/exodus-1.dmm
This commit is contained in:
@@ -189,7 +189,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
/mob/dead/observer/Stat()
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
if(emergency_shuttle)
|
||||
var/eta_status = emergency_shuttle.get_status_panel_eta()
|
||||
if(eta_status)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
slot_flags = SLOT_HEAD | SLOT_OCLOTHING
|
||||
|
||||
/obj/item/weapon/holder/drone
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINERING = 5)
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 5)
|
||||
|
||||
/obj/item/weapon/holder/mouse
|
||||
w_class = 1
|
||||
|
||||
@@ -97,10 +97,12 @@
|
||||
..(message, null, verb)
|
||||
|
||||
/mob/living/bot/Bump(var/atom/A)
|
||||
if(istype(A, /obj/machinery/door) && botcard)
|
||||
if(on && botcard && istype(A, /obj/machinery/door))
|
||||
var/obj/machinery/door/D = A
|
||||
if(!istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && D.check_access(botcard))
|
||||
D.open()
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/bot/emag_act(var/remaining_charges, var/mob/user)
|
||||
return 0
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
is_ranged = 1
|
||||
preparing_arrest_sounds = new()
|
||||
|
||||
a_intent = I_HURT
|
||||
mob_bump_flag = HEAVY
|
||||
mob_swap_flags = ~HEAVY
|
||||
mob_push_flags = HEAVY
|
||||
|
||||
var/shot_delay = 4
|
||||
var/last_shot = 0
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/list/path = list()
|
||||
var/list/ignorelist = list()
|
||||
var/turf/target
|
||||
var/floor_build_type = /decl/flooring/tiling // Basic steel floor.
|
||||
|
||||
/mob/living/bot/floorbot/update_icons()
|
||||
if(repairing)
|
||||
@@ -136,7 +137,7 @@
|
||||
target = T
|
||||
if(improvefloors && istype(T, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = T
|
||||
if(!F.floor_type && (get_turf(T) == loc || prob(40)))
|
||||
if(!F.flooring && (get_turf(T) == loc || prob(40)))
|
||||
target = T
|
||||
|
||||
if(emagged) // Time to griff
|
||||
@@ -150,7 +151,7 @@
|
||||
|
||||
if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles
|
||||
if(eattiles)
|
||||
for(var/obj/item/stack/tile/steel/T in view(src))
|
||||
for(var/obj/item/stack/tile/floor/T in view(src))
|
||||
if(T in ignorelist)
|
||||
continue
|
||||
target = T
|
||||
@@ -217,7 +218,7 @@
|
||||
if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs
|
||||
var/obj/item/I
|
||||
if(building == 1)
|
||||
I = new /obj/item/stack/tile/steel(src)
|
||||
I = new /obj/item/stack/tile/floor(src)
|
||||
else
|
||||
I = PoolOrNew(/obj/item/stack/rods, src)
|
||||
A.attackby(I, src)
|
||||
@@ -226,20 +227,19 @@
|
||||
update_icons()
|
||||
else if(istype(A, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = A
|
||||
if(!F.floor_type && amount)
|
||||
if(!F.flooring && amount)
|
||||
repairing = 1
|
||||
update_icons()
|
||||
visible_message("<span class='notice'>[src] begins to improve the floor.</span>")
|
||||
if(do_after(src, 50))
|
||||
if(!F.floor_type)
|
||||
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(src)
|
||||
F.attackby(T, src)
|
||||
if(!F.flooring)
|
||||
F.set_flooring(get_flooring_data(floor_build_type))
|
||||
addTiles(-1)
|
||||
target = null
|
||||
repairing = 0
|
||||
update_icons()
|
||||
else if(istype(A, /obj/item/stack/tile/steel) && amount < maxAmount)
|
||||
var/obj/item/stack/tile/steel/T = A
|
||||
else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount)
|
||||
var/obj/item/stack/tile/floor/T = A
|
||||
visible_message("<span class='notice'>[src] begins to collect tiles.</span>")
|
||||
repairing = 1
|
||||
update_icons()
|
||||
@@ -272,7 +272,7 @@
|
||||
new /obj/item/device/assembly/prox_sensor(Tsec)
|
||||
if(prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(Tsec)
|
||||
var/obj/item/stack/tile/floor/T = new /obj/item/stack/tile/floor(Tsec)
|
||||
T.amount = amount
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
@@ -288,8 +288,8 @@
|
||||
|
||||
/* Assembly */
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/steel/T, mob/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/steel))
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/floor))
|
||||
..()
|
||||
return
|
||||
if(contents.len >= 1)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
var/obj/secbot_listener/listener = null
|
||||
var/beacon_freq = 1445 // Navigation beacon frequency
|
||||
var/control_freq = AI_FREQ // Bot control frequency
|
||||
var/control_freq = BOT_FREQ // Bot control frequency
|
||||
var/list/path = list()
|
||||
var/frustration = 0
|
||||
var/turf/patrol_target = null // This is where we are headed
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "posibrain"
|
||||
w_class = 3
|
||||
origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
|
||||
|
||||
var/searching = 0
|
||||
var/askDelay = 10 * 60 * 1
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "mainboard"
|
||||
w_class = 3
|
||||
origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
|
||||
|
||||
/obj/item/device/mmi/digital/robot/New()
|
||||
..()
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(internal)
|
||||
if (!contents.Find(internal))
|
||||
internal = null
|
||||
if (!(wear_mask && (wear_mask.flags & AIRTIGHT)))
|
||||
if (!(wear_mask && (wear_mask.item_flags & AIRTIGHT)))
|
||||
internal = null
|
||||
if(internal)
|
||||
if (internals)
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
//Handle possble chem smoke effect
|
||||
/mob/living/carbon/proc/handle_chemical_smoke(var/datum/gas_mixture/environment)
|
||||
if(wear_mask && (wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
if(wear_mask && (wear_mask.item_flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
return
|
||||
|
||||
for(var/obj/effect/effect/smoke/chem/smoke in view(1, src))
|
||||
|
||||
@@ -147,11 +147,11 @@
|
||||
src.hand = !( src.hand )
|
||||
if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object)
|
||||
if(hand) //This being 1 means the left hand is in use
|
||||
hud_used.l_hand_hud_object.icon_state = "hand_active"
|
||||
hud_used.r_hand_hud_object.icon_state = "hand_inactive"
|
||||
hud_used.l_hand_hud_object.icon_state = "l_hand_active"
|
||||
hud_used.r_hand_hud_object.icon_state = "r_hand_inactive"
|
||||
else
|
||||
hud_used.l_hand_hud_object.icon_state = "hand_inactive"
|
||||
hud_used.r_hand_hud_object.icon_state = "hand_active"
|
||||
hud_used.l_hand_hud_object.icon_state = "l_hand_inactive"
|
||||
hud_used.r_hand_hud_object.icon_state = "r_hand_active"
|
||||
/*if (!( src.hand ))
|
||||
src.hands.set_dir(NORTH)
|
||||
else
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_skin_color(var/red, var/green, var/blue)
|
||||
if(red == r_skin && green == g_skin && blue == b_skin || !(species.flags & HAS_SKIN_COLOR))
|
||||
if(red == r_skin && green == g_skin && blue == b_skin || !(species.appearance_flags & HAS_SKIN_COLOR))
|
||||
return
|
||||
|
||||
r_skin = red
|
||||
@@ -122,7 +122,7 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_skin_tone(var/tone)
|
||||
if(s_tone == tone || !(species.flags & HAS_SKIN_TONE))
|
||||
if(s_tone == tone || !(species.appearance_flags & HAS_SKIN_TONE))
|
||||
return
|
||||
|
||||
s_tone = tone
|
||||
@@ -141,13 +141,13 @@
|
||||
var/datum/species/current_species = all_species[current_species_name]
|
||||
|
||||
if(check_whitelist && config.usealienwhitelist && !check_rights(R_ADMIN, 0, src)) //If we're using the whitelist, make sure to check it!
|
||||
if(!(current_species.flags & CAN_JOIN))
|
||||
if(!(current_species.spawn_flags & CAN_JOIN))
|
||||
continue
|
||||
if(whitelist.len && !(current_species_name in whitelist))
|
||||
continue
|
||||
if(blacklist.len && (current_species_name in blacklist))
|
||||
continue
|
||||
if((current_species.flags & IS_WHITELISTED) && !is_alien_whitelisted(src, current_species_name))
|
||||
if((current_species.spawn_flags & IS_WHITELISTED) && !is_alien_whitelisted(src, current_species_name))
|
||||
continue
|
||||
|
||||
valid_species += current_species_name
|
||||
|
||||
@@ -1225,10 +1225,10 @@
|
||||
else
|
||||
switch(target_zone)
|
||||
if("head")
|
||||
if(head && head.flags & THICKMATERIAL)
|
||||
if(head && head.item_flags & THICKMATERIAL)
|
||||
. = 0
|
||||
else
|
||||
if(wear_suit && wear_suit.flags & THICKMATERIAL)
|
||||
if(wear_suit && wear_suit.item_flags & THICKMATERIAL)
|
||||
. = 0
|
||||
if(!. && error_msg && user)
|
||||
if(!fail_msg)
|
||||
@@ -1301,7 +1301,7 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/slip(var/slipped_on, stun_duration=8)
|
||||
if((species.flags & NO_SLIP) || (shoes && (shoes.flags & NOSLIP)))
|
||||
if((species.flags & NO_SLIP) || (shoes && (shoes.item_flags & NOSLIP)))
|
||||
return 0
|
||||
..(slipped_on,stun_duration)
|
||||
|
||||
@@ -1369,6 +1369,6 @@
|
||||
handle_regular_hud_updates()
|
||||
|
||||
/mob/living/carbon/human/Check_Shoegrip()
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP)) //magboots + dense_object = no floating
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.item_flags & NOSLIP)) //magboots + dense_object = no floating
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -60,10 +60,10 @@
|
||||
if(!check_has_mouth())
|
||||
H << "<span class='danger'>They don't have a mouth, you cannot perform CPR!</span>"
|
||||
return
|
||||
if((H.head && (H.head.flags & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags & MASKCOVERSMOUTH)))
|
||||
if((H.head && (H.head.body_parts_covered & FACE)) || (H.wear_mask && (H.wear_mask.body_parts_covered & FACE)))
|
||||
H << "<span class='notice'>Remove your mask!</span>"
|
||||
return 0
|
||||
if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH)))
|
||||
if((head && (head.body_parts_covered & FACE)) || (wear_mask && (wear_mask.body_parts_covered & FACE)))
|
||||
H << "<span class='notice'>Remove [src]'s mask!</span>"
|
||||
return 0
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ emp_act
|
||||
/mob/living/carbon/human/proc/check_mouth_coverage()
|
||||
var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform)
|
||||
for(var/obj/item/gear in protective_gear)
|
||||
if(istype(gear) && (gear.body_parts_covered & FACE) && (gear.flags & (MASKCOVERSMOUTH|HEADCOVERSMOUTH)))
|
||||
if(istype(gear) && (gear.body_parts_covered & FACE) && !(gear.item_flags & FLEXIBLEMATERIAL))
|
||||
return gear
|
||||
return null
|
||||
|
||||
|
||||
@@ -82,5 +82,5 @@
|
||||
var/list/flavor_texts = list()
|
||||
|
||||
mob_bump_flag = HUMAN
|
||||
mob_push_flags = ALLMOBS
|
||||
mob_swap_flags = ALLMOBS
|
||||
mob_push_flags = ~HEAVY
|
||||
mob_swap_flags = ~HEAVY
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense.
|
||||
|
||||
//Do we have magboots or such on if so no slip
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP))
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.item_flags & NOSLIP))
|
||||
prob_slip = 0
|
||||
|
||||
//Check hands and mod slip
|
||||
|
||||
@@ -116,19 +116,12 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_glasses()
|
||||
else if (W == head)
|
||||
head = null
|
||||
|
||||
var/update_hair = 0
|
||||
if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
|
||||
update_hair = 1
|
||||
else if(istype(W, /obj/item))
|
||||
if(istype(W, /obj/item))
|
||||
var/obj/item/I = W
|
||||
if(I.flags_inv & HIDEMASK)
|
||||
update_hair = 1
|
||||
if(update_hair)
|
||||
update_hair(0) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
update_inv_wear_mask(0)
|
||||
|
||||
if(I.flags_inv & (HIDEMASK|BLOCKHAIR|BLOCKHEADHAIR))
|
||||
update_hair(0) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
update_inv_wear_mask(0)
|
||||
update_inv_head()
|
||||
else if (W == l_ear)
|
||||
l_ear = null
|
||||
@@ -144,9 +137,11 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_belt()
|
||||
else if (W == wear_mask)
|
||||
wear_mask = null
|
||||
if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
|
||||
update_hair(0) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
if(istype(W, /obj/item))
|
||||
var/obj/item/I = W
|
||||
if(I.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR))
|
||||
update_hair(0) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
if(internal)
|
||||
if(internals)
|
||||
internals.icon_state = "internal0"
|
||||
@@ -205,7 +200,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_back(redraw_mob)
|
||||
if(slot_wear_mask)
|
||||
src.wear_mask = W
|
||||
if((wear_mask.flags & BLOCKHAIR) || (wear_mask.flags & BLOCKHEADHAIR))
|
||||
if(wear_mask.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR))
|
||||
update_hair(redraw_mob) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
W.equipped(src, slot)
|
||||
@@ -261,7 +256,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_inv_gloves(redraw_mob)
|
||||
if(slot_head)
|
||||
src.head = W
|
||||
if((head.flags & BLOCKHAIR) || (head.flags & BLOCKHEADHAIR) || (head.flags_inv & HIDEMASK))
|
||||
if(head.flags_inv & (BLOCKHAIR|BLOCKHEADHAIR|HIDEMASK))
|
||||
update_hair(redraw_mob) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
update_inv_wear_mask(0)
|
||||
@@ -328,17 +323,16 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
switch(slot)
|
||||
if(slot_wear_mask)
|
||||
covering = src.head
|
||||
check_flags = HEADCOVERSMOUTH
|
||||
check_flags = FACE
|
||||
if(slot_glasses)
|
||||
covering = src.head
|
||||
check_flags = HEADCOVERSEYES
|
||||
check_flags = EYES
|
||||
if(slot_gloves, slot_w_uniform)
|
||||
covering = src.wear_suit
|
||||
|
||||
if(covering)
|
||||
if((covering.body_parts_covered & I.body_parts_covered) || (covering.flags & check_flags))
|
||||
user << "<span class='warning'>\The [covering] is in the way.</span>"
|
||||
return 0
|
||||
if(covering && (covering.body_parts_covered & (I.body_parts_covered|check_flags)))
|
||||
user << "<span class='warning'>\The [covering] is in the way.</span>"
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/get_equipped_item(var/slot)
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
var/pressure_adjustment_coefficient = 1 // Assume no protection at first.
|
||||
|
||||
if(wear_suit && (wear_suit.flags & STOPPRESSUREDAMAGE) && head && (head.flags & STOPPRESSUREDAMAGE)) // Complete set of pressure-proof suit worn, assume fully sealed.
|
||||
if(wear_suit && (wear_suit.item_flags & STOPPRESSUREDAMAGE) && head && (head.item_flags & STOPPRESSUREDAMAGE)) // Complete set of pressure-proof suit worn, assume fully sealed.
|
||||
pressure_adjustment_coefficient = 0
|
||||
|
||||
// Handles breaches in your space suit. 10 suit damage equals a 100% loss of pressure protection.
|
||||
@@ -303,11 +303,11 @@
|
||||
/** breathing **/
|
||||
|
||||
/mob/living/carbon/human/handle_chemical_smoke(var/datum/gas_mixture/environment)
|
||||
if(wear_mask && (wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
if(wear_mask && (wear_mask.item_flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
return
|
||||
if(glasses && (glasses.flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
if(glasses && (glasses.item_flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
return
|
||||
if(head && (head.flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
if(head && (head.item_flags & BLOCK_GAS_SMOKE_EFFECT))
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -328,7 +328,7 @@
|
||||
if(!rig.offline && (rig.air_supply && internal == rig.air_supply))
|
||||
rig_supply = rig.air_supply
|
||||
|
||||
if (!rig_supply && (!contents.Find(internal) || !((wear_mask && (wear_mask.flags & AIRTIGHT)) || (head && (head.flags & AIRTIGHT)))))
|
||||
if (!rig_supply && (!contents.Find(internal) || !((wear_mask && (wear_mask.item_flags & AIRTIGHT)) || (head && (head.item_flags & AIRTIGHT)))))
|
||||
internal = null
|
||||
|
||||
if(internal)
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
remains_type = /obj/effect/decal/cleanable/ash
|
||||
death_message = "dissolves into ash..."
|
||||
|
||||
flags = IS_RESTRICTED | NO_BLOOD | NO_SCAN | NO_SLIP | NO_POISON
|
||||
flags = NO_BLOOD | NO_SCAN | NO_SLIP | NO_POISON | NO_MINOR_CUT
|
||||
spawn_flags = IS_RESTRICTED
|
||||
|
||||
/datum/species/shadow/handle_death(var/mob/living/carbon/human/H)
|
||||
spawn(1)
|
||||
|
||||
@@ -31,7 +31,9 @@
|
||||
poison_type = "oxygen"
|
||||
siemens_coefficient = 0.2
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | NO_SCAN | HAS_EYE_COLOR
|
||||
flags = NO_SCAN | NO_MINOR_CUT
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_EYE_COLOR
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
|
||||
@@ -103,6 +103,8 @@
|
||||
var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation.
|
||||
var/darksight = 2 // Native darksight distance.
|
||||
var/flags = 0 // Various specific features.
|
||||
var/appearance_flags = 0 // Appearance/display related features.
|
||||
var/spawn_flags = 0 // Flags that specify who can spawn as this species
|
||||
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
@@ -135,9 +137,9 @@
|
||||
)
|
||||
|
||||
// Bump vars
|
||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||
var/push_flags = ALLMOBS // What can we push?
|
||||
var/swap_flags = ALLMOBS // What can we swap place with?
|
||||
var/bump_flag = HUMAN // What are we considered to be when bumped?
|
||||
var/push_flags = ~HEAVY // What can we push?
|
||||
var/swap_flags = ~HEAVY // What can we swap place with?
|
||||
|
||||
/datum/species/New()
|
||||
if(hud_type)
|
||||
|
||||
@@ -17,18 +17,18 @@
|
||||
// to be drawn for the mob. This is fairly delicate, try to avoid messing with it
|
||||
// unless you know exactly what it does.
|
||||
var/list/gear = list(
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
|
||||
"o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
|
||||
"mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1),
|
||||
"o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1),
|
||||
"mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1),
|
||||
"gloves" = list("loc" = ui_gloves, "name" = "Gloves", "slot" = slot_gloves, "state" = "gloves", "toggle" = 1),
|
||||
"eyes" = list("loc" = ui_glasses, "name" = "Glasses", "slot" = slot_glasses, "state" = "glasses","toggle" = 1),
|
||||
"l_ear" = list("loc" = ui_l_ear, "name" = "Left Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
|
||||
"r_ear" = list("loc" = ui_r_ear, "name" = "Right Ear", "slot" = slot_r_ear, "state" = "ears", "toggle" = 1),
|
||||
"head" = list("loc" = ui_head, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
|
||||
"shoes" = list("loc" = ui_shoes, "name" = "Shoes", "slot" = slot_shoes, "state" = "shoes", "toggle" = 1),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "belt", "dir" = 8),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"),
|
||||
"storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
|
||||
"storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
|
||||
"belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
|
||||
@@ -55,13 +55,13 @@
|
||||
/datum/hud_data/diona
|
||||
has_internals = 0
|
||||
gear = list(
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
|
||||
"o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1),
|
||||
"o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1),
|
||||
"l_ear" = list("loc" = ui_gloves, "name" = "Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
|
||||
"head" = list("loc" = ui_oclothing, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "belt", "dir" = 8),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"),
|
||||
"storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
|
||||
"storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
|
||||
"belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
|
||||
@@ -69,6 +69,6 @@
|
||||
|
||||
/datum/hud_data/monkey
|
||||
gear = list(
|
||||
"mask" = list("loc" = ui_shoes, "name" = "Mask", "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
|
||||
"back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
|
||||
)
|
||||
"mask" = list("loc" = ui_shoes, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1),
|
||||
"back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
)
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
|
||||
language = "Sol Common" //todo?
|
||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch)
|
||||
flags = IS_RESTRICTED | NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON
|
||||
flags = NO_BREATHE | NO_PAIN | NO_BLOOD | NO_SCAN | NO_POISON | NO_MINOR_CUT
|
||||
spawn_flags = IS_RESTRICTED
|
||||
siemens_coefficient = 0
|
||||
|
||||
breath_type = null
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
|
||||
flags = IS_RESTRICTED
|
||||
spawn_flags = IS_RESTRICTED
|
||||
|
||||
bump_flag = MONKEY
|
||||
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
|
||||
@@ -6,10 +6,11 @@
|
||||
icobase = 'icons/mob/human_races/r_slime.dmi'
|
||||
deform = 'icons/mob/human_races/r_slime.dmi'
|
||||
|
||||
language = "Sol Common" //todo?
|
||||
language = null //todo?
|
||||
unarmed_types = list(/datum/unarmed_attack/slime_glomp)
|
||||
flags = IS_RESTRICTED | NO_SCAN | NO_SLIP | NO_BREATHE
|
||||
siemens_coefficient = 3
|
||||
flags = NO_SCAN | NO_SLIP | NO_BREATHE | NO_MINOR_CUT
|
||||
spawn_flags = IS_RESTRICTED
|
||||
siemens_coefficient = 3 //conductive
|
||||
darksight = 3
|
||||
|
||||
blood_color = "#05FF9B"
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
num_alternate_languages = 2
|
||||
secondary_langs = list("Sol Common")
|
||||
|
||||
flags = CAN_JOIN | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
|
||||
spawn_flags = CAN_JOIN
|
||||
appearance_flags = HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
|
||||
|
||||
/datum/species/unathi
|
||||
name = "Unathi"
|
||||
@@ -41,7 +42,8 @@
|
||||
heat_level_2 = 480 //Default 400
|
||||
heat_level_3 = 1100 //Default 1000
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
flesh_color = "#34AF10"
|
||||
|
||||
@@ -96,7 +98,8 @@
|
||||
|
||||
primitive_form = "Farwa"
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
@@ -129,7 +132,8 @@
|
||||
num_alternate_languages = 2
|
||||
secondary_langs = list("Skrellian")
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
|
||||
|
||||
flesh_color = "#8CD7A3"
|
||||
blood_color = "#1D2CBF"
|
||||
@@ -202,7 +206,8 @@
|
||||
|
||||
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP
|
||||
flags = NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | NO_MINOR_CUT
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
|
||||
blood_color = "#004400"
|
||||
flesh_color = "#907E4A"
|
||||
@@ -276,7 +281,8 @@
|
||||
|
||||
passive_temp_gain = 10 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
|
||||
flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_POISON
|
||||
flags = NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_POISON
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#575757"
|
||||
|
||||
@@ -15,7 +15,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
icon_state = "facehugger"
|
||||
item_state = "facehugger"
|
||||
w_class = 3 //note: can be picked up by aliens unlike most other items of w_class below 4
|
||||
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT
|
||||
flags = PROXMOVE
|
||||
body_parts_covered = FACE|EYES
|
||||
throw_range = 5
|
||||
|
||||
@@ -126,15 +126,6 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
L.visible_message("\red \b [src] leaps at [L]'s face!")
|
||||
|
||||
/* Tentatively removed since huggers can't be thrown anymore
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.head && H.head.flags & HEADCOVERSMOUTH)
|
||||
H.visible_message("\red \b [src] smashes against [H]'s [H.head]!")
|
||||
Die()
|
||||
return
|
||||
*/
|
||||
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/target = L
|
||||
|
||||
@@ -235,6 +226,6 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.head && H.head.flags & HEADCOVERSMOUTH)
|
||||
if(H.head && (H.head.body_parts_covered & FACE) && !(H.head.item_flags & FLEXIBLEMATERIAL))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -144,8 +144,10 @@
|
||||
var/turf/simulated/wall/W = O
|
||||
if(W.material.flags & MATERIAL_UNMELTABLE)
|
||||
cannot_melt = 1
|
||||
else if(istype(O, /turf/simulated/floor/engine))
|
||||
cannot_melt = 1
|
||||
else if(istype(O, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = O
|
||||
if(F.flooring && (F.flooring.flags & TURF_ACID_IMMUNE))
|
||||
cannot_melt = 1
|
||||
|
||||
if(cannot_melt)
|
||||
src << "<span class='alium'>You cannot dissolve this object.</span>"
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
flags = IS_RESTRICTED | NO_BREATHE | NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON
|
||||
flags = NO_BREATHE | NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT
|
||||
spawn_flags = IS_RESTRICTED
|
||||
|
||||
reagent_tag = IS_XENOS
|
||||
|
||||
@@ -53,8 +54,8 @@
|
||||
)
|
||||
|
||||
bump_flag = ALIEN
|
||||
swap_flags = ALLMOBS
|
||||
push_flags = ALLMOBS ^ ROBOT
|
||||
swap_flags = ~HEAVY
|
||||
push_flags = (~HEAVY) ^ ROBOT
|
||||
|
||||
var/alien_number = 0
|
||||
var/caste_name = "creature" // Used to update alien name.
|
||||
|
||||
@@ -325,10 +325,10 @@ var/global/list/damage_icon_parts = list()
|
||||
stand_icon.Blend(base_icon,ICON_OVERLAY)
|
||||
|
||||
//Underwear
|
||||
if(underwear && species.flags & HAS_UNDERWEAR)
|
||||
if(underwear && species.appearance_flags & HAS_UNDERWEAR)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', underwear), ICON_OVERLAY)
|
||||
|
||||
if(undershirt && species.flags & HAS_UNDERWEAR)
|
||||
if(undershirt && species.appearance_flags & HAS_UNDERWEAR)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', undershirt), ICON_OVERLAY)
|
||||
|
||||
if(update_icons)
|
||||
@@ -348,7 +348,7 @@ var/global/list/damage_icon_parts = list()
|
||||
return
|
||||
|
||||
//masks and helmets can obscure our hair.
|
||||
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
|
||||
if( (head && (head.flags_inv & BLOCKHAIR)) || (wear_mask && (wear_mask.flags_inv & BLOCKHAIR)))
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
@@ -364,7 +364,7 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
face_standing.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
if(h_style && !(head && (head.flags & BLOCKHEADHAIR)))
|
||||
if(h_style && !(head && (head.flags_inv & BLOCKHEADHAIR)))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(hair_style && src.species.name in hair_style.species_allowed)
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
@@ -573,7 +573,7 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
/mob/living/carbon/human/update_inv_ears(var/update_icons=1)
|
||||
overlays_standing[EARS_LAYER] = null
|
||||
if( (head && (head.flags & (BLOCKHAIR | BLOCKHEADHAIR))) || (wear_mask && (wear_mask.flags & (BLOCKHAIR | BLOCKHEADHAIR))))
|
||||
if( (head && (head.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR))) || (wear_mask && (wear_mask.flags_inv & (BLOCKHAIR | BLOCKHEADHAIR))))
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
var/damage_mod = 1
|
||||
//presumably, if they are wearing a helmet that stops pressure effects, then it probably covers the throat as well
|
||||
var/obj/item/clothing/head/helmet = get_equipped_item(slot_head)
|
||||
if(istype(helmet) && (helmet.body_parts_covered & HEAD) && (helmet.flags & STOPPRESSUREDAMAGE))
|
||||
if(istype(helmet) && (helmet.body_parts_covered & HEAD) && (helmet.item_flags & STOPPRESSUREDAMAGE))
|
||||
//we don't do an armor_check here because this is not an impact effect like a weapon swung with momentum, that either penetrates or glances off.
|
||||
damage_mod = 1.0 - (helmet.armor["melee"]/100)
|
||||
|
||||
|
||||
@@ -128,7 +128,6 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
return verb
|
||||
|
||||
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="")
|
||||
|
||||
if(client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "\red You cannot speak in IC (Muted)."
|
||||
@@ -167,7 +166,7 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
// irrespective of distance or anything else.
|
||||
if(speaking.flags & HIVEMIND)
|
||||
speaking.broadcast(src,trim(message))
|
||||
return
|
||||
return 1
|
||||
//If we've gotten this far, keep going!
|
||||
if(speaking.flags & COMMON_VERBS)
|
||||
verb = say_quote(message)
|
||||
@@ -188,11 +187,11 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
verb = handle_s[2]
|
||||
|
||||
if(!message || message == "")
|
||||
return
|
||||
return 0
|
||||
|
||||
var/list/obj/item/used_radios = new
|
||||
if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name))
|
||||
return
|
||||
return 1
|
||||
|
||||
var/list/handle_v = handle_speech_sound()
|
||||
var/sound/speech_sound = handle_v[1]
|
||||
|
||||
@@ -78,6 +78,8 @@
|
||||
|
||||
for(var/datum/ai_law/law in laws.laws_to_state())
|
||||
can_state = statelaw("[prefix][law.get_index()]. [law.law]")
|
||||
if(!can_state)
|
||||
break
|
||||
|
||||
if(!can_state)
|
||||
src << "<span class='danger'>[method]: Unable to state laws. Communication method unavailable.</span>"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
w_class = 2.0
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINERING = 2)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINEERING = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200)
|
||||
var/mode = 1;
|
||||
|
||||
|
||||
@@ -37,4 +37,4 @@
|
||||
else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS)
|
||||
if(M.client) M << "<b>[src]</b> transmits, \"[message]\""
|
||||
return 1
|
||||
..(message)
|
||||
return ..(message, 0)
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
mob_bump_flag = ROBOT
|
||||
mob_swap_flags = ROBOT|MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
mob_push_flags = ALLMOBS //trundle trundle
|
||||
mob_push_flags = ~HEAVY //trundle trundle
|
||||
|
||||
var/lights_on = 0 // Is our integrated light on?
|
||||
var/used_power_this_tick = 0
|
||||
|
||||
@@ -374,7 +374,7 @@ var/global/list/robot_modules = list(
|
||||
C.synths = list(wire)
|
||||
src.modules += C
|
||||
|
||||
var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src)
|
||||
var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src)
|
||||
S.synths = list(metal)
|
||||
src.modules += S
|
||||
|
||||
@@ -698,7 +698,7 @@ var/global/list/robot_modules = list(
|
||||
C.synths = list(wire)
|
||||
src.modules += C
|
||||
|
||||
var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src)
|
||||
var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src)
|
||||
S.synths = list(metal)
|
||||
src.modules += S
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/mob/living/silicon/say(var/message, var/sanitize = 1)
|
||||
return ..(sanitize ? sanitize(message) : message)
|
||||
|
||||
/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
|
||||
log_say("[key_name(src)] : [message]")
|
||||
|
||||
|
||||
@@ -151,12 +151,6 @@
|
||||
/mob/living/silicon/proc/show_malf_ai()
|
||||
return 0
|
||||
|
||||
|
||||
// this function displays the station time in the status panel
|
||||
/mob/living/silicon/proc/show_station_time()
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
|
||||
|
||||
// this function displays the shuttles ETA in the status panel if the shuttle has been called
|
||||
/mob/living/silicon/proc/show_emergency_shuttle_eta()
|
||||
if(emergency_shuttle)
|
||||
@@ -168,7 +162,6 @@
|
||||
// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms
|
||||
/mob/living/silicon/Stat()
|
||||
if(statpanel("Status"))
|
||||
show_station_time()
|
||||
show_emergency_shuttle_eta()
|
||||
show_system_integrity()
|
||||
show_malf_ai()
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
if(spawnees & 64)
|
||||
C = new(src.loc)
|
||||
C.name = "Drone auto-repair system"
|
||||
C.origin_tech = list(TECH_ENGINERING = rand(3,6))
|
||||
C.origin_tech = list(TECH_ENGINEERING = rand(3,6))
|
||||
|
||||
if(spawnees & 128)
|
||||
C = new(src.loc)
|
||||
|
||||
+23
-18
@@ -654,16 +654,21 @@
|
||||
. = (client && client.inactivity < 1200)
|
||||
|
||||
if(.)
|
||||
if(statpanel("Status") && ticker && ticker.current_state != GAME_STATE_PREGAME)
|
||||
stat("Station Time", worldtime2text())
|
||||
stat("Round Duration", round_duration())
|
||||
|
||||
if(client.holder)
|
||||
if(statpanel("Status"))
|
||||
statpanel("Status","Location:","([x], [y], [z])")
|
||||
statpanel("Status","CPU:","[world.cpu]")
|
||||
statpanel("Status","Instances:","[world.contents.len]")
|
||||
if(statpanel("Status") && processScheduler && processScheduler.getIsRunning())
|
||||
for(var/datum/controller/process/P in processScheduler.processes)
|
||||
statpanel("Status",P.getStatName(), P.getTickTime())
|
||||
else
|
||||
statpanel("Status","processScheduler is not running.")
|
||||
stat("Location:","([x], [y], [z])")
|
||||
if(statpanel("Processes"))
|
||||
stat("CPU:","[world.cpu]")
|
||||
stat("Instances:","[world.contents.len]")
|
||||
if(processScheduler && processScheduler.getIsRunning())
|
||||
for(var/datum/controller/process/P in processScheduler.processes)
|
||||
stat(P.getStatName(), P.getTickTime())
|
||||
else
|
||||
stat("processScheduler is not running.")
|
||||
|
||||
if(listed_turf && client)
|
||||
if(!TurfAdjacent(listed_turf))
|
||||
@@ -729,7 +734,7 @@
|
||||
drop_l_hand()
|
||||
drop_r_hand()
|
||||
else
|
||||
density = 1
|
||||
density = initial(density)
|
||||
|
||||
for(var/obj/item/weapon/grab/G in grabbed_by)
|
||||
if(G.state >= GRAB_AGGRESSIVE)
|
||||
@@ -760,22 +765,22 @@
|
||||
|
||||
/mob/verb/eastface()
|
||||
set hidden = 1
|
||||
return facedir(EAST)
|
||||
return facedir(client.client_dir(EAST))
|
||||
|
||||
|
||||
/mob/verb/westface()
|
||||
set hidden = 1
|
||||
return facedir(WEST)
|
||||
return facedir(client.client_dir(WEST))
|
||||
|
||||
|
||||
/mob/verb/northface()
|
||||
set hidden = 1
|
||||
return facedir(NORTH)
|
||||
return facedir(client.client_dir(NORTH))
|
||||
|
||||
|
||||
/mob/verb/southface()
|
||||
set hidden = 1
|
||||
return facedir(SOUTH)
|
||||
return facedir(client.client_dir(SOUTH))
|
||||
|
||||
|
||||
//This might need a rename but it should replace the can this mob use things check
|
||||
@@ -1053,19 +1058,19 @@ mob/proc/yank_out_object()
|
||||
|
||||
/mob/verb/northfaceperm()
|
||||
set hidden = 1
|
||||
set_face_dir(NORTH)
|
||||
set_face_dir(client.client_dir(NORTH))
|
||||
|
||||
/mob/verb/southfaceperm()
|
||||
set hidden = 1
|
||||
set_face_dir(SOUTH)
|
||||
set_face_dir(client.client_dir(SOUTH))
|
||||
|
||||
/mob/verb/eastfaceperm()
|
||||
set hidden = 1
|
||||
set_face_dir(EAST)
|
||||
set_face_dir(client.client_dir(EAST))
|
||||
|
||||
/mob/verb/westfaceperm()
|
||||
set hidden = 1
|
||||
set_face_dir(WEST)
|
||||
set_face_dir(client.client_dir(WEST))
|
||||
|
||||
/mob/proc/adjustEarDamage()
|
||||
return
|
||||
@@ -1089,4 +1094,4 @@ mob/proc/yank_out_object()
|
||||
/mob/proc/throw_mode_on()
|
||||
src.in_throw_mode = 1
|
||||
if(src.throw_icon)
|
||||
src.throw_icon.icon_state = "act_throw_on"
|
||||
src.throw_icon.icon_state = "act_throw_on"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
density = 1
|
||||
layer = 4.0
|
||||
animate_movement = 2
|
||||
// flags = NOREACT
|
||||
flags = PROXMOVE
|
||||
var/datum/mind/mind
|
||||
|
||||
var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak
|
||||
|
||||
@@ -359,11 +359,11 @@
|
||||
if(state < GRAB_NECK)
|
||||
assailant << "<span class='warning'>You require a better grab to do this.</span>"
|
||||
return
|
||||
if((affecting:head && affecting:head.flags & HEADCOVERSEYES) || \
|
||||
(affecting:wear_mask && affecting:wear_mask.flags & MASKCOVERSEYES) || \
|
||||
(affecting:glasses && affecting:glasses.flags & GLASSESCOVERSEYES))
|
||||
assailant << "<span class='danger'>You're going to need to remove the eye covering first.</span>"
|
||||
return
|
||||
for(var/slot in list(slot_wear_mask, slot_head, slot_glasses))
|
||||
var/obj/item/protection = affecting.get_equipped_item(slot)
|
||||
if(istype(protection) && (protection.body_parts_covered & EYES))
|
||||
assailant << "<span class='danger'>You're going to need to remove the eye covering first.</span>"
|
||||
return
|
||||
if(!affecting.has_eyes())
|
||||
assailant << "<span class='danger'>You cannot locate any eyes on [affecting]!</span>"
|
||||
return
|
||||
|
||||
@@ -419,7 +419,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
|
||||
var/atom/oldeye=M.client.eye
|
||||
var/aiEyeFlag = 0
|
||||
if(istype(oldeye, /mob/aiEye))
|
||||
if(istype(oldeye, /mob/eye/aiEye))
|
||||
aiEyeFlag = 1
|
||||
|
||||
var/x
|
||||
|
||||
@@ -27,35 +27,43 @@
|
||||
..()
|
||||
|
||||
|
||||
/client/proc/client_dir(input, direction=-1)
|
||||
return turn(input, direction*dir2angle(dir))
|
||||
|
||||
/client/Northeast()
|
||||
swap_hand()
|
||||
return
|
||||
|
||||
|
||||
/client/Southeast()
|
||||
attack_self()
|
||||
return
|
||||
|
||||
|
||||
/client/Southwest()
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
C.toggle_throw_mode()
|
||||
else
|
||||
usr << "\red This mob type cannot throw items."
|
||||
return
|
||||
|
||||
|
||||
diagonal_action(NORTHEAST)
|
||||
/client/Northwest()
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
if(!C.get_active_hand())
|
||||
usr << "\red You have nothing to drop in your hand."
|
||||
diagonal_action(NORTHWEST)
|
||||
/client/Southeast()
|
||||
diagonal_action(SOUTHEAST)
|
||||
/client/Southwest()
|
||||
diagonal_action(SOUTHWEST)
|
||||
|
||||
/client/proc/diagonal_action(direction)
|
||||
switch(client_dir(direction, 1))
|
||||
if(NORTHEAST)
|
||||
swap_hand()
|
||||
return
|
||||
if(SOUTHEAST)
|
||||
attack_self()
|
||||
return
|
||||
if(SOUTHWEST)
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
C.toggle_throw_mode()
|
||||
else
|
||||
usr << "\red This mob type cannot throw items."
|
||||
return
|
||||
if(NORTHWEST)
|
||||
if(iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
if(!C.get_active_hand())
|
||||
usr << "\red You have nothing to drop in your hand."
|
||||
return
|
||||
drop_item()
|
||||
else
|
||||
usr << "\red This mob type cannot drop items."
|
||||
return
|
||||
drop_item()
|
||||
else
|
||||
usr << "\red This mob type cannot drop items."
|
||||
return
|
||||
|
||||
//This gets called when you press the delete button.
|
||||
/client/verb/delete_key_pressed()
|
||||
@@ -451,8 +459,8 @@
|
||||
if(!Check_Dense_Object()) //Nothing to push off of so end here
|
||||
update_floating(0)
|
||||
return 0
|
||||
|
||||
update_floating(1)
|
||||
|
||||
update_floating(1)
|
||||
|
||||
if(restrained()) //Check to see if we can do things
|
||||
return 0
|
||||
@@ -478,10 +486,10 @@
|
||||
|
||||
if(istype(turf,/turf/simulated/floor)) // Floors don't count if they don't have gravity
|
||||
var/area/A = turf.loc
|
||||
if(istype(A) && A.has_gravity == 0)
|
||||
if(istype(A) && A.has_gravity == 0)
|
||||
if(shoegrip == null)
|
||||
shoegrip = Check_Shoegrip() //Shoegrip is only ever checked when a zero-gravity floor is encountered to reduce load
|
||||
if(!shoegrip)
|
||||
if(!shoegrip)
|
||||
continue
|
||||
|
||||
dense_object++
|
||||
|
||||
@@ -67,12 +67,7 @@
|
||||
Stat()
|
||||
..()
|
||||
|
||||
statpanel("Status")
|
||||
if (client.statpanel == "Status" && ticker)
|
||||
if (ticker.current_state != GAME_STATE_PREGAME)
|
||||
stat(null, "Station Time: [worldtime2text()]")
|
||||
statpanel("Lobby")
|
||||
if(client.statpanel=="Lobby" && ticker)
|
||||
if(statpanel("Lobby") && ticker)
|
||||
if(ticker.hide_mode)
|
||||
stat("Game Mode:", "Secret")
|
||||
else
|
||||
@@ -154,7 +149,7 @@
|
||||
return 0
|
||||
|
||||
var/datum/species/S = all_species[client.prefs.species]
|
||||
if(!(S.flags & IS_WHITELISTED))
|
||||
if(!(S.spawn_flags & IS_WHITELISTED))
|
||||
src << alert("Your current species,[client.prefs.species], is not available for play on the station.")
|
||||
return 0
|
||||
|
||||
@@ -178,7 +173,7 @@
|
||||
return 0
|
||||
|
||||
var/datum/species/S = all_species[client.prefs.species]
|
||||
if(!(S.flags & CAN_JOIN))
|
||||
if(!(S.spawn_flags & CAN_JOIN))
|
||||
src << alert("Your current species, [client.prefs.species], is not available for play on the station.")
|
||||
return 0
|
||||
|
||||
@@ -373,12 +368,6 @@
|
||||
|
||||
qdel(src)
|
||||
|
||||
proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message)
|
||||
if (ticker.current_state == GAME_STATE_PLAYING)
|
||||
if(character.mind.role_alt_title)
|
||||
rank = character.mind.role_alt_title
|
||||
global_announcer.autosay("[character.real_name],[rank ? " [rank]," : " visitor," ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer")
|
||||
|
||||
proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message)
|
||||
if (ticker.current_state == GAME_STATE_PLAYING)
|
||||
if(character.mind.role_alt_title)
|
||||
@@ -387,16 +376,11 @@
|
||||
global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer")
|
||||
|
||||
proc/LateChoices()
|
||||
var/mills = world.time // 1/10 of a second, not real milliseconds but whatever
|
||||
//var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something
|
||||
var/mins = (mills % 36000) / 600
|
||||
var/hours = mills / 36000
|
||||
|
||||
var/name = client.prefs.be_random_name ? "friend" : client.prefs.real_name
|
||||
|
||||
var/dat = "<html><body><center>"
|
||||
dat += "<b>Welcome, [name].<br></b>"
|
||||
dat += "Round Duration: [round(hours)]h [round(mins)]m<br>"
|
||||
dat += "Round Duration: [round_duration()]<br>"
|
||||
|
||||
if(emergency_shuttle) //In case Nanotrasen decides reposess CentComm's shuttles.
|
||||
if(emergency_shuttle.going_to_centcom()) //Shuttle is going to centcomm, not recalled
|
||||
@@ -503,7 +487,7 @@
|
||||
|
||||
proc/is_species_whitelisted(datum/species/S)
|
||||
if(!S) return 1
|
||||
return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.flags & IS_WHITELISTED)
|
||||
return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.spawn_flags & IS_WHITELISTED)
|
||||
|
||||
/mob/new_player/get_species()
|
||||
var/datum/species/chosen_species
|
||||
|
||||
Reference in New Issue
Block a user