Merge pull request #1564 from VOREStation/polaris-merge-2017-05-26
Polaris Sync 2017 05 26
@@ -24,12 +24,16 @@ Class Procs:
|
||||
erase_all()
|
||||
Called when the turf is changed with ChangeTurf(). Erases all existing connections.
|
||||
|
||||
Macros:
|
||||
check(connection/c)
|
||||
Checks for connection validity. It's possible to have a reference to a connection that has been erased.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
// macro-ized to cut down on proc calls
|
||||
#define check(c) (c && c.valid())
|
||||
|
||||
/turf/var/tmp/connection_manager/connections
|
||||
|
||||
/connection_manager/var/connection/N
|
||||
@@ -98,5 +102,4 @@ Class Procs:
|
||||
if(check(D)) D.erase()
|
||||
#endif
|
||||
|
||||
/connection_manager/proc/check(connection/c)
|
||||
return c && c.valid()
|
||||
#undef check
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// Z-level flags bitfield - Set these flags to determine the z level's purpose
|
||||
#define MAP_LEVEL_STATION 0x001 // Z-levels the station exists on
|
||||
#define MAP_LEVEL_ADMIN 0x002 // Z-levels for admin functionality (Centcom, shuttle transit, etc)
|
||||
#define MAP_LEVEL_CONTACT 0x004 // Z-levels that can be contacted from the station, for eg announcements
|
||||
#define MAP_LEVEL_PLAYER 0x008 // Z-levels a character can typically reach
|
||||
#define MAP_LEVEL_SEALED 0x010 // Z-levels that don't allow random transit at edge
|
||||
#define MAP_LEVEL_EMPTY 0x020 // Empty Z-levels that may be used for various things (currently used by bluespace jump)
|
||||
#define MAP_LEVEL_CONSOLES 0x040 // Z-levels available to various consoles, such as the crew monitor (when that gets coded in). Defaults to station_levels if unset.
|
||||
@@ -139,45 +139,38 @@
|
||||
|
||||
/////// 5.56mm
|
||||
/datum/category_item/autolathe/arms/rifle_556
|
||||
name = "10rnd rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/a556
|
||||
name = "rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/c556
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556p
|
||||
name = "10rnd rifle magazine (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/a556/practice
|
||||
name = "rifle magazine (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/c556/practice
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556m
|
||||
name = "20rnd rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/a556m
|
||||
/datum/category_item/autolathe/arms/machinegun_556
|
||||
name = "machinegun box magazine (5.56)"
|
||||
path =/obj/item/ammo_magazine/a556
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556mp
|
||||
name = "20rnd rifle magazine (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/a556m/practice
|
||||
hidden = 1
|
||||
|
||||
/////// 7.62
|
||||
/datum/category_item/autolathe/arms/rifle_small_762
|
||||
name = "10rnd rifle magazine (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/s762
|
||||
hidden = 1
|
||||
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_762
|
||||
name = "20rnd rifle magazine (7.62mm)"
|
||||
name = "rifle magazine (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/c762
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/machinegun_762
|
||||
name = "machinegun box magazine (7.62)"
|
||||
path =/obj/item/ammo_magazine/a762
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_magazine
|
||||
name = "24rnd shotgun magazine (12g)"
|
||||
path =/obj/item/ammo_magazine/g12
|
||||
hidden = 1
|
||||
|
||||
/*
|
||||
/datum/category_item/autolathe/arms/rifle_small_762
|
||||
name = "rifle magazine (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/s762
|
||||
hidden = 1
|
||||
*/
|
||||
|
||||
/* Commented out until autolathe stuff is decided/fixed. Will probably remove these entirely. -Spades
|
||||
// These should always be/empty! The idea is to fill them up manually with ammo clips.
|
||||
|
||||
@@ -351,7 +344,7 @@
|
||||
path =/obj/item/ammo_magazine/clip/a50
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
*/
|
||||
/datum/category_item/autolathe/arms/rifle_clip_556
|
||||
name = "ammo clip (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/clip/a556
|
||||
@@ -362,7 +355,6 @@
|
||||
name = "ammo clip (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/clip/a556/practice
|
||||
category = "Arms and Ammunition"
|
||||
*/
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_clip_762
|
||||
name = "ammo clip (7.62mm)"
|
||||
|
||||
@@ -48,42 +48,41 @@
|
||||
name = "Anti-Materiel Rifle ammo box (14.5mm)"
|
||||
path = /obj/item/weapon/storage/box/sniperammo
|
||||
|
||||
/datum/uplink_item/item/ammo/a556
|
||||
name = "10rnd Rifle Magazine (5.56mm)"
|
||||
path = /obj/item/ammo_magazine/a556
|
||||
/datum/uplink_item/item/ammo/c556
|
||||
name = "Rifle Magazine (5.56mm)"
|
||||
path = /obj/item/ammo_magazine/c556
|
||||
|
||||
/datum/uplink_item/item/ammo/a556/ap
|
||||
name = "10rnd Rifle Magazine (5.56mm AP)"
|
||||
path = /obj/item/ammo_magazine/a556/ap
|
||||
/datum/uplink_item/item/ammo/c556/ext
|
||||
name = "Rifle Magazine (5.56mm Extended)"
|
||||
path = /obj/item/ammo_magazine/c556/ext
|
||||
|
||||
/datum/uplink_item/item/ammo/c556/ap
|
||||
name = "Rifle Magazine (5.56mm AP)"
|
||||
path = /obj/item/ammo_magazine/c556/ap
|
||||
|
||||
/datum/uplink_item/item/ammo/c556/ap/ext
|
||||
name = "Rifle Magazine (5.56mm AP Extended)"
|
||||
path = /obj/item/ammo_magazine/c556/ap/ext
|
||||
|
||||
/datum/uplink_item/item/ammo/c762
|
||||
name = "20rnd Rifle Magazine (7.62mm)"
|
||||
name = "Rifle Magazine (7.62mm)"
|
||||
path = /obj/item/ammo_magazine/c762
|
||||
|
||||
/datum/uplink_item/item/ammo/c762/ap
|
||||
name = "20rnd Rifle Magazine (7.62mm AP)"
|
||||
name = "Rifle Magazine (7.62mm AP)"
|
||||
path = /obj/item/ammo_magazine/c762/ap
|
||||
|
||||
/datum/uplink_item/item/ammo/s762
|
||||
name = "10rnd Rifle Magazine (7.62mm)"
|
||||
path = /obj/item/ammo_magazine/s762
|
||||
item_cost = 10 // Half the capacity.
|
||||
|
||||
/datum/uplink_item/item/ammo/s762/ap
|
||||
name = "10rnd Rifle Magazine (7.62mm AP)"
|
||||
path = /obj/item/ammo_magazine/s762/ap
|
||||
|
||||
/datum/uplink_item/item/ammo/a10mm
|
||||
name = "SMG Magazine (10mm)"
|
||||
path = /obj/item/ammo_magazine/a10mm
|
||||
|
||||
/datum/uplink_item/item/ammo/a762
|
||||
name = "Machinegun Magazine (7.62mm)"
|
||||
path = /obj/item/ammo_magazine/a762
|
||||
/datum/uplink_item/item/ammo/a556
|
||||
name = "Machinegun Magazine (5.56mm)"
|
||||
path = /obj/item/ammo_magazine/a556
|
||||
|
||||
/datum/uplink_item/item/ammo/a762/ap
|
||||
name = "Machinegun Magazine (7.62mm AP)"
|
||||
path = /obj/item/ammo_magazine/a762/ap
|
||||
/datum/uplink_item/item/ammo/a556/ap
|
||||
name = "Machinegun Magazine (5.56mm AP)"
|
||||
path = /obj/item/ammo_magazine/a556/ap
|
||||
|
||||
/datum/uplink_item/item/ammo/g12
|
||||
name = "12g Shotgun Ammo Box (Slug)"
|
||||
|
||||
@@ -9,6 +9,8 @@ var/datum/antagonist/traitor/traitors
|
||||
/datum/antagonist/traitor/auto
|
||||
id = MODE_AUTOTRAITOR
|
||||
allow_latejoin = 1
|
||||
hard_cap = 4
|
||||
initial_spawn_target = 4
|
||||
|
||||
/datum/antagonist/traitor/New()
|
||||
..()
|
||||
|
||||
@@ -281,9 +281,11 @@ var/list/mob/living/forced_ambiance_list = new
|
||||
|
||||
if(istype(mob,/mob/living/carbon/human/))
|
||||
var/mob/living/carbon/human/H = mob
|
||||
if(H.buckled)
|
||||
return // Being buckled to something solid keeps you in place.
|
||||
if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.item_flags & NOSLIP))
|
||||
return
|
||||
|
||||
|
||||
if(H.m_intent == "run")
|
||||
H.AdjustStunned(6)
|
||||
H.AdjustWeakened(6)
|
||||
|
||||
@@ -98,8 +98,8 @@
|
||||
/datum/technomancer/assistance/golem
|
||||
name = "Friendly GOLEM unit"
|
||||
desc = "Teleports a specially designed synthetic unit to you, which is very durable, has an advanced AI, and can also use \
|
||||
functions. It knows Shield, Targeted Blink, Beam, Flame Tongue, Mend Wounds, and Mend Burns. It also has a large storage \
|
||||
capacity for energy, and due to it's synthetic nature, instability is less of an issue for them."
|
||||
functions. It knows Shield, Targeted Blink, Beam, Mend Life, Mend Synthetic, Lightning, Repel Missiles, Corona, Ionic Bolt, Dispel, and Chain Lightning. \
|
||||
It also has a large storage capacity for energy, and due to it's synthetic nature, instability is less of an issue for them."
|
||||
cost = 350
|
||||
obj_path = null //TODO
|
||||
one_use_only = 1
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
//An AI-controlled 'companion' for the Technomancer. It's tough, strong, and can also use spells.
|
||||
/mob/living/simple_animal/hostile/technomancer_golem
|
||||
/mob/living/simple_animal/technomancer_golem
|
||||
name = "G.O.L.E.M."
|
||||
desc = "A rather unusual looking synthetic."
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
icon_state = "Security"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "technomancer_golem"
|
||||
health = 250
|
||||
maxHealth = 250
|
||||
stop_automated_movement = 1
|
||||
@@ -27,46 +27,137 @@
|
||||
unsuitable_atoms_damage = 0
|
||||
speed = 0
|
||||
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attacktext = "pummeled"
|
||||
melee_damage_lower = 30 // It has a built in esword.
|
||||
melee_damage_upper = 30
|
||||
attacktext = "slashed"
|
||||
attack_sound = null
|
||||
friendly = "hugs"
|
||||
resistance = 0
|
||||
|
||||
var/obj/item/weapon/technomancer_core/core = null
|
||||
var/obj/item/weapon/spell/active_spell = null
|
||||
var/obj/item/weapon/technomancer_core/golem/core = null
|
||||
var/obj/item/weapon/spell/active_spell = null // Shield and ranged spells
|
||||
var/mob/living/master = null
|
||||
|
||||
/mob/living/simple_animal/hostile/technomancer_golem/New()
|
||||
..()
|
||||
core = new core(src)
|
||||
var/list/known_spells = list(
|
||||
"reflect" = /obj/item/weapon/spell/reflect,
|
||||
"shield" = /obj/item/weapon/spell/shield,
|
||||
"dispel" = /obj/item/weapon/spell/dispel,
|
||||
"mend life" = /obj/item/weapon/spell/modifier/mend_life,
|
||||
"mend synthetic" = /obj/item/weapon/spell/modifier/mend_synthetic,
|
||||
"repel missiles" = /obj/item/weapon/spell/modifier/repel_missiles,
|
||||
"corona" = /obj/item/weapon/spell/modifier/corona,
|
||||
"beam" = /obj/item/weapon/spell/projectile/beam,
|
||||
"chain lightning" = /obj/item/weapon/spell/projectile/chain_lightning,
|
||||
"force missile" = /obj/item/weapon/spell/projectile/force_missile,
|
||||
"ionic bolt" = /obj/item/weapon/spell/projectile/ionic_bolt,
|
||||
"lightning" = /obj/item/weapon/spell/projectile/lightning
|
||||
)
|
||||
|
||||
/mob/living/simple_animal/hostile/technomancer_golem/Destroy()
|
||||
/mob/living/simple_animal/technomancer_golem/New()
|
||||
..()
|
||||
core = new(src)
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/Destroy()
|
||||
qdel(core)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/technomancer_golem/proc/bind_to_mob(mob/user)
|
||||
/mob/living/simple_animal/technomancer_golem/update_icon()
|
||||
overlays.Cut()
|
||||
overlays.Add(image(icon, src, "golem_sword"))
|
||||
overlays.Add(image(icon, src, "golem_spell"))
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/isSynthetic()
|
||||
return TRUE // So Mend Synthetic will work on them.
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/place_spell_in_hand(var/path)
|
||||
if(!path || !ispath(path))
|
||||
return 0
|
||||
|
||||
if(active_spell)
|
||||
qdel(active_spell) // Get rid of our old spell.
|
||||
|
||||
var/obj/item/weapon/spell/S = new path(src)
|
||||
active_spell = S
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/verb/test_giving_spells()
|
||||
var/choice = input(usr, "What spell?", "Give spell") as null|anything in known_spells
|
||||
if(choice)
|
||||
place_spell_in_hand(known_spells[choice])
|
||||
|
||||
// Used to cast spells.
|
||||
/mob/living/simple_animal/technomancer_golem/RangedAttack(var/atom/A, var/params)
|
||||
if(active_spell)
|
||||
if(active_spell.cast_methods & CAST_RANGED)
|
||||
active_spell.on_ranged_cast(A, src)
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/UnarmedAttack(var/atom/A, var/proximity)
|
||||
if(proximity)
|
||||
if(active_spell)
|
||||
if(active_spell.cast_methods & CAST_MELEE)
|
||||
active_spell.on_melee_cast(A, src)
|
||||
else if(active_spell.cast_methods & CAST_RANGED)
|
||||
active_spell.on_ranged_cast(A, src)
|
||||
var/effective_cooldown = round(active_spell.cooldown * core.cooldown_modifier, 5)
|
||||
src.setClickCooldown(effective_cooldown)
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/get_technomancer_core()
|
||||
return core
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/proc/bind_to_mob(mob/user)
|
||||
if(!user || master)
|
||||
return
|
||||
master = user
|
||||
name = "[master]'s [initial(name)]"
|
||||
|
||||
/mob/living/simple_animal/hostile/technomancer_golem/examine(mob/user)
|
||||
/mob/living/simple_animal/technomancer_golem/examine(mob/user)
|
||||
..()
|
||||
if(user.mind && technomancers.is_antagonist(user.mind))
|
||||
user << "Your pride and joy. It's a very special synthetic robot, capable of using functions similar to you, and you built it \
|
||||
yourself! It'll always stand by your side, ready to help you out. You have no idea what GOLEM stands for, however..."
|
||||
|
||||
/mob/living/simple_animal/hostile/technomancer_golem/Life()
|
||||
/mob/living/simple_animal/technomancer_golem/Life()
|
||||
..()
|
||||
handle_ai()
|
||||
|
||||
/mob/living/simple_animal/hostile/technomancer_golem/proc/handle_ai()
|
||||
// This is where the real spaghetti begins.
|
||||
/mob/living/simple_animal/technomancer_golem/proc/handle_ai()
|
||||
if(!master)
|
||||
return
|
||||
if(get_dist(src, master) > 6 || src.z != master.z)
|
||||
recall_to_master()
|
||||
targeted_blink(master)
|
||||
|
||||
// Give our allies buffs and heals.
|
||||
for(var/mob/living/L in view(src))
|
||||
if(L in friends)
|
||||
support_friend(L)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/proc/support_friend(var/mob/living/L)
|
||||
if(L.getBruteLoss() >= 10 || L.getFireLoss() >= 10)
|
||||
if(L.isSynthetic() && !L.has_modifier_of_type(/datum/modifier/technomancer/mend_synthetic))
|
||||
place_spell_in_hand(known_spells["mend synthetic"])
|
||||
targeted_blink(L)
|
||||
UnarmedAttack(L, 1)
|
||||
else if(!L.has_modifier_of_type(/datum/modifier/technomancer/mend_life))
|
||||
place_spell_in_hand(known_spells["mend life"])
|
||||
targeted_blink(L)
|
||||
UnarmedAttack(L, 1)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/technomancer_golem/proc/recall_to_master()
|
||||
// Give them repel missiles if they lack it.
|
||||
if(!L.has_modifier_of_type(/datum/modifier/technomancer/repel_missiles))
|
||||
place_spell_in_hand(known_spells["repel missiles"])
|
||||
RangedAttack(L)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/technomancer_golem/proc/targeted_blink(var/atom/target)
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new()
|
||||
spark_system.set_up(5, 0, get_turf(src))
|
||||
spark_system.start()
|
||||
src.visible_message("<span class='notice'>\The [src] vanishes!</span>")
|
||||
src.forceMove(get_turf(target))
|
||||
return
|
||||
@@ -330,6 +330,18 @@
|
||||
spell_power_modifier = 1.75
|
||||
energy_cost_modifier = 2.0
|
||||
|
||||
// For use only for the GOLEM.
|
||||
/obj/item/weapon/technomancer_core/golem
|
||||
name = "integrated core"
|
||||
desc = "A bewilderingly complex 'black box' that allows the wearer to accomplish amazing feats. This type is not meant \
|
||||
to be worn on the back like other cores. Instead it is meant to be installed inside a synthetic shell. As a result, it's \
|
||||
a lot more robust."
|
||||
energy = 25000
|
||||
max_energy = 25000
|
||||
regen_rate = 100 //250 seconds to full
|
||||
instability_modifier = 0.75
|
||||
|
||||
|
||||
/obj/item/weapon/technomancer_core/verb/toggle_lock()
|
||||
set name = "Toggle Core Lock"
|
||||
set category = "Object"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/datum/technomancer/equipment/tesla_armor
|
||||
name = "Tesla Armor"
|
||||
desc = "This piece of armor offers a retaliation-based defense. When the armor is 'ready', it will completely protect you from \
|
||||
the next attack you suffer, and strike the attacker with a strong bolt of lightning. This effect requires twenty seconds to \
|
||||
recharge. If you are attacked while this is recharging, a weaker lightning bolt is sent out, however you won't be protected from \
|
||||
the next attack you suffer, and strike the attacker with a strong bolt of lightning, provided they are close enough. This effect requires \
|
||||
fifteen seconds to recharge. If you are attacked while this is recharging, a weaker lightning bolt is sent out, however you won't be protected from \
|
||||
the person beating you."
|
||||
cost = 150
|
||||
obj_path = /obj/item/clothing/suit/armor/tesla
|
||||
@@ -10,23 +10,33 @@
|
||||
/obj/item/clothing/suit/armor/tesla
|
||||
name = "tesla armor"
|
||||
desc = "This rather dangerous looking armor will hopefully shock your enemies, and not you in the process."
|
||||
icon_state = "reactiveoff" //wip
|
||||
item_state = "reactiveoff"
|
||||
icon_state = "reactive" //wip
|
||||
item_state = "reactive"
|
||||
blood_overlay_type = "armor"
|
||||
slowdown = 1
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
var/ready = 1 //Determines if the next attack will be blocked, as well if a strong lightning bolt is sent out at the attacker.
|
||||
var/ready_icon_state = "reactive" //also wip
|
||||
var/cooldown_to_charge = 20 SECONDS
|
||||
var/normal_icon_state = "reactiveoff"
|
||||
var/cooldown_to_charge = 15 SECONDS
|
||||
|
||||
/obj/item/clothing/suit/armor/tesla/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
||||
//First, some retaliation.
|
||||
if(attacker && attacker != user)
|
||||
if(get_dist(user, attacker) <= 3) //Anyone farther away than three tiles is too far to shoot lightning at.
|
||||
if(istype(damage_source, /obj/item/projectile))
|
||||
var/obj/item/projectile/P = damage_source
|
||||
if(P.firer && get_dist(user, P.firer) <= 3)
|
||||
if(ready)
|
||||
shoot_lightning(attacker, 40)
|
||||
shoot_lightning(P.firer, 40)
|
||||
else
|
||||
shoot_lightning(attacker, 15)
|
||||
shoot_lightning(P.firer, 15)
|
||||
|
||||
else
|
||||
if(attacker && attacker != user)
|
||||
if(get_dist(user, attacker) <= 3) //Anyone farther away than three tiles is too far to shoot lightning at.
|
||||
if(ready)
|
||||
shoot_lightning(attacker, 40)
|
||||
else
|
||||
shoot_lightning(attacker, 15)
|
||||
|
||||
//Deal with protecting our wearer now.
|
||||
if(ready)
|
||||
@@ -45,10 +55,14 @@
|
||||
if(ready)
|
||||
icon_state = ready_icon_state
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
icon_state = normal_icon_state
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_wear_suit(0)
|
||||
|
||||
/obj/item/clothing/suit/armor/tesla/proc/shoot_lightning(var/mob/target, var/power)
|
||||
var/obj/item/projectile/beam/lightning/lightning = new(src)
|
||||
lightning.power = power
|
||||
lightning.launch(target)
|
||||
visible_message("<span class='danger'>\The [src] strikes \the [target] with lightning!</span>")
|
||||
visible_message("<span class='danger'>\The [src] strikes \the [target] with lightning!</span>")
|
||||
playsound(get_turf(src), 'sound/weapons/gauss_shoot.ogg', 75, 1)
|
||||
@@ -44,25 +44,25 @@
|
||||
// Description: Makes instability decay. instability_effects() handles the bad effects for having instability. It will also hold back
|
||||
// from causing bad effects more than one every ten seconds, to prevent sudden death from angry RNG.
|
||||
/mob/living/proc/handle_instability()
|
||||
instability = round(Clamp(instability, 0, 200))
|
||||
instability = Ceiling(Clamp(instability, 0, 200))
|
||||
//This should cushon against really bad luck.
|
||||
if(instability && last_instability_event < (world.time - 10 SECONDS) && prob(20))
|
||||
instability_effects()
|
||||
switch(instability)
|
||||
if(1 to 10)
|
||||
adjust_instability(-2)
|
||||
adjust_instability(-1)
|
||||
if(11 to 20)
|
||||
adjust_instability(-4)
|
||||
adjust_instability(-2)
|
||||
if(21 to 30)
|
||||
adjust_instability(-6)
|
||||
adjust_instability(-3)
|
||||
if(31 to 40)
|
||||
adjust_instability(-8)
|
||||
adjust_instability(-4)
|
||||
if(41 to 50)
|
||||
adjust_instability(-10)
|
||||
adjust_instability(-5)
|
||||
if(51 to 100)
|
||||
adjust_instability(-20)
|
||||
adjust_instability(-10)
|
||||
if(101 to 200)
|
||||
adjust_instability(-40)
|
||||
adjust_instability(-20)
|
||||
|
||||
/mob/living/carbon/human/handle_instability()
|
||||
..()
|
||||
@@ -277,12 +277,17 @@
|
||||
// People next to the source take a third of the instability. Further distance decreases the amount absorbed.
|
||||
var/outgoing_instability = (instability / 3) * ( 1 / (radius**2) )
|
||||
|
||||
// Energy armor like from the AMI RIG can protect from this.
|
||||
var/armor = getarmor(null, "energy")
|
||||
var/armor_factor = abs( (armor - 100) / 100)
|
||||
outgoing_instability = outgoing_instability * armor_factor
|
||||
if(outgoing_instability)
|
||||
to_chat(H, "<span class='warning'>The purple glow makes you feel strange...</span>")
|
||||
H.adjust_instability(outgoing_instability)
|
||||
|
||||
H.receive_radiated_instability(outgoing_instability)
|
||||
|
||||
set_light(distance, distance * 4, l_color = "#C26DDE")
|
||||
|
||||
// This should only be used for EXTERNAL sources of instability, such as from someone or something glowing.
|
||||
/mob/living/proc/receive_radiated_instability(amount)
|
||||
// Energy armor like from the AMI RIG can protect from this.
|
||||
var/armor = getarmor(null, "energy")
|
||||
var/armor_factor = abs( (armor - 100) / 100)
|
||||
amount = amount * armor_factor
|
||||
if(amount && prob(10))
|
||||
to_chat(src, "<span class='warning'>The purple glow makes you feel strange...</span>")
|
||||
adjust_instability(amount)
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
)
|
||||
throwforce = 0
|
||||
force = 0
|
||||
var/mob/living/carbon/human/owner = null
|
||||
// var/mob/living/carbon/human/owner = null
|
||||
var/mob/living/owner = null
|
||||
var/obj/item/weapon/technomancer_core/core = null
|
||||
var/cast_methods = null // Controls how the spell is casted.
|
||||
var/aspect = null // Used for combining spells.
|
||||
@@ -115,16 +116,33 @@
|
||||
amount = round(amount * core.instability_modifier, 0.1)
|
||||
owner.adjust_instability(amount)
|
||||
|
||||
// Proc: get_technomancer_core()
|
||||
// Parameters: 0
|
||||
// Description: Returns the technomancer's core, assuming it is being worn properly.
|
||||
/mob/living/proc/get_technomancer_core()
|
||||
return null
|
||||
|
||||
/mob/living/carbon/human/get_technomancer_core()
|
||||
var/obj/item/weapon/technomancer_core/core = back
|
||||
if(istype(core))
|
||||
return core
|
||||
return null
|
||||
|
||||
// Proc: New()
|
||||
// Parameters: 0
|
||||
// Description: Sets owner to equal its loc, links to the owner's core, then applies overlays if needed.
|
||||
/obj/item/weapon/spell/New()
|
||||
..()
|
||||
if(ishuman(loc))
|
||||
if(isliving(loc))
|
||||
owner = loc
|
||||
if(owner)
|
||||
if(istype(/obj/item/weapon/technomancer_core, owner.back))
|
||||
core = owner.back
|
||||
core = owner.get_technomancer_core()
|
||||
if(!core)
|
||||
to_chat(owner, "<span class='warning'>You need a Core to do that.</span>")
|
||||
qdel(src)
|
||||
return
|
||||
// if(istype(/obj/item/weapon/technomancer_core, owner.back))
|
||||
// core = owner.back
|
||||
update_icon()
|
||||
|
||||
// Proc: Destroy()
|
||||
|
||||
@@ -13,17 +13,18 @@
|
||||
/obj/item/weapon/spell/aura/fire
|
||||
name = "Fire Storm"
|
||||
desc = "Things are starting to heat up."
|
||||
icon_state = "generic"
|
||||
icon_state = "fire_bolt"
|
||||
aspect = ASPECT_FIRE
|
||||
glow_color = "#FF6A00"
|
||||
|
||||
/obj/item/weapon/spell/aura/fire/process()
|
||||
if(!pay_energy(100))
|
||||
qdel(src)
|
||||
var/list/nearby_things = range(calculate_spell_power(4),owner)
|
||||
var/list/nearby_things = range(round(calculate_spell_power(4)),owner)
|
||||
|
||||
var/temp_change = calculate_spell_power(80)
|
||||
var/temp_cap = calculate_spell_power(600)
|
||||
var/temp_change = calculate_spell_power(150)
|
||||
var/datum/species/baseline = all_species["Human"]
|
||||
var/temp_cap = baseline.heat_level_3 * 2
|
||||
var/fire_power = calculate_spell_power(2)
|
||||
|
||||
if(check_for_scepter())
|
||||
@@ -38,7 +39,8 @@
|
||||
var/protection = H.get_heat_protection(1000)
|
||||
if(protection < 1)
|
||||
var/heat_factor = abs(protection - 1)
|
||||
H.bodytemperature = min( (H.bodytemperature + temp_change) * heat_factor, temp_cap)
|
||||
temp_change *= heat_factor
|
||||
H.bodytemperature = min(H.bodytemperature + temp_change, temp_cap)
|
||||
|
||||
turf_check:
|
||||
for(var/turf/simulated/T in nearby_things)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Chilling Aura"
|
||||
desc = "Lowers the core body temperature of everyone around you (except for your friends), causing them to become very slow if \
|
||||
they stay within four meters of you."
|
||||
enhancement_desc = "The chill becomes lethal."
|
||||
enhancement_desc = "Will make nearby entities even slower."
|
||||
spell_power_desc = "Radius and rate of cooling are scaled."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/aura/frost
|
||||
@@ -20,14 +20,16 @@
|
||||
/obj/item/weapon/spell/aura/frost/process()
|
||||
if(!pay_energy(100))
|
||||
qdel(src)
|
||||
var/list/nearby_mobs = range(calculate_spell_power(4),owner)
|
||||
var/list/nearby_mobs = range(round(calculate_spell_power(4)),owner)
|
||||
|
||||
var/temp_change = calculate_spell_power(40)
|
||||
var/temp_cap = 260 // Just above the damage threshold, for humans. Unathi are less fortunate.
|
||||
var/datum/species/baseline = all_species["Human"]
|
||||
var/temp_cap = baseline.cold_level_2 - 5
|
||||
|
||||
if(check_for_scepter())
|
||||
temp_change *= 2
|
||||
temp_cap = 200
|
||||
temp_cap = baseline.cold_level_3 - 5
|
||||
|
||||
for(var/mob/living/carbon/human/H in nearby_mobs)
|
||||
if(is_ally(H))
|
||||
continue
|
||||
@@ -35,6 +37,7 @@
|
||||
var/protection = H.get_cold_protection(1000)
|
||||
if(protection < 1)
|
||||
var/cold_factor = abs(protection - 1)
|
||||
H.bodytemperature = max( (H.bodytemperature - temp_change) * cold_factor, temp_cap)
|
||||
temp_change *= cold_factor
|
||||
H.bodytemperature = max(H.bodytemperature - temp_change, temp_cap)
|
||||
|
||||
adjust_instability(1)
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
/obj/item/weapon/spell/dispel/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||
if(isliving(hit_atom) && within_range(hit_atom) && pay_energy(1000))
|
||||
var/mob/living/target = hit_atom
|
||||
for(var/obj/item/weapon/inserted_spell/I in target)
|
||||
I.on_expire(dispelled = 1)
|
||||
log_and_message_admins("dispelled [I] on [target].")
|
||||
target.remove_modifiers_of_type(/datum/modifier/technomancer)
|
||||
user.adjust_instability(10)
|
||||
qdel(src)
|
||||
@@ -1,6 +1,9 @@
|
||||
/datum/technomancer/spell/gambit
|
||||
name = "Gambit"
|
||||
desc = "This function causes you to receive a random function, including those which you haven't purchased."
|
||||
// enhancement_desc = "Makes results less random and more biased towards what the function thinks you need in your current situation."
|
||||
enhancement_desc = "Instead of a purely random spell, it will give you a \"random\" spell."
|
||||
spell_power_desc = "Makes certain rare functions possible to acquire via Gambit which cannot be obtained otherwise, if above 100%."
|
||||
ability_icon_state = "tech_gambit"
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/gambit
|
||||
@@ -11,9 +14,10 @@
|
||||
/obj/item/weapon/spell/gambit,
|
||||
/obj/item/weapon/spell/projectile,
|
||||
/obj/item/weapon/spell/aura,
|
||||
/obj/item/weapon/spell/insert,
|
||||
// /obj/item/weapon/spell/insert,
|
||||
/obj/item/weapon/spell/spawner,
|
||||
/obj/item/weapon/spell/summon)
|
||||
/obj/item/weapon/spell/summon,
|
||||
/obj/item/weapon/spell/modifier)
|
||||
|
||||
/obj/item/weapon/spell/gambit
|
||||
name = "gambit"
|
||||
@@ -21,12 +25,110 @@
|
||||
icon_state = "gambit"
|
||||
cast_methods = CAST_USE
|
||||
aspect = ASPECT_UNSTABLE
|
||||
var/list/rare_spells = list(
|
||||
/obj/item/weapon/spell/modifier/mend_all
|
||||
)
|
||||
|
||||
|
||||
/obj/item/weapon/spell/gambit/on_use_cast(mob/living/carbon/human/user)
|
||||
if(pay_energy(200))
|
||||
adjust_instability(3)
|
||||
var/obj/item/weapon/spell/random_spell = pick(all_technomancer_gambit_spells)
|
||||
if(random_spell)
|
||||
user.drop_from_inventory(src, null)
|
||||
user.place_spell_in_hand(random_spell)
|
||||
if(check_for_scepter())
|
||||
give_new_spell(biased_random_spell())
|
||||
else
|
||||
give_new_spell(random_spell())
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/spell/gambit/proc/give_new_spell(var/spell_type)
|
||||
owner.drop_from_inventory(src, null)
|
||||
owner.place_spell_in_hand(spell_type)
|
||||
|
||||
// Gives a random spell.
|
||||
/obj/item/weapon/spell/gambit/proc/random_spell()
|
||||
var/list/potential_spells = all_technomancer_gambit_spells.Copy()
|
||||
var/rare_spell_chance = between(0, calculate_spell_power(100) - 100, 100) // Having 120% spellpower means a 20% chance to get to roll for rare spells.
|
||||
if(prob(rare_spell_chance))
|
||||
potential_spells += rare_spells.Copy()
|
||||
to_chat(owner, "<span class='notice'>You feel a bit luckier...</span>")
|
||||
return pick(potential_spells)
|
||||
|
||||
// Gives a "random" spell.
|
||||
/obj/item/weapon/spell/gambit/proc/biased_random_spell()
|
||||
var/list/potential_spells = list()
|
||||
var/rare_spell_chance = between(0, calculate_spell_power(100) - 100, 100)
|
||||
var/give_rare_spells = FALSE
|
||||
if(prob(rare_spell_chance))
|
||||
give_rare_spells = TRUE
|
||||
to_chat(owner, "<span class='notice'>You feel a bit luckier...</span>")
|
||||
|
||||
// First the spell will concern itself with the health of the technomancer.
|
||||
if(prob(owner.getBruteLoss() + owner.getBruteLoss() * 2)) // Having 20 brute means a 40% chance of being added to the pool.
|
||||
if(!owner.isSynthetic())
|
||||
potential_spells |= /obj/item/weapon/spell/modifier/mend_life
|
||||
else
|
||||
potential_spells |= /obj/item/weapon/spell/modifier/mend_synthetic
|
||||
if(give_rare_spells)
|
||||
potential_spells |= /obj/item/weapon/spell/modifier/mend_all
|
||||
|
||||
// Second, the spell will try to prepare the technomancer for threats.
|
||||
var/hostile_mobs = 0 // Counts how many hostile mobs. Higher numbers make it more likely for AoE spells to be chosen.
|
||||
|
||||
for(var/mob/living/L in view(owner))
|
||||
// Spiders, carp... bears.
|
||||
if(istype(L, /mob/living/simple_animal))
|
||||
var/mob/living/simple_animal/SM = L
|
||||
if(!is_ally(SM) && SM.hostile)
|
||||
hostile_mobs++
|
||||
if(SM.summoned || SM.supernatural) // Our creations might be trying to kill us.
|
||||
potential_spells |= /obj/item/weapon/spell/abjuration
|
||||
|
||||
// Always assume borgs are hostile.
|
||||
if(istype(L, /mob/living/silicon/robot))
|
||||
if(!istype(L, /mob/living/silicon/robot/drone)) // Drones are okay, however.
|
||||
hostile_mobs++
|
||||
potential_spells |= /obj/item/weapon/spell/projectile/ionic_bolt
|
||||
|
||||
// Finally we get to humanoids.
|
||||
if(istype(L, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(is_ally(H)) // Don't get scared by our apprentice.
|
||||
continue
|
||||
|
||||
for(var/obj/item/I in list(H.l_hand, H.r_hand))
|
||||
// Guns are scary.
|
||||
if(istype(I, /obj/item/weapon/gun)) // Toy guns will count as well but oh well.
|
||||
hostile_mobs++
|
||||
continue
|
||||
// Strong melee weapons are scary as well.
|
||||
else if(I.force >= 15)
|
||||
hostile_mobs++
|
||||
continue
|
||||
|
||||
if(hostile_mobs)
|
||||
potential_spells |= /obj/item/weapon/spell/shield
|
||||
potential_spells |= /obj/item/weapon/spell/reflect
|
||||
potential_spells |= /obj/item/weapon/spell/targeting_matrix
|
||||
potential_spells |= /obj/item/weapon/spell/warp_strike
|
||||
|
||||
if(hostile_mobs >= 3) // Lots of baddies, give them AoE.
|
||||
potential_spells |= /obj/item/weapon/spell/projectile/chain_lightning
|
||||
potential_spells |= /obj/item/weapon/spell/projectile/chain_lightning/lesser
|
||||
potential_spells |= /obj/item/weapon/spell/spawner/fire_blast
|
||||
potential_spells |= /obj/item/weapon/spell/condensation
|
||||
potential_spells |= /obj/item/weapon/spell/aura/frost
|
||||
else
|
||||
potential_spells |= /obj/item/weapon/spell/projectile/beam
|
||||
potential_spells |= /obj/item/weapon/spell/projectile/overload
|
||||
potential_spells |= /obj/item/weapon/spell/projectile/force_missile
|
||||
potential_spells |= /obj/item/weapon/spell/projectile/lightning
|
||||
|
||||
// Third priority is recharging the core.
|
||||
if(core.energy / core.max_energy <= 0.5)
|
||||
potential_spells |= /obj/item/weapon/spell/energy_siphon
|
||||
potential_spells |= /obj/item/weapon/spell/instability_tap
|
||||
|
||||
// Fallback method in case nothing gets added.
|
||||
if(!potential_spells.len)
|
||||
potential_spells = all_technomancer_gambit_spells.Copy()
|
||||
|
||||
return pick(potential_spells)
|
||||
@@ -1,31 +0,0 @@
|
||||
/datum/technomancer/spell/mend_wounds
|
||||
name = "Mend Wounds"
|
||||
desc = "Heals minor wounds, such as cuts, bruises, and other non-lifethreatening injuries. \
|
||||
Instability is split between the target and technomancer, if seperate."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_wounds
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/insert/mend_wounds
|
||||
name = "mend wounds"
|
||||
desc = "Watch your wounds close up before your eyes."
|
||||
icon_state = "mend_wounds"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_BIOMED
|
||||
light_color = "#FF5C5C"
|
||||
inserting = /obj/item/weapon/inserted_spell/mend_wounds
|
||||
|
||||
/obj/item/weapon/inserted_spell/mend_wounds/on_insert()
|
||||
spawn(1)
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
H.adjustBruteLoss(-heal_power / 5)
|
||||
sleep(1 SECOND)
|
||||
on_expire()
|
||||
@@ -1,49 +0,0 @@
|
||||
/datum/technomancer/spell/purify
|
||||
name = "Purify"
|
||||
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/insert/purify
|
||||
ability_icon_state = "tech_purify"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/insert/purify
|
||||
name = "purify"
|
||||
desc = "Illness and toxins will be no more."
|
||||
icon_state = "purify"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_BIOMED
|
||||
light_color = "#03A728"
|
||||
inserting = /obj/item/weapon/inserted_spell/purify
|
||||
|
||||
/obj/item/weapon/inserted_spell/purify/on_insert()
|
||||
spawn(1)
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
H.sdisabilities = 0
|
||||
H.disabilities = 0
|
||||
// for(var/datum/disease/D in H.viruses)
|
||||
// D.cure()
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
heal_power = round(heal_power * spell_power_at_creation, 1)
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
H.adjustToxLoss(-heal_power / 5)
|
||||
H.adjustCloneLoss(-heal_power / 5)
|
||||
H.radiation = max(host.radiation - ( (heal_power * 2) / 5), 0)
|
||||
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
var/obj/item/organ/external/G = E
|
||||
if(G.germ_level)
|
||||
var/germ_heal = heal_power * 10
|
||||
G.germ_level = min(0, G.germ_level - germ_heal)
|
||||
|
||||
for(var/obj/item/organ/internal/I in H.internal_organs)
|
||||
var/obj/item/organ/internal/G = I
|
||||
if(G.germ_level)
|
||||
var/germ_heal = heal_power * 10
|
||||
G.germ_level = min(0, G.germ_level - germ_heal)
|
||||
|
||||
sleep(1 SECOND)
|
||||
on_expire()
|
||||
@@ -1,8 +1,8 @@
|
||||
/datum/technomancer/spell/instability_tap
|
||||
name = "Instability Tap"
|
||||
desc = "Creates a large sum of energy, at the cost of a very large amount of instability afflicting you."
|
||||
desc = "Creates a large sum of energy (5,000 at normal spell power), at the cost of a very large amount of instability afflicting you."
|
||||
enhancement_desc = "50% more energy gained, 20% less instability gained."
|
||||
spell_power_desc = "Amount of energy gained scaled up with spell power."
|
||||
spell_power_desc = "Amount of energy gained scaled with spell power."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/instability_tap
|
||||
ability_icon_state = "tech_instabilitytap"
|
||||
@@ -26,4 +26,5 @@
|
||||
else
|
||||
core.give_energy(amount)
|
||||
adjust_instability(50)
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 75, 1)
|
||||
qdel(src)
|
||||
@@ -0,0 +1,56 @@
|
||||
/datum/technomancer/spell/mend_organs
|
||||
name = "Mend Internals"
|
||||
desc = "Greatly heals the target's wounds, both external and internal. Restores internal organs to functioning states, even if \
|
||||
robotic, reforms bones, patches internal bleeding, and restores missing blood."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/mend_organs
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/mend_organs
|
||||
name = "great mend wounds"
|
||||
desc = "A walking medbay is now you!"
|
||||
icon_state = "mend_wounds"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_BIOMED
|
||||
light_color = "#FF5C5C"
|
||||
|
||||
/obj/item/weapon/spell/mend_organs/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||
if(isliving(hit_atom))
|
||||
var/mob/living/L = hit_atom
|
||||
var/heal_power = calculate_spell_power(40)
|
||||
L.adjustBruteLoss(-heal_power)
|
||||
L.adjustFireLoss(-heal_power)
|
||||
user.adjust_instability(5)
|
||||
L.adjust_instability(5)
|
||||
|
||||
if(ishuman(hit_atom))
|
||||
var/mob/living/carbon/human/H = hit_atom
|
||||
|
||||
user.adjust_instability(5)
|
||||
L.adjust_instability(5)
|
||||
|
||||
for(var/obj/item/organ/O in H.internal_organs)
|
||||
if(O.damage > 0) // Fix internal damage
|
||||
O.damage = max(O.damage - (heal_power / 2), 0)
|
||||
if(O.damage <= 5 && O.organ_tag == O_EYES) // Fix eyes
|
||||
H.sdisabilities &= ~BLIND
|
||||
|
||||
for(var/obj/item/organ/external/O in H.organs) // Fix limbs
|
||||
if(!O.robotic < ORGAN_ROBOT) // No robot parts for this.
|
||||
continue
|
||||
O.heal_damage(0, heal_power / 4, internal = 1, robo_repair = 0)
|
||||
|
||||
for(var/obj/item/organ/E in H.bad_external_organs) // Fix bones
|
||||
var/obj/item/organ/external/affected = E
|
||||
if((affected.damage < affected.min_broken_damage * config.organ_health_multiplier) && (affected.status & ORGAN_BROKEN))
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
|
||||
for(var/datum/wound/W in affected.wounds) // Fix IB
|
||||
if(istype(W, /datum/wound/internal_bleeding))
|
||||
affected.wounds -= W
|
||||
affected.update_damages()
|
||||
|
||||
H.restore_blood() // Fix bloodloss
|
||||
qdel(src)
|
||||
@@ -0,0 +1,35 @@
|
||||
// Gambit only spell. Heals everything unconditionally.
|
||||
|
||||
/obj/item/weapon/spell/modifier/mend_all
|
||||
name = "mend all"
|
||||
desc = "One function to heal them all."
|
||||
icon_state = "mend_all"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_BIOMED
|
||||
light_color = "#FF5C5C"
|
||||
modifier_type = /datum/modifier/technomancer/mend_life
|
||||
modifier_duration = 1 MINUTE
|
||||
|
||||
/datum/modifier/technomancer/mend_all
|
||||
name = "mend all"
|
||||
desc = "You feel serene and well rested."
|
||||
mob_overlay_state = "green_sparkles"
|
||||
|
||||
on_created_text = "<span class='warning'>Sparkles begin to appear around you, and all your ills seem to fade away.</span>"
|
||||
on_expired_text = "<span class='notice'>The sparkles have faded, although you feel much healthier than before.</span>"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
/datum/modifier/technomancer/mend_all/tick()
|
||||
if(!holder.getBruteLoss() && !holder.getFireLoss() && !holder.getToxLoss() && !holder.getOxyLoss() && !holder.getCloneLoss()) // No point existing if the spell can't heal.
|
||||
expire()
|
||||
return
|
||||
holder.adjustBruteLoss(-4 * spell_power) // Should heal roughly 120 damage over 1 minute, as tick() is run every 2 seconds.
|
||||
holder.adjustFireLoss(-4 * spell_power)
|
||||
holder.adjustToxLoss(-4 * spell_power)
|
||||
holder.adjustOxyLoss(-4 * spell_power)
|
||||
holder.adjustCloneLoss(-2 * spell_power) // 60 cloneloss
|
||||
holder.adjust_instability(1)
|
||||
if(origin)
|
||||
var/mob/living/L = origin.resolve()
|
||||
if(istype(L))
|
||||
L.adjust_instability(1)
|
||||
@@ -0,0 +1,44 @@
|
||||
/datum/technomancer/spell/mend_life
|
||||
name = "Mend Life"
|
||||
desc = "Heals minor wounds, such as cuts, bruises, burns, and other non-lifethreatening injuries. \
|
||||
Instability is split between the target and technomancer, if seperate. The function will end prematurely \
|
||||
if the target is completely healthy, preventing further instability."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/modifier/mend_life
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/modifier/mend_life
|
||||
name = "mend life"
|
||||
desc = "Watch your wounds close up before your eyes."
|
||||
icon_state = "mend_life"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_BIOMED
|
||||
light_color = "#FF5C5C"
|
||||
modifier_type = /datum/modifier/technomancer/mend_life
|
||||
modifier_duration = 10 SECONDS
|
||||
|
||||
/datum/modifier/technomancer/mend_life
|
||||
name = "mend life"
|
||||
desc = "You feel rather refreshed."
|
||||
mob_overlay_state = "green_sparkles"
|
||||
|
||||
on_created_text = "<span class='warning'>Sparkles begin to appear around you, and you feel really.. refreshed.</span>"
|
||||
on_expired_text = "<span class='notice'>The sparkles have faded, although you feel healthier than before.</span>"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
/datum/modifier/technomancer/mend_life/tick()
|
||||
if(holder.isSynthetic()) // Don't heal synths!
|
||||
expire()
|
||||
return
|
||||
if(!holder.getBruteLoss() && !holder.getFireLoss()) // No point existing if the spell can't heal.
|
||||
expire()
|
||||
return
|
||||
holder.adjustBruteLoss(-4 * spell_power) // Should heal roughly 20 burn/brute over 10 seconds, as tick() is run every 2 seconds.
|
||||
holder.adjustFireLoss(-4 * spell_power) // Ditto.
|
||||
holder.adjust_instability(1)
|
||||
if(origin)
|
||||
var/mob/living/L = origin.resolve()
|
||||
if(istype(L))
|
||||
L.adjust_instability(1)
|
||||
@@ -0,0 +1,44 @@
|
||||
/datum/technomancer/spell/mend_synthetic
|
||||
name = "Mend Synthetic"
|
||||
desc = "Repairs minor damages to robotic entities. \
|
||||
Instability is split between the target and technomancer, if seperate. The function will end prematurely \
|
||||
if the target is completely healthy, preventing further instability."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/modifier/mend_synthetic
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/modifier/mend_synthetic
|
||||
name = "mend synthetic"
|
||||
desc = "You are the Robotics lab"
|
||||
icon_state = "mend_synthetic"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_BIOMED // sorta??
|
||||
light_color = "#FF5C5C"
|
||||
modifier_type = /datum/modifier/technomancer/mend_synthetic
|
||||
modifier_duration = 10 SECONDS
|
||||
|
||||
/datum/modifier/technomancer/mend_synthetic
|
||||
name = "mend synthetic"
|
||||
desc = "Something seems to be repairing you."
|
||||
mob_overlay_state = "cyan_sparkles"
|
||||
|
||||
on_created_text = "<span class='warning'>Sparkles begin to appear around you, and your systems report integrity rising.</span>"
|
||||
on_expired_text = "<span class='notice'>The sparkles have faded, although your systems seem to be better than before.</span>"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
/datum/modifier/technomancer/mend_synthetic/tick()
|
||||
if(!holder.isSynthetic()) // Don't heal biologicals!
|
||||
expire()
|
||||
return
|
||||
if(!holder.getBruteLoss() && !holder.getFireLoss()) // No point existing if the spell can't heal.
|
||||
expire()
|
||||
return
|
||||
holder.adjustBruteLoss(-4 * spell_power) // Should heal roughly 20 burn/brute over 10 seconds, as tick() is run every 2 seconds.
|
||||
holder.adjustFireLoss(-4 * spell_power) // Ditto.
|
||||
holder.adjust_instability(1)
|
||||
if(origin)
|
||||
var/mob/living/L = origin.resolve()
|
||||
if(istype(L))
|
||||
L.adjust_instability(1)
|
||||
@@ -26,6 +26,13 @@
|
||||
var/duration = modifier_duration
|
||||
if(duration)
|
||||
duration = round(duration * calculate_spell_power(1.0), 1)
|
||||
L.add_modifier(modifier_type, duration)
|
||||
var/datum/modifier/M = L.add_modifier(modifier_type, duration, owner)
|
||||
if(istype(M, /datum/modifier/technomancer))
|
||||
var/datum/modifier/technomancer/MT = M
|
||||
MT.spell_power = calculate_spell_power(1)
|
||||
log_and_message_admins("has casted [src] on [L].")
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
// Technomancer specific subtype which keeps track of spell power and gets targeted specificially by Dispel.
|
||||
/datum/modifier/technomancer
|
||||
var/spell_power = null // Set by on_add_modifier.
|
||||
@@ -0,0 +1,40 @@
|
||||
/datum/technomancer/spell/purify
|
||||
name = "Purify"
|
||||
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such. \
|
||||
Instability is split between the target and technomancer, if seperate. The function will end prematurely \
|
||||
if the target is completely healthy, preventing further instability."
|
||||
spell_power_desc = "Healing amount increased."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/modifier/purify
|
||||
ability_icon_state = "tech_purify"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/modifier/purify
|
||||
name = "mend life"
|
||||
desc = "Watch your wounds close up before your eyes."
|
||||
icon_state = "mend_life"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_BIOMED
|
||||
light_color = "#FF5C5C"
|
||||
modifier_type = /datum/modifier/technomancer/purify
|
||||
modifier_duration = 10 SECONDS
|
||||
|
||||
/datum/modifier/technomancer/purify
|
||||
name = "purify"
|
||||
desc = "You feel rather clean and pure."
|
||||
mob_overlay_state = "green_sparkles"
|
||||
|
||||
on_created_text = "<span class='warning'>Sparkles begin to appear around you, and you feel really.. pure.</span>"
|
||||
on_expired_text = "<span class='notice'>The sparkles have faded, although you feel healthier than before.</span>"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
/datum/modifier/technomancer/purify/tick()
|
||||
if(!holder.getToxLoss()) // No point existing if the spell can't heal.
|
||||
expire()
|
||||
return
|
||||
holder.adjustToxLoss(-4 * spell_power) // Should heal roughly 120 damage over 1 minute, as tick() is run every 2 seconds.
|
||||
holder.adjust_instability(1)
|
||||
if(origin)
|
||||
var/mob/living/L = origin.resolve()
|
||||
if(istype(L))
|
||||
L.adjust_instability(1)
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/technomancer/spell/repel_missiles
|
||||
name = "Repel Missiles"
|
||||
desc = "Places a repulsion field around you, which attempts to deflect incoming bullets and lasers, making them 30% less likely \
|
||||
desc = "Places a repulsion field around you, which attempts to deflect incoming bullets and lasers, making them 45% less likely \
|
||||
to hit you. The field lasts for 10 minutes and can be granted to yourself or an ally."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/modifier/repel_missiles
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Oxygenate"
|
||||
desc = "This function creates oxygen at a location of your chosing. If used on a humanoid entity, it heals oxygen deprivation. \
|
||||
If casted on the envirnment, air (oxygen and nitrogen) is moved from a distant location to your target."
|
||||
cost = 50
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/oxygenate
|
||||
ability_icon_state = "oxygenate"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
var/bounces = 3 //How many times it 'chains'. Note that the first hit is not counted as it counts /bounces/.
|
||||
var/list/hit_mobs = list() //Mobs which were already hit.
|
||||
var/power = 20 //How hard it will hit for with electrocute_act(), decreases with each bounce.
|
||||
var/power = 35 //How hard it will hit for with electrocute_act(), decreases with each bounce.
|
||||
|
||||
/obj/item/projectile/beam/chain_lightning/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0)
|
||||
//First we shock the guy we just hit.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Ionic Bolt"
|
||||
desc = "Shoots a bolt of ion energy at the target. If it hits something, it will generally drain energy, corrupt electronics, \
|
||||
or otherwise ruin complex machinery."
|
||||
cost = 100
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/projectile/ionic_bolt
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/datum/technomancer/spell/lesser_chain_lightning
|
||||
name = "Lesser Chain Lightning"
|
||||
desc = "This is very similar to the function Chain Lightning, however it is considerably less powerful. As a result, it's a lot \
|
||||
more economical in terms of energy cost, as well as instability generation. Lightning functions cannot miss due to distance."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/projectile/chain_lightning/lesser
|
||||
ability_icon_state = "tech_chain_lightning"
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/projectile/chain_lightning/lesser
|
||||
name = "lesser chain lightning"
|
||||
icon_state = "chain_lightning"
|
||||
desc = "Now you can throw around lightning like it's nobody's business."
|
||||
cast_methods = CAST_RANGED
|
||||
aspect = ASPECT_SHOCK
|
||||
spell_projectile = /obj/item/projectile/beam/chain_lightning
|
||||
energy_cost_per_shot = 1000
|
||||
instability_per_shot = 5
|
||||
cooldown = 10
|
||||
|
||||
/obj/item/projectile/beam/chain_lightning/lesser
|
||||
bounces = 2
|
||||
power = 20
|
||||
@@ -37,8 +37,10 @@
|
||||
if(issmall(user)) // Smaller shields are more efficent.
|
||||
damage_to_energy_cost *= 0.75
|
||||
|
||||
if(istype(owner.get_other_hand(src), src.type)) // Two shields in both hands.
|
||||
damage_to_energy_cost *= 0.75
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(istype(H.get_other_hand(src), src.type)) // Two shields in both hands.
|
||||
damage_to_energy_cost *= 0.75
|
||||
|
||||
else if(check_for_scepter())
|
||||
damage_to_energy_cost *= 0.50
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/datum/technomancer/spell/destablize
|
||||
name = "Destablize"
|
||||
desc = "Creates an unstable disturbance at the targeted tile, which will afflict anyone nearby with instability who remains nearby. This can affect you \
|
||||
and your allies as well. The disturbance lasts for twenty seconds."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/spawner/destablize
|
||||
category = OFFENSIVE_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/spawner/destablize
|
||||
name = "destablize"
|
||||
desc = "Now your enemies can feel what you go through when you have too much fun."
|
||||
icon_state = "destablize"
|
||||
cast_methods = CAST_RANGED
|
||||
aspect = ASPECT_UNSTABLE
|
||||
spawner_type = /obj/effect/temporary_effect/destablize
|
||||
|
||||
/obj/item/weapon/spell/spawner/destablize/New()
|
||||
..()
|
||||
set_light(3, 2, l_color = "#C26DDE")
|
||||
|
||||
/obj/item/weapon/spell/spawner/destablize/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(within_range(hit_atom) && pay_energy(2000))
|
||||
adjust_instability(15)
|
||||
..()
|
||||
|
||||
/obj/effect/temporary_effect/destablize
|
||||
name = "destablizing disturbance"
|
||||
desc = "This can't be good..."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "blueshatter"
|
||||
time_to_die = null
|
||||
invisibility = 0
|
||||
new_light_range = 6
|
||||
new_light_power = 20
|
||||
new_light_color = "#C26DDE"
|
||||
var/pulses_remaining = 40 // Lasts 20 seconds.
|
||||
var/instability_power = 5
|
||||
var/instability_range = 6
|
||||
|
||||
/obj/effect/temporary_effect/destablize/New()
|
||||
..()
|
||||
radiate_loop()
|
||||
|
||||
/obj/effect/temporary_effect/destablize/proc/radiate_loop()
|
||||
while(pulses_remaining)
|
||||
sleep(5)
|
||||
for(var/mob/living/L in range(src, instability_range) )
|
||||
var/radius = max(get_dist(L, src), 1)
|
||||
// Being farther away lessens the amount of instabity received.
|
||||
var/outgoing_instability = instability_power * ( 1 / (radius**2) )
|
||||
L.receive_radiated_instability(outgoing_instability)
|
||||
pulses_remaining--
|
||||
qdel(src)
|
||||
@@ -66,6 +66,7 @@
|
||||
minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
|
||||
alt_titles = list("Maintenance Technician","Engine Technician","Electrician")
|
||||
|
||||
minimal_player_age = 3
|
||||
|
||||
/datum/job/engineer/equip(var/mob/living/carbon/human/H, var/alt_title)
|
||||
if(!H) return 0
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
|
||||
/obj/machinery/optable/New()
|
||||
..()
|
||||
for(dir in list(NORTH,EAST,SOUTH,WEST))
|
||||
computer = locate(/obj/machinery/computer/operating, get_step(src, dir))
|
||||
for(var/direction in list(NORTH,EAST,SOUTH,WEST))
|
||||
computer = locate(/obj/machinery/computer/operating, get_step(src, direction))
|
||||
if(computer)
|
||||
computer.table = src
|
||||
break
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/obj/machinery/computer/operating/New()
|
||||
..()
|
||||
for(var/direction in list(NORTH,EAST,SOUTH,WEST)) //VOREStation Edit - Stop turning
|
||||
for(var/direction in list(NORTH,EAST,SOUTH,WEST))
|
||||
table = locate(/obj/machinery/optable, get_step(src, direction))
|
||||
if (table)
|
||||
table.computer = src
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/computer/security/attack_hand(var/mob/user as mob)
|
||||
if (using_map && !(src.z in using_map.station_levels))
|
||||
if (using_map && !(src.z in using_map.contact_levels))
|
||||
user << "<span class='danger'>Unable to establish a connection:</span> You're too far away from the station!"
|
||||
return
|
||||
if(stat & (NOPOWER|BROKEN)) return
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
/obj/machinery/computer/communications/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
if (using_map && !(src.z in using_map.station_levels)) //VOREStation Edit
|
||||
if (using_map && !(src.z in using_map.contact_levels))
|
||||
usr << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||
return
|
||||
usr.set_machine(src)
|
||||
@@ -274,7 +274,7 @@
|
||||
/obj/machinery/computer/communications/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if (using_map && !(src.z in using_map.station_levels))
|
||||
if (using_map && !(src.z in using_map.contact_levels))
|
||||
user << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||
return
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
|
||||
attackby(obj/item/weapon/O as obj, mob/user as mob)
|
||||
if (user.z > 6)
|
||||
if (using_map && !(user.z in using_map.contact_levels))
|
||||
user << "<span class='danger'>Unable to establish a connection:</span> You're too far away from the station!"
|
||||
return
|
||||
if(istype(O, /obj/item/weapon/aiModule))
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
/obj/machinery/computer/secure_data/attack_hand(mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if (using_map && !(src.z in using_map.station_levels))
|
||||
if (using_map && !(src.z in using_map.contact_levels))
|
||||
user << "<span class='warning'>Unable to establish a connection:</span> You're too far away from the station!"
|
||||
return
|
||||
var/dat
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
/obj/machinery/computer/skills/attack_hand(mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
if (using_map && !(src.z in using_map.station_levels))
|
||||
if (using_map && !(src.z in using_map.contact_levels))
|
||||
user << "<span class='danger'>Unable to establish a connection:</span> You're too far away from the station!"
|
||||
return
|
||||
var/dat
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
M.facing_dir = null
|
||||
M.set_dir(buckle_dir ? buckle_dir : dir)
|
||||
M.update_canmove()
|
||||
M.update_floating( M.Check_Dense_Object() )
|
||||
buckled_mob = M
|
||||
|
||||
post_buckle_mob(M)
|
||||
@@ -53,6 +54,7 @@
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.update_canmove()
|
||||
buckled_mob.update_floating( buckled_mob.Check_Dense_Object() )
|
||||
buckled_mob = null
|
||||
|
||||
post_buckle_mob(.)
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
if(user.r_hand && user.l_hand)
|
||||
cell.forceMove(get_turf(user))
|
||||
else
|
||||
cell.forceMove(user.put_in_hands(cell))
|
||||
user.put_in_hands(cell)
|
||||
cell = null
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
else
|
||||
@@ -141,14 +141,15 @@
|
||||
sleep(15 SECONDS)
|
||||
break
|
||||
|
||||
if(patient.client)
|
||||
patient.adjustOxyLoss(-20) //Look, blood stays oxygenated for quite some time, but I'm not recoding the entire oxy system
|
||||
patient.stat = CONSCIOUS //Note that if whatever killed them in the first place wasn't fixed, they're likely to die again.
|
||||
dead_mob_list -= patient
|
||||
living_mob_list += patient
|
||||
patient.timeofdeath = null
|
||||
patient.visible_message("<span class='notice'>[patient]'s eyes open!</span>")
|
||||
log_and_message_admins("[patient] was revived.")
|
||||
if(!(HUSK in patient.mutations)) // Husked people can't come back with a Defib.
|
||||
if(patient.client)
|
||||
patient.adjustOxyLoss(-20) //Look, blood stays oxygenated for quite some time, but I'm not recoding the entire oxy system
|
||||
patient.stat = CONSCIOUS //Note that if whatever killed them in the first place wasn't fixed, they're likely to die again.
|
||||
dead_mob_list -= patient
|
||||
living_mob_list += patient
|
||||
patient.timeofdeath = null
|
||||
patient.visible_message("<span class='notice'>[patient]'s eyes open!</span>")
|
||||
log_and_message_admins("[patient] was revived by a defib.")
|
||||
cell.charge -= charge_cost //Always charge the cost after any attempt, failed or not
|
||||
sleep(20) //Wait 2 seconds before next attempt
|
||||
statechange(1,patient) //Back to ready
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
if(brightness_level == "low")
|
||||
set_light(brightness_on/2)
|
||||
else if(brightness_level == "high")
|
||||
set_light(brightness_on*4)
|
||||
set_light(brightness_on*1.5)
|
||||
else
|
||||
set_light(brightness_on)
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@ var/global/list/active_radio_jammers = list()
|
||||
/obj/item/device/radio_jammer
|
||||
name = "subspace jammer"
|
||||
desc = "Primarily for blocking subspace communications, preventing the use of headsets, PDAs, and communicators."
|
||||
icon = 'icons/obj/device_alt.dmi'
|
||||
icon_state = "shield0"
|
||||
var/active_state = "shield1"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "jammer0"
|
||||
var/active_state = "jammer1"
|
||||
|
||||
var/on = 0
|
||||
var/jam_range = 7
|
||||
|
||||
@@ -34,15 +34,16 @@
|
||||
|
||||
w_class = ITEMSIZE_LARGE
|
||||
max_w_class = ITEMSIZE_SMALL
|
||||
max_storage_space = ITEMSIZE_SMALL * 21
|
||||
can_hold = list() // any
|
||||
cant_hold = list(/obj/item/weapon/disk/nuclear)
|
||||
|
||||
/obj/item/weapon/storage/bag/trash/update_icon()
|
||||
if(contents.len == 0)
|
||||
icon_state = "trashbag0"
|
||||
else if(contents.len < 12)
|
||||
else if(contents.len < 9)
|
||||
icon_state = "trashbag1"
|
||||
else if(contents.len < 21)
|
||||
else if(contents.len < 18)
|
||||
icon_state = "trashbag2"
|
||||
else icon_state = "trashbag3"
|
||||
|
||||
|
||||
@@ -95,12 +95,12 @@
|
||||
prob(5);/obj/item/ammo_magazine/c38,\
|
||||
prob(5);/obj/item/ammo_magazine/c38/rubber,\
|
||||
prob(5);/obj/item/weapon/storage/box/flashbangs,\
|
||||
prob(5);/obj/item/ammo_magazine/s762,\
|
||||
prob(5);/obj/item/ammo_magazine/c556,\
|
||||
prob(4);/obj/item/ammo_magazine/clip/a556,\
|
||||
prob(4);/obj/item/ammo_magazine/clip/c45,\
|
||||
prob(4);/obj/item/ammo_magazine/clip/c9mm,\
|
||||
prob(4);/obj/item/ammo_magazine/c45uzi,\
|
||||
prob(4);/obj/item/ammo_magazine/c762,\
|
||||
prob(4);/obj/item/ammo_magazine/c556/ext,\
|
||||
prob(4);/obj/item/ammo_magazine/mc9mm,\
|
||||
prob(4);/obj/item/ammo_magazine/mc9mml,\
|
||||
prob(4);/obj/item/ammo_magazine/mc9mmt,\
|
||||
@@ -109,14 +109,14 @@
|
||||
prob(4);/obj/item/ammo_magazine/p90,\
|
||||
/* prob(4);/obj/item/ammo_magazine/m14,\
|
||||
prob(4);/obj/item/ammo_magazine/m14/large,\ */
|
||||
prob(4);/obj/item/ammo_magazine/c556/ext,\
|
||||
prob(4);/obj/item/ammo_magazine/s762,\
|
||||
prob(4);/obj/item/ammo_magazine/c762,\
|
||||
prob(4);/obj/item/ammo_magazine/a556,\
|
||||
prob(4);/obj/item/ammo_magazine/a556m,\
|
||||
prob(3);/obj/item/ammo_magazine/clip/a10mm,\
|
||||
prob(3);/obj/item/ammo_magazine/clip/a50,\
|
||||
prob(3);/obj/item/ammo_magazine/s762,\
|
||||
prob(3);/obj/item/ammo_magazine/c556,\
|
||||
prob(2);/obj/item/ammo_magazine/a50,\
|
||||
prob(2);/obj/item/ammo_magazine/a762,\
|
||||
prob(2);/obj/item/ammo_magazine/a556,\
|
||||
prob(1);/obj/item/weapon/storage/box/frags,\
|
||||
/* prob(1);/obj/item/ammo_magazine/battlerifle,\ */
|
||||
prob(1);/obj/item/ammo_casing/rocket,\
|
||||
|
||||
@@ -177,6 +177,7 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/debug_antagonist_template,
|
||||
/client/proc/cmd_debug_mob_lists,
|
||||
/client/proc/cmd_debug_using_map,
|
||||
/client/proc/cmd_admin_delete,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/cmd_debug_tog_aliens,
|
||||
@@ -291,6 +292,7 @@ var/list/admin_verbs_hideable = list(
|
||||
/client/proc/debug_controller,
|
||||
/client/proc/startSinglo,
|
||||
/client/proc/cmd_debug_mob_lists,
|
||||
/client/proc/cmd_debug_using_map,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/cmd_debug_tog_aliens,
|
||||
/client/proc/air_report,
|
||||
|
||||
@@ -943,6 +943,15 @@
|
||||
if("Clients")
|
||||
usr << jointext(clients,",")
|
||||
|
||||
/client/proc/cmd_debug_using_map()
|
||||
set category = "Debug"
|
||||
set name = "Debug Map Datum"
|
||||
set desc = "Debug the map metadata about the currently compiled in map."
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
debug_variables(using_map)
|
||||
|
||||
// DNA2 - Admin Hax
|
||||
/client/proc/cmd_admin_toggle_block(var/mob/M,var/block)
|
||||
if(!ticker)
|
||||
|
||||
@@ -192,12 +192,12 @@
|
||||
prob(5);/obj/item/ammo_magazine/c38,\
|
||||
prob(5);/obj/item/ammo_magazine/c38/rubber,\
|
||||
prob(5);/obj/item/weapon/storage/box/flashbangs,\
|
||||
prob(5);/obj/item/ammo_magazine/s762,\
|
||||
prob(5);/obj/item/ammo_magazine/c556,\
|
||||
prob(4);/obj/item/ammo_magazine/clip/a556,\
|
||||
prob(4);/obj/item/ammo_magazine/clip/c45,\
|
||||
prob(4);/obj/item/ammo_magazine/clip/c9mm,\
|
||||
prob(4);/obj/item/ammo_magazine/c45uzi,\
|
||||
prob(4);/obj/item/ammo_magazine/c762,\
|
||||
prob(4);/obj/item/ammo_magazine/c556/ext,\
|
||||
prob(4);/obj/item/ammo_magazine/mc9mm,\
|
||||
prob(4);/obj/item/ammo_magazine/mc9mml,\
|
||||
prob(4);/obj/item/ammo_magazine/mc9mmt,\
|
||||
@@ -206,14 +206,14 @@
|
||||
prob(4);/obj/item/ammo_magazine/p90,\
|
||||
/* prob(4);/obj/item/ammo_magazine/m14,\
|
||||
prob(4);/obj/item/ammo_magazine/m14/large,\ */
|
||||
prob(4);/obj/item/ammo_magazine/c762,\
|
||||
prob(4);/obj/item/ammo_magazine/a556,\
|
||||
prob(4);/obj/item/ammo_magazine/a556m,\
|
||||
prob(4);/obj/item/ammo_magazine/c556/ext,\
|
||||
prob(4);/obj/item/ammo_magazine/s762,\
|
||||
prob(4);/obj/item/ammo_magazine/c556/ext,\
|
||||
prob(3);/obj/item/ammo_magazine/clip/a10mm,\
|
||||
prob(3);/obj/item/ammo_magazine/clip/a50,\
|
||||
prob(3);/obj/item/ammo_magazine/s762,\
|
||||
prob(3);/obj/item/ammo_magazine/c556,\
|
||||
prob(2);/obj/item/ammo_magazine/a50,\
|
||||
prob(2);/obj/item/ammo_magazine/a762,\
|
||||
prob(2);/obj/item/ammo_magazine/a556,\
|
||||
prob(1);/obj/item/weapon/storage/box/frags,\
|
||||
/* prob(1);/obj/item/ammo_magazine/battlerifle,\ */
|
||||
prob(1);/obj/item/ammo_casing/rocket,\
|
||||
|
||||
@@ -9,5 +9,8 @@ var/datum/lore/loremaster/loremaster = new/datum/lore/loremaster
|
||||
|
||||
var/list/paths = typesof(/datum/lore/organization) - /datum/lore/organization
|
||||
for(var/path in paths)
|
||||
var/datum/lore/organization/instance = new path()
|
||||
organizations[path] = instance
|
||||
// Some intermediate paths are not real organizations (ex. /datum/lore/organization/mil). Only do ones with names
|
||||
var/datum/lore/organization/instance = path
|
||||
if(initial(instance.name))
|
||||
instance = new path()
|
||||
organizations[path] = instance
|
||||
|
||||
@@ -326,12 +326,12 @@
|
||||
// Military
|
||||
|
||||
/datum/lore/organization/mil/sif_guard
|
||||
name = "Sif Homeguard Forces" // Todo: Get better name from lorepeople.
|
||||
name = "Sif Defense Force" // Todo: Get better name from lorepeople.
|
||||
short_name = "SifGuard"
|
||||
desc = ""
|
||||
history = ""
|
||||
work = "Sif Governmental Authority's military"
|
||||
headquarters = "Sif" // Make this more specific later.
|
||||
headquarters = "New Reykjavik, Sif"
|
||||
motto = ""
|
||||
autogenerate_destination_names = FALSE // Kinda weird if SifGuard goes to Nyx.
|
||||
|
||||
|
||||
@@ -383,4 +383,12 @@
|
||||
|
||||
/datum/gear/suit/miscellaneous/med_dep_jacket
|
||||
display_name = "department jacket, medical"
|
||||
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
|
||||
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/peacoat
|
||||
display_name = "peacoat"
|
||||
path = /obj/item/clothing/suit/storage/toggle/peacoat
|
||||
|
||||
/datum/gear/suit/miscellaneous/peacoat/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
@@ -20,22 +20,21 @@
|
||||
cheongasms[initial(cheongasm_type.name)] = cheongasm_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cheongasms))
|
||||
|
||||
/datum/gear/uniform/croptop
|
||||
display_name = "croptop selection"
|
||||
|
||||
/datum/gear/uniform/croptop/New()
|
||||
..()
|
||||
var/list/croptops = list()
|
||||
for(var/croptop in typesof(/obj/item/clothing/under/croptop))
|
||||
var/obj/item/clothing/under/croptop/croptop_type = croptop
|
||||
croptops[initial(croptop_type.name)] = croptop_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(croptops))
|
||||
|
||||
/datum/gear/uniform/kilt
|
||||
display_name = "kilt"
|
||||
path = /obj/item/clothing/under/kilt
|
||||
|
||||
/datum/gear/uniform/croptop
|
||||
display_name = "croptop, NT"
|
||||
path = /obj/item/clothing/under/croptop
|
||||
|
||||
/datum/gear/uniform/croptop/grey
|
||||
display_name = "croptop, grey"
|
||||
path = /obj/item/clothing/under/croptop/grey
|
||||
|
||||
/datum/gear/uniform/croptop/red
|
||||
display_name = "croptop, red"
|
||||
path = /obj/item/clothing/under/croptop/red
|
||||
|
||||
/datum/gear/uniform/cuttop
|
||||
display_name = "cut top, grey"
|
||||
path = /obj/item/clothing/under/cuttop
|
||||
@@ -182,65 +181,33 @@
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans/female
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/uniform/suit //amish
|
||||
display_name = "suit, amish"
|
||||
path = /obj/item/clothing/under/sl_suit
|
||||
/datum/gear/uniform/suit/lawyer
|
||||
display_name = "suit, one-piece selection"
|
||||
path = /obj/item/clothing/under/lawyer
|
||||
|
||||
/datum/gear/uniform/suit/black
|
||||
display_name = "suit, black"
|
||||
/datum/gear/uniform/suit/lawyer/New()
|
||||
..()
|
||||
var/list/lsuits = list()
|
||||
for(var/lsuit in typesof(/obj/item/clothing/under/lawyer))
|
||||
var/obj/item/clothing/suit/lsuit_type = lsuit
|
||||
lsuits[initial(lsuit_type.name)] = lsuit_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lsuits))
|
||||
|
||||
/datum/gear/uniform/suit/suit_jacket
|
||||
display_name = "suit, modular selection"
|
||||
path = /obj/item/clothing/under/suit_jacket
|
||||
|
||||
/datum/gear/uniform/suit/shinyblack
|
||||
display_name = "suit, shiny-black"
|
||||
path = /obj/item/clothing/under/lawyer/black
|
||||
/datum/gear/uniform/suit/suit_jacket/New()
|
||||
..()
|
||||
var/list/msuits = list()
|
||||
for(var/msuit in typesof(/obj/item/clothing/under/suit_jacket))
|
||||
var/obj/item/clothing/suit/msuit_type = msuit
|
||||
msuits[initial(msuit_type.name)] = msuit_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(msuits))
|
||||
|
||||
/datum/gear/uniform/suit/shinyblackskirt
|
||||
display_name = "suit, shiny-black skirt"
|
||||
path = /obj/item/clothing/under/lawyer/black/skirt
|
||||
|
||||
/datum/gear/uniform/suit/blue
|
||||
display_name = "suit, blue"
|
||||
path = /obj/item/clothing/under/lawyer/blue
|
||||
|
||||
/datum/gear/uniform/suit/blueskirt
|
||||
display_name = "suit, blue skirt"
|
||||
path = /obj/item/clothing/under/lawyer/blue/skirt
|
||||
|
||||
/datum/gear/uniform/suit/burgundy
|
||||
display_name = "suit, burgundy"
|
||||
path = /obj/item/clothing/under/suit_jacket/burgundy
|
||||
|
||||
/datum/gear/uniform/suit/burgundyskirt
|
||||
display_name = "suit, burgundy skirt"
|
||||
path = /obj/item/clothing/under/suit_jacket/burgundy/skirt
|
||||
|
||||
/datum/gear/uniform/suit/checkered
|
||||
display_name = "suit, checkered"
|
||||
path = /obj/item/clothing/under/suit_jacket/checkered
|
||||
|
||||
/datum/gear/uniform/suit/checkeredskirt
|
||||
display_name = "suit, checkered skirt"
|
||||
path = /obj/item/clothing/under/suit_jacket/checkered/skirt
|
||||
|
||||
/datum/gear/uniform/suit/charcoal
|
||||
display_name = "suit, charcoal"
|
||||
path = /obj/item/clothing/under/suit_jacket/charcoal
|
||||
|
||||
/datum/gear/uniform/suit/charcoalskirt
|
||||
display_name = "suit, charcoal skirt"
|
||||
path = /obj/item/clothing/under/suit_jacket/charcoal/skirt
|
||||
|
||||
/datum/gear/uniform/suit/exec
|
||||
display_name = "suit, executive"
|
||||
path = /obj/item/clothing/under/suit_jacket/really_black
|
||||
|
||||
/datum/gear/uniform/suit/execskirt
|
||||
display_name = "suit, executive skirt"
|
||||
path = /obj/item/clothing/under/suit_jacket/really_black/skirt
|
||||
|
||||
/datum/gear/uniform/suit/femaleexec
|
||||
display_name = "suit, female-executive"
|
||||
path = /obj/item/clothing/under/suit_jacket/female
|
||||
/datum/gear/uniform/suit/amish //amish
|
||||
display_name = "suit, amish"
|
||||
path = /obj/item/clothing/under/sl_suit
|
||||
|
||||
/datum/gear/uniform/suit/gentle
|
||||
display_name = "suit, gentlemen"
|
||||
@@ -250,50 +217,6 @@
|
||||
display_name = "suit, lady"
|
||||
path = /obj/item/clothing/under/gentlesuit/skirt
|
||||
|
||||
/datum/gear/uniform/suit/navy
|
||||
display_name = "suit, navy"
|
||||
path = /obj/item/clothing/under/suit_jacket/navy
|
||||
|
||||
/datum/gear/uniform/suit/navyskirt
|
||||
display_name = "suit, navy skirt"
|
||||
path = /obj/item/clothing/under/suit_jacket/navy/skirt
|
||||
|
||||
/datum/gear/uniform/suit/red
|
||||
display_name = "suit, red"
|
||||
path = /obj/item/clothing/under/suit_jacket/red
|
||||
|
||||
/datum/gear/uniform/suit/redskirt
|
||||
display_name = "suit, red skirt"
|
||||
path = /obj/item/clothing/under/suit_jacket/red/skirt
|
||||
|
||||
/datum/gear/uniform/suit/redlawyer
|
||||
display_name = "suit, lawyer-red"
|
||||
path = /obj/item/clothing/under/lawyer/red
|
||||
|
||||
/datum/gear/uniform/suit/redlawyerskirt
|
||||
display_name = "suit, lawyer-red skirt"
|
||||
path = /obj/item/clothing/under/lawyer/red/skirt
|
||||
|
||||
/datum/gear/uniform/suit/oldman
|
||||
display_name = "suit, old-man"
|
||||
path = /obj/item/clothing/under/lawyer/oldman
|
||||
|
||||
/datum/gear/uniform/suit/purple
|
||||
display_name = "suit, purple"
|
||||
path = /obj/item/clothing/under/lawyer/purpsuit
|
||||
|
||||
/datum/gear/uniform/suit/purpleskirt
|
||||
display_name = "suit, purple skirt"
|
||||
path = /obj/item/clothing/under/lawyer/purpsuit/skirt
|
||||
|
||||
/datum/gear/uniform/suit/tan
|
||||
display_name = "suit, tan"
|
||||
path = /obj/item/clothing/under/suit_jacket/tan
|
||||
|
||||
/datum/gear/uniform/suit/tanskirt
|
||||
display_name = "suit, tan skirt"
|
||||
path = /obj/item/clothing/under/suit_jacket/tan/skirt
|
||||
|
||||
/datum/gear/uniform/suit/white
|
||||
display_name = "suit, white"
|
||||
path = /obj/item/clothing/under/scratch
|
||||
@@ -302,14 +225,6 @@
|
||||
display_name = "suit, white skirt"
|
||||
path = /obj/item/clothing/under/scratch/skirt
|
||||
|
||||
/datum/gear/uniform/suit/whiteblue
|
||||
display_name = "suit, white-blue"
|
||||
path = /obj/item/clothing/under/lawyer/bluesuit
|
||||
|
||||
/datum/gear/uniform/suit/whiteblueskirt
|
||||
display_name = "suit, white-blue skirt"
|
||||
path = /obj/item/clothing/under/lawyer/bluesuit/skirt
|
||||
|
||||
/datum/gear/uniform/suit/detectiveskirt
|
||||
display_name = "suit, detective skirt (Detective)"
|
||||
path = /obj/item/clothing/under/det/skirt
|
||||
@@ -348,7 +263,7 @@
|
||||
|
||||
/datum/gear/uniform/oldwoman
|
||||
display_name = "old woman attire"
|
||||
path = /obj/item/clothing/under/lawyer/oldwoman
|
||||
path = /obj/item/clothing/under/oldwoman
|
||||
|
||||
/datum/gear/uniform/sundress
|
||||
display_name = "sundress"
|
||||
@@ -531,4 +446,16 @@
|
||||
|
||||
/datum/gear/uniform/yogapants/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/uniform/black_corset
|
||||
display_name = "black corset"
|
||||
path = /obj/item/clothing/under/dress/black_corset
|
||||
|
||||
/datum/gear/uniform/flower_dress
|
||||
display_name = "flower dress"
|
||||
path = /obj/item/clothing/under/dress/flower_dress
|
||||
|
||||
/datum/gear/uniform/red_swept_dress
|
||||
display_name = "red swept dress"
|
||||
path = /obj/item/clothing/under/dress/red_swept_dress
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/obj/item/clothing/head/soft/sol/expedition
|
||||
name = "\improper SifGuard cap"
|
||||
desc = "It's a black ballcap bearing a Sif Homeguard Corps crest."
|
||||
desc = "It's a black ballcap bearing a Sif Defense Force crest."
|
||||
icon_state = "expeditionsoft"
|
||||
item_state_slots = list(
|
||||
slot_l_hand_str = "blacksoft",
|
||||
@@ -115,12 +115,12 @@
|
||||
|
||||
/obj/item/clothing/head/dress/expedition
|
||||
name = "\improper SifGuard dress cap"
|
||||
desc = "A peaked grey dress uniform cap belonging to the Sif Homeguard Corps."
|
||||
desc = "A peaked grey dress uniform cap belonging to the Sif Defense Force."
|
||||
icon_state = "greydresscap"
|
||||
|
||||
/obj/item/clothing/head/dress/expedition/command
|
||||
name = "\improper SifGuard command dress cap"
|
||||
desc = "A peaked grey dress uniform cap belonging to the Sif Homeguard Corps. This one is trimmed in gold."
|
||||
desc = "A peaked grey dress uniform cap belonging to the Sif Defense Force. This one is trimmed in gold."
|
||||
icon_state = "greydresscap_com"
|
||||
|
||||
/obj/item/clothing/head/dress/fleet
|
||||
@@ -150,11 +150,6 @@
|
||||
desc = "A beret in Solar Confederate Government colors. For peacekeepers that are more inclined towards style than safety."
|
||||
icon_state = "beret_lightblue"
|
||||
|
||||
/obj/item/clothing/head/beret/sol/homeguard
|
||||
name = "home guard beret"
|
||||
desc = "A red beret denoting service in the Sol Home Guard. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_red"
|
||||
|
||||
/obj/item/clothing/head/beret/sol/gateway
|
||||
name = "gateway administration beret"
|
||||
desc = "An orange beret denoting service in the Gateway Administration. For personnel that are more inclined towards style than safety."
|
||||
@@ -182,32 +177,32 @@
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition
|
||||
name = "\improper SifGuard beret"
|
||||
desc = "A black beret belonging to the Sif Homeguard Corps. For personnel that are more inclined towards style than safety."
|
||||
desc = "A black beret belonging to the Sif Defense Force. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_black"
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/security
|
||||
name = "\improper SifGuard security beret"
|
||||
desc = "An Sif Homeguard Corps beret with a security crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Sif Defense Force beret with a security crest. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_black_security"
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/medical
|
||||
name = "\improper SifGuard medical beret"
|
||||
desc = "An Sif Homeguard Corps beret with a medical crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Sif Defense Force beret with a medical crest. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_black_medical"
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/engineering
|
||||
name = "\improper SifGuard engineering beret"
|
||||
desc = "An Sif Homeguard Corps beret with an engineering crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Sif Defense Force beret with an engineering crest. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_black_engineering"
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/supply
|
||||
name = "\improper SifGuard supply beret"
|
||||
desc = "An Sif Homeguard Corps beret with a supply crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Sif Defense Force beret with a supply crest. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_black_supply"
|
||||
|
||||
/obj/item/clothing/head/beret/sol/expedition/command
|
||||
name = "\improper SifGuard command beret"
|
||||
desc = "An Sif Homeguard Corps beret with a command crest. For personnel that are more inclined towards style than safety."
|
||||
desc = "A Sif Defense Force beret with a command crest. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_black_command"
|
||||
|
||||
/obj/item/clothing/head/beret/sol/fleet
|
||||
|
||||
@@ -340,6 +340,12 @@ obj/item/clothing/suit/kimono
|
||||
item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket")
|
||||
flags_inv = HIDEHOLSTER
|
||||
|
||||
obj/item/clothing/suit/storage/toggle/peacoat
|
||||
name = "peacoat"
|
||||
desc = "A well-tailored, stylish peacoat."
|
||||
icon_state = "peacoat"
|
||||
item_state_slots = list(slot_r_hand_str = "peacoat", slot_l_hand_str = "peacoat")
|
||||
flags_inv = HIDEHOLSTER
|
||||
/*
|
||||
* stripper
|
||||
*/
|
||||
|
||||
@@ -14,47 +14,47 @@
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary
|
||||
name = "\improper SifGuard jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons."
|
||||
icon_state = "blackservice_crew"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/medical
|
||||
name = "\improper SifGuard medical jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and blue trim."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and blue trim."
|
||||
icon_state = "blackservice_med"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/medical/command
|
||||
name = "\improper SifGuard medical command jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and blue trim."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and blue trim."
|
||||
icon_state = "blackservice_medcom"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/engineering
|
||||
name = "\improper SifGuard engineering jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and orange trim."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and orange trim."
|
||||
icon_state = "blackservice_eng"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/engineering/command
|
||||
name = "\improper SifGuard engineering command jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and orange trim."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and orange trim."
|
||||
icon_state = "blackservice_engcom"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/supply
|
||||
name = "\improper SifGuard supply jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and brown trim."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and brown trim."
|
||||
icon_state = "blackservice_sup"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/security
|
||||
name = "\improper SifGuard security jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has silver buttons and red trim."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and red trim."
|
||||
icon_state = "blackservice_sec"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/security/command
|
||||
name = "\improper SifGuard security command jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and red trim."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and red trim."
|
||||
icon_state = "blackservice_seccom"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/command
|
||||
name = "\improper SifGuard command jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Homeguard Corps. It has gold buttons and gold trim."
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and gold trim."
|
||||
icon_state = "blackservice_com"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/marine
|
||||
@@ -115,13 +115,13 @@
|
||||
allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/flashlight,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/device/radio,/obj/item/weapon/pen)
|
||||
|
||||
/obj/item/clothing/suit/dress/expedition
|
||||
name = "expeditionary dress jacket"
|
||||
desc = "A silver and grey dress jacket belonging to the SCG Expeditionary Corps. Fashionable, for the 25th century at least."
|
||||
name = "SifGuard dress jacket"
|
||||
desc = "A silver and grey dress jacket belonging to the Sif Defense Force. Fashionable, for the 25th century at least."
|
||||
icon_state = "greydress"
|
||||
|
||||
/obj/item/clothing/suit/dress/expedition/command
|
||||
name = "expeditionary command dress jacket"
|
||||
desc = "A gold and grey dress jacket belonging to the SCG Expeditionary Corps. The height of fashion."
|
||||
name = "SifGuard command dress jacket"
|
||||
desc = "A gold and grey dress jacket belonging to the Sif Defense Force. The height of fashion."
|
||||
icon_state = "greydress_com"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/dress
|
||||
@@ -136,7 +136,7 @@
|
||||
desc = "A crisp white SCG Fleet dress jacket with blue and gold accents. Don't get near pasta sauce or vox."
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/dress/fleet/command
|
||||
name = "expeditionary command dress jacket"
|
||||
name = "fleet command dress jacket"
|
||||
desc = "A crisp white SCG Fleet dress jacket dripping with gold accents. So bright it's blinding."
|
||||
icon_state = "whitedress_com"
|
||||
item_state = "labcoat"
|
||||
|
||||
@@ -117,37 +117,37 @@
|
||||
|
||||
/obj/item/clothing/under/lawyer
|
||||
desc = "Slick threads."
|
||||
name = "Lawyer suit"
|
||||
name = "lawyer suit"
|
||||
|
||||
/obj/item/clothing/under/lawyer/black
|
||||
name = "black Lawyer suit"
|
||||
name = "black lawyer suit"
|
||||
icon_state = "lawyer_black"
|
||||
|
||||
/obj/item/clothing/under/lawyer/black/skirt
|
||||
name = "black Lawyer skirt"
|
||||
name = "black lawyer skirt"
|
||||
icon_state = "lawyer_black_skirt"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
|
||||
|
||||
/obj/item/clothing/under/lawyer/female
|
||||
name = "black Lawyer suit"
|
||||
name = "black lawyer suit"
|
||||
icon_state = "black_suit_fem"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
|
||||
|
||||
/obj/item/clothing/under/lawyer/red
|
||||
name = "red Lawyer suit"
|
||||
name = "red lawyer suit"
|
||||
icon_state = "lawyer_red"
|
||||
|
||||
/obj/item/clothing/under/lawyer/red/skirt
|
||||
name = "red Lawyer skirt"
|
||||
name = "red lawyer skirt"
|
||||
icon_state = "lawyer_red_skirt"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
|
||||
|
||||
/obj/item/clothing/under/lawyer/blue
|
||||
name = "blue Lawyer suit"
|
||||
name = "blue lawyer suit"
|
||||
icon_state = "lawyer_blue"
|
||||
|
||||
/obj/item/clothing/under/lawyer/blue/skirt
|
||||
name = "blue Lawyer skirt"
|
||||
name = "blue lawyer skirt"
|
||||
icon_state = "lawyer_blue_skirt"
|
||||
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
icon_state = "bluesuit_skirt"
|
||||
|
||||
/obj/item/clothing/under/lawyer/purpsuit
|
||||
name = "purple Suit"
|
||||
name = "purple suit"
|
||||
icon_state = "lawyer_purp"
|
||||
item_state_slots = list(slot_r_hand_str = "purple", slot_l_hand_str = "purple")
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
icon_state = "oldman"
|
||||
item_state_slots = list(slot_r_hand_str = "johnny", slot_l_hand_str = "johnny")
|
||||
|
||||
/obj/item/clothing/under/lawyer/oldwoman
|
||||
/obj/item/clothing/under/oldwoman
|
||||
name = "Old Woman's Attire"
|
||||
desc = "A typical outfit for the older woman, a lovely cardigan and comfortable skirt."
|
||||
icon_state = "oldwoman"
|
||||
|
||||
@@ -374,6 +374,21 @@
|
||||
icon_state = "huresource"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/under/dress/black_corset
|
||||
name = "black corset"
|
||||
desc = "A black corset and skirt for those fancy nights out."
|
||||
icon_state = "black_corset"
|
||||
|
||||
/obj/item/clothing/under/dress/flower_dress
|
||||
name = "flower dress"
|
||||
desc = "A beautiful dress with a skirt of flowers."
|
||||
icon_state = "flower_dress"
|
||||
|
||||
/obj/item/clothing/under/dress/red_swept_dress
|
||||
name = "red swept dress"
|
||||
desc = "A red dress that sweeps to the side."
|
||||
icon_state = "red_swept_dress"
|
||||
|
||||
/*
|
||||
* wedding stuff
|
||||
*/
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/obj/item/clothing/under/pt/expeditionary
|
||||
name = "\improper SifGuard pt uniform"
|
||||
desc = "A baggy shirt bearing the seal of the Sif Homeguard Corps and some dorky looking blue shorts."
|
||||
desc = "A baggy shirt bearing the seal of the Sif Defense Force and some dorky looking blue shorts."
|
||||
icon_state = "expeditionpt"
|
||||
worn_state = "expeditionpt"
|
||||
|
||||
@@ -41,56 +41,56 @@
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary
|
||||
name = "\improper SifGuard uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim."
|
||||
icon_state = "blackutility_crew"
|
||||
worn_state = "blackutility_crew"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/medical
|
||||
name = "\improper SifGuard medical uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and blue blazes."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and blue blazes."
|
||||
icon_state = "blackutility_med"
|
||||
worn_state = "blackutility_med"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/medical/command
|
||||
name = "\improper SifGuard medical command uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and blue blazes."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and blue blazes."
|
||||
icon_state = "blackutility_medcom"
|
||||
worn_state = "blackutility_medcom"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/engineering
|
||||
name = "\improper SifGuard engineering uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and organge blazes."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and organge blazes."
|
||||
icon_state = "blackutility_eng"
|
||||
worn_state = "blackutility_eng"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/engineering/command
|
||||
name = "\improper SifGuard engineering command uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and organge blazes."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and organge blazes."
|
||||
icon_state = "blackutility_engcom"
|
||||
worn_state = "blackutility_engcom"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/supply
|
||||
name = "\improper SifGuard supply uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and brown blazes."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and brown blazes."
|
||||
icon_state = "blackutility_sup"
|
||||
worn_state = "blackutility_sup"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/security
|
||||
name = "\improper SifGuard security uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has silver trim and red blazes."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and red blazes."
|
||||
icon_state = "blackutility_sec"
|
||||
worn_state = "blackutility_sec"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/security/command
|
||||
name = "\improper SifGuard security command uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and red blazes."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and red blazes."
|
||||
icon_state = "blackutility_seccom"
|
||||
worn_state = "blackutility_seccom"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/command
|
||||
name = "\improper SifGuard command uniform"
|
||||
desc = "The utility uniform of the Sif Homeguard Corps, made from biohazard resistant material. This one has gold trim and gold blazes."
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and gold blazes."
|
||||
icon_state = "blackutility_com"
|
||||
worn_state = "blackutility_com"
|
||||
|
||||
@@ -222,13 +222,13 @@
|
||||
|
||||
/obj/item/clothing/under/mildress/expeditionary
|
||||
name = "\improper SifGuard dress uniform"
|
||||
desc = "The dress uniform of the Sif Homeguard Corps in silver trim."
|
||||
desc = "The dress uniform of the Sif Defense Force in silver trim."
|
||||
icon_state = "greydress"
|
||||
worn_state = "greydress"
|
||||
|
||||
/obj/item/clothing/under/mildress/expeditionary/command
|
||||
name = "\improper SifGuard command dress uniform"
|
||||
desc = "The dress uniform of the Sif Homeguard Corps in gold trim."
|
||||
desc = "The dress uniform of the Sif Defense Force in gold trim."
|
||||
icon_state = "greydress_com"
|
||||
worn_state = "greydress_com"
|
||||
|
||||
|
||||
@@ -1,30 +1,6 @@
|
||||
//
|
||||
// An enhancement to /datum/map to store more and better meta-info about Z-levels
|
||||
// TODO - Remove this temporary hack and convert to using the new /datum/map_z_level system
|
||||
//
|
||||
|
||||
// Structure to hold zlevel info together in one nice convenient package.
|
||||
// Wouldn't this be nicer than having to do those dumb arrays?
|
||||
/datum/map_z_level
|
||||
var/name // Friendly name of the zlevel
|
||||
var/z = -1 // Actual z-index of the zlevel. This had better be right!
|
||||
var/holomap_offset_x = 0 // Number of pixels to offset right (for centering)
|
||||
var/holomap_offset_y = 0 // Number of pixels to offset up (for centering)
|
||||
var/holomap_legend_x = 96 // x position of the holomap legend for this z
|
||||
var/holomap_legend_y = 96 // y position of the holomap legend for this z
|
||||
|
||||
/datum/map_z_level/New(z, name, holomap_zoom = initial(holomap_zoom), holomap_offset_x = initial(holomap_offset_x), holomap_offset_y = initial(holomap_offset_y))
|
||||
src.z = z
|
||||
src.name = name
|
||||
src.holomap_offset_x = holomap_offset_x
|
||||
src.holomap_offset_y = holomap_offset_y
|
||||
|
||||
// Map datum stuff we need
|
||||
// TODO - Put this into ~map_system/maps.dm
|
||||
/datum/map
|
||||
var/list/zlevels = list()
|
||||
|
||||
// LEGACY - This is how /vg does it, and how the code uses it. I'm in transition to use my new way (above)
|
||||
// but for now lets just initialize this stuff so the code works.
|
||||
/datum/map
|
||||
var/list/holomap_smoosh // List of lists of zlevels to smoosh into single icons
|
||||
var/list/holomap_offset_x = list()
|
||||
|
||||
@@ -98,6 +98,9 @@
|
||||
|
||||
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, var/stun = 1)
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
if(def_zone == "l_hand" || def_zone == "r_hand") //Diona (And any other potential plant people) hands don't get shocked.
|
||||
if(species.flags & IS_PLANT)
|
||||
return 0
|
||||
shock_damage *= siemens_coeff
|
||||
if (shock_damage<1)
|
||||
return 0
|
||||
|
||||
@@ -243,7 +243,8 @@
|
||||
// Replace completely missing limbs.
|
||||
for(var/limb_type in src.species.has_limbs)
|
||||
var/obj/item/organ/external/E = src.organs_by_name[limb_type]
|
||||
E.disfigured = 0
|
||||
if(E && E.disfigured)
|
||||
E.disfigured = 0
|
||||
if(E && (E.is_stump() || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD|ORGAN_MUTATED))))
|
||||
E.removed()
|
||||
qdel(E)
|
||||
|
||||
@@ -274,6 +274,9 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
if(part.robotic >= ORGAN_ROBOT)
|
||||
icon_key += "2[part.model ? "-[part.model]": ""]"
|
||||
robolimb_count++
|
||||
if(part.organ_tag == BP_HEAD || part.organ_tag == BP_TORSO || part.organ_tag == BP_GROIN)
|
||||
robobody_count ++
|
||||
else if(part.status & ORGAN_DEAD)
|
||||
icon_key += "3"
|
||||
else
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
var/desc = null // Ditto.
|
||||
var/icon_state = null // See above.
|
||||
var/mob/living/holder = null // The mob that this datum is affecting.
|
||||
var/weakref/origin = null // A weak reference to whatever caused the modifier to appear. THIS NEEDS TO BE A MOB/LIVING. It's a weakref to not interfere with qdel().
|
||||
var/expire_at = null // world.time when holder's Life() will remove the datum. If null, it lasts forever or until it gets deleted by something else.
|
||||
var/on_created_text = null // Text to show to holder upon being created.
|
||||
var/on_expired_text = null // Text to show to holder when it expires.
|
||||
@@ -37,8 +38,12 @@
|
||||
var/haste // If set to 1, the mob will be 'hasted', which makes it ignore slowdown and go really fast.
|
||||
var/evasion // Positive numbers reduce the odds of being hit by 15% each. Negative numbers increase the odds.
|
||||
|
||||
/datum/modifier/New(var/new_holder)
|
||||
/datum/modifier/New(var/new_holder, var/new_origin)
|
||||
holder = new_holder
|
||||
if(new_origin)
|
||||
origin = weakref(new_origin)
|
||||
else // We assume the holder caused the modifier if not told otherwise.
|
||||
origin = weakref(holder)
|
||||
..()
|
||||
|
||||
// Checks to see if this datum should continue existing.
|
||||
@@ -82,8 +87,9 @@
|
||||
M.tick()
|
||||
|
||||
// Call this to add a modifier to a mob. First argument is the modifier type you want, second is how long it should last, in ticks.
|
||||
// Third argument is the 'source' of the modifier, if it's from someone else. If null, it will default to the mob being applied to.
|
||||
// The SECONDS/MINUTES macro is very helpful for this. E.g. M.add_modifier(/datum/modifier/example, 5 MINUTES)
|
||||
/mob/living/proc/add_modifier(var/modifier_type, var/expire_at = null)
|
||||
/mob/living/proc/add_modifier(var/modifier_type, var/expire_at = null, var/mob/living/origin = null)
|
||||
// First, check if the mob already has this modifier.
|
||||
for(var/datum/modifier/M in modifiers)
|
||||
if(istype(modifier_type, M))
|
||||
@@ -99,7 +105,7 @@
|
||||
return
|
||||
|
||||
// If we're at this point, the mob doesn't already have it, or it does but stacking is allowed.
|
||||
var/datum/modifier/mod = new modifier_type(src)
|
||||
var/datum/modifier/mod = new modifier_type(src, origin)
|
||||
if(expire_at)
|
||||
mod.expire_at = world.time + expire_at
|
||||
if(mod.on_created_text)
|
||||
@@ -108,6 +114,8 @@
|
||||
if(mod.mob_overlay_state)
|
||||
update_modifier_visuals()
|
||||
|
||||
return mod
|
||||
|
||||
// Removes a specific instance of modifier
|
||||
/mob/living/proc/remove_specific_modifier(var/datum/modifier/M, var/silent = FALSE)
|
||||
M.expire(silent)
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
ui.add_template("mapContent", "crew_monitor_map_content.tmpl")
|
||||
// adding a template with the key "mapHeader" replaces the map header content
|
||||
ui.add_template("mapHeader", "crew_monitor_map_header.tmpl")
|
||||
if(!(ui.map_z_level in data["map_levels"]))
|
||||
ui.set_map_z_level(data["map_levels"][1])
|
||||
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
@@ -286,49 +286,43 @@
|
||||
|
||||
///////// 5.56mm /////////
|
||||
|
||||
/obj/item/ammo_magazine/a556
|
||||
/obj/item/ammo_magazine/c556
|
||||
name = "magazine (5.56mm)"
|
||||
icon_state = "5.56"
|
||||
icon_state = "c5.56"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a556"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
max_ammo = 10
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/a556/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/a556/practice
|
||||
name = "magazine (5.56mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a556p
|
||||
|
||||
/obj/item/ammo_magazine/a556/ap
|
||||
name = "magazine (5.56mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a556/ap
|
||||
|
||||
/obj/item/ammo_magazine/a556m
|
||||
name = "20rnd magazine (5.56mm)"
|
||||
icon_state = "5.56mid"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a556"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3600)
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
max_ammo = 20
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/a556m/empty
|
||||
/obj/item/ammo_magazine/c556/ext
|
||||
name = "extended magazine (5.56mm)"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2700)
|
||||
max_ammo = 30
|
||||
|
||||
/obj/item/ammo_magazine/c556/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/a556m/ap
|
||||
name = "20rnd magazine (5.56mm armor-piercing)"
|
||||
/obj/item/ammo_magazine/c556/ext/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/c556/practice
|
||||
name = "magazine (5.56mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a556p
|
||||
|
||||
/obj/item/ammo_magazine/c556/practice/ext
|
||||
name = "extended magazine (5.56mm practice)"
|
||||
max_ammo = 30
|
||||
|
||||
/obj/item/ammo_magazine/c556/ap
|
||||
name = "magazine (5.56mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a556/ap
|
||||
|
||||
/obj/item/ammo_magazine/a556m/practice
|
||||
name = "20rnd magazine (5.56mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a556p
|
||||
/obj/item/ammo_magazine/c556/ap/ext
|
||||
name = "extended magazine (5.56mm armor-piercing)"
|
||||
max_ammo = 30
|
||||
|
||||
/obj/item/ammo_magazine/clip/a556
|
||||
name = "ammo clip (5.56mm)"
|
||||
@@ -347,6 +341,25 @@
|
||||
name = "rifle clip (5.56mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
|
||||
/obj/item/ammo_magazine/a556
|
||||
name = "magazine box (5.56mm)"
|
||||
icon_state = "a556"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a556"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
w_class = ITEMSIZE_NORMAL // This should NOT fit in your pocket!!
|
||||
max_ammo = 50
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/a556/ap
|
||||
name = "magazine box (5.56mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a556/ap
|
||||
|
||||
/obj/item/ammo_magazine/a556/empty
|
||||
initial_ammo = 0
|
||||
|
||||
///////// .50 AE /////////
|
||||
|
||||
/obj/item/ammo_magazine/a50
|
||||
@@ -375,33 +388,14 @@
|
||||
|
||||
///////// 7.62mm /////////
|
||||
|
||||
/obj/item/ammo_magazine/a762
|
||||
name = "magazine box (7.62mm)"
|
||||
icon_state = "a762"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a762"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
w_class = ITEMSIZE_NORMAL // This should NOT fit in your pocket!!
|
||||
max_ammo = 50
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/a762/ap
|
||||
name = "magazine box (7.62mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a762/ap
|
||||
|
||||
/obj/item/ammo_magazine/a762/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/c762
|
||||
name = "magazine (7.62mm)"
|
||||
icon_state = "c762"
|
||||
icon_state = "c7.62"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a762"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 4000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
max_ammo = 20
|
||||
max_ammo = 20 // VOREStation Edit - This one is supposed to be bigger than the small one.
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/c762/ap
|
||||
@@ -416,7 +410,7 @@
|
||||
icon_state = "SVD"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a762"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
max_ammo = 10
|
||||
multiple_sprites = 1
|
||||
|
||||
@@ -257,6 +257,11 @@
|
||||
icon_state = "rifle-casing" // Need to make an icon for these
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/practice
|
||||
|
||||
/obj/item/ammo_casing/a556/blank
|
||||
desc = "A blank 5.56mm bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/blank
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 90)
|
||||
|
||||
/obj/item/ammo_casing/a556/hp
|
||||
desc = "A 5.56mm hollow-point bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a556/hollow
|
||||
|
||||
@@ -51,17 +51,17 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/sts35
|
||||
name = "assault rifle"
|
||||
desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 7.62mm rounds. This one is unmarked."
|
||||
desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.56mm rounds. This one is unmarked."
|
||||
icon_state = "arifle"
|
||||
item_state = null
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
caliber = "a762"
|
||||
caliber = "a556"
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/c762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c762, /obj/item/ammo_magazine/s762)
|
||||
magazine_type = /obj/item/ammo_magazine/c556
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c556)
|
||||
|
||||
one_handed_penalty = 4
|
||||
|
||||
@@ -104,19 +104,19 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/z8
|
||||
name = "designated marksman rifle"
|
||||
desc = "The Z8 Bulldog is an older model designated marksman rifle, made by the now defunct Zendai Foundries. Makes you feel like a space marine when you hold it, even though it can only hold 10 round magazines. Uses 5.56mm rounds and has an under barrel grenade launcher."
|
||||
desc = "The Z8 Bulldog is an older model designated marksman rifle, made by the now defunct Zendai Foundries. Makes you feel like a space marine when you hold it, even though it can only hold 10 round magazines. Uses 7.62mm rounds and has an under barrel grenade launcher."
|
||||
icon_state = "carbine" // This isn't a carbine. :T
|
||||
item_state = "z8carbine"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
caliber = "a556"
|
||||
caliber = "a762"
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
|
||||
ammo_type = "/obj/item/ammo_casing/a556" // Is this really needed anymore?
|
||||
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/a556
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a556)
|
||||
magazine_type = /obj/item/ammo_magazine/c762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c762)
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
@@ -181,14 +181,14 @@
|
||||
force = 10
|
||||
slot_flags = 0
|
||||
max_shells = 50
|
||||
caliber = "a762"
|
||||
caliber = "a556"
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
|
||||
slot_flags = SLOT_BACK
|
||||
ammo_type = "/obj/item/ammo_casing/a762" // Is this really needed anymore?
|
||||
ammo_type = "/obj/item/ammo_casing/a556" // Is this really needed anymore?
|
||||
fire_sound = 'sound/weapons/machinegun.ogg'
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/a762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a762, /obj/item/ammo_magazine/c762)
|
||||
magazine_type = /obj/item/ammo_magazine/a556
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a556, /obj/item/ammo_magazine/c556)
|
||||
|
||||
one_handed_penalty = 6
|
||||
|
||||
@@ -346,16 +346,16 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine
|
||||
name = "assault carbine"
|
||||
desc = "The bullpup configured GP3000 is a lightweight, compact, military-grade assault rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. The serial number on this one has been scratched off. Uses 5.56mm rounds."
|
||||
icon_state = "bullpupm"
|
||||
icon_state = "bullpup"
|
||||
item_state = "bullpup"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
caliber = "a556"
|
||||
caliber = "a762"
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/a556m
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a556, /obj/item/ammo_magazine/a556m)
|
||||
magazine_type = /obj/item/ammo_magazine/c762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c762)
|
||||
|
||||
one_handed_penalty = 4
|
||||
|
||||
@@ -366,9 +366,9 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
if(istype(ammo_magazine,/obj/item/ammo_magazine/a556m))
|
||||
icon_state = "bullpupm"
|
||||
if(ammo_magazine)
|
||||
icon_state = "bullpup"
|
||||
else
|
||||
icon_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
|
||||
icon_state = "bullpup-empty"
|
||||
item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial
|
||||
name = "ceremonial bolt-action rifle"
|
||||
desc = "A bolt-action rifle with a heavy, high-quality wood stock that has a beautiful finish. Clearly not intended to be used in combat. Uses 7.62mm rounds."
|
||||
desc = "A bolt-action rifle with a heavy, high-quality wood stock that has a beautiful finish. Clearly not intended to be used in combat. Uses 5.56mm rounds."
|
||||
ammo_type = /obj/item/ammo_casing/a762/blank
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin
|
||||
@@ -55,13 +55,13 @@
|
||||
//Lever actions are the same thing, but bigger.
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever
|
||||
name = "lever-action rifle"
|
||||
desc = "A reproduction of an almost ancient weapon design from the 19th century. This one uses a lever-action to move new rounds into the chamber. Uses 5.56mm rounds."
|
||||
desc = "A reproduction of an almost ancient weapon design from the 19th century. This one uses a lever-action to move new rounds into the chamber. Uses 7.62mm rounds."
|
||||
item_state = "leveraction"
|
||||
icon_state = "leveraction"
|
||||
fire_sound = 'sound/weapons/rifleshot.ogg'
|
||||
max_shells = 5
|
||||
caliber = "a556"
|
||||
caliber = "a762"
|
||||
origin_tech = list(TECH_COMBAT = 1)// Old as shit rifle doesn't have very good tech.
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
load_method = SINGLE_CASING|SPEEDLOADER
|
||||
action_sound = 'sound/weapons/riflebolt.ogg'
|
||||
@@ -198,26 +198,26 @@
|
||||
penetrating = 1
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762
|
||||
damage = 25
|
||||
damage = 35
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/ap
|
||||
damage = 20
|
||||
armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds.
|
||||
damage = 30
|
||||
armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds.
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/hollow
|
||||
damage = 35
|
||||
damage = 40
|
||||
armor_penetration = -50
|
||||
penetrating = 0
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a556
|
||||
damage = 35
|
||||
damage = 25
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a556/ap
|
||||
damage = 30
|
||||
armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds.
|
||||
damage = 20
|
||||
armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds.
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a556/hollow
|
||||
damage = 40
|
||||
damage = 35
|
||||
armor_penetration = -50
|
||||
penetrating = 0
|
||||
|
||||
|
||||
@@ -83,8 +83,8 @@ var/global/list/datum/supply_drop_loot/supply_drop
|
||||
/obj/item/clothing/accessory/storage/black_drop_pouches,
|
||||
/obj/item/weapon/storage/backpack/dufflebag/sec,
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine,
|
||||
/obj/item/ammo_magazine/a556m/ap,
|
||||
/obj/item/ammo_magazine/a556m,
|
||||
/obj/item/ammo_magazine/c762/ap,
|
||||
/obj/item/ammo_magazine/c762,
|
||||
/obj/item/weapon/shield/energy,
|
||||
/obj/item/weapon/grenade/frag,
|
||||
/obj/item/weapon/grenade/frag,
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
env.merge(removed)
|
||||
|
||||
for(var/mob/living/carbon/human/l in view(src, min(7, round(sqrt(power/6))))) // If they can see it without mesons on. Bad on them.
|
||||
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
|
||||
if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) // VOREStation Edit - Only mesons can protect you!
|
||||
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
|
||||
|
||||
//adjusted range so that a power of 170 (pretty high) results in 9 tiles, roughly the distance from the core to the engine monitoring room.
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
//Currently, the only problem I have now is that this weapon's item_state isn't working.
|
||||
/obj/item/weapon/gun/projectile/automatic/fluff/crestrose
|
||||
name = "Crescent Rose"
|
||||
desc = "Can you match my resolve? If so then you will succeed. I believe that the human spirit is indomitable. Keep Moving Forward. Uses 5.56mm rounds."
|
||||
desc = "Can you match my resolve? If so then you will succeed. I believe that the human spirit is indomitable. Keep Moving Forward. Uses 7.62mm rounds."
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "crestrose_fold"
|
||||
|
||||
@@ -278,9 +278,9 @@
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
hitsound = null
|
||||
caliber = "a556"
|
||||
magazine_type = /obj/item/ammo_magazine/a556
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a556)
|
||||
caliber = "s762"
|
||||
magazine_type = /obj/item/ammo_magazine/s762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/s762)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/fluff/crestrose/attack_self(mob/user as mob)
|
||||
on = !on
|
||||
@@ -361,10 +361,8 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine/fluff/ufarc/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
if(istype(ammo_magazine,/obj/item/ammo_magazine/a556m))
|
||||
icon_state = "ufarc"
|
||||
else
|
||||
icon_state = (ammo_magazine)? "ufarc" : "ufarc-empty"
|
||||
// TODO - Fix this for spriting different size magazines
|
||||
icon_state = (ammo_magazine)? "ufarc" : "ufarc-empty"
|
||||
item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
|
||||
@@ -381,10 +379,8 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine/fluff/g44/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
if(istype(ammo_magazine,/obj/item/ammo_magazine/a556m))
|
||||
icon_state = "g44"
|
||||
else
|
||||
icon_state = (ammo_magazine)? "g44" : "g44-empty"
|
||||
// TODO - Fix this for spriting different size magazines
|
||||
icon_state = (ammo_magazine)? "g44" : "g44-empty"
|
||||
item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
|
||||
|
||||
@@ -53,6 +53,41 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">09 May 2017</h2>
|
||||
<h3 class="author">Anewbe updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Ports but does not enable Bay's MultiZAS.</li>
|
||||
</ul>
|
||||
<h3 class="author">Leshana updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Optimized (but still not enabled) multi-z ZAS</li>
|
||||
<li class="rscadd">Multi-Z explosion transfer coefficient is now configurable</li>
|
||||
</ul>
|
||||
<h3 class="author">N3X15 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Flashlights on the high setting are no longer Beacons of Gondor.</li>
|
||||
</ul>
|
||||
<h3 class="author">Neerti updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Tesla armor now retaliates against ranged attacks if within 3 tiles, and recharges in 15 seconds, from 20.</li>
|
||||
<li class="tweak">Technomancer Instability fades away slower.</li>
|
||||
<li class="tweak">Fire and frost auras made more potent.</li>
|
||||
<li class="rscadd">Gambit can now give rare spells unobtainable by other means, based on spell power.</li>
|
||||
<li class="tweak">Mend Wounds and Mend Burns combined into Mend Life. Mend Metal and Mend Wires combined into Mend Synthetic.</li>
|
||||
<li class="rscadd">Adds Lesser Chain Lightning, a more spammable version, but weaker.</li>
|
||||
<li class="rscadd">Adds Destabilize, which makes an area glow with instability for 20 seconds.</li>
|
||||
<li class="rscadd">Adds Ionic Bolt, which ruins the lives of synthetics.</li>
|
||||
<li class="tweak">Oxygenate made cheaper.</li>
|
||||
</ul>
|
||||
<h3 class="author">SiegDerMaus updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds one new haircut, a chin-length bob.</li>
|
||||
</ul>
|
||||
<h3 class="author">Yosh updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Ports a bunch of hair from Bay. Knock yourself out.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">05 May 2017</h2>
|
||||
<h3 class="author">Anewbe updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -3519,3 +3519,28 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- tweak: Guns on harm intent in aim mode will target, rather than shoot pointblank
|
||||
on first click.
|
||||
- bugfix: You can now put handcuffs on yourself.
|
||||
2017-05-09:
|
||||
Anewbe:
|
||||
- rscadd: Ports but does not enable Bay's MultiZAS.
|
||||
Leshana:
|
||||
- tweak: Optimized (but still not enabled) multi-z ZAS
|
||||
- rscadd: Multi-Z explosion transfer coefficient is now configurable
|
||||
N3X15:
|
||||
- tweak: Flashlights on the high setting are no longer Beacons of Gondor.
|
||||
Neerti:
|
||||
- tweak: Tesla armor now retaliates against ranged attacks if within 3 tiles, and
|
||||
recharges in 15 seconds, from 20.
|
||||
- tweak: Technomancer Instability fades away slower.
|
||||
- tweak: Fire and frost auras made more potent.
|
||||
- rscadd: Gambit can now give rare spells unobtainable by other means, based on
|
||||
spell power.
|
||||
- tweak: Mend Wounds and Mend Burns combined into Mend Life. Mend Metal and Mend
|
||||
Wires combined into Mend Synthetic.
|
||||
- rscadd: Adds Lesser Chain Lightning, a more spammable version, but weaker.
|
||||
- rscadd: Adds Destabilize, which makes an area glow with instability for 20 seconds.
|
||||
- rscadd: Adds Ionic Bolt, which ruins the lives of synthetics.
|
||||
- tweak: Oxygenate made cheaper.
|
||||
SiegDerMaus:
|
||||
- rscadd: Adds one new haircut, a chin-length bob.
|
||||
Yosh:
|
||||
- rscadd: Ports a bunch of hair from Bay. Knock yourself out.
|
||||
|
||||
@@ -33,4 +33,4 @@ delete-after: True
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Ports but does not enable Bay's MultiZAS."
|
||||
- tweak: "The names of 5.56 and 7.62 ammo have been swapped, as have the guns that use them. The magazines should look the same, and the guns will do the same damage they used to do."
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
author: Sarmie
|
||||
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- bugfix: "Dionaea have remembered how to regrow their limbs properly."
|
||||
@@ -1,5 +0,0 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Optimized (but still not enabled) multi-z ZAS"
|
||||
- rscadd: "Multi-Z explosion transfer coefficient is now configurable"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "During the gravity failure event, you can now buckle yourself to a chair to prevent falling when gravity returns."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added an admin verb to debug the map datum."
|
||||
@@ -21,16 +21,12 @@
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: SiegDerMaus
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Adds one new haircut, a chin-length bob."
|
||||
- rscadd: "Added nanomap capability to the Power Monitoring Computer"
|
||||
- rscadd: "Added nanomap capability to the Atmos Control Computer"
|
||||
- tweak: "Expanded nanomap on Camera Console to all station z-levels by default."
|
||||
- tweak: "Crew Monitoring nanomap will support crew monitors built on other station map z levels."
|
||||
- imageadd: "Updated z1 nanomap for Northern Star"
|
||||
- imageadd: "Generated z5 nanomap for Northern Star"
|
||||
@@ -1,36 +0,0 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Yosh
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Ports a bunch of hair from Bay. Knock yourself out."
|
||||
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 424 KiB After Width: | Height: | Size: 457 KiB |
|
Before Width: | Height: | Size: 350 KiB After Width: | Height: | Size: 353 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 161 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
@@ -9,26 +9,7 @@
|
||||
lobby_icon = 'icons/misc/title.dmi'
|
||||
lobby_screens = list("mockingjay00")
|
||||
|
||||
station_levels = list(
|
||||
Z_LEVEL_FIRST_EXAMPLE,
|
||||
Z_LEVEL_SECOND_EXAMPLE
|
||||
)
|
||||
|
||||
admin_levels = list()
|
||||
contact_levels = list(
|
||||
Z_LEVEL_FIRST_EXAMPLE,
|
||||
Z_LEVEL_SECOND_EXAMPLE
|
||||
)
|
||||
|
||||
player_levels = list(
|
||||
Z_LEVEL_FIRST_EXAMPLE,
|
||||
Z_LEVEL_SECOND_EXAMPLE
|
||||
)
|
||||
|
||||
sealed_levels = list()
|
||||
empty_levels = list()
|
||||
accessible_z_levels = list("1" = 50, "2" = 50) // The defines can't be used here sadly.
|
||||
base_turf_by_z = list("2" = /turf/simulated/open)
|
||||
zlevel_datum_type = /datum/map_z_level/example
|
||||
|
||||
station_name = "The Funhouse"
|
||||
station_short = "Funhouse"
|
||||
@@ -46,4 +27,17 @@
|
||||
emergency_shuttle_docked_message = "The Emergency Shuttle has docked with the station at docks one and two. You have approximately %ETD% to board the Emergency Shuttle."
|
||||
emergency_shuttle_leaving_dock = "The Emergency Shuttle has left the station. Estimate %ETA% until the shuttle docks at %dock_name%."
|
||||
emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive at docks one and two in approximately %ETA%"
|
||||
emergency_shuttle_recall_message = "The emergency shuttle has been recalled."
|
||||
emergency_shuttle_recall_message = "The emergency shuttle has been recalled."
|
||||
|
||||
/datum/map_z_level/example/first
|
||||
z = Z_LEVEL_FIRST_EXAMPLE
|
||||
name = "First Floor"
|
||||
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER
|
||||
transit_chance = 50
|
||||
|
||||
/datum/map_z_level/example/second
|
||||
z = Z_LEVEL_SECOND_EXAMPLE
|
||||
name = "Second Floor"
|
||||
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER
|
||||
transit_chance = 50
|
||||
base_turf = /turf/simulated/open
|
||||
|
||||
@@ -14,34 +14,7 @@
|
||||
lobby_icon = 'icons/misc/title.dmi'
|
||||
lobby_screens = list("mockingjay00")
|
||||
|
||||
station_levels = list(
|
||||
Z_LEVEL_MAIN_NORTHERN_STAR,
|
||||
Z_LEVEL_MINING_NORTHERN_STAR
|
||||
)
|
||||
|
||||
admin_levels = list(Z_LEVEL_CENTCOM_NORTHERN_STAR)
|
||||
contact_levels = list(
|
||||
Z_LEVEL_MAIN_NORTHERN_STAR,
|
||||
Z_LEVEL_CENTCOM_NORTHERN_STAR,
|
||||
Z_LEVEL_MINING_NORTHERN_STAR
|
||||
)
|
||||
|
||||
player_levels = list(
|
||||
Z_LEVEL_MAIN_NORTHERN_STAR,
|
||||
Z_LEVEL_TELECOMMS_NORTHERN_STAR,
|
||||
Z_LEVEL_ABANDONED_ASTEROID_NORTHERN_STAR,
|
||||
Z_LEVEL_MINING_NORTHERN_STAR,
|
||||
Z_LEVEL_EMPTY_NORTHERN_STAR
|
||||
)
|
||||
|
||||
sealed_levels = list()
|
||||
empty_levels = list()
|
||||
accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" = 60) // The defines can't be used here sadly.
|
||||
base_turf_by_z = list(
|
||||
"1" = /turf/simulated/mineral/floor,
|
||||
"4" = /turf/simulated/mineral/floor,
|
||||
"5" = /turf/simulated/mineral/floor
|
||||
)
|
||||
zlevel_datum_type = /datum/map_z_level/northern_star
|
||||
|
||||
station_name = "NCS Northern Star"
|
||||
station_short = "Northern Star"
|
||||
@@ -92,4 +65,42 @@
|
||||
|
||||
new /datum/random_map/automata/cave_system(null, 1, 1, Z_LEVEL_MINING_NORTHERN_STAR, world.maxx, world.maxy) // Create the mining Z-level.
|
||||
new /datum/random_map/noise/ore(null, 1, 1, Z_LEVEL_MINING_NORTHERN_STAR, 64, 64) // Create the mining ore distribution map.
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/datum/map_z_level/northern_star/main
|
||||
z = Z_LEVEL_MAIN_NORTHERN_STAR
|
||||
name = "Main"
|
||||
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER
|
||||
transit_chance = 5
|
||||
base_turf = /turf/simulated/mineral/floor
|
||||
|
||||
/datum/map_z_level/northern_star/centcomm
|
||||
z = Z_LEVEL_CENTCOM_NORTHERN_STAR
|
||||
name = "Centcomm"
|
||||
flags = MAP_LEVEL_ADMIN|MAP_LEVEL_CONTACT
|
||||
|
||||
/datum/map_z_level/northern_star/telecomms
|
||||
z = Z_LEVEL_TELECOMMS_NORTHERN_STAR
|
||||
name = "Telecomms"
|
||||
flags = MAP_LEVEL_PLAYER
|
||||
transit_chance = 10
|
||||
|
||||
/datum/map_z_level/northern_star/abandoned_asteroid
|
||||
z = Z_LEVEL_ABANDONED_ASTEROID_NORTHERN_STAR
|
||||
name = "Abandoned Asteroid"
|
||||
flags = MAP_LEVEL_PLAYER
|
||||
transit_chance = 15
|
||||
base_turf = /turf/simulated/mineral/floor
|
||||
|
||||
/datum/map_z_level/northern_star/mining
|
||||
z = Z_LEVEL_MINING_NORTHERN_STAR
|
||||
name = "Mining"
|
||||
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER
|
||||
transit_chance = 10
|
||||
base_turf = /turf/simulated/mineral/floor
|
||||
|
||||
/datum/map_z_level/northern_star/empty
|
||||
z = Z_LEVEL_EMPTY_NORTHERN_STAR
|
||||
name = "Empty"
|
||||
flags = MAP_LEVEL_PLAYER
|
||||
transit_chance = 60
|
||||
|
||||
@@ -869,11 +869,11 @@
|
||||
"aqK" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT"; name = "Assault Weapon Storage"; p_open = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqL" = (/obj/structure/sign/securearea,/turf/simulated/shuttle/wall/dark/hard_corner,/area/centcom/specops)
|
||||
"aqM" = (/obj/machinery/door/airlock/centcom,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqN" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqN" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqO" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqP" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqQ" = (/obj/structure/table/rack,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/weapon/gun/projectile/automatic/p90,/obj/item/weapon/gun/projectile/automatic/p90,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqR" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqR" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqS" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
|
||||
"aqT" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"aqU" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
"eW" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space)
|
||||
"eX" = (/obj/structure/table/reinforced,/turf/unsimulated/floor/steel,/area/centcom/control)
|
||||
"eY" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor/steel,/area/centcom/control)
|
||||
"eZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762/ap,/obj/item/ammo_magazine/a762/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"eZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556/ap,/obj/item/ammo_magazine/a556/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fa" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fb" = (/obj/machinery/door/blast/regular{id = "HEAVY"; name = "HEAVY ORDINANCE"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fc" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
@@ -307,7 +307,7 @@
|
||||
"fU" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fV" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/projectile/heavysniper,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fW" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fX" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/obj/item/ammo_magazine/a556m,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fX" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fY" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"fZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"ga" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/energy/netgun,/obj/item/weapon/gun/energy/netgun,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
@@ -332,7 +332,7 @@
|
||||
"gt" = (/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/shuttle/large_escape_pod1/centcom)
|
||||
"gu" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/shuttle/large_escape_pod1/centcom)
|
||||
"gv" = (/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 8},/obj/machinery/light/flamp/noshade,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac)
|
||||
"gw" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556/ap,/obj/item/ammo_magazine/a556/ap,/obj/item/ammo_magazine/a556/ap,/obj/item/ammo_magazine/a556/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"gw" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762/ap,/obj/item/ammo_magazine/s762/ap,/obj/item/ammo_magazine/s762/ap,/obj/item/ammo_magazine/s762/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"gx" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"gy" = (/obj/machinery/button/remote/blast_door{id = "HEAVY"; name = "SHIT IS LIT"; pixel_x = 0; pixel_y = -28; req_access = list(3)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
"gz" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
|
||||
|
||||