Merge pull request #1564 from VOREStation/polaris-merge-2017-05-26

Polaris Sync 2017 05 26
This commit is contained in:
Arokha Sieyes
2017-05-26 19:27:06 -04:00
committed by GitHub
104 changed files with 1183 additions and 672 deletions
+5 -2
View File
@@ -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
+8
View File
@@ -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.
+17 -25
View File
@@ -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)"
+22 -23
View File
@@ -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)"
+2
View File
@@ -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()
..()
+3 -1
View File
@@ -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)
+20 -15
View File
@@ -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)
+22 -4
View File
@@ -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)
+1
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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))
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2
View File
@@ -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(.)
+10 -9
View File
@@ -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"
+6 -6
View File
@@ -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,\
+2
View File
@@ -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,
+9
View File
@@ -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)
+7 -7
View File
@@ -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,\
+5 -2
View File
@@ -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
+2 -2
View File
@@ -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
+9 -14
View File
@@ -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 -14
View File
@@ -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"
+10 -10
View File
@@ -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 -12
View File
@@ -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 -25
View File
@@ -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()
+3
View File
@@ -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
+11 -3
View File
@@ -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()
+47 -53
View File
@@ -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
+2 -2
View File
@@ -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,
+1 -1
View File
@@ -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.
+8 -12
View File
@@ -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()
+35
View File
@@ -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">
+25
View File
@@ -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."
-5
View File
@@ -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."
+4
View File
@@ -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"
-36
View File
@@ -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."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 33 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 KiB

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

After

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 KiB

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

+15 -21
View File
@@ -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
+40 -29
View File
@@ -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
+2 -2
View File
@@ -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)
+3 -3
View File
@@ -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)

Some files were not shown because too many files have changed in this diff Show More