mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-18 18:44:48 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into intercom
Conflicts: code/modules/projectiles/guns/projectile/automatic.dm icons/mob/back.dmi
This commit is contained in:
@@ -606,7 +606,7 @@ var/global/nologevent = 0
|
||||
return
|
||||
if(confirm == "Yes")
|
||||
var/delay = input("What delay should the restart have (in seconds)?", "Restart Delay", 5) as num
|
||||
if(!delay)
|
||||
if(isnull(delay))
|
||||
delay = 50
|
||||
else
|
||||
delay = delay * 10
|
||||
|
||||
@@ -704,7 +704,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store)
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/proto(M), slot_r_hand)
|
||||
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store)
|
||||
|
||||
if ("tournament chef") //Steven Seagal FTW
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
msg = "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[src]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src, "holder")]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
|
||||
for(var/client/X in admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
X << msg
|
||||
|
||||
usr << "Your prayers have been received by the gods."
|
||||
@@ -37,7 +37,7 @@
|
||||
msg = "\blue <b><font color='#DC143C'>SYNDICATE: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, "holder")]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;SyndicateReply=\ref[Sender]'>REPLY</A>):</b> [msg]"
|
||||
|
||||
for(var/client/X in admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
X << msg
|
||||
|
||||
/proc/HONK_announce(var/text , var/mob/Sender)
|
||||
@@ -53,12 +53,16 @@
|
||||
msg = "\blue <b><font color=orange>ERT REQUEST: </font>[key_name(Sender, 1)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, "holder")]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;ErtReply=\ref[Sender]'>REPLY</A>):</b> [msg]"
|
||||
|
||||
for(var/client/X in admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
X << msg
|
||||
|
||||
/proc/Nuke_request(text , mob/Sender)
|
||||
var/nuke_code = get_nuke_code()
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST: </font>[key_name(Sender)] (<A HREF='?_src_=holder;adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[Sender]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[Sender]'>SM</A>) ([admin_jump_link(Sender, "holder")]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?_src_=holder;CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]</span>"
|
||||
admins << msg
|
||||
admins << "<span class='adminnotice'><b>The nuke code is [nuke_code].</b></span>"
|
||||
|
||||
for(var/client/X in admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
X << msg
|
||||
X << "<span class='adminnotice'><b>The nuke code is [nuke_code].</b></span>"
|
||||
|
||||
@@ -160,7 +160,7 @@ var/global/sent_syndicate_strike_team = 0
|
||||
equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(src), slot_l_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/grenade/empgrenade(src), slot_r_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(src), slot_s_store)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/m2411(src), slot_belt)
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol/m2411(src), slot_belt)
|
||||
|
||||
equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/l6_saw(src), slot_r_hand)
|
||||
|
||||
|
||||
@@ -165,6 +165,10 @@ BLIND // can't see anything
|
||||
var/pickpocket = 0 //Master pickpocket?
|
||||
var/clipped = 0
|
||||
species_restricted = list("exclude","Unathi","Tajaran","Wryn")
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
@@ -305,9 +309,15 @@ BLIND // can't see anything
|
||||
body_parts_covered = FEET
|
||||
slot_flags = SLOT_FEET
|
||||
|
||||
|
||||
permeability_coefficient = 0.50
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
species_restricted = list("exclude","Unathi","Tajaran","Wryn")
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi'
|
||||
)
|
||||
|
||||
|
||||
/obj/item/proc/negates_gravity()
|
||||
return 0
|
||||
|
||||
@@ -4,22 +4,15 @@
|
||||
icon_state = "boxing"
|
||||
item_state = "boxing"
|
||||
species_restricted = null
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/boxing/green
|
||||
icon_state = "boxinggreen"
|
||||
item_state = "boxinggreen"
|
||||
species_fit = list("Vox")
|
||||
|
||||
/obj/item/clothing/gloves/boxing/blue
|
||||
icon_state = "boxingblue"
|
||||
item_state = "boxingblue"
|
||||
species_fit = list("Vox")
|
||||
|
||||
/obj/item/clothing/gloves/boxing/yellow
|
||||
icon_state = "boxingyellow"
|
||||
item_state = "boxingyellow"
|
||||
species_fit = list("Vox")
|
||||
item_state = "boxingyellow"
|
||||
@@ -6,11 +6,6 @@
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
_color="yellow"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
power
|
||||
var/next_shock = 0
|
||||
|
||||
@@ -25,10 +20,6 @@
|
||||
item_state = "ygloves"
|
||||
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
|
||||
permeability_coefficient = 0.05
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
_color="yellow"
|
||||
|
||||
New()
|
||||
@@ -40,10 +31,6 @@
|
||||
icon_state = "black"
|
||||
item_state = "bgloves"
|
||||
_color="brown"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
@@ -65,37 +52,26 @@
|
||||
icon_state = "orange"
|
||||
item_state = "orangegloves"
|
||||
_color="orange"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/color/red
|
||||
name = "red gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "red"
|
||||
item_state = "redgloves"
|
||||
_color = "red"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/color/red/insulated
|
||||
name = "insulated gloves"
|
||||
desc = "These gloves will protect the wearer from electric shock."
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/color/rainbow
|
||||
name = "rainbow gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "rainbow"
|
||||
item_state = "rainbowgloves"
|
||||
_color = "rainbow"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
clown
|
||||
_color = "clown"
|
||||
|
||||
@@ -105,40 +81,28 @@
|
||||
icon_state = "blue"
|
||||
item_state = "bluegloves"
|
||||
_color="blue"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/color/purple
|
||||
name = "purple gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "purple"
|
||||
item_state = "purplegloves"
|
||||
_color="purple"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/color/green
|
||||
name = "green gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "green"
|
||||
item_state = "greengloves"
|
||||
_color="green"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/color/grey
|
||||
name = "grey gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "gray"
|
||||
item_state = "graygloves"
|
||||
_color="grey"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
rd
|
||||
_color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
|
||||
|
||||
@@ -151,20 +115,14 @@
|
||||
icon_state = "lightbrown"
|
||||
item_state = "lightbrowngloves"
|
||||
_color="light brown"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/color/brown
|
||||
name = "brown gloves"
|
||||
desc = "A pair of gloves, they don't look special in any way."
|
||||
icon_state = "brown"
|
||||
item_state = "browngloves"
|
||||
_color="brown"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi'
|
||||
)
|
||||
|
||||
cargo
|
||||
_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
|
||||
|
||||
@@ -177,10 +135,6 @@
|
||||
permeability_coefficient = 0.01
|
||||
_color="white"
|
||||
transfer_prints = TRUE
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/color/latex/nitrile
|
||||
name = "nitrile gloves"
|
||||
@@ -212,8 +166,4 @@
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
@@ -15,10 +15,6 @@
|
||||
icon_state = "black"
|
||||
item_state = "r_hands"
|
||||
siemens_coefficient = 1.0
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/combat
|
||||
desc = "These tactical gloves are somewhat fire and impact resistant."
|
||||
@@ -31,10 +27,6 @@
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/botanic_leather
|
||||
desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
|
||||
@@ -46,17 +38,10 @@
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/batmangloves
|
||||
desc = "Used for handling all things bat related."
|
||||
name = "batgloves"
|
||||
icon_state = "bmgloves"
|
||||
item_state = "bmgloves"
|
||||
_color="bmgloves"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
)
|
||||
_color="bmgloves"
|
||||
@@ -3,7 +3,6 @@
|
||||
icon_state = "black"
|
||||
_color = "black"
|
||||
desc = "A pair of black shoes."
|
||||
species_fit = list("Vox")
|
||||
|
||||
cold_protection = FEET
|
||||
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
|
||||
@@ -20,8 +19,6 @@
|
||||
name = "brown shoes"
|
||||
desc = "A pair of brown shoes."
|
||||
icon_state = "brown"
|
||||
_color = "brown"
|
||||
species_fit = list("Vox")
|
||||
|
||||
captain
|
||||
_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
|
||||
@@ -72,7 +69,6 @@
|
||||
icon_state = "white"
|
||||
permeability_coefficient = 0.01
|
||||
_color = "white"
|
||||
species_fit = list("Vox")
|
||||
|
||||
/obj/item/clothing/shoes/leather
|
||||
name = "leather shoes"
|
||||
@@ -90,7 +86,6 @@
|
||||
name = "orange shoes"
|
||||
icon_state = "orange"
|
||||
_color = "orange"
|
||||
species_fit = list("Vox")
|
||||
|
||||
/obj/item/clothing/shoes/orange/attack_self(mob/user as mob)
|
||||
if (src.chained)
|
||||
|
||||
@@ -9,17 +9,12 @@
|
||||
var/list/clothing_choices = list()
|
||||
siemens_coefficient = 0.8
|
||||
species_restricted = null
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/shoes/mime
|
||||
name = "mime shoes"
|
||||
icon_state = "mime"
|
||||
_color = "mime"
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses
|
||||
name = "combat boots"
|
||||
desc = "High speed, low drag combat boots."
|
||||
@@ -55,10 +50,6 @@
|
||||
flags = NOSLIP
|
||||
slowdown = SHOES_SLOWDOWN+1
|
||||
species_restricted = null
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes
|
||||
desc = "The prankster's standard-issue clowning shoes. Damn they're huge!"
|
||||
@@ -83,6 +74,7 @@
|
||||
name = "jacksandals"
|
||||
desc = "Nanotrasen-issue Security combat sandals for combat scenarios. They're jacksandals, however that works."
|
||||
icon_state = "jacksandal"
|
||||
_color = "jacksandal"
|
||||
species_restricted = null
|
||||
|
||||
/obj/item/clothing/shoes/cult
|
||||
@@ -121,10 +113,7 @@
|
||||
name = "laceup shoes"
|
||||
desc = "The height of fashion, and they're pre-polished!"
|
||||
icon_state = "laceups"
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/shoes/roman
|
||||
name = "roman sandals"
|
||||
desc = "Sandals with buckled leather straps on it."
|
||||
|
||||
@@ -174,3 +174,23 @@
|
||||
desc = "An EVA suit specifically designed for the clown. SPESSHONK!"
|
||||
icon_state = "spaceclown_suit"
|
||||
item_state = "spaceclown_items"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/freedom
|
||||
name = "eagle helmet"
|
||||
desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle."
|
||||
icon_state = "griffinhat"
|
||||
item_state = "griffinhat"
|
||||
armor = list(melee = 40, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100)
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
|
||||
unacidable = 1
|
||||
|
||||
/obj/item/clothing/suit/space/freedom
|
||||
name = "eagle suit"
|
||||
desc = "An advanced, light suit, fabricated from a mixture of synthetic feathers and space-resistant material. A gun holster appears to be integrated into the suit and the wings appear to be stuck in 'freedom' mode."
|
||||
icon_state = "freedom"
|
||||
item_state = "freedom"
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank)
|
||||
armor = list(melee = 40, bullet = 40, laser = 30,energy = 25, bomb = 100, bio = 100, rad = 100)
|
||||
slowdown = 1
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
|
||||
unacidable = 1
|
||||
|
||||
@@ -11,6 +11,13 @@
|
||||
icon_state = "blue_pyjamas"
|
||||
_color = "blue_pyjamas"
|
||||
item_state = "w_suit"
|
||||
|
||||
/obj/item/clothing/under/patriotsuit
|
||||
name = "Patriotic Suit"
|
||||
desc = "Motorcycle not included."
|
||||
icon_state = "ek"
|
||||
item_state = "ek"
|
||||
_color = "ek"
|
||||
|
||||
/obj/item/clothing/under/captain_fly
|
||||
name = "rogue captains uniform"
|
||||
|
||||
@@ -92,8 +92,9 @@ var/global/list/all_money_accounts = list()
|
||||
P.wrapped = R
|
||||
R.name = "Account information: [M.owner_name]"
|
||||
|
||||
// AUTOFIXED BY fix_string_idiocy.py
|
||||
// C:\Users\Rob\Documents\Projects\vgstation13\code\WorkInProgress\Cael_Aislinn\Economy\Accounts.dm:94: R.info = "<b>Account details (confidential)</b><br><hr><br>"
|
||||
var/overseer = "Unknown"
|
||||
if(source_db.held_card)
|
||||
overseer = source_db.held_card.registered_name
|
||||
R.info = {"<b>Account details (confidential)</b><br><hr><br>
|
||||
<i>Account holder:</i> [M.owner_name]<br>
|
||||
<i>Account number:</i> [M.account_number]<br>
|
||||
@@ -101,7 +102,7 @@ var/global/list/all_money_accounts = list()
|
||||
<i>Starting balance:</i> $[M.money]<br>
|
||||
<i>Date and time:</i> [worldtime2text()], [current_date_string]<br><br>
|
||||
<i>Creation terminal ID:</i> [source_db.machine_id]<br>
|
||||
<i>Authorised NT officer overseeing creation:</i> [source_db.held_card.registered_name]<br>"}
|
||||
<i>Authorised NT officer overseeing creation:</i> [overseer]<br>"}
|
||||
// END AUTOFIX
|
||||
//stamp the paper
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
||||
|
||||
@@ -131,9 +131,9 @@
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if("insert_card")
|
||||
if(href_list["insert_card"])
|
||||
if(held_card)
|
||||
held_card.loc = src.loc
|
||||
held_card.forceMove(loc)
|
||||
|
||||
if(ishuman(usr) && !usr.get_active_hand())
|
||||
usr.put_in_hands(held_card)
|
||||
@@ -144,7 +144,7 @@
|
||||
if (istype(I, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/C = I
|
||||
usr.drop_item()
|
||||
C.loc = src
|
||||
C.forceMove(src)
|
||||
held_card = C
|
||||
|
||||
if(!get_access_level(usr))
|
||||
|
||||
@@ -148,3 +148,10 @@ var/global/datum/controller/plants/plant_controller // Set in New().
|
||||
|
||||
/datum/controller/plants/proc/remove_plant(var/obj/effect/plant/plant)
|
||||
plant_queue -= plant
|
||||
|
||||
/client/proc/list_plant_sprites()
|
||||
if(!plant_controller || !plant_controller.plant_sprites || !plant_controller.plant_sprites.len)
|
||||
world << "Cannot list plant sprites, plant controller or plant sprites list may not be initialized."
|
||||
|
||||
for(var/base in plant_controller.plant_sprites)
|
||||
world << "[base] : [plant_controller.plant_sprites[base]] growth states"
|
||||
@@ -43,10 +43,11 @@
|
||||
kitchen_tag = "ghostchili"
|
||||
preset_icon = "ghostchilipepper"
|
||||
|
||||
/datum/seed/chili/ice/New()
|
||||
/datum/seed/chili/ghost/New()
|
||||
..()
|
||||
set_trait(TRAIT_MATURATION,4)
|
||||
set_trait(TRAIT_PRODUCTION,4)
|
||||
set_trait(TRAIT_MATURATION,10)
|
||||
set_trait(TRAIT_PRODUCTION,10)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00EDC6")
|
||||
|
||||
// Berry plants/variants.
|
||||
|
||||
@@ -133,6 +133,8 @@
|
||||
)
|
||||
//--FalseIncarnate
|
||||
|
||||
var/last_plant_ikey //This is for debugging reference, and is otherwise useless. --FalseIncarnate
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/AltClick()
|
||||
if(mechanical && !usr.stat && !usr.lying && Adjacent(usr))
|
||||
close_lid(usr)
|
||||
|
||||
@@ -36,7 +36,9 @@
|
||||
if(age >= seed.get_trait(TRAIT_MATURATION))
|
||||
overlay_stage = seed.growth_stages
|
||||
else
|
||||
var/maturation = round(seed.get_trait(TRAIT_MATURATION)/seed.growth_stages)
|
||||
var/maturation = seed.get_trait(TRAIT_MATURATION)/seed.growth_stages
|
||||
if(maturation < 1)
|
||||
maturation = 1
|
||||
overlay_stage = maturation ? max(1,round(age/maturation)) : 1
|
||||
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]"
|
||||
var/image/plant_overlay = plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
|
||||
@@ -45,6 +47,7 @@
|
||||
plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR)
|
||||
plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay
|
||||
overlays |= plant_overlay
|
||||
last_plant_ikey = ikey
|
||||
|
||||
if(harvest && overlay_stage == seed.growth_stages)
|
||||
ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]"
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
var/new_type = pick(
|
||||
200; /obj/item/weapon/hatchet, \
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol, \
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle, \
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/deagle, \
|
||||
/obj/item/weapon/gun/projectile/revolver/russian, \
|
||||
)
|
||||
new new_type(C)
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
var/lum_g
|
||||
var/lum_b
|
||||
|
||||
var/tmp/old_lum_r
|
||||
var/tmp/old_lum_g
|
||||
var/tmp/old_lum_b
|
||||
var/tmp/applied_lum_r
|
||||
var/tmp/applied_lum_g
|
||||
var/tmp/applied_lum_b
|
||||
|
||||
var/list/effect_str
|
||||
var/list/effect_turf
|
||||
@@ -107,11 +107,6 @@
|
||||
if(light_range && light_power && !applied)
|
||||
. = 1
|
||||
|
||||
if(. || source_atom.light_color != light_color)//Save the old lumcounts if we need to update, if the colour changed DO IT BEFORE we parse the colour and LOSE the old lumcounts!
|
||||
old_lum_r = lum_r
|
||||
old_lum_g = lum_g
|
||||
old_lum_b = lum_b
|
||||
|
||||
if(source_atom.light_color != light_color)
|
||||
light_color = source_atom.light_color
|
||||
parse_light_color()
|
||||
@@ -149,6 +144,12 @@
|
||||
|
||||
/datum/light_source/proc/apply_lum()
|
||||
applied = 1
|
||||
|
||||
// Cache the applied lum counts.
|
||||
applied_lum_r = lum_r
|
||||
applied_lum_g = lum_g
|
||||
applied_lum_b = lum_b
|
||||
|
||||
if(istype(source_turf))
|
||||
FOR_DVIEW(var/turf/T, light_range, source_turf, INVISIBILITY_LIGHTING)
|
||||
if(T.lighting_overlay)
|
||||
@@ -188,7 +189,7 @@
|
||||
|
||||
if(T.lighting_overlay)
|
||||
var/str = effect_str[i]
|
||||
T.lighting_overlay.update_lumcount(-str * old_lum_r, -str * old_lum_g, -str * old_lum_b)
|
||||
T.lighting_overlay.update_lumcount(-str * applied_lum_r, -str * applied_lum_g, -str * applied_lum_b)
|
||||
|
||||
i++
|
||||
|
||||
|
||||
@@ -25,43 +25,43 @@
|
||||
/obj/item/weapon/coin/gold
|
||||
cmineral = "gold"
|
||||
icon_state = "coin_gold_heads"
|
||||
materials = list(MAT_GOLD = 200)
|
||||
materials = list(MAT_GOLD = 400)
|
||||
credits = 160
|
||||
|
||||
/obj/item/weapon/coin/silver
|
||||
cmineral = "silver"
|
||||
icon_state = "coin_silver_heads"
|
||||
materials = list(MAT_SILVER = 200)
|
||||
materials = list(MAT_SILVER = 400)
|
||||
credits = 40
|
||||
|
||||
/obj/item/weapon/coin/diamond
|
||||
cmineral = "diamond"
|
||||
icon_state = "coin_diamond_heads"
|
||||
materials = list(MAT_DIAMOND = 200)
|
||||
materials = list(MAT_DIAMOND = 400)
|
||||
credits = 120
|
||||
|
||||
/obj/item/weapon/coin/iron
|
||||
cmineral = "iron"
|
||||
icon_state = "coin_iron_heads"
|
||||
materials = list(MAT_METAL = 200)
|
||||
materials = list(MAT_METAL = 400)
|
||||
credits = 20
|
||||
|
||||
/obj/item/weapon/coin/plasma
|
||||
cmineral = "plasma"
|
||||
icon_state = "coin_plasma_heads"
|
||||
materials = list(MAT_PLASMA = 200)
|
||||
materials = list(MAT_PLASMA = 400)
|
||||
credits = 80
|
||||
|
||||
/obj/item/weapon/coin/uranium
|
||||
cmineral = "uranium"
|
||||
icon_state = "coin_uranium_heads"
|
||||
materials = list(MAT_URANIUM = 200)
|
||||
materials = list(MAT_URANIUM = 400)
|
||||
credits = 160
|
||||
|
||||
/obj/item/weapon/coin/clown
|
||||
cmineral = "bananium"
|
||||
icon_state = "coin_bananium_heads"
|
||||
materials = list(MAT_BANANIUM = 200)
|
||||
materials = list(MAT_BANANIUM = 400)
|
||||
credits = 600 //makes the clown cri
|
||||
|
||||
/obj/item/weapon/coin/adamantine
|
||||
|
||||
@@ -101,22 +101,23 @@
|
||||
inserted_id = I
|
||||
interact(user)
|
||||
return
|
||||
|
||||
if(exchange_parts(user, W))
|
||||
return
|
||||
|
||||
if(default_deconstruction_crowbar(W))
|
||||
return
|
||||
|
||||
if(default_unfasten_wrench(user, W))
|
||||
return
|
||||
if(default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", W))
|
||||
updateUsrDialog()
|
||||
return
|
||||
if(panel_open)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
empty_content()
|
||||
default_deconstruction_crowbar(W)
|
||||
return 1
|
||||
return
|
||||
|
||||
if(default_unfasten_wrench(user, W))
|
||||
return
|
||||
|
||||
if(default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", W))
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/SmeltMineral(var/obj/item/weapon/ore/O)
|
||||
@@ -253,7 +254,7 @@
|
||||
while(s.amount > s.max_amount)
|
||||
new s.type(loc,s.max_amount)
|
||||
s.use(s.max_amount)
|
||||
s.loc = loc
|
||||
s.forceMove(loc)
|
||||
s.layer = initial(s.layer)
|
||||
|
||||
/**********************Mining Equipment Locker**************************/
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
throwforce = 10.0
|
||||
item_state = "pickaxe"
|
||||
w_class = 4.0
|
||||
materials = list(MAT_METAL=3750) //one sheet, but where can you make them?
|
||||
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
|
||||
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("hit", "pierced", "sliced", "attacked")
|
||||
|
||||
@@ -355,4 +355,7 @@ In all, this is a lot like the monkey code. /N
|
||||
else if(custom_pixel_x_offset)
|
||||
return custom_pixel_x_offset
|
||||
else
|
||||
return initial(pixel_x)
|
||||
return initial(pixel_x)
|
||||
|
||||
/mob/living/carbon/alien/humanoid/get_permeability_protection()
|
||||
return 0.8
|
||||
@@ -1759,4 +1759,24 @@
|
||||
return 1
|
||||
if(!silent)
|
||||
src << "<span class='warning'>You don't have the dexterity to use that!<span>"
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/get_permeability_protection()
|
||||
var/list/prot = list("hands"=0, "chest"=0, "groin"=0, "legs"=0, "feet"=0, "arms"=0, "head"=0)
|
||||
for(var/obj/item/I in get_equipped_items())
|
||||
if(I.body_parts_covered & HANDS)
|
||||
prot["hands"] = max(1 - I.permeability_coefficient, prot["hands"])
|
||||
if(I.body_parts_covered & UPPER_TORSO)
|
||||
prot["chest"] = max(1 - I.permeability_coefficient, prot["chest"])
|
||||
if(I.body_parts_covered & LOWER_TORSO)
|
||||
prot["groin"] = max(1 - I.permeability_coefficient, prot["groin"])
|
||||
if(I.body_parts_covered & LEGS)
|
||||
prot["legs"] = max(1 - I.permeability_coefficient, prot["legs"])
|
||||
if(I.body_parts_covered & FEET)
|
||||
prot["feet"] = max(1 - I.permeability_coefficient, prot["feet"])
|
||||
if(I.body_parts_covered & ARMS)
|
||||
prot["arms"] = max(1 - I.permeability_coefficient, prot["arms"])
|
||||
if(I.body_parts_covered & HEAD)
|
||||
prot["head"] = max(1 - I.permeability_coefficient, prot["head"])
|
||||
var/protection = (prot["head"] + prot["arms"] + prot["feet"] + prot["legs"] + prot["groin"] + prot["chest"] + prot["hands"])/7
|
||||
return protection
|
||||
@@ -35,7 +35,8 @@
|
||||
"antennae" = /obj/item/organ/wryn/hivenode
|
||||
)
|
||||
|
||||
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | NO_BREATHE | HAS_SKIN_COLOR | NO_SCAN | NO_SCAN | HIVEMIND
|
||||
flags = IS_WHITELISTED | HAS_LIPS | NO_BREATHE | HAS_SKIN_COLOR | NO_SCAN | NO_SCAN | HIVEMIND
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
dietflags = DIET_HERB //bees feed off nectar, so bee people feed off plants too
|
||||
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
var/has_fine_manipulation = 1 // Can use small items.
|
||||
|
||||
var/flags = 0 // Various specific features.
|
||||
var/clothing_flags = 0 // Underwear and socks.
|
||||
var/bloodflags = 0
|
||||
var/bodyflags = 0
|
||||
var/dietflags = 0 // Make sure you set this, otherwise it won't be able to digest a lot of foods
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
primitive_form = "Monkey"
|
||||
path = /mob/living/carbon/human/human
|
||||
language = "Sol Common"
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
flags = HAS_LIPS | CAN_BE_FAT
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = HAS_SKIN_TONE
|
||||
dietflags = DIET_OMNI
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
@@ -37,7 +38,8 @@
|
||||
else, frequently even their own lives. They prefer warmer temperatures than most species and \
|
||||
their native tongue is a heavy hissing laungage called Sinta'Unathi."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
flags = HAS_LIPS
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = FEET_CLAWS | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_CARN
|
||||
|
||||
@@ -88,7 +90,8 @@
|
||||
|
||||
primitive_form = "Farwa"
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
flags = HAS_LIPS | CAN_BE_FAT
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
@@ -119,7 +122,8 @@
|
||||
to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \
|
||||
which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
flags = HAS_LIPS
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
@@ -148,7 +152,8 @@
|
||||
herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
|
||||
the secrets of their empire to their allies."
|
||||
|
||||
flags = HAS_LIPS | HAS_UNDERWEAR
|
||||
flags = HAS_LIPS
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = HAS_SKIN_COLOR
|
||||
dietflags = DIET_HERB
|
||||
|
||||
@@ -190,6 +195,7 @@
|
||||
poison_type = "oxygen"
|
||||
|
||||
flags = NO_SCAN | IS_WHITELISTED
|
||||
clothing_flags = HAS_SOCKS
|
||||
dietflags = DIET_OMNI
|
||||
|
||||
blood_color = "#2299FC"
|
||||
@@ -278,6 +284,7 @@
|
||||
brute_mod = 0.8
|
||||
|
||||
flags = IS_WHITELISTED
|
||||
clothing_flags = HAS_SOCKS
|
||||
bodyflags = FEET_CLAWS
|
||||
dietflags = DIET_HERB
|
||||
|
||||
@@ -295,6 +302,7 @@
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
|
||||
clothing_flags = HAS_SOCKS
|
||||
bodyflags = HAS_SKIN_COLOR
|
||||
bloodflags = BLOOD_SLIME
|
||||
dietflags = DIET_CARN
|
||||
@@ -322,7 +330,8 @@
|
||||
default_genes = list(REMOTE_TALK)
|
||||
|
||||
|
||||
flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
|
||||
flags = IS_WHITELISTED | HAS_LIPS | CAN_BE_FAT
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
dietflags = DIET_HERB
|
||||
|
||||
reagent_tag = PROCESS_ORG
|
||||
@@ -373,6 +382,7 @@
|
||||
water and other radiation."
|
||||
|
||||
flags = NO_BREATHE | REQUIRE_LIGHT | IS_PLANT | RAD_ABSORB | NO_BLOOD | NO_PAIN
|
||||
clothing_flags = HAS_SOCKS
|
||||
dietflags = 0 //Diona regenerate nutrition in light, no diet necessary
|
||||
|
||||
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
|
||||
@@ -467,6 +477,7 @@
|
||||
passive_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA_RAD
|
||||
clothing_flags = HAS_SOCKS
|
||||
dietflags = 0 //IPCs can't eat, so no diet
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#AAAAAA"
|
||||
|
||||
@@ -317,18 +317,18 @@ var/global/list/damage_icon_parts = list()
|
||||
stand_icon.Blend(base_icon,ICON_OVERLAY)
|
||||
|
||||
//Underwear
|
||||
if(underwear && species.flags & HAS_UNDERWEAR)
|
||||
if(underwear && species.clothing_flags & HAS_UNDERWEAR)
|
||||
var/datum/sprite_accessory/underwear/U = underwear_list[underwear]
|
||||
if(U)
|
||||
stand_icon.Blend(new /icon(U.icon, "uw_[U.icon_state]_s"), ICON_OVERLAY)
|
||||
|
||||
if(undershirt && species.flags & HAS_UNDERWEAR)
|
||||
if(undershirt && species.clothing_flags & HAS_UNDERSHIRT)
|
||||
var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt]
|
||||
if(U2)
|
||||
stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY)
|
||||
|
||||
|
||||
if(socks)
|
||||
if(socks && species.clothing_flags & HAS_SOCKS)
|
||||
var/datum/sprite_accessory/socks/U3 = socks_list[socks]
|
||||
if(U3)
|
||||
stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY)
|
||||
|
||||
@@ -937,3 +937,7 @@
|
||||
|
||||
/mob/living/proc/spawn_dust()
|
||||
new /obj/effect/decal/cleanable/ash(loc)
|
||||
|
||||
//used in datum/reagents/reaction() proc
|
||||
/mob/living/proc/get_permeability_protection()
|
||||
return 0
|
||||
|
||||
@@ -551,13 +551,22 @@
|
||||
return H
|
||||
|
||||
/mob/living/silicon/pai/MouseDrop(atom/over_object)
|
||||
var/mob/living/carbon/H = over_object
|
||||
if(!istype(H) || !Adjacent(H)) return ..()
|
||||
if(H.a_intent == I_HELP)
|
||||
get_scooped(H)
|
||||
//return
|
||||
var/mob/living/carbon/human/H = over_object //changed to human to avoid stupid issues like xenos holding pAIs.
|
||||
if(!istype(H) || !Adjacent(H)) return ..()
|
||||
if(usr == src)
|
||||
switch(alert(H, "[src] wants you to pick them up. Do it?",,"Yes","No"))
|
||||
if("Yes")
|
||||
if(Adjacent(H))
|
||||
get_scooped(H)
|
||||
else
|
||||
src << "<span class='warning'>You need to stay in reaching distance to be picked up.</span>"
|
||||
if("No")
|
||||
src << "<span class='warning'>[H] decided not to pick you up.</span>"
|
||||
else
|
||||
return ..()
|
||||
if(Adjacent(H))
|
||||
get_scooped(H)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/pai/on_forcemove(atom/newloc)
|
||||
if(card)
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
faction = list("mimic")
|
||||
move_to_delay = 9
|
||||
|
||||
var/is_electronic = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/FindTarget()
|
||||
. = ..()
|
||||
if(.)
|
||||
@@ -47,7 +49,14 @@
|
||||
ghostize()
|
||||
qdel(src)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/emp_act(severity)
|
||||
if(is_electronic)
|
||||
switch(severity)
|
||||
if(1)
|
||||
Die()
|
||||
if(2)
|
||||
adjustBruteLoss(50)
|
||||
..(severity)
|
||||
|
||||
//
|
||||
// Crate Mimic
|
||||
@@ -188,12 +197,16 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
|
||||
knockdown_people = 1
|
||||
melee_damage_lower *= 2
|
||||
melee_damage_upper *= 2
|
||||
if(istype(O, /obj/machinery))
|
||||
is_electronic = 1
|
||||
else if(istype(O, /obj/item))
|
||||
var/obj/item/I = O
|
||||
health = 15 * I.w_class
|
||||
melee_damage_lower = 2 + I.force
|
||||
melee_damage_upper = 2 + I.force
|
||||
move_to_delay = 2 * I.w_class + 1
|
||||
if(istype(O, /obj/item/device))
|
||||
is_electronic = 1
|
||||
|
||||
maxHealth = health
|
||||
if(creator)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/araneus
|
||||
name = "Sergeant Araneus"
|
||||
real_name = "Sergeant Araneus"
|
||||
voice_name = "unidentifiable voice"
|
||||
desc = "A fierce companion for any person of power, this spider has been carefully trained by Nanotrasen specialists. Its beady, staring eyes send shivers down your spine."
|
||||
faction = list("spiders")
|
||||
icon_state = "guard"
|
||||
icon_living = "guard"
|
||||
icon_dead = "guard_dead"
|
||||
icon_gib = "guard_dead"
|
||||
turns_per_move = 8
|
||||
response_help = "pets"
|
||||
emote_hear = list("chitters")
|
||||
maxHealth = 250
|
||||
health = 200
|
||||
harm_intent_damage = 3
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 20
|
||||
|
||||
min_oxy = 5
|
||||
max_tox = 2
|
||||
max_co2 = 5
|
||||
|
||||
@@ -254,19 +254,19 @@ datum/preferences
|
||||
|
||||
|
||||
var/icon/underwear_s = null
|
||||
if(underwear && current_species.flags & HAS_UNDERWEAR)
|
||||
if(underwear && current_species.clothing_flags & HAS_UNDERWEAR)
|
||||
var/datum/sprite_accessory/underwear/U = underwear_list[underwear]
|
||||
if(U)
|
||||
underwear_s = new/icon(U.icon, "[U.icon_state]_s", ICON_OVERLAY)
|
||||
|
||||
var/icon/undershirt_s = null
|
||||
if(undershirt && current_species.flags & HAS_UNDERWEAR)
|
||||
if(undershirt && current_species.clothing_flags & HAS_UNDERSHIRT)
|
||||
var/datum/sprite_accessory/undershirt/U2 = undershirt_list[undershirt]
|
||||
if(U2)
|
||||
undershirt_s = new/icon(U2.icon, "[U2.icon_state]_s", ICON_OVERLAY)
|
||||
|
||||
var/icon/socks_s = null
|
||||
if(socks)
|
||||
if(socks && current_species.clothing_flags & HAS_SOCKS)
|
||||
var/datum/sprite_accessory/socks/U3 = socks_list[socks]
|
||||
if(U3)
|
||||
socks_s = new/icon(U3.icon, "[U3.icon_state]_s", ICON_OVERLAY)
|
||||
|
||||
@@ -1272,118 +1272,118 @@
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington","Vox")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington","Vox")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/white_norm
|
||||
name = "Normal White"
|
||||
icon_state = "white_norm"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/black_norm
|
||||
name = "Normal Black"
|
||||
icon_state = "black_norm"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/white_short
|
||||
name = "Short White"
|
||||
icon_state = "white_short"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/black_short
|
||||
name = "Short Black"
|
||||
icon_state = "black_short"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/white_knee
|
||||
name = "Knee-high White"
|
||||
icon_state = "white_knee"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/black_knee
|
||||
name = "Knee-high Black"
|
||||
icon_state = "black_knee"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/thin_knee
|
||||
name = "Knee-high Thin"
|
||||
icon_state = "thin_knee"
|
||||
gender = FEMALE
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/striped_knee
|
||||
name = "Knee-high Striped"
|
||||
icon_state = "striped_knee"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/rainbow_knee
|
||||
name = "Knee-high Rainbow"
|
||||
icon_state = "rainbow_knee"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/white_thigh
|
||||
name = "Thigh-high White"
|
||||
icon_state = "white_thigh"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
/datum/sprite_accessory/socks/black_thigh
|
||||
name = "Thigh-high Black"
|
||||
icon_state = "black_thigh"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/thin_thigh
|
||||
name = "Thigh-high Thin"
|
||||
icon_state = "thin_thigh"
|
||||
gender = FEMALE
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/striped_thigh
|
||||
name = "Thigh-high Striped"
|
||||
icon_state = "striped_thigh"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/rainbow_thigh
|
||||
name = "Thigh-high Rainbow"
|
||||
icon_state = "rainbow_thigh"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/pantyhose
|
||||
name = "Pantyhose"
|
||||
icon_state = "pantyhose"
|
||||
gender = FEMALE
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
|
||||
/datum/sprite_accessory/socks/black_fishnet
|
||||
name = "Black Fishnet"
|
||||
icon_state = "black_fishnet"
|
||||
gender = NEUTER
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
|
||||
species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpkanin","Slime People","Skellington")
|
||||
|
||||
/datum/sprite_accessory/socks/vox_white
|
||||
name = "Vox White"
|
||||
|
||||
@@ -3,60 +3,6 @@
|
||||
H.dna.SetSEState(MONKEYBLOCK,1)
|
||||
domutcheck(H, null)
|
||||
|
||||
/*
|
||||
/mob/living/carbon/human/proc/monkeyize()
|
||||
if (notransform)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
if (W==w_uniform) // will be torn
|
||||
continue
|
||||
unEquip(W)
|
||||
regenerate_icons()
|
||||
notransform = 1
|
||||
canmove = 0
|
||||
stunned = 1
|
||||
icon = null
|
||||
invisibility = 101
|
||||
for(var/t in organs)
|
||||
del(t)
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
flick("h2monkey", animation)
|
||||
sleep(48)
|
||||
//animation = null
|
||||
|
||||
if(!species.primitive) //If the creature in question has no primitive set, this is going to be messy.
|
||||
gib()
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/O = null
|
||||
|
||||
O = new species.primitive(loc)
|
||||
|
||||
O.dna = dna.Clone()
|
||||
O.dna.SetSEState(MONKEYBLOCK,1)
|
||||
O.dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF)
|
||||
O.loc = loc
|
||||
O.viruses = viruses
|
||||
O.a_intent = I_HARM
|
||||
|
||||
|
||||
if (client)
|
||||
client.mob = O
|
||||
if(mind)
|
||||
mind.transfer_to(O)
|
||||
|
||||
O << "<B>You are now [O]. </B>"
|
||||
|
||||
spawn(0)//To prevent the proc from returning null.
|
||||
del(src)
|
||||
del(animation)
|
||||
|
||||
return O
|
||||
*/
|
||||
|
||||
/mob/new_player/AIize()
|
||||
spawning = 1
|
||||
return ..()
|
||||
|
||||
@@ -140,10 +140,10 @@
|
||||
return owner && (flags & flag)
|
||||
|
||||
/datum/nano_module/appearance_changer/proc/can_change_skin_tone()
|
||||
return owner && (flags & APPEARANCE_SKIN) && owner.species.flags & HAS_SKIN_TONE
|
||||
return owner && (flags & APPEARANCE_SKIN) && (owner.species.bodyflags & HAS_SKIN_TONE)
|
||||
|
||||
/datum/nano_module/appearance_changer/proc/can_change_skin_color()
|
||||
return owner && (flags & APPEARANCE_SKIN) && owner.species.flags & HAS_SKIN_COLOR
|
||||
return owner && (flags & APPEARANCE_SKIN) && (owner.species.bodyflags & HAS_SKIN_COLOR)
|
||||
|
||||
/datum/nano_module/appearance_changer/proc/cut_and_generate_data()
|
||||
// Making the assumption that the available species remain constant
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/perapc = 0 // per-apc avilability
|
||||
var/perapc_excess = 0
|
||||
var/netexcess = 0 // excess power on the powernet (typically avail-load)
|
||||
|
||||
|
||||
var/problem = 0 // If either of these is set to 1 there is some sort of issue at the powernet.
|
||||
|
||||
|
||||
@@ -20,6 +20,14 @@
|
||||
..()
|
||||
|
||||
/datum/powernet/Destroy()
|
||||
//Go away references, you suck!
|
||||
for(var/obj/structure/cable/C in cables)
|
||||
cables -= C
|
||||
C.powernet = null
|
||||
for(var/obj/machinery/power/M in nodes)
|
||||
nodes -= M
|
||||
M.powernet = null
|
||||
|
||||
powernets -= src
|
||||
return ..()
|
||||
|
||||
@@ -76,7 +84,7 @@
|
||||
M.disconnect_from_network()//..remove it
|
||||
M.powernet = src
|
||||
nodes[M] = M
|
||||
|
||||
|
||||
// Triggers warning for certain amount of ticks
|
||||
/datum/powernet/proc/trigger_warning(var/duration_ticks = 20)
|
||||
problem = max(duration_ticks, problem)
|
||||
@@ -85,7 +93,7 @@
|
||||
//called every ticks by the powernet controller
|
||||
/datum/powernet/proc/reset()
|
||||
var/numapc = 0
|
||||
|
||||
|
||||
if(problem > 0)
|
||||
problem = max(problem - 1, 0)
|
||||
|
||||
|
||||
@@ -183,9 +183,9 @@
|
||||
caliber = "a762"
|
||||
projectile_type = "/obj/item/projectile/bullet"
|
||||
|
||||
/obj/item/ammo_casing/a545
|
||||
desc = "A 5.45mm bullet casing."
|
||||
caliber = "a545"
|
||||
/obj/item/ammo_casing/a556
|
||||
desc = "A 5.56mm bullet casing."
|
||||
caliber = "a556"
|
||||
projectile_type = "/obj/item/projectile/bullet/heavybullet"
|
||||
|
||||
/obj/item/ammo_casing/rocket
|
||||
|
||||
@@ -116,6 +116,17 @@
|
||||
..()
|
||||
icon_state = "[initial(icon_state)]-[ammo_count() ? "8" : "0"]"
|
||||
|
||||
/obj/item/ammo_box/magazine/uzim9mm
|
||||
name = "uzi magazine (9mm)"
|
||||
icon_state = "uzi9mm-32"
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
caliber = "9mm"
|
||||
max_ammo = 32
|
||||
|
||||
/obj/item/ammo_box/magazine/uzim9mm/update_icon()
|
||||
..()
|
||||
icon_state = "uzi9mm-[round(ammo_count(),4)]"
|
||||
|
||||
/obj/item/ammo_box/magazine/smgm9mm
|
||||
name = "SMG magazine (9mm)"
|
||||
icon_state = "smg9mm"
|
||||
@@ -163,17 +174,14 @@
|
||||
multiple_sprites = 2
|
||||
max_ammo = 8
|
||||
|
||||
/obj/item/ammo_box/magazine/m545
|
||||
name = "box magazine (5.45mm)"
|
||||
icon_state = "5.45m"
|
||||
/obj/item/ammo_box/magazine/m556
|
||||
name = "toploader magazine (5.56mm)"
|
||||
icon_state = "5.56m"
|
||||
origin_tech = "combat=5;syndicate=1"
|
||||
ammo_type = "/obj/item/ammo_casing/a545"
|
||||
caliber = "a545"
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
caliber = "a556"
|
||||
max_ammo = 30
|
||||
|
||||
/obj/item/ammo_box/magazine/m545/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]"
|
||||
multiple_sprites = 2
|
||||
|
||||
/obj/item/ammo_box/magazine/m762
|
||||
name = "box magazine (7.62mm)"
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
var/can_flashlight = 0
|
||||
var/heavy_weapon = 0
|
||||
var/randomspread = 0
|
||||
|
||||
var/burst_size = 1
|
||||
|
||||
proc/ready_to_fire()
|
||||
if(world.time >= last_fired + fire_delay)
|
||||
@@ -126,9 +128,6 @@
|
||||
user << "<span class='warning'>[src] is not ready to fire again!"
|
||||
return
|
||||
|
||||
if(!process_chambered()) //CHECK
|
||||
return click_empty(user)
|
||||
|
||||
if(heavy_weapon)
|
||||
if(user.get_inactive_hand())
|
||||
recoil = 4 //one-handed kick
|
||||
@@ -144,48 +143,55 @@
|
||||
|
||||
var/spread = 0
|
||||
var/turf/targloc = get_turf(target)
|
||||
if(chambered)
|
||||
for (var/i = max(1, chambered.pellets), i > 0, i--) //Previous way of doing it fucked up math for spreading. This way, even the first projectile is part of the spread code.
|
||||
if(i != max(1, chambered.pellets)) //Have we fired the initial chambered bullet yet?
|
||||
in_chamber = new chambered.projectile_type()
|
||||
for(var/f = 1 to burst_size)
|
||||
if(!process_chambered()) //CHECK
|
||||
return click_empty(user)
|
||||
|
||||
if(chambered)
|
||||
for (var/i = max(1, chambered.pellets), i > 0, i--) //Previous way of doing it fucked up math for spreading. This way, even the first projectile is part of the spread code.
|
||||
if(i != max(1, chambered.pellets)) //Have we fired the initial chambered bullet yet?
|
||||
in_chamber = new chambered.projectile_type()
|
||||
ready_projectile(target, user)
|
||||
prepare_shot(in_chamber)
|
||||
if(chambered.deviation)
|
||||
if(randomspread) //Random spread
|
||||
spread = (rand() - 0.5) * chambered.deviation
|
||||
else //Smart spread
|
||||
spread = (i / chambered.pellets - 0.5) * chambered.deviation
|
||||
if(!process_projectile(targloc, user, params, spread))
|
||||
return 0
|
||||
else
|
||||
ready_projectile(target, user)
|
||||
prepare_shot(in_chamber)
|
||||
if(chambered.deviation)
|
||||
if(randomspread) //Random spread
|
||||
spread = (rand() - 0.5) * chambered.deviation
|
||||
else //Smart spread
|
||||
spread = (i / chambered.pellets - 0.5) * chambered.deviation
|
||||
if(!process_projectile(targloc, user, params, spread))
|
||||
return 0
|
||||
else
|
||||
ready_projectile(target, user)
|
||||
prepare_shot(in_chamber)
|
||||
if(!process_projectile(targloc, user, params, spread))
|
||||
return 0
|
||||
|
||||
if(recoil)
|
||||
spawn()
|
||||
shake_camera(user, recoil + 1, recoil)
|
||||
if(recoil)
|
||||
spawn()
|
||||
shake_camera(user, recoil + 1, recoil)
|
||||
|
||||
if(silenced)
|
||||
playsound(user, fire_sound, 10, 1)
|
||||
else
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user.visible_message("<span class='warning'>[user] fires [src][reflex ? " by reflex":""]!</span>", \
|
||||
"<span class='warning'>You fire [src][reflex ? "by reflex":""]!</span>", \
|
||||
"You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
|
||||
if(silenced)
|
||||
playsound(user, fire_sound, 10, 1)
|
||||
else
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
if(f == 1) // Only print this once
|
||||
user.visible_message("<span class='warning'>[user] fires [src][reflex ? " by reflex":""]!</span>", \
|
||||
"<span class='warning'>You fire [src][reflex ? "by reflex":""]!</span>", \
|
||||
"You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
|
||||
|
||||
if(heavy_weapon)
|
||||
if(user.get_inactive_hand())
|
||||
if(prob(15))
|
||||
user.visible_message("<span class='danger'>[src] flies out of [user]'s hands!</span>", "<span class='userdanger'>[src] kicks out of your grip!</span>")
|
||||
user.drop_item()
|
||||
if(heavy_weapon)
|
||||
if(user.get_inactive_hand())
|
||||
if(prob(15))
|
||||
user.visible_message("<span class='danger'>[src] flies out of [user]'s hands!</span>", "<span class='userdanger'>[src] kicks out of your grip!</span>")
|
||||
user.drop_item()
|
||||
break
|
||||
|
||||
update_icon()
|
||||
if(user.hand)
|
||||
user.update_inv_l_hand()
|
||||
else
|
||||
user.update_inv_r_hand()
|
||||
update_icon()
|
||||
if(user.hand)
|
||||
user.update_inv_l_hand()
|
||||
else
|
||||
user.update_inv_r_hand()
|
||||
sleep(fire_delay)
|
||||
|
||||
/obj/item/weapon/gun/proc/ready_projectile(atom/target as mob|obj|turf, mob/living/user)
|
||||
in_chamber.firer = user
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/weapon/gun/energy/hos
|
||||
name = "head of security's energy gun"
|
||||
name = "\improper X-01 MultiPhase Energy Gun"
|
||||
desc = "This is a modern recreation of the captain's antique laser gun. This gun has several unique fire modes, but lacks the ability to recharge over time."
|
||||
icon_state = "hoslaser"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
|
||||
@@ -17,12 +17,13 @@
|
||||
clumsy_check = 0
|
||||
|
||||
obj/item/weapon/gun/energy/laser/retro
|
||||
name ="retro laser"
|
||||
name ="retro laser gun"
|
||||
icon_state = "retro"
|
||||
desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws."
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/captain
|
||||
name = "\improper QSJ-01 premium laser pistol"
|
||||
icon_state = "caplaser"
|
||||
item_state = "caplaser"
|
||||
desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding."
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/mindflayer
|
||||
name = "mind flayer"
|
||||
name = "\improper Mind Flayer"
|
||||
desc = "A prototype weapon recovered from the ruins of Research-Station Epsilon."
|
||||
icon_state = "xray"
|
||||
projectile_type = "/obj/item/projectile/beam/mindflayer"
|
||||
|
||||
@@ -1,25 +1,73 @@
|
||||
/obj/item/weapon/gun/projectile/automatic //Hopefully someone will find a way to make these fire in bursts or something. --Superxpdude
|
||||
name = "prototype SMG"
|
||||
desc = "A lightweight, prototype 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors."
|
||||
icon_state = "saber"
|
||||
/obj/item/weapon/gun/projectile/automatic
|
||||
w_class = 3.0
|
||||
origin_tech = "combat=4;materials=2"
|
||||
automatic = 1
|
||||
mag_type = "/obj/item/ammo_box/magazine/smgm9mm"
|
||||
var/alarmed = 0
|
||||
var/select = 1
|
||||
can_suppress = 1
|
||||
fire_delay = 0
|
||||
isHandgun()
|
||||
return 0
|
||||
burst_size = 3
|
||||
fire_delay = 2
|
||||
action_button_name = "Toggle Firemode"
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/isHandgun()
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/proto
|
||||
name = "\improper Nanotrasen Saber SMG"
|
||||
desc = "A prototype three-round burst 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors."
|
||||
icon_state = "saber"
|
||||
mag_type = "/obj/item/ammo_box/magazine/smgm9mm"
|
||||
origin_tech = "combat=4;materials=2"
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/update_icon()
|
||||
..()
|
||||
overlays.Cut()
|
||||
if(!select)
|
||||
overlays += "[initial(icon_state)]semi"
|
||||
if(select == 1)
|
||||
overlays += "[initial(icon_state)]burst"
|
||||
icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"][silenced ? "-suppressed" : ""]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob, params)
|
||||
if(..() && chambered)
|
||||
alarmed = 0
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(istype(A, /obj/item/ammo_box/magazine))
|
||||
var/obj/item/ammo_box/magazine/AM = A
|
||||
if(istype(AM, text2path(mag_type)))
|
||||
if(magazine)
|
||||
user << "<span class='notice'>You perform a tactical reload on \the [src], replacing the magazine.</span>"
|
||||
magazine.forceMove(get_turf(src.loc))
|
||||
magazine.update_icon()
|
||||
magazine = null
|
||||
else
|
||||
user << "<span class='notice'>You insert the magazine into \the [src].</span>"
|
||||
user.remove_from_mob(AM)
|
||||
magazine = AM
|
||||
magazine.forceMove(src)
|
||||
chamber_round()
|
||||
A.update_icon()
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/ui_action_click()
|
||||
burst_select()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/verb/burst_select()
|
||||
var/mob/living/carbon/human/user = usr
|
||||
select = !select
|
||||
if(!select)
|
||||
burst_size = 1
|
||||
fire_delay = 0
|
||||
user << "<span class='notice'>You switch to semi-automatic.</span>"
|
||||
else
|
||||
burst_size = initial(burst_size)
|
||||
fire_delay = initial(fire_delay)
|
||||
user << "<span class='notice'>You switch to [burst_size] round burst.</span>"
|
||||
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/proc/empty_alarm()
|
||||
if(!chambered && !get_ammo() && !alarmed)
|
||||
@@ -29,13 +77,15 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r
|
||||
name = "syndicate SMG"
|
||||
desc = "A lightweight, bullpup .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
|
||||
name = "\improper C-20r SMG"
|
||||
desc = "A two-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
|
||||
icon_state = "c20r"
|
||||
item_state = "c20r"
|
||||
origin_tech = "combat=5;materials=2;syndicate=8"
|
||||
mag_type = "/obj/item/ammo_box/magazine/smgm45"
|
||||
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
|
||||
fire_delay = 2
|
||||
burst_size = 2
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r/New()
|
||||
..()
|
||||
@@ -52,9 +102,16 @@
|
||||
icon_state = "c20r[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""][chambered ? "" : "-e"][silenced ? "-suppressed" : ""]"
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/mini_uzi
|
||||
name = "\improper 'Type U3' Uzi"
|
||||
desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds."
|
||||
icon_state = "mini-uzi"
|
||||
origin_tech = "combat=5;materials=2;syndicate=8"
|
||||
mag_type = "/obj/item/ammo_box/magazine/uzim9mm"
|
||||
burst_size = 2
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw
|
||||
name = "syndicate LMG"
|
||||
name = "\improper L6 SAW LMG"
|
||||
desc = "A heavily modified 7.62 light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the reciever below the designation."
|
||||
icon_state = "l6closed100"
|
||||
item_state = "l6closedmag"
|
||||
@@ -66,19 +123,17 @@
|
||||
|
||||
var/cover_open = 0
|
||||
can_suppress = 0
|
||||
|
||||
|
||||
|
||||
burst_size = 5
|
||||
fire_delay = 3
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob)
|
||||
cover_open = !cover_open
|
||||
user << "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>"
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon()
|
||||
icon_state = "l6[cover_open ? "open" : "closed"][magazine ? round(magazine.ammo_count() * 2, 25) : "-empty"]"
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays
|
||||
if(cover_open)
|
||||
user << "<span class='notice'>[src]'s cover is open! Close it before firing!</span>"
|
||||
@@ -86,7 +141,6 @@
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_hand(mob/user as mob)
|
||||
if(loc != user)
|
||||
..()
|
||||
@@ -109,111 +163,78 @@
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog
|
||||
name = "syndicate shotgun"
|
||||
desc = "A compact, mag-fed semi-automatic shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines."
|
||||
icon_state = "bulldog"
|
||||
item_state = "bulldog"
|
||||
w_class = 3.0
|
||||
origin_tech = "combat=5;materials=4;syndicate=6"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m12g"
|
||||
fire_sound = 'sound/weapons/Gunshot4.ogg'
|
||||
can_suppress = 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/New()
|
||||
..()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/proc/update_magazine()
|
||||
if(magazine)
|
||||
src.overlays = 0
|
||||
overlays += "[magazine.icon_state]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/update_icon()
|
||||
src.overlays = 0
|
||||
update_magazine()
|
||||
icon_state = "bulldog[chambered ? "" : "-e"]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
|
||||
..()
|
||||
empty_alarm()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c90gl
|
||||
name = "syndicate assault rifle"
|
||||
desc = "A bullpup and compact 5.45x39 assault rifle with a unique toploading design, designated 'C-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off."
|
||||
icon_state = "c90gl"
|
||||
item_state = "c90gl"
|
||||
/obj/item/weapon/gun/projectile/automatic/m90
|
||||
name = "\improper M-90gl Carbine"
|
||||
desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off."
|
||||
icon_state = "m90"
|
||||
item_state = "m90"
|
||||
icon_override = 'icons/mob/in-hand/guns.dmi'
|
||||
origin_tech = "combat=5;materials=2;syndicate=8"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m545"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m556"
|
||||
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
|
||||
action_button_name = "Toggle Grenade Launcher"
|
||||
can_suppress = 0
|
||||
var/select = 1 //1 for boolets, 0 for explosions.
|
||||
var/obj/item/weapon/gun/projectile/revolver/grenadelauncher/underbarrel
|
||||
burst_size = 3
|
||||
fire_delay = 2
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c90gl/New()
|
||||
/obj/item/weapon/gun/projectile/automatic/m90/New()
|
||||
..()
|
||||
underbarrel = new /obj/item/weapon/gun/projectile/revolver/grenadelauncher(src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c90gl/afterattack(var/atom/target, var/mob/living/user, flag, params)
|
||||
if(select)
|
||||
/obj/item/weapon/gun/projectile/automatic/m90/afterattack(var/atom/target, var/mob/living/user, flag, params)
|
||||
if(select == 2)
|
||||
underbarrel.afterattack(target, user, flag, params)
|
||||
else
|
||||
..()
|
||||
empty_alarm()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/m90/attackby(var/obj/item/A, mob/user, params)
|
||||
if(istype(A, /obj/item/ammo_casing))
|
||||
if(istype(A, text2path(underbarrel.magazine.ammo_type)))
|
||||
underbarrel.attack_self()
|
||||
underbarrel.attackby(A, user, params)
|
||||
else
|
||||
underbarrel.afterattack(target, user, flag, params)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c90gl/attackby(var/obj/item/A, mob/user, params)
|
||||
if(select)
|
||||
..()
|
||||
else
|
||||
underbarrel.attackby(A, user, params)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c90gl/attack_self(var/mob/living/user)
|
||||
if(select)
|
||||
..()
|
||||
else
|
||||
underbarrel.attack_self(user)
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c90gl/update_icon()
|
||||
/obj/item/weapon/gun/projectile/automatic/m90/update_icon()
|
||||
..()
|
||||
overlays.Cut()
|
||||
if(select)
|
||||
overlays += "c90prim"
|
||||
else
|
||||
overlays += "c90gren"
|
||||
icon_state = "c90gl[magazine ? "-[Ceiling(get_ammo(0)/6)*6]" : ""][chambered ? "" : "-e"]"
|
||||
switch(select)
|
||||
if(0)
|
||||
overlays += "[initial(icon_state)]semi"
|
||||
if(1)
|
||||
overlays += "[initial(icon_state)]burst"
|
||||
if(2)
|
||||
overlays += "[initial(icon_state)]gren"
|
||||
icon_state = "[initial(icon_state)][magazine ? "" : "-e"]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c90gl/proc/underbarrel_swap()
|
||||
/obj/item/weapon/gun/projectile/automatic/m90/burst_select()
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if(select)
|
||||
select = 0
|
||||
user << "<span class='notice'>You switch to grenades.</span>"
|
||||
else
|
||||
select = 1
|
||||
user << "<span class='notice'>You switch to bullets.</span>"
|
||||
|
||||
switch(select)
|
||||
if(0)
|
||||
select = 1
|
||||
burst_size = initial(burst_size)
|
||||
fire_delay = initial(fire_delay)
|
||||
user << "<span class='notice'>You switch to [burst_size] round burst.</span>"
|
||||
if(1)
|
||||
select = 2
|
||||
user << "<span class='notice'>You switch to grenades.</span>"
|
||||
if(2)
|
||||
select = 0
|
||||
burst_size = 1
|
||||
fire_delay = 0
|
||||
user << "<span class='notice'>You switch to semi-auto.</span>"
|
||||
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c90gl/ui_action_click()
|
||||
underbarrel_swap()
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/tommygun
|
||||
name = "tommy gun"
|
||||
name = "\improper Thompson SMG"
|
||||
desc = "A genuine 'Chicago Typewriter'."
|
||||
icon_state = "tommygun"
|
||||
item_state = "tommygun"
|
||||
@@ -221,4 +242,20 @@
|
||||
origin_tech = "combat=5;materials=1;syndicate=2"
|
||||
mag_type = "/obj/item/ammo_box/magazine/tommygunm45"
|
||||
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
|
||||
can_suppress = 0
|
||||
can_suppress = 0
|
||||
fire_delay = 1
|
||||
burst_size = 4
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/ar
|
||||
name = "ARG"
|
||||
desc = "A robust assault rile used by Nanotrasen fighting forces."
|
||||
icon_state = "arg"
|
||||
item_state = "arg"
|
||||
slot_flags = 0
|
||||
origin_tech = "combat=5;materials=1"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m556"
|
||||
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
|
||||
can_suppress = 0
|
||||
burst_size = 3
|
||||
fire_delay = 1
|
||||
|
||||
@@ -3,14 +3,17 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/gyropistol
|
||||
name = "gyrojet pistol"
|
||||
name = "\improper Gyrojet rocket pistol"
|
||||
desc = "A prototype pistol designed to fire self propelled rockets."
|
||||
icon_state = "gyropistol"
|
||||
fire_sound = 'sound/effects/Explosion1.ogg'
|
||||
origin_tech = "combat=3"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m75"
|
||||
isHandgun()
|
||||
return 1
|
||||
burst_size = 1
|
||||
fire_delay = 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/gyropistol/isHandgun()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/gyropistol/New()
|
||||
..()
|
||||
@@ -36,6 +39,7 @@
|
||||
icon_state = "dshotgun-sawn"
|
||||
item_state = "gun"
|
||||
mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher"
|
||||
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
||||
w_class = 3
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/grenadelauncher/attackby(var/obj/item/A, mob/user, params)
|
||||
|
||||
@@ -1,56 +1,50 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol
|
||||
name = "syndicate pistol"
|
||||
name = "\improper FK-69 pistol"
|
||||
desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors."
|
||||
icon_state = "pistol"
|
||||
w_class = 2
|
||||
origin_tech = "combat=2;materials=2;syndicate=2"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m10mm"
|
||||
can_suppress = 1
|
||||
isHandgun()
|
||||
return 1
|
||||
burst_size = 1
|
||||
fire_delay = 0
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/isHandgun()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"][silenced ? "-suppressed" : ""]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/m2411
|
||||
name = "M2411"
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/m2411
|
||||
name = "\improper M2411 pistol"
|
||||
desc = "John Browning's classic updated for the modern day. Uses .45 rounds."
|
||||
icon_state = "m2411"
|
||||
w_class = 3.0
|
||||
origin_tech = "combat=3;materials=2"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m45"
|
||||
isHandgun()
|
||||
return 1
|
||||
can_suppress = 0
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/m2411/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle
|
||||
name = "desert eagle"
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/deagle
|
||||
name = "\improper Desert Eagle pistol"
|
||||
desc = "A robust .50 AE handgun."
|
||||
icon_state = "deagle"
|
||||
force = 14.0
|
||||
mag_type = "/obj/item/ammo_box/magazine/m50"
|
||||
isHandgun()
|
||||
return 1
|
||||
can_suppress = 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle/update_icon()
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/deagle/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)][magazine ? "" : "-e"]"
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle/gold
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/deagle/gold
|
||||
desc = "A gold plated desert eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo."
|
||||
icon_state = "deagleg"
|
||||
item_state = "deagleg"
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/deagle/camo
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/deagle/camo
|
||||
desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE ammo."
|
||||
icon_state = "deaglecamo"
|
||||
item_state = "deagleg"
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/weapon/gun/projectile/revolver
|
||||
name = "\improper .357 revolver"
|
||||
desc = "A suspicious revolver. Uses .357 ammo."
|
||||
name = "revolver"
|
||||
icon_state = "revolver"
|
||||
mag_type = "/obj/item/ammo_box/magazine/internal/cylinder"
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
usr << "[get_ammo(0,0)] of those are live rounds."
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/detective
|
||||
name = "\improper .38 Mars Special"
|
||||
desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds."
|
||||
name = "revolver"
|
||||
icon_state = "detective"
|
||||
@@ -154,8 +155,8 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/mateba
|
||||
name = "autorevolver"
|
||||
desc = "A retro high-powered mateba autorevolver typically used by officers of the New Russia military. Uses .357 ammo." //>10mm hole >.357
|
||||
name = "\improper Unica 6 auto-revolver"
|
||||
desc = "A retro high-powered autorevolver typically used by officers of the New Russia military. Uses .357 ammo." //>10mm hole >.357
|
||||
icon_state = "mateba"
|
||||
origin_tech = "combat=2;materials=2"
|
||||
|
||||
@@ -163,7 +164,7 @@
|
||||
// You can spin the chamber to randomize the position of the bullet.
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/russian
|
||||
name = "Russian Revolver"
|
||||
name = "\improper Russian Revolver"
|
||||
desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism that spins the chamber before each trigger pull."
|
||||
origin_tech = "combat=2;materials=2"
|
||||
mag_type = "/obj/item/ammo_box/magazine/internal/cylinder/rus357"
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
///////////////////////
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/boltaction
|
||||
name = "bolt action rifle"
|
||||
name = "\improper Mosin Nagant rifle"
|
||||
desc = "This piece of junk looks like something that could have been used 700 years ago."
|
||||
icon_state = "moistnugget"
|
||||
item_state = "moistnugget"
|
||||
@@ -237,3 +237,40 @@
|
||||
return
|
||||
else
|
||||
sawn_state = SAWN_INTACT
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog
|
||||
name = "\improper MLG-12 'Bulldog' Shotgun"
|
||||
desc = "A compact, mag-fed semi-automatic shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines."
|
||||
icon_state = "bulldog"
|
||||
item_state = "bulldog"
|
||||
icon_override = 'icons/mob/in-hand/guns.dmi'
|
||||
w_class = 3.0
|
||||
origin_tech = "combat=5;materials=4;syndicate=6"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m12g"
|
||||
fire_sound = 'sound/weapons/Gunshot4.ogg'
|
||||
can_suppress = 0
|
||||
burst_size = 1
|
||||
fire_delay = 0
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New()
|
||||
..()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/proc/update_magazine()
|
||||
if(magazine)
|
||||
overlays.Cut()
|
||||
overlays += "[magazine.icon_state]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/update_icon()
|
||||
overlays.Cut()
|
||||
update_magazine()
|
||||
icon_state = "bulldog[chambered ? "" : "-e"]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag)
|
||||
..()
|
||||
empty_alarm()
|
||||
return
|
||||
|
||||
@@ -628,6 +628,7 @@ atom/proc/create_reagents(var/max_vol)
|
||||
reagents.my_atom = src
|
||||
|
||||
/datum/reagents/Destroy()
|
||||
..()
|
||||
processing_objects.Remove(src)
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
qdel(R)
|
||||
@@ -635,4 +636,4 @@ atom/proc/create_reagents(var/max_vol)
|
||||
reagent_list = null
|
||||
if(my_atom && my_atom.reagents == src)
|
||||
my_atom.reagents = null
|
||||
return ..()
|
||||
return QDEL_HINT_QUEUE
|
||||
@@ -1,188 +1,149 @@
|
||||
// These can only be applied by blobs. They are what blobs are made out of.
|
||||
// The 4 damage
|
||||
/datum/reagent/blob
|
||||
description = ""
|
||||
var/message = "The blob strikes you" //message sent to any mob hit by the blob
|
||||
var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt
|
||||
|
||||
/datum/reagent/blob/boiling_oil
|
||||
/datum/reagent/blob/reaction_mob(mob/living/M, method=TOUCH, volume, show_message, touch_protection)
|
||||
return round(volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume.
|
||||
|
||||
/datum/reagent/blob/ripping_tendrils //does brute and a little stamina damage
|
||||
name = "Ripping Tendrils"
|
||||
id = "ripping_tendrils"
|
||||
color = "#7F0000"
|
||||
message_living = ", and you feel your skin ripping and tearing off"
|
||||
|
||||
/datum/reagent/blob/ripping_tendrils/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
volume = ..()
|
||||
M.apply_damage(0.6*volume, BRUTE)
|
||||
M.adjustStaminaLoss(0.4*volume)
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/boiling_oil //sets you on fire, does burn damage
|
||||
name = "Boiling Oil"
|
||||
id = "boiling_oil"
|
||||
description = ""
|
||||
color = "#B68D00"
|
||||
message = "The blob splashes you with burning oil"
|
||||
message_living = ", and you feel your skin char and melt"
|
||||
|
||||
/datum/reagent/blob/boiling_oil/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BURN)
|
||||
M.adjust_fire_stacks(2*ratio)
|
||||
M.adjust_fire_stacks(round(volume/12))
|
||||
volume = ..()
|
||||
M.apply_damage(0.6*volume, BURN)
|
||||
M.IgniteMob()
|
||||
if(isliving(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/toxic_goop
|
||||
name = "Toxic Goop"
|
||||
id = "toxic_goop"
|
||||
description = ""
|
||||
color = "#008000"
|
||||
/datum/reagent/blob/envenomed_filaments //toxin, hallucination, and some bonus spore toxin
|
||||
name = "Envenomed Filaments"
|
||||
id = "envenomed_filaments"
|
||||
color = "#9ACD32"
|
||||
message_living = ", and you feel sick and nauseated"
|
||||
|
||||
/datum/reagent/blob/toxic_goop/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
/datum/reagent/blob/envenomed_filaments/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20*ratio, TOX)
|
||||
volume = ..()
|
||||
M.apply_damage(0.6*volume, TOX)
|
||||
M.hallucination += 0.6*volume
|
||||
M.reagents.add_reagent("spores", 0.4*volume)
|
||||
|
||||
/datum/reagent/blob/skin_ripper
|
||||
name = "Skin Ripper"
|
||||
id = "skin_ripper"
|
||||
description = ""
|
||||
color = "#FF4C4C"
|
||||
message_living = ", and you feel your skin ripping and tearing off"
|
||||
|
||||
/datum/reagent/blob/skin_ripper/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20*ratio, BRUTE)
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
// Combo Reagents
|
||||
|
||||
/datum/reagent/blob/skin_melter
|
||||
name = "Skin Melter"
|
||||
id = "skin_melter"
|
||||
description = ""
|
||||
color = "#7F0000"
|
||||
message_living = ", and you feel your skin char and melt"
|
||||
|
||||
/datum/reagent/blob/skin_melter/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(10*ratio, BRUTE)
|
||||
M.apply_damage(10*ratio, BURN)
|
||||
M.adjust_fire_stacks(2*ratio)
|
||||
M.IgniteMob()
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/lung_destroying_toxin
|
||||
name = "Lung Destroying Toxin"
|
||||
id = "lung_destroying_toxin"
|
||||
description = ""
|
||||
/datum/reagent/blob/lexorin_jelly //does tons of oxygen damage and a little brute
|
||||
name = "Lexorin Jelly"
|
||||
id = "lexorin_jelly"
|
||||
color = "#00FFC5"
|
||||
message_living = ", and your lungs feel heavy and weak"
|
||||
|
||||
/datum/reagent/blob/lung_destroying_toxin/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
/datum/reagent/blob/lexorin_jelly/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20* ratio, OXY)
|
||||
M.losebreath += 15*ratio
|
||||
M.apply_damage(20*ratio, TOX)
|
||||
volume = ..()
|
||||
M.apply_damage(0.4*volume, BRUTE)
|
||||
M.apply_damage(1*volume, OXY)
|
||||
M.losebreath += round(0.3*volume)
|
||||
|
||||
// Special Reagents
|
||||
|
||||
/datum/reagent/blob/radioactive_liquid
|
||||
name = "Radioactive Liquid"
|
||||
id = "radioactive_liquid"
|
||||
description = ""
|
||||
color = "#00EE00"
|
||||
message_living = ", and your skin feels papery and everything hurts"
|
||||
/datum/reagent/blob/kinetic //does semi-random brute damage
|
||||
name = "Kinetic Gelatin"
|
||||
id = "kinetic"
|
||||
color = "#FFA500"
|
||||
message = "The blob pummels you"
|
||||
|
||||
/datum/reagent/blob/radioactive_liquid/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
/datum/reagent/blob/kinetic/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(10*ratio, BRUTE)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
M.apply_effect(40*ratio,IRRADIATE,0)
|
||||
if(prob(33*ratio))
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
domutcheck(M, null)
|
||||
M.UpdateAppearance()
|
||||
volume = ..()
|
||||
var/damage = rand(5, 35)/25
|
||||
M.apply_damage(damage*volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/cryogenic_liquid //does low burn damage and stamina damage and cools targets down
|
||||
name = "Cryogenic Liquid"
|
||||
id = "cryogenic_liquid"
|
||||
color = "#8BA6E9"
|
||||
message = "The blob splashes you with an icy liquid"
|
||||
message_living = ", and you feel cold and tired"
|
||||
|
||||
/datum/reagent/blob/cryogenic_liquid/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
volume = ..()
|
||||
M.apply_damage(0.4*volume, BURN)
|
||||
M.adjustStaminaLoss(0.4*volume)
|
||||
M.reagents.add_reagent("frostoil", 0.4*volume)
|
||||
|
||||
/datum/reagent/blob/dark_matter
|
||||
name = "Dark Matter"
|
||||
id = "dark_matter"
|
||||
description = ""
|
||||
color = "#61407E"
|
||||
message = "You feel a thrum as the blob strikes you, and everything flies at you"
|
||||
|
||||
/datum/reagent/blob/dark_matter/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BRUTE)
|
||||
reagent_vortex(M, 0)
|
||||
reagent_vortex(M, 0, volume)
|
||||
volume = ..()
|
||||
M.apply_damage(0.6*volume, BRUTE)
|
||||
|
||||
|
||||
/datum/reagent/blob/b_sorium
|
||||
name = "Sorium"
|
||||
id = "b_sorium"
|
||||
description = ""
|
||||
color = "#808000"
|
||||
message = "The blob slams into you, and sends you flying"
|
||||
|
||||
/datum/reagent/blob/b_sorium/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BRUTE)
|
||||
reagent_vortex(M, 1)
|
||||
reagent_vortex(M, 1, volume)
|
||||
volume = ..()
|
||||
M.apply_damage(0.6*volume, BRUTE)
|
||||
|
||||
|
||||
/datum/reagent/blob/explosive // I'm gonna burn in hell for this one
|
||||
name = "Explosive Gelatin"
|
||||
id = "explosive"
|
||||
description = ""
|
||||
color = "#FFA500"
|
||||
message = "The blob strikes you, and its tendrils explode"
|
||||
|
||||
/datum/reagent/blob/explosive/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
if(prob(75*ratio))
|
||||
explosion(M.loc, 0, 0, 1, 0, 0)
|
||||
|
||||
/datum/reagent/blob/omnizine
|
||||
name = "Omnizine"
|
||||
id = "b_omnizine"
|
||||
description = ""
|
||||
color = "#C8A5DC"
|
||||
message = "The blob squirts something at you"
|
||||
message_living = ", and you feel great"
|
||||
|
||||
/datum/reagent/blob/omnizine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.reagents.add_reagent("omnizine", 11*ratio)
|
||||
|
||||
/datum/reagent/blob/spacedrugs
|
||||
name = "Space drugs"
|
||||
id = "b_space_drugs"
|
||||
description = ""
|
||||
color = "#60A584"
|
||||
message = "The blob squirts something at you"
|
||||
message_living = ", and you feel funny"
|
||||
|
||||
/datum/reagent/blob/spacedrugs/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.hallucination += 20*ratio
|
||||
M.reagents.add_reagent("space_drugs", 15*ratio)
|
||||
M.apply_damage(10*ratio, TOX)
|
||||
|
||||
|
||||
/datum/reagent/blob/proc/reagent_vortex(var/mob/living/M as mob, var/setting_type)
|
||||
/datum/reagent/blob/proc/reagent_vortex(mob/living/M, setting_type, volume)
|
||||
var/turf/pull = get_turf(M)
|
||||
for(var/atom/movable/X in range(4,pull))
|
||||
if(istype(X, /atom/movable))
|
||||
if((X) && !X.anchored)
|
||||
if(setting_type)
|
||||
step_away(X,pull)
|
||||
step_away(X,pull)
|
||||
step_away(X,pull)
|
||||
step_away(X,pull)
|
||||
var/range_power = Clamp(round(volume/5, 1), 1, 5)
|
||||
for(var/atom/movable/X in range(range_power,pull))
|
||||
if(istype(X, /obj/effect))
|
||||
continue
|
||||
if(!X.anchored)
|
||||
var/distance = get_dist(X, pull)
|
||||
var/moving_power = max(range_power - distance, 1)
|
||||
spawn(0)
|
||||
if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown
|
||||
if(setting_type)
|
||||
var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull)))
|
||||
var/throw_range = 5 - distance
|
||||
X.throw_at(throw_target, throw_range, 1)
|
||||
else
|
||||
X.throw_at(pull, distance, 1)
|
||||
else
|
||||
X.throw_at(pull)
|
||||
if(setting_type)
|
||||
for(var/i = 0, i < moving_power, i++)
|
||||
sleep(2)
|
||||
if(!step_away(X, pull))
|
||||
break
|
||||
else
|
||||
for(var/i = 0, i < moving_power, i++)
|
||||
sleep(2)
|
||||
if(!step_towards(X, pull))
|
||||
break
|
||||
|
||||
/datum/reagent/blob/proc/send_message(var/mob/living/M as mob)
|
||||
var/totalmessage = message
|
||||
|
||||
@@ -214,11 +214,12 @@
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
|
||||
O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
|
||||
sleep(50)
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
|
||||
M.bodytemperature -= 140
|
||||
M << "\blue You feel a chill!"
|
||||
spawn(50)
|
||||
if(holder && holder.my_atom)
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
|
||||
M.bodytemperature -= 140
|
||||
M << "\blue You feel a chill!"
|
||||
|
||||
//Orange
|
||||
slimecasp
|
||||
@@ -242,10 +243,11 @@
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
|
||||
O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
|
||||
sleep(50)
|
||||
var/turf/simulated/T = get_turf(holder.my_atom)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50)
|
||||
spawn(50)
|
||||
if(holder && holder.my_atom)
|
||||
var/turf/simulated/T = get_turf(holder.my_atom)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50)
|
||||
|
||||
//Yellow
|
||||
slimeoverload
|
||||
@@ -387,8 +389,9 @@
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
|
||||
O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
|
||||
sleep(50)
|
||||
explosion(get_turf(holder.my_atom), 1 ,3, 6)
|
||||
spawn(50)
|
||||
if(holder && holder.my_atom)
|
||||
explosion(get_turf(holder.my_atom), 1 ,3, 6)
|
||||
//Light Pink
|
||||
slimepotion2
|
||||
name = "Slime Potion 2"
|
||||
|
||||
@@ -78,5 +78,6 @@
|
||||
return
|
||||
|
||||
/datum/reagent/Destroy()
|
||||
..()
|
||||
holder = null
|
||||
return ..()
|
||||
return QDEL_HINT_QUEUE
|
||||
@@ -405,7 +405,7 @@
|
||||
color = "#9ACD32"
|
||||
|
||||
/datum/reagent/spores/on_mob_life(var/mob/living/M as mob)
|
||||
M.adjustToxLoss(0.5)
|
||||
M.adjustToxLoss(1)
|
||||
M.damageoverlaytemp = 60
|
||||
M.eye_blurry = max(M.eye_blurry, 3)
|
||||
..()
|
||||
@@ -564,7 +564,7 @@
|
||||
id = "frostoil"
|
||||
description = "A special oil that noticably chills the body. Extraced from Icepeppers."
|
||||
reagent_state = LIQUID
|
||||
color = "#B31008" // rgb: 139, 166, 233
|
||||
color = "#8BA6E9" // rgb: 139, 166, 233
|
||||
process_flags = ORGANIC | SYNTHETIC
|
||||
|
||||
/datum/reagent/frostoil/on_mob_life(var/mob/living/M as mob)
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
force = 14
|
||||
throwforce = 10
|
||||
amount_per_transfer_from_this = 20
|
||||
materials = list(MAT_GOLD=800)
|
||||
materials = list(MAT_GOLD=1000)
|
||||
possible_transfer_amounts = null
|
||||
volume = 150
|
||||
flags = CONDUCT | OPENCONTAINER
|
||||
@@ -358,14 +358,14 @@
|
||||
name = "Captain's Flask"
|
||||
desc = "A metal flask belonging to the captain"
|
||||
icon_state = "flask"
|
||||
materials = list(MAT_SILVER=300)
|
||||
materials = list(MAT_SILVER=500)
|
||||
volume = 60
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
|
||||
name = "Detective's Flask"
|
||||
desc = "A metal flask with a leather band and golden badge belonging to the detective."
|
||||
icon_state = "detflask"
|
||||
materials = list(MAT_METAL=200)
|
||||
materials = list(MAT_METAL=250)
|
||||
volume = 60
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask
|
||||
|
||||
@@ -26,7 +26,7 @@ Design Guidlines
|
||||
reliability_mod (starts at 0, gets improved through experimentation). Example: PACMAN generator. 79 base reliablity + 6 tech
|
||||
(3 plasmatech, 3 powerstorage) + 0 (since it's completely new) = 85% reliability. Reliability is the chance it works CORRECTLY.
|
||||
- When adding new designs, check rdreadme.dm to see what kind of things have already been made and where new stuff is needed.
|
||||
- A single sheet of anything is 3750 units of material. Materials besides metal/glass require help from other jobs (mining for
|
||||
- A single sheet of anything is 2000 units of material. Materials besides metal/glass require help from other jobs (mining for
|
||||
other types of metals and chemistry for reagents).
|
||||
- Add the AUTOLATHE tag to
|
||||
|
||||
@@ -45,7 +45,7 @@ other types of metals and chemistry for reagents).
|
||||
var/build_path = "" //The file path of the object that gets created
|
||||
var/locked = 0 //If true it will spawn inside a lockbox with currently sec access
|
||||
var/category = null //Primarily used for Mech Fabricators, but can be used for anything
|
||||
|
||||
var/reagents
|
||||
|
||||
//A proc to calculate the reliability of a design based on tech levels and innate modifiers.
|
||||
//Input: A list of /datum/tech; Output: The new reliabilty.
|
||||
|
||||
@@ -947,7 +947,7 @@
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/ddrill
|
||||
req_tech = list("engineering" = 5, "materials" = 5)
|
||||
materials = list(MAT_METAL=10000, MAT_DIAMOND=3750)
|
||||
materials = list(MAT_METAL=10000, MAT_DIAMOND=2000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
id = "drill_diamond"
|
||||
req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 3750) //Yes, a whole diamond is needed.
|
||||
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 2000) //Yes, a whole diamond is needed.
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
|
||||
category = list("Mining")
|
||||
|
||||
@@ -112,19 +112,19 @@
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/smg
|
||||
name = "Prototype Submachine Gun"
|
||||
name = "Nanotrasen Saber SMG"
|
||||
desc = "A prototype weapon made using lightweight materials on a traditional frame, designed to fire standard 9mm rounds."
|
||||
id = "smg"
|
||||
req_tech = list("combat" = 4, "materials" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 8000, MAT_SILVER = 2000, MAT_DIAMOND = 1000)
|
||||
build_path = /obj/item/weapon/gun/projectile/automatic
|
||||
build_path = /obj/item/weapon/gun/projectile/automatic/proto
|
||||
locked = 1
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/mag_smg
|
||||
name = "Prototype Submachine Gun Magazine (9mm)"
|
||||
desc = "A 20-round magazine for the prototype submachine gun."
|
||||
name = "Saber Submachine Gun Magazine (9mm)"
|
||||
desc = "A 20-round magazine for the Saber submachine gun."
|
||||
id = "mag_smg"
|
||||
req_tech = list("combat" = 4, "materials" = 3)
|
||||
build_type = PROTOLATHE
|
||||
|
||||
@@ -13,15 +13,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
icon_state = "protolathe"
|
||||
flags = OPENCONTAINER
|
||||
|
||||
var/max_material_storage = 100000 //All this could probably be done better with a list but meh.
|
||||
var/m_amount = 0.0
|
||||
var/g_amount = 0.0
|
||||
var/gold_amount = 0.0
|
||||
var/silver_amount = 0.0
|
||||
var/plasma_amount = 0.0
|
||||
var/uranium_amount = 0.0
|
||||
var/diamond_amount = 0.0
|
||||
var/clown_amount = 0.0
|
||||
var/datum/material_container/materials
|
||||
var/efficiency_coeff
|
||||
|
||||
var/list/categories = list(
|
||||
@@ -49,6 +41,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null)
|
||||
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null)
|
||||
materials = new(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1))
|
||||
RefreshParts()
|
||||
|
||||
reagents.my_atom = src
|
||||
@@ -67,8 +60,9 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
|
||||
reagents.my_atom = src
|
||||
|
||||
/obj/machinery/r_n_d/protolathe/proc/TotalMaterials() //returns the total of all the stored materials. Makes code neater.
|
||||
return m_amount + g_amount + gold_amount + silver_amount + plasma_amount + uranium_amount + diamond_amount + clown_amount
|
||||
/obj/machinery/r_n_d/protolathe/Destroy()
|
||||
qdel(materials)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/r_n_d/protolathe/RefreshParts()
|
||||
var/T = 0
|
||||
@@ -76,33 +70,16 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
G.reagents.trans_to(src, G.reagents.total_volume)
|
||||
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
|
||||
T += M.rating
|
||||
max_material_storage = T * 75000
|
||||
materials.max_amount = T * 75000
|
||||
T = 0
|
||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||
T += (M.rating/3)
|
||||
efficiency_coeff = max(T, 1)
|
||||
|
||||
/obj/machinery/r_n_d/protolathe/proc/check_mat(datum/design/being_built, var/M) // now returns how many times the item can be built with the material
|
||||
var/A = 0
|
||||
switch(M)
|
||||
if(MAT_METAL)
|
||||
A = m_amount
|
||||
if(MAT_GLASS)
|
||||
A = g_amount
|
||||
if(MAT_GOLD)
|
||||
A = gold_amount
|
||||
if(MAT_SILVER)
|
||||
A = silver_amount
|
||||
if(MAT_PLASMA)
|
||||
A = plasma_amount
|
||||
if(MAT_URANIUM)
|
||||
A = uranium_amount
|
||||
if(MAT_DIAMOND)
|
||||
A = diamond_amount
|
||||
if(MAT_BANANIUM)
|
||||
A = clown_amount
|
||||
else
|
||||
A = reagents.get_reagent_amount(M)
|
||||
var/A = materials.amount(M)
|
||||
if(!A)
|
||||
A = reagents.get_reagent_amount(M)
|
||||
A = A / max(1, (being_built.materials[M]/efficiency_coeff))
|
||||
return A
|
||||
|
||||
@@ -128,30 +105,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
I.loc = src.loc
|
||||
for(var/obj/item/weapon/reagent_containers/glass/G in component_parts)
|
||||
reagents.trans_to(G, G.reagents.maximum_volume)
|
||||
if(m_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc)
|
||||
G.amount = round(m_amount / G.perunit)
|
||||
if(g_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc)
|
||||
G.amount = round(g_amount / G.perunit)
|
||||
if(plasma_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
var/obj/item/stack/sheet/mineral/plasma/G = new /obj/item/stack/sheet/mineral/plasma(src.loc)
|
||||
G.amount = round(plasma_amount / G.perunit)
|
||||
if(silver_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
var/obj/item/stack/sheet/mineral/silver/G = new /obj/item/stack/sheet/mineral/silver(src.loc)
|
||||
G.amount = round(silver_amount / G.perunit)
|
||||
if(gold_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc)
|
||||
G.amount = round(gold_amount / G.perunit)
|
||||
if(uranium_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc)
|
||||
G.amount = round(uranium_amount / G.perunit)
|
||||
if(diamond_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc)
|
||||
G.amount = round(diamond_amount / G.perunit)
|
||||
if(clown_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
var/obj/item/stack/sheet/mineral/bananium/G = new /obj/item/stack/sheet/mineral/bananium(src.loc)
|
||||
G.amount = round(clown_amount / G.perunit)
|
||||
materials.retrieve_all()
|
||||
default_deconstruction_crowbar(O)
|
||||
return 1
|
||||
else
|
||||
@@ -167,55 +121,29 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
return 1
|
||||
if (O.is_open_container())
|
||||
return
|
||||
if (!istype(O, /obj/item/stack/sheet) || istype(O, /obj/item/stack/sheet/wood))
|
||||
user << "<span class='warning'>You cannot insert this item into the [src.name]!</span>"
|
||||
return 1
|
||||
if (stat)
|
||||
return 1
|
||||
if(istype(O,/obj/item/stack/sheet))
|
||||
var/obj/item/stack/sheet/S = O
|
||||
if (TotalMaterials() + S.perunit > max_material_storage)
|
||||
user << "<span class='warning'>The [src.name]'s material bin is full. Please remove material before adding more.</span>"
|
||||
return 1
|
||||
if(!istype(O,/obj/item/stack/sheet))
|
||||
return 1
|
||||
|
||||
if(!materials.has_space( materials.get_item_material_amount(O) ))
|
||||
user << "<span class='warning'>The [src.name]'s material bin is full! Please remove material before adding more.</span>"
|
||||
return 1
|
||||
|
||||
var/obj/item/stack/sheet/stack = O
|
||||
var/amount = round(input("How many sheets do you want to add?") as num)//No decimals
|
||||
if(!stack || stack.amount <= 0 || amount <= 0)
|
||||
if(!in_range(src, stack) || !user.Adjacent(src))
|
||||
return
|
||||
if(amount > stack.amount)
|
||||
amount = stack.amount
|
||||
if(max_material_storage - TotalMaterials() < (amount*stack.perunit))//Can't overfill
|
||||
amount = min(stack.amount, round((max_material_storage-TotalMaterials())/stack.perunit))
|
||||
|
||||
icon_state = "protolathe"
|
||||
busy = 1
|
||||
use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount/10)))
|
||||
user << "<span class='notice'>You add [amount] sheets to the [src.name].</span>"
|
||||
icon_state = "protolathe"
|
||||
if(istype(stack, /obj/item/stack/sheet/metal))
|
||||
m_amount += amount * MINERAL_MATERIAL_AMOUNT
|
||||
else if(istype(stack, /obj/item/stack/sheet/glass))
|
||||
g_amount += amount * MINERAL_MATERIAL_AMOUNT
|
||||
else if(istype(stack, /obj/item/stack/sheet/mineral/gold))
|
||||
gold_amount += amount * MINERAL_MATERIAL_AMOUNT
|
||||
else if(istype(stack, /obj/item/stack/sheet/mineral/silver))
|
||||
silver_amount += amount * MINERAL_MATERIAL_AMOUNT
|
||||
else if(istype(stack, /obj/item/stack/sheet/mineral/plasma))
|
||||
plasma_amount += amount * MINERAL_MATERIAL_AMOUNT
|
||||
else if(istype(stack, /obj/item/stack/sheet/mineral/uranium))
|
||||
uranium_amount += amount * MINERAL_MATERIAL_AMOUNT
|
||||
else if(istype(stack, /obj/item/stack/sheet/mineral/diamond))
|
||||
diamond_amount += amount * MINERAL_MATERIAL_AMOUNT
|
||||
else if(istype(stack, /obj/item/stack/sheet/mineral/bananium))
|
||||
clown_amount += amount * MINERAL_MATERIAL_AMOUNT
|
||||
stack.use(amount)
|
||||
busy = 0
|
||||
src.updateUsrDialog()
|
||||
|
||||
if(stack)
|
||||
var/amount_inserted = materials.insert_stack(O,amount)
|
||||
if(!amount_inserted)
|
||||
return 1
|
||||
else
|
||||
busy = 1
|
||||
use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount_inserted/10)))
|
||||
user << "<span class='notice'>You add [amount_inserted] sheets to the [src.name].</span>"
|
||||
var/stackname = stack.name
|
||||
src.overlays += "protolathe_[stackname]"
|
||||
sleep(10)
|
||||
src.overlays -= "protolathe_[stackname]"
|
||||
|
||||
return
|
||||
busy = 0
|
||||
updateUsrDialog()
|
||||
@@ -297,8 +297,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
else //Same design always gain quality
|
||||
screen = 2.3 //Crit fail gives the same design a lot of reliability, like really a lot
|
||||
if(linked_lathe) //Also sends salvaged materials to a linked protolathe, if any.
|
||||
linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_METAL]*(linked_destroy.decon_mod/10)))
|
||||
linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_GLASS]*(linked_destroy.decon_mod/10)))
|
||||
for(var/material in linked_destroy.loaded_item.materials)
|
||||
linked_lathe.materials.insert_amount(min((linked_lathe.materials.max_amount - linked_lathe.materials.total_amount), (linked_destroy.loaded_item.materials[material]*(linked_destroy.decon_mod/10))), material)
|
||||
linked_destroy.loaded_item = null
|
||||
else
|
||||
screen = 1.0
|
||||
@@ -397,33 +397,17 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
flick("protolathe_n",linked_lathe)
|
||||
use_power(power)
|
||||
|
||||
for(var/M in being_built.materials)
|
||||
if(linked_lathe.check_mat(being_built, M) < amount)
|
||||
src.visible_message("<span class='notice'>The [src.name] beeps, \"Not enough materials to complete prototype.\"</span>")
|
||||
enough_materials = 0
|
||||
g2g = 0
|
||||
break
|
||||
var/list/efficient_mats = list()
|
||||
for(var/MAT in being_built.materials)
|
||||
efficient_mats[MAT] = being_built.materials[MAT] / coeff
|
||||
|
||||
if(!linked_lathe.materials.has_materials(efficient_mats, amount))
|
||||
src.visible_message("<span class='notice'>The [src.name] beeps, \"Not enough materials to complete prototype.\"</span>")
|
||||
enough_materials = 0
|
||||
g2g = 0
|
||||
|
||||
if(enough_materials)
|
||||
for(var/M in being_built.materials)
|
||||
switch(M)
|
||||
if(MAT_METAL)
|
||||
linked_lathe.m_amount = max(0, (linked_lathe.m_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if(MAT_GLASS)
|
||||
linked_lathe.g_amount = max(0, (linked_lathe.g_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if(MAT_GOLD)
|
||||
linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if(MAT_SILVER)
|
||||
linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if(MAT_PLASMA)
|
||||
linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if(MAT_URANIUM)
|
||||
linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if(MAT_DIAMOND)
|
||||
linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if(MAT_BANANIUM)
|
||||
linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-(being_built.materials[M]/coeff * amount)))
|
||||
else
|
||||
linked_lathe.reagents.remove_reagent(M, being_built.materials[M]/coeff * amount)
|
||||
linked_lathe.materials.use_amount(efficient_mats, amount)
|
||||
|
||||
var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes.
|
||||
var/O = being_built.locked
|
||||
@@ -513,40 +497,26 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
|
||||
else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material
|
||||
var/desired_num_sheets = text2num(href_list["lathe_ejectsheet_amt"])
|
||||
var/res_amount, type
|
||||
var/MAT
|
||||
switch(href_list["lathe_ejectsheet"])
|
||||
if("metal")
|
||||
type = /obj/item/stack/sheet/metal
|
||||
res_amount = "m_amount"
|
||||
MAT = MAT_METAL
|
||||
if("glass")
|
||||
type = /obj/item/stack/sheet/glass
|
||||
res_amount = "g_amount"
|
||||
MAT = MAT_GLASS
|
||||
if("gold")
|
||||
type = /obj/item/stack/sheet/mineral/gold
|
||||
res_amount = "gold_amount"
|
||||
MAT = MAT_GOLD
|
||||
if("silver")
|
||||
type = /obj/item/stack/sheet/mineral/silver
|
||||
res_amount = "silver_amount"
|
||||
MAT = MAT_SILVER
|
||||
if("plasma")
|
||||
type = /obj/item/stack/sheet/mineral/plasma
|
||||
res_amount = "plasma_amount"
|
||||
MAT = MAT_PLASMA
|
||||
if("uranium")
|
||||
type = /obj/item/stack/sheet/mineral/uranium
|
||||
res_amount = "uranium_amount"
|
||||
MAT = MAT_URANIUM
|
||||
if("diamond")
|
||||
type = /obj/item/stack/sheet/mineral/diamond
|
||||
res_amount = "diamond_amount"
|
||||
MAT = MAT_DIAMOND
|
||||
if("clown")
|
||||
type = /obj/item/stack/sheet/mineral/bananium
|
||||
res_amount = "clown_amount"
|
||||
if(ispath(type) && hasvar(linked_lathe, res_amount))
|
||||
var/obj/item/stack/sheet/sheet = new type(linked_lathe.loc)
|
||||
var/available_num_sheets = round(linked_lathe.vars[res_amount]/sheet.perunit)
|
||||
if(available_num_sheets>0)
|
||||
sheet.amount = min(available_num_sheets, desired_num_sheets)
|
||||
linked_lathe.vars[res_amount] = max(0, (linked_lathe.vars[res_amount]-sheet.amount * sheet.perunit))
|
||||
else
|
||||
qdel(sheet)
|
||||
MAT = MAT_BANANIUM
|
||||
linked_lathe.materials.retrieve_sheets(desired_num_sheets, MAT)
|
||||
|
||||
else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material
|
||||
var/desired_num_sheets = text2num(href_list["imprinter_ejectsheet_amt"])
|
||||
var/res_amount, type
|
||||
@@ -836,7 +806,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "<A href='?src=\ref[src];menu=3.2'>Material Storage</A>"
|
||||
dat += "<A href='?src=\ref[src];menu=3.3'>Chemical Storage</A><div class='statusDisplay'>"
|
||||
dat += "<h3>Protolathe Menu:</h3><BR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]<BR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]<BR>"
|
||||
dat += "<B>Chemical Volume:</B> [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]<BR>"
|
||||
|
||||
dat += "<form name='search' action='?src=\ref[src]'> \
|
||||
@@ -854,7 +824,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
dat += "<A href='?src=\ref[src];menu=3.1'>Protolathe Menu</A>"
|
||||
dat += "<div class='statusDisplay'><h3>Browsing [selected_category]:</h3><BR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]<BR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]<BR>"
|
||||
dat += "<B>Chemical Volume:</B> [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]<HR>"
|
||||
|
||||
var/coeff = linked_lathe.efficiency_coeff
|
||||
@@ -891,7 +861,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
dat += "<A href='?src=\ref[src];menu=3.1'>Protolathe Menu</A>"
|
||||
dat += "<div class='statusDisplay'><h3>Search results:</h3><BR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]<BR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]<BR>"
|
||||
dat += "<B>Chemical Volume:</B> [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]<HR>"
|
||||
|
||||
var/coeff = linked_lathe.efficiency_coeff
|
||||
@@ -925,52 +895,60 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "<A href='?src=\ref[src];menu=3.1'>Protolathe Menu</A><div class='statusDisplay'>"
|
||||
dat += "<h3>Material Storage:</h3><BR><HR>"
|
||||
//Metal
|
||||
dat += "* [linked_lathe.m_amount] of Metal: "
|
||||
if(linked_lathe.m_amount >= 3750) dat += "<A href='?src=\ref[src];lathe_ejectsheet=metal;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_lathe.m_amount >= 18750) dat += "<A href='?src=\ref[src];lathe_ejectsheet=metal;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_lathe.m_amount >= 3750) dat += "<A href='?src=\ref[src];lathe_ejectsheet=metal;lathe_ejectsheet_amt=50'>All</A>"
|
||||
var/m_amount = linked_lathe.materials.amount(MAT_METAL)
|
||||
dat += "* [m_amount] of Metal: "
|
||||
if(m_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=metal;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(m_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=metal;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(m_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=metal;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Glass
|
||||
dat += "* [linked_lathe.g_amount] of Glass: "
|
||||
if(linked_lathe.g_amount >= 3750) dat += "<A href='?src=\ref[src];lathe_ejectsheet=glass;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_lathe.g_amount >= 18750) dat += "<A href='?src=\ref[src];lathe_ejectsheet=glass;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_lathe.g_amount >= 3750) dat += "<A href='?src=\ref[src];lathe_ejectsheet=glass;lathe_ejectsheet_amt=50'>All</A>"
|
||||
var/g_amount = linked_lathe.materials.amount(MAT_GLASS)
|
||||
dat += "* [g_amount] of Glass: "
|
||||
if(g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=glass;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(g_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=glass;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=glass;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Gold
|
||||
dat += "* [linked_lathe.gold_amount] of Gold: "
|
||||
if(linked_lathe.gold_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=gold;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_lathe.gold_amount >= 10000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=gold;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_lathe.gold_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=gold;lathe_ejectsheet_amt=50'>All</A>"
|
||||
var/gold_amount = linked_lathe.materials.amount(MAT_GOLD)
|
||||
dat += "* [gold_amount] of Gold: "
|
||||
if(gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=gold;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(gold_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=gold;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=gold;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Silver
|
||||
dat += "* [linked_lathe.silver_amount] of Silver: "
|
||||
if(linked_lathe.silver_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=silver;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_lathe.silver_amount >= 10000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=silver;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_lathe.silver_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=silver;lathe_ejectsheet_amt=50'>All</A>"
|
||||
var/silver_amount = linked_lathe.materials.amount(MAT_SILVER)
|
||||
dat += "* [silver_amount] of Silver: "
|
||||
if(silver_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=silver;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(silver_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=silver;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(silver_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=silver;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Plasma
|
||||
dat += "* [linked_lathe.plasma_amount] of Solid Plasma: "
|
||||
if(linked_lathe.plasma_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=plasma;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_lathe.plasma_amount >= 10000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=plasma;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_lathe.plasma_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=plasmalathe_ejectsheet_amt=50'>All</A>"
|
||||
var/plasma_amount = linked_lathe.materials.amount(MAT_PLASMA)
|
||||
dat += "* [plasma_amount] of Solid Plasma: "
|
||||
if(plasma_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=plasma;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(plasma_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=plasma;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(plasma_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=plasmalathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Uranium
|
||||
dat += "* [linked_lathe.uranium_amount] of Uranium: "
|
||||
if(linked_lathe.uranium_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=uranium;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_lathe.uranium_amount >= 10000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=uranium;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_lathe.uranium_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=uranium;lathe_ejectsheet_amt=50'>All</A>"
|
||||
var/uranium_amount = linked_lathe.materials.amount(MAT_URANIUM)
|
||||
dat += "* [uranium_amount] of Uranium: "
|
||||
if(uranium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=uranium;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(uranium_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=uranium;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(uranium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=uranium;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Diamond
|
||||
dat += "* [linked_lathe.diamond_amount] of Diamond: "
|
||||
if(linked_lathe.diamond_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=diamond;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_lathe.diamond_amount >= 10000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=diamond;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_lathe.diamond_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=diamond;lathe_ejectsheet_amt=50'>All</A>"
|
||||
var/diamond_amount = linked_lathe.materials.amount(MAT_DIAMOND)
|
||||
dat += "* [diamond_amount] of Diamond: "
|
||||
if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=diamond;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(diamond_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=diamond;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=diamond;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Bananium
|
||||
dat += "* [linked_lathe.clown_amount] of Bananium: "
|
||||
if(linked_lathe.clown_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=clown;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_lathe.clown_amount >= 10000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=clown;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_lathe.clown_amount >= 2000) dat += "<A href='?src=\ref[src];lathe_ejectsheet=clown;lathe_ejectsheet_amt=50'>All</A>"
|
||||
var/bananium_amount = linked_lathe.materials.amount(MAT_BANANIUM)
|
||||
dat += "* [bananium_amount] of Bananium: "
|
||||
if(bananium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=clown;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
if(bananium_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=clown;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(bananium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=clown;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "</div>"
|
||||
|
||||
if(3.3)
|
||||
@@ -1072,21 +1050,21 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "<h3>Material Storage:</h3><BR><HR>"
|
||||
//Glass
|
||||
dat += "* [linked_imprinter.g_amount] glass: "
|
||||
if(linked_imprinter.g_amount >= 3750) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=glass;imprinter_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_imprinter.g_amount >= 18750) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=glass;imprinter_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_imprinter.g_amount >= 3750) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=glass;imprinter_ejectsheet_amt=50'>All</A>"
|
||||
if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=glass;imprinter_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=glass;imprinter_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=glass;imprinter_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Gold
|
||||
dat += "* [linked_imprinter.gold_amount] gold: "
|
||||
if(linked_imprinter.gold_amount >= 2000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=gold;imprinter_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_imprinter.gold_amount >= 10000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=gold;imprinter_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_imprinter.gold_amount >= 2000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=gold;imprinter_ejectsheet_amt=50'>All</A>"
|
||||
if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=gold;imprinter_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=gold;imprinter_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=gold;imprinter_ejectsheet_amt=50'>All</A>"
|
||||
dat += "<BR>"
|
||||
//Diamond
|
||||
dat += "* [linked_imprinter.diamond_amount] diamond: "
|
||||
if(linked_imprinter.diamond_amount >= 2000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_imprinter.diamond_amount >= 10000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_imprinter.diamond_amount >= 2000) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=50'>All</A>"
|
||||
if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=1'>Eject</A> "
|
||||
if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=5'>5x</A> "
|
||||
if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];imprinter_ejectsheet=diamond;imprinter_ejectsheet_amt=50'>All</A>"
|
||||
dat += "</div>"
|
||||
|
||||
var/datum/browser/popup = new(user, "rndconsole", name, 700, 550)
|
||||
|
||||
Reference in New Issue
Block a user