Merge branch 'master' of https://github.com/PolarisSS13/Polaris into costumes
@@ -1 +1,2 @@
|
||||
#define OUTFIT_JOB_NAME(job_name) ("Job - " + job_name)
|
||||
#define OUTFIT_MILITARY(job_name) ("Military Uniform - " + job_name)
|
||||
@@ -15,7 +15,7 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/cmo
|
||||
shoes = /obj/item/clothing/shoes/brown
|
||||
l_hand = /obj/item/weapon/storage/firstaid/adv
|
||||
r_pocket = /obj/item/device/flashlight/pen
|
||||
r_pocket = /obj/item/device/healthanalyzer
|
||||
id_type = /obj/item/weapon/card/id/medical/head
|
||||
pda_type = /obj/item/device/pda/heads/cmo
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
uniform = /obj/item/clothing/under/rank/medical
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||
l_hand = /obj/item/weapon/storage/firstaid/adv
|
||||
r_pocket = /obj/item/device/flashlight/pen
|
||||
r_pocket = /obj/item/device/healthanalyzer
|
||||
id_type = /obj/item/weapon/card/id/medical/doctor
|
||||
|
||||
/decl/hierarchy/outfit/job/medical/doctor/emergency_physician
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
/decl/hierarchy/outfit/military/fleet/pt
|
||||
name = "Fleet Uniform - PT"
|
||||
name = OUTFIT_MILITARY("Fleet PT")
|
||||
uniform = /obj/item/clothing/under/pt/fleet
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
|
||||
/decl/hierarchy/outfit/military/fleet/utility
|
||||
name = "Fleet Uniform - Utility"
|
||||
name = OUTFIT_MILITARY("Fleet Utility")
|
||||
uniform = /obj/item/clothing/under/utility/fleet
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
|
||||
/decl/hierarchy/outfit/military/fleet/service
|
||||
name = "Fleet Uniform - Service"
|
||||
name = OUTFIT_MILITARY("Fleet Service")
|
||||
uniform = /obj/item/clothing/under/service/fleet
|
||||
shoes = /obj/item/clothing/shoes/dress/white
|
||||
|
||||
/decl/hierarchy/outfit/military/fleet/dress
|
||||
name = "Fleet Uniform - Dress"
|
||||
name = OUTFIT_MILITARY("Fleet Dress")
|
||||
uniform = /obj/item/clothing/under/service/fleet
|
||||
shoes = /obj/item/clothing/shoes/dress/white
|
||||
suit = /obj/item/clothing/suit/storage/toggle/dress/fleet
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
/decl/hierarchy/outfit/military/marine/pt
|
||||
name = "Marine Uniform - PT"
|
||||
name = OUTFIT_MILITARY("Marine PT")
|
||||
uniform = /obj/item/clothing/under/pt/marine
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
|
||||
/decl/hierarchy/outfit/military/marine/utility
|
||||
name = "Marine Uniform - Utility"
|
||||
name = OUTFIT_MILITARY("Marine Utility")
|
||||
uniform = /obj/item/clothing/under/utility/marine
|
||||
shoes = /obj/item/clothing/shoes/boots/jungle
|
||||
|
||||
/decl/hierarchy/outfit/military/marine/service
|
||||
name = "Marine Uniform - Service"
|
||||
name = OUTFIT_MILITARY("Marine Service")
|
||||
uniform = /obj/item/clothing/under/service/marine
|
||||
shoes = /obj/item/clothing/shoes/dress
|
||||
suit = /obj/item/clothing/suit/storage/service/marine
|
||||
|
||||
/decl/hierarchy/outfit/military/marine/dress
|
||||
name = "Marine Uniform - Dress"
|
||||
name = OUTFIT_MILITARY("Marine Dress")
|
||||
uniform = /obj/item/clothing/under/mildress/marine
|
||||
shoes = /obj/item/clothing/shoes/dress/white
|
||||
suit = /obj/item/clothing/suit/dress/marine
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
/decl/hierarchy/outfit/military/sifguard/pt
|
||||
name = "SifGuard Uniform - PT"
|
||||
name = OUTFIT_MILITARY("SifGuard PT")
|
||||
uniform = /obj/item/clothing/under/pt/expeditionary
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
|
||||
/decl/hierarchy/outfit/military/sifguard/utility
|
||||
name = "SifGuard Uniform - Utility"
|
||||
name = OUTFIT_MILITARY("SifGuard Utility")
|
||||
uniform = /obj/item/clothing/under/utility/expeditionary
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
|
||||
/decl/hierarchy/outfit/military/sifguard/service
|
||||
name = "SifGuard Uniform - Service"
|
||||
name = OUTFIT_MILITARY("SifGuard Service")
|
||||
uniform = /obj/item/clothing/under/utility/expeditionary
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
suit = /obj/item/clothing/suit/storage/service/expeditionary
|
||||
|
||||
/decl/hierarchy/outfit/military/sifguard/dress
|
||||
name = "SifGuard Uniform - Dress"
|
||||
name = OUTFIT_MILITARY("SifGuard Dress")
|
||||
uniform = /obj/item/clothing/under/mildress/expeditionary
|
||||
shoes = /obj/item/clothing/shoes/dress
|
||||
suit = /obj/item/clothing/suit/dress/expedition
|
||||
|
||||
@@ -427,6 +427,24 @@
|
||||
origin_tech = list(TECH_POWER = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
|
||||
|
||||
var/charge = 0
|
||||
var/max_charge = 1000
|
||||
|
||||
/obj/item/weapon/stock_parts/capacitor/New()
|
||||
. = ..()
|
||||
max_charge *= rating
|
||||
|
||||
/obj/item/weapon/stock_parts/capacitor/proc/charge(var/amount)
|
||||
charge += amount
|
||||
if(charge > max_charge)
|
||||
charge = max_charge
|
||||
|
||||
/obj/item/weapon/stock_parts/capacitor/proc/use(var/amount)
|
||||
if(charge)
|
||||
charge -= amount
|
||||
if(charge < 0)
|
||||
charge = 0
|
||||
|
||||
/obj/item/weapon/stock_parts/scanning_module
|
||||
name = "scanning module"
|
||||
desc = "A compact, high resolution scanning module used in the construction of certain devices."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/power/changeling/transform
|
||||
name = "Transform"
|
||||
desc = "We take on the apperance and voice of one we have absorbed."
|
||||
desc = "We take on the appearance and voice of one we have absorbed."
|
||||
ability_icon_state = "ling_transform"
|
||||
genomecost = 0
|
||||
verbpath = /mob/proc/changeling_transform
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/obj/effect/meteor/flaming=3, /obj/effect/meteor/irradiated=3, /obj/effect/meteor/emp=3) //for threatening meteor event
|
||||
|
||||
/var/list/meteors_catastrophic = list(/obj/effect/meteor/medium=5, /obj/effect/meteor/big=75, \
|
||||
/obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/emp=10, /obj/effect/meteor/tunguska = 1) //for catastrophic meteor event
|
||||
/obj/effect/meteor/flaming=10, /obj/effect/meteor/irradiated=10, /obj/effect/meteor/emp=10) //, /obj/effect/meteor/tunguska = 1) //for catastrophic meteor event
|
||||
|
||||
/var/list/meteors_dust = list(/obj/effect/meteor/dust) //for space dust event
|
||||
|
||||
|
||||
@@ -24,11 +24,12 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
outfit_type = /decl/hierarchy/outfit/job/captain
|
||||
alt_titles = list("Site Manager", "Overseer")
|
||||
|
||||
/*
|
||||
/datum/job/captain/equip(var/mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(.)
|
||||
H.implant_loyalty(src)
|
||||
|
||||
*/
|
||||
/datum/job/captain/get_access()
|
||||
return get_all_station_access()
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
idtype = /obj/item/weapon/card/id/civilian/botanist
|
||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||
minimal_access = list(access_hydroponics)
|
||||
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/service/gardener
|
||||
alt_titles = list("Hydroponicist", "Gardener")
|
||||
|
||||
@@ -161,7 +161,9 @@
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/internal_affairs_agent
|
||||
|
||||
/*
|
||||
/datum/job/lawyer/equip(var/mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(.)
|
||||
H.implant_loyalty(H)
|
||||
H.implant_loyalty(H)
|
||||
*/
|
||||
@@ -387,9 +387,9 @@
|
||||
var/dat = ""
|
||||
if(gameStatus == ORION_STATUS_GAMEOVER)
|
||||
dat = "<center><h1>Game Over</h1></center>"
|
||||
dat += "Like many before you, your crew never made it to Orion, lost to space... <br><b>Forever</b>."
|
||||
dat += "Like many before you, your crew never made it to Orion, lost to space... <br><b>forever</b>."
|
||||
if(settlers.len == 0)
|
||||
dat += "<br>Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy."
|
||||
dat += "<br>Your entire crew died, and your ship joins the fleet of ghost-ships littering the galaxy."
|
||||
else
|
||||
if(food <= 0)
|
||||
dat += "<br>You ran out of food and starved."
|
||||
@@ -650,17 +650,17 @@
|
||||
if(prob(success))
|
||||
FU = rand(5,15)
|
||||
FO = rand(5,15)
|
||||
last_spaceport_action = "You successfully raided the spaceport! you gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)"
|
||||
last_spaceport_action = "You successfully raided the spaceport! You gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)"
|
||||
else
|
||||
FU = rand(-5,-15)
|
||||
FO = rand(-5,-15)
|
||||
last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)"
|
||||
last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)"
|
||||
|
||||
//your chance of lose a crewmember is 1/2 your chance of success
|
||||
//this makes higher % failures hurt more, don't get cocky space cowboy!
|
||||
if(prob(success*5))
|
||||
var/lost_crew = remove_crewmember()
|
||||
last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)"
|
||||
last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)"
|
||||
if(emagged)
|
||||
src.visible_message("The machine states, 'YOU ARE UNDER ARREST, RAIDER!' and shoots handcuffs onto [usr]!", "You hear something say 'YOU ARE UNDER ARREST, RAIDER!' and a clinking sound")
|
||||
var/obj/item/weapon/handcuffs/C = new(src.loc)
|
||||
@@ -730,9 +730,9 @@
|
||||
eventdat += "<br>They have stolen [sfood] <b>Food</b> and [sfuel] <b>Fuel</b>."
|
||||
else if(prob(10))
|
||||
var/deadname = remove_crewmember()
|
||||
eventdat += "<br>[deadname] tried to fight back but was killed."
|
||||
eventdat += "<br>[deadname] tried to fight back, but was killed."
|
||||
else
|
||||
eventdat += "<br>Fortunately you fended them off without any trouble."
|
||||
eventdat += "<br>Fortunately, you fended them off without any trouble."
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];eventclose=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
canContinueEvent = 1
|
||||
@@ -890,7 +890,7 @@
|
||||
add_crewmember()
|
||||
freecrew++
|
||||
|
||||
eventdat += "<br>The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)"
|
||||
eventdat += "<br>The traders of the spaceport take pity on you, and give you some supplies. (+[FU]FU,+[FO]FO)"
|
||||
if(freecrew)
|
||||
eventdat += "<br>You also gain a new crewmember!"
|
||||
|
||||
@@ -904,13 +904,13 @@
|
||||
if(food >= 10 && fuel >= 10)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];buycrew=1'>Hire a new Crewmember (-10FU,-10FO)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford a new Crewmember</P>"
|
||||
eventdat += "<P ALIGN=Right>You cannot afford a new Crewmember</P>"
|
||||
|
||||
//Sell crew
|
||||
if(settlers.len > 1)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];sellcrew=1'>Sell crew for Fuel and Food (+7FU,+7FO)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to sell a Crewmember</P>"
|
||||
eventdat += "<P ALIGN=Right>You cannot afford to sell a Crewmember</P>"
|
||||
|
||||
//BUY/SELL STUFF
|
||||
eventdat += "<P ALIGN=Right>Spare Parts:</P>"
|
||||
@@ -919,30 +919,30 @@
|
||||
if(fuel > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];buyparts=1'>Buy Engine Parts (-5FU)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to buy Engine Parts</a>"
|
||||
eventdat += "<P ALIGN=Right>You cannot afford to buy Engine Parts</a>"
|
||||
|
||||
//Hull plates
|
||||
if(fuel > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];buyparts=2'>Buy Hull Plates (-5FU)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to buy Hull Plates</a>"
|
||||
eventdat += "<P ALIGN=Right>You cannot afford to buy Hull Plates</a>"
|
||||
|
||||
//Electronics
|
||||
if(fuel > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];buyparts=3'>Buy Spare Electronics (-5FU)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to buy Spare Electronics</a>"
|
||||
eventdat += "<P ALIGN=Right>You cannot afford to buy Spare Electronics</a>"
|
||||
|
||||
//Trade
|
||||
if(fuel > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];trade=1'>Trade Fuel for Food (-5FU,+5FO)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to Trade Fuel for Food</P"
|
||||
eventdat += "<P ALIGN=Right>You cannot afford to Trade Fuel for Food</P"
|
||||
|
||||
if(food > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];trade=2'>Trade Food for Fuel (+5FU,-5FO)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to Trade Food for Fuel</P"
|
||||
eventdat += "<P ALIGN=Right>You cannot afford to Trade Food for Fuel</P"
|
||||
|
||||
//Raid the spaceport
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];raid_spaceport=1'>!! Raid Spaceport !!</a></P>"
|
||||
@@ -1057,4 +1057,4 @@
|
||||
#undef ORION_STATUS_START
|
||||
#undef ORION_STATUS_NORMAL
|
||||
#undef ORION_STATUS_GAMEOVER
|
||||
#undef ORION_STATUS_MARKET
|
||||
#undef ORION_STATUS_MARKET
|
||||
|
||||
@@ -290,4 +290,48 @@
|
||||
return "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [chassis.selected==src?"<b>":"<a href='?src=\ref[chassis];select_equip=\ref[src]'>"][src.name][chassis.selected==src?"</b>":"</a>"]\[[src.projectiles]\]"
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/rearm()
|
||||
return//Extra bit of security
|
||||
return//Extra bit of security
|
||||
|
||||
//////////////
|
||||
//Fire-based//
|
||||
//////////////
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/incendiary
|
||||
name = "\improper DR-AC 3"
|
||||
desc = "Dual-barrel rotary machinegun that fires small, incendiary rounds. Ages ten and up."
|
||||
description_fluff = "A weapon designed by Hephaestus Industries, the DR-AC 3's design was plagued by prototype faults including but not limited to: Spontaneous combustion, spontaneous detonation, and excessive collateral conflagration."
|
||||
icon_state = "mecha_drac3"
|
||||
equip_cooldown = 20
|
||||
projectile = /obj/item/projectile/bullet/incendiary
|
||||
fire_sound = 'sound/weapons/machinegun.ogg'
|
||||
projectiles = 30
|
||||
projectiles_per_shot = 2
|
||||
deviation = 0.4
|
||||
projectile_energy_cost = 40
|
||||
fire_cooldown = 3
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 5, TECH_PHORON = 2, TECH_ILLEGAL = 1)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer
|
||||
equip_cooldown = 30
|
||||
name = "\improper CR-3 Mark 8"
|
||||
desc = "An imposing device, this weapon hurls balls of fire."
|
||||
description_fluff = "A weapon designed by Hephaestus for anti-infantry combat, the CR-3 is capable of outputting a large volume of synthesized fuel. Initially designed by a small company, later purchased by Aether, on Earth as a device made for clearing underbrush and co-operating with firefighting operations. Obviously, Hephaestus has found an 'improved' use for the Aether designs."
|
||||
icon_state = "mecha_cremate"
|
||||
|
||||
energy_drain = 30
|
||||
|
||||
projectile = /obj/item/projectile/bullet/incendiary/flamethrower/large
|
||||
fire_sound = 'sound/weapons/towelwipe.ogg'
|
||||
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 6, TECH_PHORON = 4, TECH_ILLEGAL = 4)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
|
||||
name = "\improper AA-CR-1 Mark 4"
|
||||
description_fluff = "A firefighting tool maintained by Aether Atmospherics, whose initial design originated from a small Earth company. This one seems to have been jury rigged."
|
||||
|
||||
energy_drain = 50
|
||||
required_type = list(/obj/mecha/combat, /obj/mecha/working)
|
||||
|
||||
projectile = /obj/item/projectile/bullet/incendiary/flamethrower
|
||||
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2)
|
||||
|
||||
@@ -6,66 +6,66 @@
|
||||
anchored = 1
|
||||
var/amount = 1
|
||||
|
||||
New(turf/newLoc,amt=1,nologs=0)
|
||||
if(!nologs)
|
||||
message_admins("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[newLoc.x];Y=[newLoc.y];Z=[newLoc.z]'>JMP</a>)")
|
||||
log_game("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z])")
|
||||
src.amount = amt
|
||||
/obj/effect/decal/cleanable/liquid_fuel/New(turf/newLoc,amt=1,nologs=0)
|
||||
if(!nologs)
|
||||
message_admins("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[newLoc.x];Y=[newLoc.y];Z=[newLoc.z]'>JMP</a>)")
|
||||
log_game("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z])")
|
||||
src.amount = amt
|
||||
|
||||
var/has_spread = 0
|
||||
//Be absorbed by any other liquid fuel in the tile.
|
||||
for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc)
|
||||
if(other != src)
|
||||
other.amount += src.amount
|
||||
other.Spread()
|
||||
has_spread = 1
|
||||
break
|
||||
|
||||
. = ..()
|
||||
if(!has_spread)
|
||||
Spread()
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
proc/Spread(exclude=list())
|
||||
//Allows liquid fuels to sometimes flow into other tiles.
|
||||
if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate.
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/target = get_step(src,d)
|
||||
var/turf/simulated/origin = get_turf(src)
|
||||
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
|
||||
if(other_fuel)
|
||||
other_fuel.amount += amount*0.25
|
||||
if(!(other_fuel in exclude))
|
||||
exclude += src
|
||||
other_fuel.Spread(exclude)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1)
|
||||
amount *= 0.75
|
||||
|
||||
|
||||
flamethrower_fuel
|
||||
icon_state = "mustard"
|
||||
anchored = 0
|
||||
New(newLoc, amt = 1, d = 0)
|
||||
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
|
||||
. = ..()
|
||||
var/has_spread = 0
|
||||
//Be absorbed by any other liquid fuel in the tile.
|
||||
for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc)
|
||||
if(other != src)
|
||||
other.amount += src.amount
|
||||
other.Spread()
|
||||
has_spread = 1
|
||||
break
|
||||
|
||||
. = ..()
|
||||
if(!has_spread)
|
||||
Spread()
|
||||
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
|
||||
if(amount < 0.1) return
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
for(var/d in list(turn(dir,90),turn(dir,-90), dir))
|
||||
var/turf/simulated/O = get_step(S,d)
|
||||
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
|
||||
continue
|
||||
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
|
||||
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
|
||||
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
|
||||
/obj/effect/decal/cleanable/liquid_fuel/proc/Spread(exclude=list())
|
||||
//Allows liquid fuels to sometimes flow into other tiles.
|
||||
if(amount < 15) return //lets suppose welder fuel is fairly thick and sticky. For something like water, 5 or less would be more appropriate.
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
for(var/d in cardinal)
|
||||
var/turf/simulated/target = get_step(src,d)
|
||||
var/turf/simulated/origin = get_turf(src)
|
||||
if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0))
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target
|
||||
if(other_fuel)
|
||||
other_fuel.amount += amount*0.25
|
||||
if(!(other_fuel in exclude))
|
||||
exclude += src
|
||||
other_fuel.Spread(exclude)
|
||||
else
|
||||
new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25,1)
|
||||
amount *= 0.75
|
||||
|
||||
amount *= 0.25
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel
|
||||
icon_state = "mustard"
|
||||
anchored = 0
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/New(newLoc, amt = 1, d = 0)
|
||||
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
|
||||
. = ..()
|
||||
|
||||
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Spread()
|
||||
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
|
||||
if(amount < 0.1) return
|
||||
var/turf/simulated/S = loc
|
||||
if(!istype(S)) return
|
||||
|
||||
for(var/d in list(turn(dir,90),turn(dir,-90), dir))
|
||||
var/turf/simulated/O = get_step(S,d)
|
||||
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
|
||||
continue
|
||||
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
|
||||
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
|
||||
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
|
||||
|
||||
amount *= 0.25
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50000)
|
||||
var/datum/effect/effect/system/spark_spread/spark_system
|
||||
var/stored_matter = 0
|
||||
var/max_stored_matter = 30
|
||||
var/working = 0
|
||||
var/mode = 1
|
||||
var/list/modes = list("Floor & Walls","Airlock","Deconstruct")
|
||||
@@ -32,7 +33,7 @@
|
||||
/obj/item/weapon/rcd/examine()
|
||||
..()
|
||||
if(src.type == /obj/item/weapon/rcd && loc == usr)
|
||||
usr << "It currently holds [stored_matter]/30 matter-units."
|
||||
usr << "It currently holds [stored_matter]/[max_stored_matter] matter-units."
|
||||
|
||||
/obj/item/weapon/rcd/New()
|
||||
..()
|
||||
@@ -48,14 +49,15 @@
|
||||
/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user)
|
||||
|
||||
if(istype(W, /obj/item/weapon/rcd_ammo))
|
||||
if((stored_matter + 10) > 30)
|
||||
user << "<span class='notice'>The RCD can't hold any more matter-units.</span>"
|
||||
var/obj/item/weapon/rcd_ammo/cartridge = W
|
||||
if((stored_matter + cartridge.remaining) > max_stored_matter)
|
||||
to_chat(user, "<span class='notice'>The RCD can't hold that many additional matter-units.</span>")
|
||||
return
|
||||
stored_matter += cartridge.remaining
|
||||
user.drop_from_inventory(W)
|
||||
qdel(W)
|
||||
stored_matter += 10
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
user << "<span class='notice'>The RCD now holds [stored_matter]/30 matter-units.</span>"
|
||||
to_chat(user, "<span class='notice'>The RCD now holds [stored_matter]/[max_stored_matter] matter-units.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -164,6 +166,14 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_MATERIAL = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30000,"glass" = 15000)
|
||||
var/remaining = 10
|
||||
|
||||
/obj/item/weapon/rcd_ammo/large
|
||||
name = "high-capacity matter cartridge"
|
||||
desc = "Do not ingest."
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 45000,"glass" = 22500)
|
||||
remaining = 30
|
||||
origin_tech = list(TECH_MATERIAL = 4)
|
||||
|
||||
/obj/item/weapon/rcd/borg
|
||||
canRwall = 1
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
return
|
||||
if(active)
|
||||
if (imp)
|
||||
M.visible_message("<span class='warning'>[user] is attemping to implant [M].</span>")
|
||||
M.visible_message("<span class='warning'>[user] is attempting to implant [M].</span>")
|
||||
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
user.do_attack_animation(M)
|
||||
|
||||
@@ -122,6 +122,8 @@
|
||||
sharp = 1
|
||||
edge = 1
|
||||
var/blade_color
|
||||
var/random_color = TRUE
|
||||
var/active_state = "sword"
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/dropped(var/mob/user)
|
||||
..()
|
||||
@@ -129,8 +131,9 @@
|
||||
deactivate(user)
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/New()
|
||||
blade_color = pick("red","blue","green","purple")
|
||||
lcolor = blade_color
|
||||
if(random_color)
|
||||
blade_color = pick("red","blue","green","purple")
|
||||
lcolor = blade_color
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/green/New()
|
||||
blade_color = "green"
|
||||
@@ -154,7 +157,7 @@
|
||||
|
||||
..()
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
icon_state = "sword[blade_color]"
|
||||
icon_state = "[active_state][blade_color]"
|
||||
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/deactivate(mob/living/user)
|
||||
@@ -184,6 +187,55 @@
|
||||
..()
|
||||
icon_state = "cutlass1"
|
||||
|
||||
/*
|
||||
*Ionic Rapier
|
||||
*/
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/ionic_rapier
|
||||
name = "ionic rapier"
|
||||
desc = "Designed specifically for disrupting electronics at close range, it is extremely deadly against synthetics, but almost harmless to pure organic targets."
|
||||
description_info = "This is a dangerous melee weapon that will deliver a moderately powerful electromagnetic pulse to whatever it strikes. \
|
||||
Striking a lesser robotic entity will compel it to attack you, as well. It also does extra burn damage to robotic entities, but it does \
|
||||
very little damage to purely organic targets."
|
||||
icon_state = "ionic_rapier0"
|
||||
random_color = FALSE
|
||||
active_force = 5
|
||||
active_throwforce = 3
|
||||
active_embed_chance = 0
|
||||
sharp = 1
|
||||
edge = 1
|
||||
armor_penetration = 0
|
||||
flags = NOBLOODY
|
||||
lrange = 2
|
||||
lpower = 2
|
||||
lcolor = "#0000FF"
|
||||
active_state = "ionic_rapier"
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/ionic_rapier/afterattack(var/atom/movable/AM, var/mob/living/user, var/proximity)
|
||||
if(istype(AM, /obj) && proximity && active)
|
||||
// EMP stuff.
|
||||
var/obj/O = AM
|
||||
O.emp_act(3) // A weaker severity is used because this has infinite uses.
|
||||
playsound(get_turf(O), 'sound/effects/EMPulse.ogg', 100, 1)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) // A lot of objects don't set click delay.
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/ionic_rapier/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
. = ..()
|
||||
if(target.isSynthetic() && active)
|
||||
// Do some extra damage. Not a whole lot more since emp_act() is pretty nasty on FBPs already.
|
||||
target.emp_act(3) // A weaker severity is used because this has infinite uses.
|
||||
playsound(get_turf(target), 'sound/effects/EMPulse.ogg', 100, 1)
|
||||
target.adjustFireLoss(force * 3) // 15 Burn, for 20 total.
|
||||
playsound(get_turf(target), 'sound/weapons/blade1.ogg', 100, 1)
|
||||
|
||||
// Make lesser robots really mad at us.
|
||||
if(istype(target, /mob/living/simple_animal))
|
||||
var/mob/living/simple_animal/SA = target
|
||||
if(SA.intelligence_level == SA_ROBOTIC)
|
||||
SA.taunt(user)
|
||||
SA.adjustFireLoss(force * 6) // 30 Burn, for 50 total.
|
||||
|
||||
/*
|
||||
*Energy Blade
|
||||
*/
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/clothing/under/rank/research_director/dress_rd
|
||||
name = "research director dress uniform"
|
||||
desc = "Feminine fashion for the style concious RD. Its fabric provides minor protection from biological contaminants."
|
||||
desc = "Feminine fashion for the style conscious RD. Its fabric provides minor protection from biological contaminants."
|
||||
icon_state = "dress_rd"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
@@ -194,4 +194,4 @@
|
||||
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
rolled_sleeves = 0
|
||||
rolled_sleeves = 0
|
||||
|
||||
@@ -363,13 +363,13 @@
|
||||
|
||||
/obj/item/clothing/under/dress/dress_cap
|
||||
name = "colony director's dress uniform"
|
||||
desc = "Feminine fashion for the style concious Colony Director."
|
||||
desc = "Feminine fashion for the style conscious Colony Director."
|
||||
icon_state = "dress_cap"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/under/dress/dress_hop
|
||||
name = "head of personnel dress uniform"
|
||||
desc = "Feminine fashion for the style concious HoP."
|
||||
desc = "Feminine fashion for the style conscious HoP."
|
||||
icon_state = "dress_hop"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
|
||||
@@ -808,4 +808,4 @@
|
||||
name = "bathrobe"
|
||||
desc = "A fluffy robe to keep you from showing off to the world."
|
||||
icon_state = "bathrobe"
|
||||
worn_state = "bathrobe"
|
||||
worn_state = "bathrobe"
|
||||
|
||||
@@ -135,6 +135,7 @@
|
||||
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5)
|
||||
|
||||
/material/cardboard/generate_recipes()
|
||||
..()
|
||||
|
||||
@@ -232,14 +232,28 @@
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "coughs!"
|
||||
var/robotic = 0
|
||||
m_type = 2
|
||||
if(gender == FEMALE)
|
||||
if(species.female_cough_sounds)
|
||||
playsound(src, pick(species.female_cough_sounds), 120)
|
||||
if(should_have_organ(O_LUNGS))
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
|
||||
if(L && L.robotic == 2) //Hard-coded to 2, incase we add lifelike robotic lungs
|
||||
robotic = 1
|
||||
if(!robotic)
|
||||
message = "coughs!"
|
||||
if(gender == FEMALE)
|
||||
if(species.female_cough_sounds)
|
||||
playsound(src, pick(species.female_cough_sounds), 120)
|
||||
else
|
||||
if(species.male_cough_sounds)
|
||||
playsound(src, pick(species.male_cough_sounds), 120)
|
||||
else
|
||||
if(species.male_cough_sounds)
|
||||
playsound(src, pick(species.male_cough_sounds), 120)
|
||||
message = "emits a robotic cough"
|
||||
var/use_sound
|
||||
if(gender == FEMALE)
|
||||
use_sound = pick('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
|
||||
else
|
||||
use_sound = pick('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
|
||||
playsound(src.loc, use_sound, 50, 0)
|
||||
else
|
||||
message = "makes a strong noise."
|
||||
m_type = 2
|
||||
@@ -492,12 +506,27 @@
|
||||
m_type = 1
|
||||
else
|
||||
if(!muzzled)
|
||||
message = "sneezes."
|
||||
if(gender == FEMALE)
|
||||
playsound(src, species.female_sneeze_sound, 70)
|
||||
else
|
||||
playsound(src, species.male_sneeze_sound, 70)
|
||||
var/robotic = 0
|
||||
m_type = 2
|
||||
if(should_have_organ(O_LUNGS))
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
|
||||
if(L && L.robotic == 2) //Hard-coded to 2, incase we add lifelike robotic lungs
|
||||
robotic = 1
|
||||
if(!robotic)
|
||||
message = "sneezes."
|
||||
if(gender == FEMALE)
|
||||
playsound(src, species.female_sneeze_sound, 70)
|
||||
else
|
||||
playsound(src, species.male_sneeze_sound, 70)
|
||||
m_type = 2
|
||||
else
|
||||
message = "emits a robotic sneeze"
|
||||
var/use_sound
|
||||
if(gender == FEMALE)
|
||||
use_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
|
||||
else
|
||||
use_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
|
||||
playsound(src.loc, use_sound, 50, 0)
|
||||
else
|
||||
message = "makes a strange noise."
|
||||
m_type = 2
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
/mob/living/carbon/proc/ingest(var/datum/reagents/from, var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) //we kind of 'sneak' a proc in here for ingesting stuff so we can play with it.
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/braintype = H.get_FBP_type()
|
||||
if(braintype == FBP_DRONE || braintype == FBP_POSI)
|
||||
return from.trans_to_holder(target,amount,multiplier,copy) //skip the taste, complete transfer
|
||||
|
||||
if(last_taste_time + 50 < world.time)
|
||||
var/datum/reagents/temp = new(amount) //temporary holder used to analyse what gets transfered.
|
||||
from.trans_to_holder(temp, amount, multiplier, 1)
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0)
|
||||
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0, var/ignite = 0, var/flammable = 0)
|
||||
if(blocked >= 100)
|
||||
return 0
|
||||
if(stun) apply_effect(stun, STUN, blocked)
|
||||
@@ -98,4 +98,6 @@
|
||||
if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked)
|
||||
if(drowsy) apply_effect(drowsy, DROWSY, blocked)
|
||||
if(agony) apply_effect(agony, AGONY, blocked)
|
||||
if(flammable) adjust_fire_stacks(flammable)
|
||||
if(ignite) IgniteMob()
|
||||
return 1
|
||||
|
||||
@@ -51,6 +51,9 @@
|
||||
say_maybe_target = list("Possible threat detected. Investigating.", "Motion detected.", "Investigating.")
|
||||
say_got_target = list("Threat detected.", "New task: Remove threat.", "Threat removal engaged.", "Engaging target.")
|
||||
|
||||
/mob/living/simple_animal/hostile/hivebot/isSynthetic()
|
||||
return TRUE
|
||||
|
||||
// Subtypes.
|
||||
|
||||
// Melee like the base type, but more fragile.
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/obj/item/weapon/magnetic_ammo
|
||||
name = "flechette magazine"
|
||||
desc = "A magazine containing steel flechettes."
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "5.56"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
origin_tech = list(TECH_COMBAT = 1)
|
||||
var/remaining = 9
|
||||
|
||||
/obj/item/weapon/magnetic_ammo/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "There [(remaining == 1)? "is" : "are"] [remaining] flechette\s left!")
|
||||
@@ -0,0 +1,195 @@
|
||||
/obj/item/weapon/gun/magnetic
|
||||
name = "improvised coilgun"
|
||||
desc = "A coilgun hastily thrown together out of a basic frame and advanced power storage components. Is it safe for it to be duct-taped together like that?"
|
||||
icon_state = "coilgun"
|
||||
item_state = "coilgun"
|
||||
icon = 'icons/obj/railgun.dmi'
|
||||
// one_hand_penalty = 1
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_ILLEGAL = 2, TECH_MAGNET = 4)
|
||||
w_class = ITEMSIZE_LARGE
|
||||
|
||||
var/obj/item/weapon/cell/cell // Currently installed powercell.
|
||||
var/obj/item/weapon/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots.
|
||||
var/removable_components = TRUE // Whether or not the gun can be dismantled.
|
||||
var/gun_unreliable = 15 // Percentage chance of detonating in your hands.
|
||||
|
||||
var/obj/item/loaded // Currently loaded object, for retrieval/unloading.
|
||||
var/load_type = /obj/item/stack/rods // Type of stack to load with.
|
||||
var/projectile_type = /obj/item/projectile/bullet/magnetic // Actual fire type, since this isn't throw_at rod launcher.
|
||||
|
||||
var/power_cost = 950 // Cost per fire, should consume almost an entire basic cell.
|
||||
var/power_per_tick // Capacitor charge per process(). Updated based on capacitor rating.
|
||||
|
||||
fire_sound = 'sound/weapons/railgun.ogg'
|
||||
|
||||
/obj/item/weapon/gun/magnetic/New()
|
||||
processing_objects.Add(src)
|
||||
if(capacitor)
|
||||
power_per_tick = (power_cost*0.15) * capacitor.rating
|
||||
update_icon()
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
qdel_null(cell)
|
||||
qdel_null(loaded)
|
||||
qdel_null(capacitor)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/process()
|
||||
if(capacitor)
|
||||
if(cell)
|
||||
if(capacitor.charge < capacitor.max_charge && cell.checked_use(power_per_tick))
|
||||
capacitor.charge(power_per_tick)
|
||||
else
|
||||
capacitor.use(capacitor.charge * 0.05)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/update_icon()
|
||||
var/list/overlays_to_add = list()
|
||||
if(removable_components)
|
||||
if(cell)
|
||||
overlays_to_add += image(icon, "[icon_state]_cell")
|
||||
if(capacitor)
|
||||
overlays_to_add += image(icon, "[icon_state]_capacitor")
|
||||
if(!cell || !capacitor)
|
||||
overlays_to_add += image(icon, "[icon_state]_red")
|
||||
else if(capacitor.charge < power_cost)
|
||||
overlays_to_add += image(icon, "[icon_state]_amber")
|
||||
else
|
||||
overlays_to_add += image(icon, "[icon_state]_green")
|
||||
if(loaded)
|
||||
overlays_to_add += image(icon, "[icon_state]_loaded")
|
||||
|
||||
overlays = overlays_to_add
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/proc/show_ammo(var/mob/user)
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='notice'>It has \a [loaded] loaded.</span>")
|
||||
|
||||
/obj/item/weapon/gun/magnetic/examine(var/mob/user)
|
||||
. = ..(user, 2)
|
||||
if(.)
|
||||
show_ammo(user)
|
||||
|
||||
if(cell)
|
||||
to_chat(user, "<span class='notice'>The installed [cell.name] has a charge level of [round((cell.charge/cell.maxcharge)*100)]%.</span>")
|
||||
if(capacitor)
|
||||
to_chat(user, "<span class='notice'>The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.</span>")
|
||||
|
||||
if(!cell || !capacitor)
|
||||
to_chat(user, "<span class='notice'>The capacitor charge indicator is blinking <font color ='[COLOR_RED]'>red</font>. Maybe you should check the cell or capacitor.</span>")
|
||||
else
|
||||
if(capacitor.charge < power_cost)
|
||||
to_chat(user, "<span class='notice'>The capacitor charge indicator is <font color ='[COLOR_ORANGE]'>amber</font>.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The capacitor charge indicator is <font color ='[COLOR_GREEN]'>green</font>.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/gun/magnetic/attackby(var/obj/item/thing, var/mob/user)
|
||||
|
||||
if(removable_components)
|
||||
if(istype(thing, /obj/item/weapon/cell))
|
||||
if(cell)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has \a [cell] installed.</span>")
|
||||
return
|
||||
cell = thing
|
||||
user.drop_from_inventory(cell)
|
||||
cell.forceMove(src)
|
||||
playsound(loc, 'sound/machines/click.ogg', 10, 1)
|
||||
user.visible_message("<span class='notice'>\The [user] slots \the [cell] into \the [src].</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(isscrewdriver(thing))
|
||||
if(!capacitor)
|
||||
to_chat(user, "<span class='warning'>\The [src] has no capacitor installed.</span>")
|
||||
return
|
||||
capacitor.forceMove(get_turf(src))
|
||||
user.put_in_hands(capacitor)
|
||||
user.visible_message("<span class='notice'>\The [user] unscrews \the [capacitor] from \the [src].</span>")
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
capacitor = null
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/weapon/stock_parts/capacitor))
|
||||
if(capacitor)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has \a [capacitor] installed.</span>")
|
||||
return
|
||||
capacitor = thing
|
||||
user.drop_from_inventory(capacitor)
|
||||
capacitor.forceMove(src)
|
||||
playsound(loc, 'sound/machines/click.ogg', 10, 1)
|
||||
power_per_tick = (power_cost*0.15) * capacitor.rating
|
||||
user.visible_message("<span class='notice'>\The [user] slots \the [capacitor] into \the [src].</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(thing, load_type))
|
||||
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has \a [loaded] loaded.</span>")
|
||||
return
|
||||
|
||||
// This is not strictly necessary for the magnetic gun but something using
|
||||
// specific ammo types may exist down the track.
|
||||
var/obj/item/stack/ammo = thing
|
||||
if(!istype(ammo))
|
||||
loaded = thing
|
||||
user.drop_from_inventory(thing)
|
||||
thing.forceMove(src)
|
||||
else
|
||||
loaded = new load_type(src, 1)
|
||||
ammo.use(1)
|
||||
|
||||
user.visible_message("<span class='notice'>\The [user] loads \the [src] with \the [loaded].</span>")
|
||||
playsound(loc, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
update_icon()
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/attack_hand(var/mob/user)
|
||||
if(user.get_inactive_hand() == src)
|
||||
var/obj/item/removing
|
||||
|
||||
if(loaded)
|
||||
removing = loaded
|
||||
loaded = null
|
||||
else if(cell && removable_components)
|
||||
removing = cell
|
||||
cell = null
|
||||
|
||||
if(removing)
|
||||
removing.forceMove(get_turf(src))
|
||||
user.put_in_hands(removing)
|
||||
user.visible_message("<span class='notice'>\The [user] removes \the [removing] from \the [src].</span>")
|
||||
playsound(loc, 'sound/machines/click.ogg', 10, 1)
|
||||
update_icon()
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/proc/check_ammo()
|
||||
return loaded
|
||||
|
||||
/obj/item/weapon/gun/magnetic/proc/use_ammo()
|
||||
qdel(loaded)
|
||||
loaded = null
|
||||
|
||||
/obj/item/weapon/gun/magnetic/consume_next_projectile()
|
||||
|
||||
if(!check_ammo() || !capacitor || capacitor.charge < power_cost)
|
||||
return
|
||||
|
||||
use_ammo()
|
||||
capacitor.use(power_cost)
|
||||
update_icon()
|
||||
|
||||
if(gun_unreliable && prob(gun_unreliable))
|
||||
spawn(3) // So that it will still fire - considered modifying Fire() to return a value but burst fire makes that annoying.
|
||||
visible_message("<span class='danger'>\The [src] explodes with the force of the shot!</span>")
|
||||
explosion(get_turf(src), -1, 0, 2)
|
||||
qdel(src)
|
||||
|
||||
return new projectile_type(src)
|
||||
@@ -0,0 +1,101 @@
|
||||
// We really need some datums for this.
|
||||
/obj/item/weapon/coilgun_assembly
|
||||
name = "coilgun stock"
|
||||
desc = "It might be a coilgun, someday."
|
||||
icon = 'icons/obj/coilgun.dmi'
|
||||
icon_state = "coilgun_construction_1"
|
||||
|
||||
var/construction_stage = 1
|
||||
|
||||
/obj/item/weapon/coilgun_assembly/attackby(var/obj/item/thing, var/mob/user)
|
||||
|
||||
if(istype(thing, /obj/item/stack/material) && construction_stage == 1)
|
||||
var/obj/item/stack/material/reinforcing = thing
|
||||
var/material/reinforcing_with = reinforcing.get_material()
|
||||
if(reinforcing_with.name == DEFAULT_WALL_MATERIAL) // Steel
|
||||
if(reinforcing.get_amount() < 5)
|
||||
to_chat(user, "<span class='warning'>You need at least 5 [reinforcing.singular_name]\s for this task.</span>")
|
||||
return
|
||||
reinforcing.use(5)
|
||||
user.visible_message("<span class='notice'>\The [user] shapes some steel sheets around \the [src] to form a body.</span>")
|
||||
increment_construction_stage()
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/weapon/tape_roll) && construction_stage == 2)
|
||||
user.visible_message("<span class='notice'>\The [user] secures \the [src] together with \the [thing].</span>")
|
||||
increment_construction_stage()
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/pipe) && construction_stage == 3)
|
||||
user.drop_from_inventory(thing)
|
||||
qdel(thing)
|
||||
user.visible_message("<span class='notice'>\The [user] jams \the [thing] into \the [src].</span>")
|
||||
increment_construction_stage()
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/weapon/weldingtool) && construction_stage == 4)
|
||||
var/obj/item/weapon/weldingtool/welder = thing
|
||||
|
||||
if(!welder.isOn())
|
||||
to_chat(user, "<span class='warning'>Turn it on first!</span>")
|
||||
return
|
||||
|
||||
if(!welder.remove_fuel(0,user))
|
||||
to_chat(user, "<span class='warning'>You need more fuel!</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<span class='notice'>\The [user] welds the barrel of \the [src] into place.</span>")
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
|
||||
increment_construction_stage()
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/stack/cable_coil) && construction_stage == 5)
|
||||
var/obj/item/stack/cable_coil/cable = thing
|
||||
if(cable.get_amount() < 5)
|
||||
to_chat(user, "<span class='warning'>You need at least 5 lengths of cable for this task.</span>")
|
||||
return
|
||||
cable.use(5)
|
||||
user.visible_message("<span class='notice'>\The [user] wires \the [src].</span>")
|
||||
increment_construction_stage()
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/weapon/smes_coil) && construction_stage >= 6 && construction_stage <= 8)
|
||||
user.visible_message("<span class='notice'>\The [user] installs \a [thing] into \the [src].</span>")
|
||||
user.drop_from_inventory(thing)
|
||||
qdel(thing)
|
||||
increment_construction_stage()
|
||||
return
|
||||
|
||||
if(isscrewdriver(thing) && construction_stage >= 9)
|
||||
user.visible_message("<span class='notice'>\The [user] secures \the [src] and finishes it off.</span>")
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
var/obj/item/weapon/gun/magnetic/coilgun = new(loc)
|
||||
var/put_in_hands
|
||||
var/mob/M = src.loc
|
||||
if(istype(M))
|
||||
put_in_hands = M == user
|
||||
M.drop_from_inventory(src)
|
||||
if(put_in_hands)
|
||||
user.put_in_hands(coilgun)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/coilgun_assembly/proc/increment_construction_stage()
|
||||
if(construction_stage < 9)
|
||||
construction_stage++
|
||||
icon_state = "coilgun_construction_[construction_stage]"
|
||||
|
||||
/obj/item/weapon/coilgun_assembly/examine(var/mob/user)
|
||||
. = ..(user,2)
|
||||
if(.)
|
||||
switch(construction_stage)
|
||||
if(2) to_chat(user, "<span class='notice'>It has a metal frame loosely shaped around the stock.</span>")
|
||||
if(3) to_chat(user, "<span class='notice'>It has a metal frame duct-taped to the stock.</span>")
|
||||
if(4) to_chat(user, "<span class='notice'>It has a length of pipe attached to the body.</span>")
|
||||
if(4) to_chat(user, "<span class='notice'>It has a length of pipe welded to the body.</span>")
|
||||
if(6) to_chat(user, "<span class='notice'>It has a cable mount and capacitor jack wired to the frame.</span>")
|
||||
if(7) to_chat(user, "<span class='notice'>It has a single superconducting coil threaded onto the barrel.</span>")
|
||||
if(8) to_chat(user, "<span class='notice'>It has a pair of superconducting coils threaded onto the barrel.</span>")
|
||||
if(9) to_chat(user, "<span class='notice'>It has three superconducting coils attached to the body, waiting to be secured.</span>")
|
||||
@@ -0,0 +1,104 @@
|
||||
/obj/item/weapon/gun/magnetic/railgun
|
||||
name = "railgun"
|
||||
desc = "The Mars Military Industries MI-76 Thunderclap. A man-portable mass driver for squad support anti-armour and destruction of fortifications and emplacements."
|
||||
gun_unreliable = 0
|
||||
icon_state = "railgun"
|
||||
removable_components = FALSE
|
||||
load_type = /obj/item/weapon/rcd_ammo
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_MAGNET = 4)
|
||||
projectile_type = /obj/item/projectile/bullet/magnetic/slug
|
||||
power_cost = 300
|
||||
w_class = ITEMSIZE_HUGE
|
||||
slot_flags = SLOT_BELT
|
||||
loaded = /obj/item/weapon/rcd_ammo/large
|
||||
|
||||
var/initial_cell_type = /obj/item/weapon/cell/hyper
|
||||
var/initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/adv
|
||||
var/slowdown_held = 2
|
||||
var/slowdown_worn = 1
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/New()
|
||||
capacitor = new initial_capacitor_type(src)
|
||||
capacitor.charge = capacitor.max_charge
|
||||
|
||||
cell = new initial_cell_type(src)
|
||||
if (ispath(loaded))
|
||||
loaded = new loaded
|
||||
. = ..()
|
||||
|
||||
// Not going to check type repeatedly, if you code or varedit
|
||||
// load_type and get runtime errors, don't come crying to me.
|
||||
/obj/item/weapon/gun/magnetic/railgun/show_ammo(var/mob/user)
|
||||
var/obj/item/weapon/rcd_ammo/ammo = loaded
|
||||
if (ammo)
|
||||
to_chat(user, "<span class='notice'>There are [ammo.remaining] shot\s remaining in \the [loaded].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>There is nothing loaded.</span>")
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/check_ammo()
|
||||
var/obj/item/weapon/rcd_ammo/ammo = loaded
|
||||
return ammo && ammo.remaining
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/use_ammo()
|
||||
var/obj/item/weapon/rcd_ammo/ammo = loaded
|
||||
ammo.remaining--
|
||||
if(ammo.remaining <= 0)
|
||||
spawn(3)
|
||||
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
out_of_ammo()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/proc/out_of_ammo()
|
||||
qdel(loaded)
|
||||
loaded = null
|
||||
visible_message("<span class='warning'>\The [src] beeps and ejects its empty cartridge.</span>")
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/automatic // Adminspawn only, this shit is absurd.
|
||||
name = "\improper RHR accelerator"
|
||||
desc = "The Mars Military Industries MI-227 Meteor. Originally a vehicle-mounted turret weapon for heavy anti-vehicular and anti-structural fire, the fact that it was made man-portable is mindboggling in itself."
|
||||
icon_state = "heavy_railgun"
|
||||
|
||||
initial_cell_type = /obj/item/weapon/cell/infinite
|
||||
initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/super
|
||||
|
||||
slowdown_held = 3
|
||||
slowdown_worn = 2
|
||||
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = ITEMSIZE_NO_CONTAINER
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_hand_penalty=1, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_hand_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="long bursts", burst=6, fire_delay=null, move_delay=10, one_hand_penalty=2, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/automatic/examine(var/mob/user)
|
||||
. = ..(user,1)
|
||||
if(.)
|
||||
to_chat(user, "<span class='notice'>Someone has scratched <i>Ultima Ratio Regum</i> onto the side of the barrel.</span>")
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/flechette
|
||||
name = "flechette gun"
|
||||
desc = "The MI-12 Skadi is a burst fire capable railgun that fires flechette rounds at high velocity. Deadly against armour, but much less effective against soft targets."
|
||||
icon_state = "flechette_gun"
|
||||
item_state = "z8carbine"
|
||||
initial_cell_type = /obj/item/weapon/cell/hyper
|
||||
initial_capacitor_type = /obj/item/weapon/stock_parts/capacitor/adv
|
||||
slot_flags = SLOT_BACK
|
||||
slowdown_held = 0
|
||||
slowdown_worn = 0
|
||||
power_cost = 100
|
||||
load_type = /obj/item/weapon/magnetic_ammo
|
||||
projectile_type = /obj/item/projectile/bullet/magnetic/flechette
|
||||
loaded = /obj/item/weapon/magnetic_ammo
|
||||
fire_sound = 'sound/weapons/rapidslice.ogg'
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_hand_penalty=1, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_hand_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/railgun/flechette/out_of_ammo()
|
||||
audible_message("<span class='warning'>\The [src] beeps to indicate the magazine is empty.</span>")
|
||||
playsound(loc, 'sound/weapons/smg_empty_alarm.ogg', 40, 1)
|
||||
..()
|
||||
@@ -45,6 +45,8 @@
|
||||
var/penetrating = 0 //If greater than zero, the projectile will pass through dense objects as specified by on_penetrate()
|
||||
var/kill_count = 50 //This will de-increment every process(). When 0, it will delete the projectile.
|
||||
//Effects
|
||||
var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 maybe later for burst of fire around the impact point. - Mech
|
||||
var/flammability = 0 //Amount of fire stacks to add for the above.
|
||||
var/stun = 0
|
||||
var/weaken = 0
|
||||
var/paralyze = 0
|
||||
@@ -78,7 +80,7 @@
|
||||
if(!isliving(target)) return 0
|
||||
// if(isanimal(target)) return 0
|
||||
var/mob/living/L = target
|
||||
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked) // add in AGONY!
|
||||
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked, incendiary, flammability) // add in AGONY!
|
||||
return 1
|
||||
|
||||
//called when the projectile stops flying because it collided with something
|
||||
@@ -322,6 +324,10 @@
|
||||
else if(!bumped)
|
||||
tracer_effect(effect_transform)
|
||||
|
||||
if(incendiary >= 2)
|
||||
var/trail_volume = (flammability * 0.10)
|
||||
new /obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(src.loc, trail_volume, src.dir)
|
||||
|
||||
if(!hitscan)
|
||||
sleep(step_delay) //add delay between movement iterations if it's not a hitscan weapon
|
||||
|
||||
|
||||
@@ -252,6 +252,31 @@
|
||||
explosion(target, -1, 0, 2)
|
||||
..()
|
||||
|
||||
/* Incendiary */
|
||||
|
||||
/obj/item/projectile/bullet/incendiary
|
||||
name = "incendiary bullet"
|
||||
icon_state = "bullet_alt"
|
||||
damage = 15
|
||||
damage_type = BURN
|
||||
incendiary = 1
|
||||
flammability = 2
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower
|
||||
name = "ball of fire"
|
||||
desc = "Don't stand in the fire."
|
||||
icon_state = "fireball"
|
||||
damage = 10
|
||||
embed_chance = 0
|
||||
incendiary = 2
|
||||
flammability = 4
|
||||
agony = 30
|
||||
kill_count = 4
|
||||
|
||||
/obj/item/projectile/bullet/incendiary/flamethrower/large
|
||||
damage = 15
|
||||
kill_count = 6
|
||||
|
||||
/obj/item/projectile/bullet/blank
|
||||
invisibility = 101
|
||||
damage = 1
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
// Rod for railguns. Slightly less nasty than the sniper round.
|
||||
/obj/item/projectile/bullet/magnetic
|
||||
name = "rod"
|
||||
icon_state = "rod"
|
||||
damage = 65
|
||||
stun = 1
|
||||
weaken = 1
|
||||
penetrating = 5
|
||||
armor_penetration = 70
|
||||
|
||||
/obj/item/projectile/bullet/magnetic/slug
|
||||
name = "slug"
|
||||
icon_state = "gauss_silenced"
|
||||
damage = 75
|
||||
armor_penetration = 90
|
||||
|
||||
/obj/item/projectile/bullet/magnetic/flechette
|
||||
name = "flechette"
|
||||
icon_state = "flechette"
|
||||
damage = 20
|
||||
armor_penetration = 100
|
||||
@@ -354,6 +354,30 @@
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 15000, "gold" = 4500, "uranium" = 4500)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited
|
||||
|
||||
/datum/design/item/mecha/weapon/flamer
|
||||
name = "CR-3 Mark 8 Flamethrower"
|
||||
desc = "A weapon that violates the CCWC at two hundred gallons per minute."
|
||||
id = "mech_flamer_full"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 6, TECH_PHORON = 4, TECH_ILLEGAL = 4)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "gold" = 2000, "uranium" = 3000, "phoron" = 8000)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer
|
||||
|
||||
/datum/design/item/mecha/weapon/flamer_rigged
|
||||
name = "AA-CR-1 Mark 4 Flamethrower"
|
||||
desc = "A weapon that accidentally violates the CCWC at one hundred gallons per minute."
|
||||
id = "mech_flamer_rigged"
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3, TECH_PHORON = 3, TECH_ILLEGAL = 2)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 8000, "gold" = 1500, "silver" = 1500, "uranium" = 2000, "phoron" = 6000)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
|
||||
|
||||
/datum/design/item/mecha/weapon/flame_mg
|
||||
name = "DR-AC 3 Incendiary Rotary MG"
|
||||
desc = "A weapon that violates the CCWC at sixty rounds a minute."
|
||||
id = "mech_lmg_flamer"
|
||||
req_tech = list(TECH_MATERIAL = 4, TECH_COMBAT = 5, TECH_PHORON = 2, TECH_ILLEGAL = 1)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 8000, "gold" = 2000, "silver" = 1750, "uranium" = 1500, "phoron" = 4000)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/incendiary
|
||||
|
||||
// *** Nonweapon modules
|
||||
/datum/design/item/mecha/wormhole_gen
|
||||
name = "Wormhole generator"
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
else
|
||||
shuttle_status = "Standing-by at offsite location."
|
||||
if(WAIT_LAUNCH, FORCE_LAUNCH)
|
||||
shuttle_status = "Shuttle has recieved command and will depart shortly."
|
||||
shuttle_status = "Shuttle has received command and will depart shortly."
|
||||
if(WAIT_ARRIVE)
|
||||
shuttle_status = "Proceeding to destination."
|
||||
if(WAIT_FINISH)
|
||||
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 556 B |
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 39 KiB |
@@ -1986,6 +1986,7 @@
|
||||
#include "code\modules\projectiles\gun.dm"
|
||||
#include "code\modules\projectiles\projectile.dm"
|
||||
#include "code\modules\projectiles\ammunition\magazines.dm"
|
||||
#include "code\modules\projectiles\ammunition\magnetic.dm"
|
||||
#include "code\modules\projectiles\ammunition\rounds.dm"
|
||||
#include "code\modules\projectiles\guns\energy.dm"
|
||||
#include "code\modules\projectiles\guns\launcher.dm"
|
||||
@@ -2002,6 +2003,9 @@
|
||||
#include "code\modules\projectiles\guns\launcher\pneumatic.dm"
|
||||
#include "code\modules\projectiles\guns\launcher\rocket.dm"
|
||||
#include "code\modules\projectiles\guns\launcher\syringe_gun.dm"
|
||||
#include "code\modules\projectiles\guns\magnetic\magnetic.dm"
|
||||
#include "code\modules\projectiles\guns\magnetic\magnetic_construction.dm"
|
||||
#include "code\modules\projectiles\guns\magnetic\magnetic_railgun.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\automatic.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\boltaction.dm"
|
||||
#include "code\modules\projectiles\guns\projectile\contender.dm"
|
||||
@@ -2018,6 +2022,7 @@
|
||||
#include "code\modules\projectiles\projectile\change.dm"
|
||||
#include "code\modules\projectiles\projectile\energy.dm"
|
||||
#include "code\modules\projectiles\projectile\force.dm"
|
||||
#include "code\modules\projectiles\projectile\magnetic.dm"
|
||||
#include "code\modules\projectiles\projectile\special.dm"
|
||||
#include "code\modules\projectiles\targeting\targeting_client.dm"
|
||||
#include "code\modules\projectiles\targeting\targeting_gun.dm"
|
||||
|
||||