mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise
Conflicts: icons/mob/head.dmi icons/mob/suit.dmi icons/obj/clothing/suits.dmi
This commit is contained in:
+15
-28
@@ -8,11 +8,13 @@ mob/proc/airflow_stun()
|
||||
if(stat == 2)
|
||||
return 0
|
||||
if(last_airflow_stun > world.time - vsc.airflow_stun_cooldown) return 0
|
||||
|
||||
if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
|
||||
src << "\blue You stay upright as the air rushes past you."
|
||||
src << "<span class='notice'>You stay upright as the air rushes past you.</span>"
|
||||
return 0
|
||||
if(weakened <= 0) src << "\red The sudden rush of air knocks you over!"
|
||||
weakened = max(weakened,5)
|
||||
if(!lying)
|
||||
src << "<span class='warning'>The sudden rush of air knocks you over!</span>"
|
||||
Weaken(5)
|
||||
last_airflow_stun = world.time
|
||||
|
||||
mob/living/silicon/airflow_stun()
|
||||
@@ -22,16 +24,9 @@ mob/living/carbon/metroid/airflow_stun()
|
||||
return
|
||||
|
||||
mob/living/carbon/human/airflow_stun()
|
||||
if(last_airflow_stun > world.time - vsc.airflow_stun_cooldown) return 0
|
||||
if(buckled) return 0
|
||||
if(shoes)
|
||||
if(shoes.flags & NOSLIP) return 0
|
||||
if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
|
||||
src << "\blue You stay upright as the air rushes past you."
|
||||
return 0
|
||||
if(weakened <= 0) src << "\red The sudden rush of air knocks you over!"
|
||||
weakened = max(weakened,rand(1,5))
|
||||
last_airflow_stun = world.time
|
||||
..()
|
||||
|
||||
atom/movable/proc/check_airflow_movable(n)
|
||||
|
||||
@@ -84,10 +79,8 @@ obj/item/check_airflow_movable(n)
|
||||
if(istype(src, /mob/living/carbon/human))
|
||||
if(src:buckled)
|
||||
return
|
||||
if(src:shoes)
|
||||
if(istype(src:shoes, /obj/item/clothing/shoes/magboots))
|
||||
if(src:shoes.flags & NOSLIP)
|
||||
return
|
||||
if(src:shoes && src:shoes.flags & NOSLIP)
|
||||
return
|
||||
src << "\red You are sucked away by airflow!"
|
||||
var/airflow_falloff = 9 - ul_FalloffAmount(airflow_dest) //It's a fast falloff calc. Very useful.
|
||||
if(airflow_falloff < 1)
|
||||
@@ -148,10 +141,8 @@ obj/item/check_airflow_movable(n)
|
||||
if(istype(src, /mob/living/carbon/human))
|
||||
if(src:buckled)
|
||||
return
|
||||
if(src:shoes)
|
||||
if(istype(src:shoes, /obj/item/clothing/shoes/magboots))
|
||||
if(src:shoes.flags & NOSLIP)
|
||||
return
|
||||
if(src:shoes && src:shoes.flags & NOSLIP)
|
||||
return
|
||||
src << "\red You are pushed away by airflow!"
|
||||
last_airflow = world.time
|
||||
var/airflow_falloff = 9 - ul_FalloffAmount(airflow_dest) //It's a fast falloff calc. Very useful.
|
||||
@@ -207,9 +198,8 @@ mob/airflow_hit(atom/A)
|
||||
for(var/mob/M in hearers(src))
|
||||
M.show_message("\red <B>\The [src] slams into \a [A]!</B>",1,"\red You hear a loud slam!",2)
|
||||
playsound(src.loc, "smash.ogg", 25, 1, -1)
|
||||
if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
|
||||
return 0
|
||||
weakened = max(weakened, (istype(A,/obj/item) ? A:w_class : rand(1,5))) //Heheheh
|
||||
var/weak_amt = istype(A,/obj/item) ? A:w_class : rand(1,5) //Heheheh
|
||||
Weaken(weak_amt)
|
||||
. = ..()
|
||||
|
||||
obj/airflow_hit(atom/A)
|
||||
@@ -240,14 +230,11 @@ mob/living/carbon/human/airflow_hit(atom/A)
|
||||
blocked = run_armor_check("groin","melee")
|
||||
apply_damage(b_loss/3, BRUTE, "groin", blocked, 0, "Airflow")
|
||||
|
||||
if(!(status_flags & CANSTUN) && !(status_flags & CANWEAKEN))
|
||||
return 0
|
||||
|
||||
if(airflow_speed > 10)
|
||||
paralysis += round(airflow_speed * vsc.airflow_stun)
|
||||
stunned = max(stunned,paralysis + 3)
|
||||
Paralyse(round(airflow_speed * vsc.airflow_stun))
|
||||
Stun(paralysis + 3)
|
||||
else
|
||||
stunned += round(airflow_speed * vsc.airflow_stun/2)
|
||||
Stun(round(airflow_speed * vsc.airflow_stun/2))
|
||||
. = ..()
|
||||
|
||||
zone/proc/movables()
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
var/heat_proof = 0 // For glass airlocks/opacity firedoors
|
||||
var/emergency = 0
|
||||
var/air_properties_vary_with_direction = 0
|
||||
var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened.
|
||||
|
||||
//Multi-tile doors
|
||||
dir = EAST
|
||||
@@ -96,7 +97,7 @@
|
||||
|
||||
|
||||
/obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group) return 0
|
||||
if(air_group) return !block_air_zones
|
||||
if(istype(mover) && mover.checkpass(PASSGLASS))
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
@@ -60,6 +60,10 @@
|
||||
opacity = 0
|
||||
density = 0
|
||||
|
||||
//These are frequenly used with windows, so make sure zones can pass.
|
||||
//Generally if a firedoor is at a place where there should be a zone boundery then there will be a regular door underneath it.
|
||||
block_air_zones = 0
|
||||
|
||||
var/blocked = 0
|
||||
var/lockdown = 0 // When the door has detected a problem, it locks.
|
||||
var/pdiff_alert = 0
|
||||
@@ -106,7 +110,7 @@
|
||||
/obj/machinery/door/firedoor/examine()
|
||||
set src in view()
|
||||
. = ..()
|
||||
|
||||
|
||||
if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF)
|
||||
usr << "<span class='warning'>WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!</span>"
|
||||
|
||||
@@ -287,7 +291,7 @@
|
||||
|
||||
/obj/machinery/door/firedoor/attack_ai(mob/user as mob)
|
||||
if(operating)
|
||||
return //Already doing something.
|
||||
return //Already doing something.
|
||||
|
||||
if(blocked)
|
||||
user << "\red \The [src] is welded solid!"
|
||||
@@ -295,11 +299,11 @@
|
||||
|
||||
var/area/A = get_area_master(src)
|
||||
ASSERT(istype(A)) // This worries me.
|
||||
var/alarmed = A.air_doors_activated || A.fire
|
||||
var/alarmed = A.air_doors_activated || A.fire
|
||||
|
||||
var/access_granted = 0
|
||||
if(isAI(user) || isrobot(user))
|
||||
access_granted = 1
|
||||
access_granted = 1
|
||||
|
||||
if(access_granted == 1)
|
||||
user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\
|
||||
@@ -320,7 +324,7 @@
|
||||
spawn(50)
|
||||
if(alarmed)
|
||||
nextstate = CLOSED
|
||||
|
||||
|
||||
// CHECK PRESSURE
|
||||
/obj/machinery/door/firedoor/process()
|
||||
..()
|
||||
|
||||
@@ -13,6 +13,16 @@
|
||||
max_amount = 60
|
||||
attack_verb = list("hit", "bludgeoned", "whacked")
|
||||
|
||||
/obj/item/stack/rods/New(var/loc, var/amount=null)
|
||||
update_icon()
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/rods/update_icon()
|
||||
if(get_amount() <= 5)
|
||||
icon_state = "rods-[get_amount()]"
|
||||
else
|
||||
icon_state = "rods"
|
||||
|
||||
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
if (istype(W, /obj/item/weapon/weldingtool))
|
||||
|
||||
@@ -169,6 +169,7 @@
|
||||
if(usr)
|
||||
usr.unEquip(src, 1)
|
||||
qdel(src)
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/item/stack/proc/add_to_stacks(mob/usr as mob)
|
||||
@@ -185,6 +186,7 @@
|
||||
usr << "You add new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
|
||||
if(!oldsrc)
|
||||
break
|
||||
update_icon()
|
||||
|
||||
/obj/item/stack/proc/get_amount()
|
||||
return amount
|
||||
@@ -201,6 +203,7 @@
|
||||
spawn(0) src.interact(usr)
|
||||
else
|
||||
..()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
@@ -220,6 +223,7 @@
|
||||
src.use(to_transfer)
|
||||
if (src && usr.machine==src)
|
||||
spawn(0) src.interact(usr)
|
||||
S.update_icon()
|
||||
else return ..()
|
||||
|
||||
/obj/item/stack/proc/copy_evidences(obj/item/stack/from as obj)
|
||||
|
||||
@@ -30,7 +30,7 @@ RCD
|
||||
|
||||
|
||||
New()
|
||||
desc = "A RCD. It currently holds [matter]/100 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
src.spark_system = new /datum/effect/effect/system/spark_spread
|
||||
spark_system.set_up(5, 0, src)
|
||||
spark_system.attach(src)
|
||||
@@ -44,9 +44,9 @@ RCD
|
||||
if((matter + R.ammoamt) > max_matter)
|
||||
user << "<span class='notice'>The RCD cant hold any more matter-units.</span>"
|
||||
return
|
||||
matter += R.ammoamt
|
||||
user.drop_item()
|
||||
del(W)
|
||||
matter += R.ammoamt
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
user << "<span class='notice'>The RCD now holds [matter]/[max_matter] matter-units.</span>"
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
@@ -168,7 +168,7 @@ RCD
|
||||
if(matter < amount)
|
||||
return 0
|
||||
matter -= amount
|
||||
desc = "A RCD. It currently holds [matter]/100 matter-units."
|
||||
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user)
|
||||
|
||||
@@ -6,30 +6,29 @@
|
||||
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "riot"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BACK
|
||||
force = 5.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
w_class = 4.0
|
||||
force = 8
|
||||
throwforce = 5
|
||||
throw_speed = 2
|
||||
throw_range = 3
|
||||
w_class = 4
|
||||
g_amt = 7500
|
||||
m_amt = 1000
|
||||
origin_tech = "materials=2"
|
||||
attack_verb = list("shoved", "bashed")
|
||||
var/cooldown = 0 //shield bash cooldown. based on world.time
|
||||
|
||||
IsShield()
|
||||
return 1
|
||||
/obj/item/weapon/shield/riot/IsShield()
|
||||
return 1
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/melee/baton))
|
||||
if(cooldown < world.time - 25)
|
||||
user.visible_message("<span class='warning'>[user] bashes [src] with [W]!</span>")
|
||||
playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1)
|
||||
cooldown = world.time
|
||||
else
|
||||
..()
|
||||
/obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/melee/baton))
|
||||
if(cooldown < world.time - 25)
|
||||
user.visible_message("<span class='warning'>[user] bashes [src] with [W]!</span>")
|
||||
playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1)
|
||||
cooldown = world.time
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/shield/riot/roman
|
||||
name = "roman shield"
|
||||
@@ -42,16 +41,93 @@
|
||||
desc = "A shield capable of stopping most melee attacks. Protects user from almost all energy projectiles. It can be retracted, expanded, and stored anywhere."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "eshield0" // eshield1 for expanded
|
||||
flags = CONDUCT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 1
|
||||
origin_tech = "materials=4;magnets=3;syndicate=4"
|
||||
attack_verb = list("shoved", "bashed")
|
||||
var/active = 0
|
||||
|
||||
/obj/item/weapon/shield/energy/IsShield()
|
||||
return (active)
|
||||
|
||||
/obj/item/weapon/shield/energy/IsReflect()
|
||||
return (active)
|
||||
|
||||
/obj/item/weapon/shield/energy/attack_self(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>You beat yourself in the head with [src].</span>"
|
||||
user.take_organ_damage(5)
|
||||
active = !active
|
||||
icon_state = "eshield[active]"
|
||||
|
||||
if(active)
|
||||
force = 10
|
||||
throwforce = 8
|
||||
throw_speed = 2
|
||||
w_class = 4
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
|
||||
user << "<span class='notice'>[src] is now active.</span>"
|
||||
else
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
w_class = 1
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1)
|
||||
user << "<span class='notice'>[src] can now be concealed.</span>"
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/shield/riot/tele
|
||||
name = "telescopic shield"
|
||||
desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "teleriot0"
|
||||
icon_override = 'icons/mob/in-hand/tools.dmi'
|
||||
slot_flags = null
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
w_class = 3
|
||||
var/active = 0
|
||||
|
||||
/obj/item/weapon/shield/riot/tele/IsShield()
|
||||
return (active)
|
||||
|
||||
/obj/item/weapon/shield/riot/tele/attack_self(mob/living/user)
|
||||
active = !active
|
||||
icon_state = "teleriot[active]"
|
||||
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
|
||||
|
||||
if(active)
|
||||
force = 8
|
||||
throwforce = 5
|
||||
throw_speed = 2
|
||||
w_class = 4
|
||||
slot_flags = SLOT_BACK
|
||||
user << "<span class='notice'>You extend \the [src].</span>"
|
||||
else
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
w_class = 3
|
||||
slot_flags = null
|
||||
user << "<span class='notice'>[src] can now be concealed.</span>"
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/cloaking_device
|
||||
name = "cloaking device"
|
||||
desc = "Use this to become invisible to the human eyesocket."
|
||||
|
||||
@@ -282,40 +282,4 @@
|
||||
src.w_class = 5
|
||||
hitsound = "swing_hit"
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
* Energy Shield
|
||||
*/
|
||||
/obj/item/weapon/shield/energy/IsShield()
|
||||
if(active)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/shield/energy/attack_self(mob/living/user as mob)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user << "\red You beat yourself in the head with [src]."
|
||||
user.take_organ_damage(5)
|
||||
active = !active
|
||||
if (active)
|
||||
force = 10
|
||||
reflect_chance = 100
|
||||
icon_state = "eshield[active]"
|
||||
w_class = 4
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
|
||||
user << "\blue [src] is now active."
|
||||
else
|
||||
force = 3
|
||||
icon_state = "eshield[active]"
|
||||
w_class = 1
|
||||
reflect_chance = 0
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
|
||||
user << "\blue [src] can now be concealed."
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
return
|
||||
@@ -113,7 +113,7 @@
|
||||
new /obj/item/weapon/storage/lockbox/loyalty(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/clothing/mask/gas/sechailer/hos(src)
|
||||
new /obj/item/weapon/shield/riot(src)
|
||||
new /obj/item/weapon/shield/riot/tele(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
|
||||
@@ -50,9 +50,9 @@
|
||||
pr_int_temp_processor = new /datum/global_iterator/pod_preserve_temp(list(src))
|
||||
pr_give_air = new /datum/global_iterator/pod_tank_give_air(list(src))
|
||||
equipment_system = new(src)
|
||||
spacepods_list += src
|
||||
|
||||
/obj/spacepod/Destroy()
|
||||
spacepods_list += src
|
||||
|
||||
/obj/spacepod/Destroy()
|
||||
spacepods_list -= src
|
||||
..()
|
||||
|
||||
@@ -61,9 +61,9 @@
|
||||
pod_overlays = new/list(2)
|
||||
pod_overlays[DAMAGE] = image(icon, icon_state="pod_damage")
|
||||
pod_overlays[FIRE] = image(icon, icon_state="pod_fire")
|
||||
|
||||
|
||||
overlays.Cut()
|
||||
|
||||
|
||||
if(health <= round(initial(health)/2))
|
||||
overlays += pod_overlays[DAMAGE]
|
||||
if(health <= round(initial(health)/4))
|
||||
@@ -72,11 +72,11 @@
|
||||
/obj/spacepod/bullet_act(var/obj/item/projectile/P)
|
||||
if(P.damage && !P.nodamage)
|
||||
deal_damage(P.damage)
|
||||
|
||||
|
||||
/obj/spacepod/blob_act()
|
||||
deal_damage(30)
|
||||
return
|
||||
|
||||
|
||||
/obj/spacepod/attack_animal(mob/living/simple_animal/user as mob)
|
||||
if(user.melee_damage_upper == 0)
|
||||
user.emote("[user.friendly] [src]")
|
||||
@@ -86,7 +86,7 @@
|
||||
visible_message("\red <B>[user]</B> [user.attacktext] [src]!")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>attacked [src.name]</font>")
|
||||
return
|
||||
|
||||
|
||||
/obj/spacepod/attack_alien(mob/user as mob)
|
||||
deal_damage(15)
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1)
|
||||
@@ -211,8 +211,8 @@
|
||||
user << "\blue <b>\The [src] is fully repaired!</b>"
|
||||
|
||||
/obj/spacepod/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/spacepod/attack_hand(mob/user as mob)
|
||||
if(!hatch_open)
|
||||
return ..()
|
||||
@@ -371,7 +371,11 @@
|
||||
return
|
||||
|
||||
if(H && H.client && H in range(1))
|
||||
if(src.occupant)
|
||||
if(src.occupant && src.occupant2)
|
||||
H << "<span class='notice'>[src.name] is full.</span>"
|
||||
return
|
||||
|
||||
if(src.occupant && !src.occupant2)
|
||||
if(src.occupant.ckey == H.ckey)
|
||||
H.visible_message("You climb over the console and drop down into the secondary seat.")
|
||||
H.reset_view(src)
|
||||
@@ -404,30 +408,36 @@
|
||||
return 1
|
||||
|
||||
else
|
||||
H.reset_view(src)
|
||||
/*
|
||||
H.client.perspective = EYE_PERSPECTIVE
|
||||
H.client.eye = src
|
||||
*/
|
||||
H.stop_pulling()
|
||||
H.forceMove(src)
|
||||
src.occupant = H
|
||||
src.add_fingerprint(H)
|
||||
src.forceMove(src.loc)
|
||||
//dir = dir_in
|
||||
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
|
||||
return 1
|
||||
if(!src.occupant)
|
||||
H.reset_view(src)
|
||||
/*
|
||||
H.client.perspective = EYE_PERSPECTIVE
|
||||
H.client.eye = src
|
||||
*/
|
||||
H.stop_pulling()
|
||||
H.forceMove(src)
|
||||
src.occupant = H
|
||||
src.add_fingerprint(H)
|
||||
src.forceMove(src.loc)
|
||||
//dir = dir_in
|
||||
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
|
||||
return 1
|
||||
else
|
||||
return
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/spacepod/proc/moved_other_inside(var/mob/living/carbon/human/H as mob)
|
||||
H.reset_view(src)
|
||||
H.stop_pulling()
|
||||
H.forceMove(src)
|
||||
src.occupant2 = H
|
||||
src.forceMove(src.loc)
|
||||
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
|
||||
return 1
|
||||
if(!src.occupant2)
|
||||
H.reset_view(src)
|
||||
H.stop_pulling()
|
||||
H.forceMove(src)
|
||||
src.occupant2 = H
|
||||
src.forceMove(src.loc)
|
||||
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
|
||||
return 1
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -436,7 +446,15 @@
|
||||
if(M != user)
|
||||
if(M.stat != 0)
|
||||
if(allow2enter)
|
||||
moved_other_inside(M)
|
||||
if(!src.occupant2)
|
||||
visible_message("\red [user.name] starts loading [M.name] into the pod!")
|
||||
sleep(10)
|
||||
moved_other_inside(M)
|
||||
else if(src.occupant2 && !src.occupant)
|
||||
usr << "\red <b>You can't put a corpse into the driver's seat!</b>"
|
||||
return
|
||||
else
|
||||
return
|
||||
else
|
||||
return
|
||||
else
|
||||
@@ -445,6 +463,68 @@
|
||||
move_inside(M, user)
|
||||
|
||||
|
||||
/obj/spacepod/verb/move_inside()
|
||||
set category = "Object"
|
||||
set name = "Enter Pod"
|
||||
set src in oview(1)
|
||||
var/fukkendisk = usr.GetTypeInAllContents(/obj/item/weapon/disk/nuclear)
|
||||
|
||||
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
|
||||
if (usr.stat || !ishuman(usr))
|
||||
return
|
||||
|
||||
if(fukkendisk)
|
||||
usr << "\red <B>The nuke-disk is locking the door every time you try to open it. You get the feeling that it doesn't want to go into the spacepod.</b>"
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/slime/M in range(1,usr))
|
||||
if(M.Victim == usr)
|
||||
usr << "You're too busy getting your life sucked out of you."
|
||||
return
|
||||
|
||||
if(src.occupant)
|
||||
if(allow2enter)
|
||||
if(!src.occupant2)
|
||||
usr << "\blue <B>You start climbing into the secondary seat.</B>"
|
||||
visible_message("\blue [usr] starts to climb into [src.name].")
|
||||
if(enter_after(40,usr))
|
||||
moved_inside(usr)
|
||||
else
|
||||
usr << "You stop entering the spacepod."
|
||||
return
|
||||
else
|
||||
usr << "\red <b>You can't fit!</b>"
|
||||
else
|
||||
usr << "\red <b>The door is locked!</b>"
|
||||
|
||||
else if(!src.occupant && src.occupant2)
|
||||
if(allow2enter)
|
||||
usr << "\blue <B>You start climbing into the primary seat.</B>"
|
||||
visible_message("\blue [usr] starts to climb into [src.name].")
|
||||
if(enter_after(40,usr))
|
||||
moved_inside(usr)
|
||||
else
|
||||
usr << "You stop entering the spacepod."
|
||||
return
|
||||
else
|
||||
usr << "\red <b>The door is locked!</b>"
|
||||
|
||||
else if(!src.occupant && !src.occupant2)
|
||||
visible_message("\blue [usr] starts to climb into [src.name].")
|
||||
if(enter_after(40,usr))
|
||||
if(!src.occupant)
|
||||
moved_inside(usr)
|
||||
else if(src.occupant!=usr)
|
||||
usr << "[src.occupant] was faster. Try better next time, loser."
|
||||
else
|
||||
usr << "You stop entering the spacepod."
|
||||
return
|
||||
|
||||
|
||||
/* !!OLD BROKEN SYSTEM!! - tiger
|
||||
|
||||
/obj/spacepod/verb/move_inside()
|
||||
set category = "Object"
|
||||
set name = "Enter Pod"
|
||||
@@ -459,8 +539,12 @@
|
||||
return
|
||||
if (usr.stat || !ishuman(usr))
|
||||
return
|
||||
|
||||
if (src.occupant)
|
||||
if(allow2enter)
|
||||
if(src.occupant2)
|
||||
usr << "\blue <B>You can't fit!</b"
|
||||
return
|
||||
usr << "\blue <B>You starts climbing into the secondary seat.</B>"
|
||||
visible_message("\blue [usr] starts to climb into [src.name]")
|
||||
if(enter_after(40,usr))
|
||||
@@ -515,46 +599,55 @@
|
||||
usr << "You stop entering the exosuit."
|
||||
return
|
||||
|
||||
*/
|
||||
|
||||
/obj/spacepod/verb/exit_pod()
|
||||
set name = "Exit pod"
|
||||
set category = "Spacepod"
|
||||
set src = usr.loc
|
||||
|
||||
|
||||
if(usr != src.occupant)
|
||||
if(src.occupant2)
|
||||
if(usr != src.occupant2)
|
||||
return
|
||||
else
|
||||
if(src.occupant)
|
||||
src.occupant.visible_message("<span class='notice'>[src.occupant2.name] climbs out of the pod!</span>") //Inform the remaining occupant that someone ejected.
|
||||
inertia_dir = 0 // engage reverse thruster and power down pod
|
||||
src.occupant2.loc = src.loc
|
||||
src.occupant2 = null
|
||||
usr << "<span class='notice'>You climb out of the pod</span>"
|
||||
usr << "<span class='notice'>You climb out of the pod.</span>"
|
||||
|
||||
|
||||
else
|
||||
return
|
||||
else
|
||||
if(src.occupant2)
|
||||
src.occupant2.visible_message("<span class='notice'>[src.occupant2.name] climbs out of the pod!</span>") //Inform the remaining occupant that someone ejected.
|
||||
inertia_dir = 0 // engage reverse thruster and power down pod
|
||||
src.occupant.loc = src.loc
|
||||
src.occupant = null
|
||||
usr << "<span class='notice'>You climb out of the pod</span>"
|
||||
usr << "<span class='notice'>You climb out of the pod.</span>"
|
||||
return
|
||||
|
||||
/obj/spacepod/verb/exit_pod2()
|
||||
if(!src.occupant2)
|
||||
set hidden = 1
|
||||
return
|
||||
|
||||
else
|
||||
set name = "Eject Secondary Seat"
|
||||
set category = "Spacepod"
|
||||
set src = usr.loc
|
||||
set hidden = 0
|
||||
|
||||
if(usr.ckey == src.occupant2.ckey)
|
||||
if(usr == src.occupant2)
|
||||
usr << "<span class='notice'>Use 'Exit Pod'</span>"
|
||||
return
|
||||
else
|
||||
usr << "<span class='notice'>You eject [src.occupant2.name].</span>"
|
||||
src.occupant2.visible_message("You were ejected from the pod!")
|
||||
src.occupant2.visible_message("<span class='warning'>You were ejected from the pod!</span>")
|
||||
inertia_dir = 0 // engage reverse thruster and power down pod
|
||||
src.occupant2.loc = src.loc
|
||||
src.occupant2 = null
|
||||
@@ -565,7 +658,7 @@
|
||||
set category = "Spacepod"
|
||||
set src = usr.loc
|
||||
|
||||
if(occupant2 == src)
|
||||
if(occupant2 == usr)
|
||||
if(!allow2enter)
|
||||
usr << "<span class='notice'>You can't unlock the doors from your seat.</span>"
|
||||
return
|
||||
|
||||
@@ -119,6 +119,10 @@ var/savefile/Banlist
|
||||
Banlist["temp"] << temp
|
||||
if (temp)
|
||||
Banlist["minutes"] << bantimestamp
|
||||
if(!temp)
|
||||
notes_add(ckey, "Permanently banned - [reason]")
|
||||
else
|
||||
notes_add(ckey, "Banned for [minutes] minutes - [reason]")
|
||||
return 1
|
||||
|
||||
/proc/RemoveBan(foldername)
|
||||
|
||||
@@ -343,4 +343,10 @@
|
||||
icon_state = "griffinhat"
|
||||
item_state = "griffinhat"
|
||||
flags = BLOCKHAIR|NODROP
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
|
||||
/obj/item/clothing/head/lordadmiralhat
|
||||
name = "Lord Admiral's Hat"
|
||||
desc = "A hat suitable for any man of high and exalted rank."
|
||||
icon_state = "lordadmiralhat"
|
||||
item_state = "lordadmiralhat"
|
||||
@@ -256,54 +256,3 @@
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Vox Armalis" = 'icons/mob/species/armalis/head.dmi',
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/space/plasmaman
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box/magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
slowdown = 2
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 0)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
species_restricted = list("Plasmaman")
|
||||
flags = STOPSPRESSUREDMAGE | PLASMAGUARD
|
||||
|
||||
icon_state = "plasmaman_suit"
|
||||
item_state = "plasmaman_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/plasmaman
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE | PLASMAGUARD
|
||||
species_restricted = list("Plasmaman")
|
||||
|
||||
icon_state = "plasmaman_helmet0"
|
||||
item_state = "plasmaman_helmet0"
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
var/on = 0
|
||||
var/no_light=0 // Disable the light on the atmos suit
|
||||
action_button_name = "Toggle Helmet Light"
|
||||
|
||||
attack_self(mob/user)
|
||||
if(!isturf(user.loc))
|
||||
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
|
||||
return
|
||||
if(no_light)
|
||||
return
|
||||
on = !on
|
||||
icon_state = "plasmaman_helmet[on]"
|
||||
// item_state = "rig[on]-[_color]"
|
||||
|
||||
if(on) user.SetLuminosity(user.luminosity + brightness_on)
|
||||
else user.SetLuminosity(user.luminosity - brightness_on)
|
||||
|
||||
pickup(mob/user)
|
||||
if(on)
|
||||
user.SetLuminosity(user.luminosity + brightness_on)
|
||||
// user.UpdateLuminosity()
|
||||
SetLuminosity(0)
|
||||
|
||||
dropped(mob/user)
|
||||
if(on)
|
||||
user.SetLuminosity(user.luminosity - brightness_on)
|
||||
// user.UpdateLuminosity()
|
||||
SetLuminosity(brightness_on)
|
||||
@@ -0,0 +1,170 @@
|
||||
// PLASMEN SHIT
|
||||
// CAN'T WEAR UNLESS YOU'RE A PINK SKELLINGTON
|
||||
/obj/item/clothing/suit/space/eva/plasmaman
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
slowdown = 2
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 0)
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
species_restricted = list("Plasmaman")
|
||||
flags = STOPSPRESSUREDMAGE | PLASMAGUARD
|
||||
|
||||
icon_state = "plasmaman_suit"
|
||||
item_state = "plasmaman_suit"
|
||||
|
||||
var/next_extinguish=0
|
||||
var/extinguish_cooldown=10 SECONDS
|
||||
var/extinguishes_left=10 // Yeah yeah, reagents, blah blah blah. This should be simple.
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/examine()
|
||||
set src in view()
|
||||
..()
|
||||
usr << "There are [extinguishes_left] extinguisher canisters left in this suit."
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(var/mob/user)
|
||||
var/mob/living/carbon/human/H=user
|
||||
if(extinguishes_left)
|
||||
if(next_extinguish > world.time)
|
||||
return
|
||||
|
||||
next_extinguish = world.time + extinguish_cooldown
|
||||
extinguishes_left--
|
||||
H << "<span class='warning'>Your suit automatically extinguishes the fire.</span>"
|
||||
H.ExtinguishMob()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE | PLASMAGUARD
|
||||
species_restricted = list("Plasmaman")
|
||||
|
||||
icon_state = "plasmaman_helmet0"
|
||||
item_state = "plasmaman_helmet0"
|
||||
var/base_state = "plasmaman_helmet"
|
||||
var/brightness_on = 4 //luminosity when on
|
||||
var/on = 0
|
||||
var/no_light=0 // Disable the light on the atmos suit
|
||||
action_button_name = "Toggle Helmet Light"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/attack_self(mob/user)
|
||||
if(!isturf(user.loc))
|
||||
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
|
||||
return
|
||||
if(no_light)
|
||||
return
|
||||
on = !on
|
||||
icon_state = "[base_state][on]"
|
||||
// item_state = "rig[on]-[_color]"
|
||||
if(on) user.SetLuminosity(user.luminosity + brightness_on)
|
||||
else user.SetLuminosity(user.luminosity - brightness_on)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/pickup(mob/user)
|
||||
if(on)
|
||||
user.SetLuminosity(user.luminosity + brightness_on)
|
||||
// user.UpdateLuminosity()
|
||||
SetLuminosity(0)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/dropped(mob/user)
|
||||
if(on)
|
||||
user.SetLuminosity(user.luminosity - brightness_on)
|
||||
// user.UpdateLuminosity()
|
||||
SetLuminosity(brightness_on)
|
||||
|
||||
|
||||
|
||||
// ENGINEERING
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
icon_state = "plasmamanAssistant_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
icon_state = "plasmamanAssistant_helmet0"
|
||||
base_state = "plasmamanAssistant_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/atmostech
|
||||
icon_state = "plasmamanAtmos_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
|
||||
icon_state = "plasmamanAtmos_helmet0"
|
||||
base_state = "plasmamanAtmos_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/engineer
|
||||
icon_state = "plasmamanEngineer_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
|
||||
icon_state = "plasmamanEngineer_helmet0"
|
||||
base_state = "plasmamanEngineer_helmet"
|
||||
|
||||
|
||||
//SERVICE
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/botanist
|
||||
icon_state = "plasmamanBotanist_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist
|
||||
icon_state = "plasmamanBotanist_helmet0"
|
||||
base_state = "plasmamanBotanist_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/chaplain
|
||||
icon_state = "plasmamanChaplain_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/chaplain
|
||||
icon_state = "plasmamanChaplain_helmet0"
|
||||
base_state = "plasmamanChaplain_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/service
|
||||
icon_state = "plasmamanService_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/service
|
||||
icon_state = "plasmamanService_helmet0"
|
||||
base_state = "plasmamanService_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/janitor
|
||||
icon_state = "plasmamanJanitor_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/janitor
|
||||
icon_state = "plasmamanJanitor_helmet0"
|
||||
base_state = "plasmamanJanitor_helmet"
|
||||
|
||||
|
||||
//CARGO
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/cargo
|
||||
icon_state = "plasmamanCargo_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo
|
||||
icon_state = "plasmamanCargo_helmet0"
|
||||
base_state = "plasmamanCargo_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/miner
|
||||
icon_state = "plasmamanMiner_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/miner
|
||||
icon_state = "plasmamanMiner_helmet0"
|
||||
base_state = "plasmamanMiner_helmet"
|
||||
|
||||
|
||||
// MEDSCI
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/medical
|
||||
icon_state = "plasmamanMedical_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
|
||||
icon_state = "plasmamanMedical_helmet0"
|
||||
base_state = "plasmamanMedical_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/science
|
||||
icon_state = "plasmamanScience_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/science
|
||||
icon_state = "plasmamanScience_helmet0"
|
||||
base_state = "plasmamanScience_helmet"
|
||||
|
||||
|
||||
//SECURITY
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/security
|
||||
icon_state = "plasmamanSecurity_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/security
|
||||
icon_state = "plasmamanSecurity_helmet0"
|
||||
base_state = "plasmamanSecurity_helmet"
|
||||
@@ -470,4 +470,11 @@
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
item_state = initial(item_state)
|
||||
usr.update_inv_wear_suit()
|
||||
usr.update_inv_wear_suit()
|
||||
|
||||
/obj/item/clothing/suit/lordadmiral
|
||||
name = "Lord Admiral's Coat"
|
||||
desc = "You'll be the Ruler of the King's Navy in no time."
|
||||
icon_state = "lordadmiral"
|
||||
item_state = "lordadmiral"
|
||||
allowed = list (/obj/item/weapon/gun)
|
||||
@@ -78,4 +78,11 @@
|
||||
name = "camo pants"
|
||||
desc = "A pair of woodland camouflage pants. Probably not the best choice for a space station."
|
||||
icon_state = "camopants"
|
||||
_color = "camopants"
|
||||
_color = "camopants"
|
||||
|
||||
/obj/item/clothing/under/pants/chaps
|
||||
name = "black leather assless chaps"
|
||||
desc = "For those brave enough to weather the breeze."
|
||||
icon_state = "chaps"
|
||||
_color = "chaps"
|
||||
flags = ONESIZEFITSALL
|
||||
@@ -46,8 +46,8 @@ var/global/list/possibleEvents = list()
|
||||
// Code/WorkInProgress/Cael_Aislinn/Economy/Economy_Events_Mundane.dm
|
||||
|
||||
possibleEvents[/datum/event/economic_event] = 300
|
||||
possibleEvents[/datum/event/trivial_news] = 400
|
||||
possibleEvents[/datum/event/mundane_news] = 300
|
||||
//possibleEvents[/datum/event/trivial_news] = 400
|
||||
//possibleEvents[/datum/event/mundane_news] = 300
|
||||
|
||||
possibleEvents[/datum/event/cargo_bonus] = 150
|
||||
|
||||
|
||||
@@ -293,12 +293,12 @@
|
||||
|
||||
/client/proc/event_manager_panel()
|
||||
set name = "Event Manager Panel"
|
||||
set category = "Admin"
|
||||
set category = "Event"
|
||||
if(event_manager)
|
||||
event_manager.Interact(usr)
|
||||
feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
|
||||
/datum/event/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in!
|
||||
var/area/candidate = null
|
||||
|
||||
@@ -343,7 +343,7 @@
|
||||
break
|
||||
|
||||
return candidate
|
||||
|
||||
|
||||
/datum/event/proc/num_players()
|
||||
var/players = 0
|
||||
for(var/mob/living/carbon/human/P in player_list)
|
||||
|
||||
@@ -6,8 +6,36 @@
|
||||
* Rewritten (except for player HTML) by N3X15
|
||||
***********************/
|
||||
|
||||
// Open up WMP and play musique.
|
||||
// TODO: Convert to VLC for cross-platform and ogg support. - N3X
|
||||
// Open up VLC and play musique.
|
||||
// Converted to VLC for cross-platform and ogg support. - N3X
|
||||
var/const/PLAYER_HTML={"
|
||||
<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org" />
|
||||
<object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" codebase="http://download.videolan.org/pub/videolan/vlc/last/win32/axvlc.cab" id="player"></object>
|
||||
<script>
|
||||
function noErrorMessages () { return true; }
|
||||
window.onerror = noErrorMessages;
|
||||
function SetMusic(url, time, volume) {
|
||||
var vlc = document.getElementById('player');
|
||||
|
||||
// Stop playing
|
||||
vlc.playlist.stop();
|
||||
|
||||
// Clear playlist
|
||||
vlc.playlist.items.clear();
|
||||
|
||||
// Add new playlist item.
|
||||
var id = vlc.playlist.add(url);
|
||||
|
||||
// Play playlist item
|
||||
vlc.playlist.playItem(id);
|
||||
|
||||
vlc.input.time = time*1000; // VLC takes milliseconds.
|
||||
vlc.audio.volume = volume*100; // \[0-200]
|
||||
}
|
||||
</script>
|
||||
"}
|
||||
|
||||
/* OLD, DO NOT USE. CONTROLS.CURRENTPOSITION IS BROKEN.
|
||||
var/const/PLAYER_HTML={"
|
||||
<OBJECT id='player' CLASSID='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6' type='application/x-oleobject'></OBJECT>
|
||||
<script>
|
||||
@@ -20,6 +48,7 @@ function SetMusic(url, time, volume) {
|
||||
player.Settings.volume = volume;
|
||||
}
|
||||
</script>"}
|
||||
*/
|
||||
|
||||
// Hook into the events we desire.
|
||||
/hook_handler/soundmanager
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/mob/living/carbon/alien/humanoid/hunter
|
||||
name = "alien hunter"
|
||||
caste = "h"
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
maxHealth = 125
|
||||
health = 125
|
||||
storedPlasma = 100
|
||||
max_plasma = 150
|
||||
icon_state = "alienh_s"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/mob/living/carbon/alien/humanoid/sentinel
|
||||
name = "alien sentinel"
|
||||
caste = "s"
|
||||
maxHealth = 125
|
||||
health = 125
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
storedPlasma = 100
|
||||
max_plasma = 250
|
||||
icon_state = "aliens_s"
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
/mob/living/carbon/verb/give()
|
||||
/mob/living/carbon/verb/give(var/mob/living/carbon/target in oview(1))
|
||||
set category = "IC"
|
||||
set name = "Give"
|
||||
set src in view(1)
|
||||
if(src.stat == 2 || usr.stat == 2 || src.client == null)
|
||||
return
|
||||
if(src == usr)
|
||||
usr << "\red I feel stupider, suddenly."
|
||||
|
||||
if(target.stat == 2 || usr.stat == 2|| target.client == null)
|
||||
return
|
||||
var/obj/item/I
|
||||
if(!usr.hand && usr.r_hand == null)
|
||||
usr << "\red You don't have anything in your right hand to give to [src.name]"
|
||||
usr << "<span class='warning'> You don't have anything in your right hand to give to [target.name]</span>"
|
||||
return
|
||||
if(usr.hand && usr.l_hand == null)
|
||||
usr << "\red You don't have anything in your left hand to give to [src.name]"
|
||||
usr << "<span class='warning'> You don't have anything in your left hand to give to [target.name]</span>"
|
||||
return
|
||||
if(usr.hand)
|
||||
I = usr.l_hand
|
||||
@@ -23,38 +20,38 @@
|
||||
if((I.flags & NODROP) || (I.flags & ABSTRACT))
|
||||
usr << "<span class='notice'>That's not exactly something you can give.</span>"
|
||||
return
|
||||
if(src.r_hand == null || src.l_hand == null)
|
||||
switch(alert(src,"[usr] wants to give you \a [I]?",,"Yes","No"))
|
||||
if(target.r_hand == null || target.l_hand == null)
|
||||
switch(alert(target,"[usr] wants to give you \a [I]?",,"Yes","No"))
|
||||
if("Yes")
|
||||
if(!I)
|
||||
return
|
||||
if(!Adjacent(usr))
|
||||
usr << "\red You need to stay in reaching distance while giving an object."
|
||||
src << "\red [usr.name] moved too far away."
|
||||
usr << "<span class='warning'> You need to stay in reaching distance while giving an object.</span>"
|
||||
target << "<span class='warning'> [usr.name] moved too far away.</span>"
|
||||
return
|
||||
if((usr.hand && usr.l_hand != I) || (!usr.hand && usr.r_hand != I))
|
||||
usr << "\red You need to keep the item in your active hand."
|
||||
src << "\red [usr.name] seem to have given up on giving \the [I.name] to you."
|
||||
usr << "<span class='warning'> You need to keep the item in your active hand.</span>"
|
||||
target << "<span class='warning'> [usr.name] seem to have given up on giving \the [I.name] to you.</span>"
|
||||
return
|
||||
if(src.r_hand != null && src.l_hand != null)
|
||||
src << "\red Your hands are full."
|
||||
usr << "\red Their hands are full."
|
||||
if(target.r_hand != null && target.l_hand != null)
|
||||
target << "<span class='warning'> Your hands are full.</span>"
|
||||
usr << "<span class='warning'> Their hands are full.</span>"
|
||||
return
|
||||
else
|
||||
usr.drop_item()
|
||||
if(src.r_hand == null)
|
||||
src.r_hand = I
|
||||
if(target.r_hand == null)
|
||||
target.r_hand = I
|
||||
else
|
||||
src.l_hand = I
|
||||
I.loc = src
|
||||
target.l_hand = I
|
||||
I.loc = target
|
||||
I.layer = 20
|
||||
I.add_fingerprint(src)
|
||||
I.add_fingerprint(target)
|
||||
src.update_inv_l_hand()
|
||||
src.update_inv_r_hand()
|
||||
usr.update_inv_l_hand()
|
||||
usr.update_inv_r_hand()
|
||||
src.visible_message("\blue [usr.name] handed \the [I.name] to [src.name].")
|
||||
target.visible_message("<span class='notice'> [usr.name] handed \the [I.name] to [target.name].</span>")
|
||||
if("No")
|
||||
src.visible_message("\red [usr.name] tried to hand [I.name] to [src.name] but [src.name] didn't want it.")
|
||||
target.visible_message("<span class='warning'> [usr.name] tried to hand [I.name] to [target.name] but [target.name] didn't want it.</span>")
|
||||
else
|
||||
usr << "\red [src.name]'s hands are full."
|
||||
usr << "<span class='warning'> [target.name]'s hands are full.</span>"
|
||||
@@ -11,8 +11,10 @@
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/clothing/head/helmet/space/rig)) // If the item to be equipped is a rigid suit helmet
|
||||
src << "\red You must fasten the helmet to a hardsuit first. (Target the head and use on a hardsuit)" // Stop eva helms equipping.
|
||||
return 0
|
||||
var/obj/item/clothing/head/helmet/space/rig/C = I
|
||||
if(C.rig_restrict_helmet)
|
||||
src << "\red You must fasten the helmet to a hardsuit first. (Target the head and use on a hardsuit)" // Stop eva helms equipping.
|
||||
return 0
|
||||
|
||||
if(H.equip_to_appropriate_slot(I))
|
||||
if(hand)
|
||||
|
||||
@@ -466,7 +466,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
if(species.name=="Plasmaman")
|
||||
|
||||
// Check if we're wearing our biosuit and mask.
|
||||
if (!istype(wear_suit,/obj/item/clothing/suit/space/plasmaman) || !istype(head,/obj/item/clothing/head/helmet/space/plasmaman))
|
||||
if (!istype(wear_suit,/obj/item/clothing/suit/space/eva/plasmaman) || !istype(head,/obj/item/clothing/head/helmet/space/eva/plasmaman))
|
||||
//testing("Plasmaman [src] leakin'. coverflags=[cover_flags]")
|
||||
// OH FUCK HE LEAKIN'.
|
||||
// This was OP.
|
||||
|
||||
@@ -30,26 +30,48 @@
|
||||
H.unEquip(H.wear_mask)
|
||||
|
||||
H.equip_or_collect(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
|
||||
var/suit=/obj/item/clothing/suit/space/plasmaman
|
||||
var/helm=/obj/item/clothing/head/helmet/space/plasmaman
|
||||
var/suit=/obj/item/clothing/suit/space/eva/plasmaman
|
||||
var/helm=/obj/item/clothing/head/helmet/space/eva/plasmaman
|
||||
var/tank_slot = slot_s_store
|
||||
var/tank_slot_name = "suit storage"
|
||||
|
||||
switch(H.mind.assigned_role)
|
||||
/*
|
||||
if("Research Director","Scientist","Geneticist","Roboticist")
|
||||
suit=/obj/item/clothing/suit/space/vox/casual/science
|
||||
helm=/obj/item/clothing/head/helmet/space/vox/casual/science
|
||||
if("Chief Engineer","Station Engineer","Atmospheric Technician")
|
||||
suit=/obj/item/clothing/suit/space/vox/casual/engineer
|
||||
helm=/obj/item/clothing/head/helmet/space/vox/casual/engineer
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/science
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/science
|
||||
if("Chief Engineer","Station Engineer")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/engineer
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/engineer
|
||||
if("Atmospheric Technician")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/atmostech
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
|
||||
if("Head of Security","Warden","Detective","Security Officer")
|
||||
suit=/obj/item/clothing/suit/space/vox/casual/security
|
||||
helm=/obj/item/clothing/head/helmet/space/vox/casual/security
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/security
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security
|
||||
if("Chief Medical Officer","Medical Doctor","Paramedic","Chemist")
|
||||
suit=/obj/item/clothing/suit/space/vox/casual/medical
|
||||
helm=/obj/item/clothing/head/helmet/space/vox/casual/medical
|
||||
*/ // For now.
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
|
||||
if("Bartender", "Chef")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/service
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/service
|
||||
if("Cargo Technician", "Quartermaster")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/cargo
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo
|
||||
if("Shaft Miner")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/miner
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/miner
|
||||
if("Botanist")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/botanist
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist
|
||||
if("Chaplain")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/chaplain
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/chaplain
|
||||
if("Janitor")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/janitor
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/janitor
|
||||
if("Assistant")
|
||||
suit=/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
if("Clown","Mime")
|
||||
tank_slot=slot_r_hand
|
||||
tank_slot_name = "hand"
|
||||
|
||||
@@ -598,6 +598,32 @@
|
||||
icon_state = "vox_shortquills"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
vox_crestedquills
|
||||
name = "Crested Vox Quills"
|
||||
icon_state = "vox_crestedquills"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
vox_tielquills
|
||||
name = "Vox Tiel Quills"
|
||||
icon_state = "vox_tielquills"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
vox_emperorquills
|
||||
name = "Vox Emperor Quills"
|
||||
icon_state = "vox_emperorquills"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
vox_keelquills
|
||||
name = "Vox Keel Quills"
|
||||
icon_state = "vox_keelquills"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
vox_keetquills
|
||||
name = "Vox Keet Quills"
|
||||
icon_state = "vox_keetquills"
|
||||
species_allowed = list("Vox")
|
||||
|
||||
|
||||
/datum/sprite_accessory/facial_hair
|
||||
|
||||
taj_sideburns
|
||||
|
||||
@@ -68,6 +68,17 @@
|
||||
build_path = /obj/item/weapon/grenade/chem_grenade/large
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/tele_shield
|
||||
name = "Telescopic Riot Shield"
|
||||
desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
|
||||
id = "tele_shield"
|
||||
req_tech = list("combat" = 4, "materials" = 3, "engineering" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 4000, "$glass" = 5000, "$silver" = 300)
|
||||
build_path = /obj/item/weapon/shield/riot/tele
|
||||
locked = 1
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/lasercannon
|
||||
name = "Laser Cannon"
|
||||
desc = "A heavy duty laser cannon."
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
if (istype(in_use, /obj/machinery/computer/shuttle_control/emergency))
|
||||
var/obj/machinery/computer/shuttle_control/emergency/C = in_use
|
||||
C.reset_authorization()
|
||||
|
||||
|
||||
emergency_shuttle.shuttle_arrived()
|
||||
|
||||
/datum/shuttle/ferry/emergency/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction)
|
||||
@@ -37,7 +37,7 @@
|
||||
var/obj/machinery/computer/shuttle_control/emergency/C = user
|
||||
if (!C.has_authorization())
|
||||
return 0
|
||||
|
||||
|
||||
if(moving_status == SHUTTLE_STRANDED && C.has_authorization())
|
||||
return 1
|
||||
return ..()
|
||||
@@ -45,12 +45,12 @@
|
||||
/datum/shuttle/ferry/emergency/can_force(var/mob/user)
|
||||
if (istype(user, /obj/machinery/computer/shuttle_control/emergency))
|
||||
var/obj/machinery/computer/shuttle_control/emergency/C = user
|
||||
|
||||
|
||||
//initiating or cancelling a launch ALWAYS requires authorization, but if we are already set to launch anyways than forcing does not.
|
||||
//this is so that people can force launch if the docking controller cannot safely undock without needing X heads to swipe.
|
||||
if (process_state != WAIT_LAUNCH && !C.has_authorization())
|
||||
return 0
|
||||
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/shuttle/ferry/emergency/can_cancel(var/mob/user)
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
/datum/shuttle/ferry/emergency/launch(var/user)
|
||||
if (!can_launch(user)) return
|
||||
|
||||
|
||||
if(emergency_shuttle.no_escape)
|
||||
user << "<span class='warning'>The emergency shuttle has been disabled by Centcom.</span>"
|
||||
return
|
||||
@@ -155,7 +155,7 @@
|
||||
/obj/machinery/computer/shuttle_control/emergency/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
read_authorization(W)
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/computer/shuttle_control/emergency/emag_act(user as mob)
|
||||
if (!emagged)
|
||||
user << "\blue You short out the [src]'s authorization protocols."
|
||||
@@ -214,7 +214,7 @@
|
||||
"docking_status" = shuttle.docking_controller? shuttle.docking_controller.get_docking_status() : null,
|
||||
"docking_override" = shuttle.docking_controller? shuttle.docking_controller.override_enabled : null,
|
||||
"can_launch" = shuttle.can_launch(src),
|
||||
"can_cancel" = shuttle.can_cancel(src),
|
||||
//"can_cancel" = shuttle.can_cancel(src),
|
||||
"can_force" = shuttle.can_force(src),
|
||||
"auth_list" = auth_list,
|
||||
"has_auth" = has_auth,
|
||||
@@ -236,7 +236,7 @@
|
||||
if(href_list["removeid"])
|
||||
var/dna_hash = href_list["removeid"]
|
||||
authorized -= dna_hash
|
||||
|
||||
|
||||
if(!emagged && href_list["scanid"])
|
||||
//They selected an empty entry. Try to scan their id.
|
||||
if (ishuman(usr))
|
||||
|
||||
Reference in New Issue
Block a user