mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-01-06 07:22:42 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into cosmetic_things
# Conflicts: # icons/mob/back.dmi # icons/mob/items/lefthand.dmi # icons/mob/items/righthand.dmi
This commit is contained in:
@@ -17,7 +17,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
|
||||
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
|
||||
|
||||
handle_spam_prevention(MUTE_ADMINHELP)
|
||||
if(msg)
|
||||
handle_spam_prevention(MUTE_ADMINHELP)
|
||||
|
||||
//clean the input msg
|
||||
if(!msg)
|
||||
|
||||
@@ -565,7 +565,7 @@
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/plain/monocle(M), slot_glasses)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/material/knife(M), slot_l_store)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/surgical/scalpel(M), slot_r_store)
|
||||
|
||||
|
||||
@@ -10,10 +10,11 @@
|
||||
if(!msg) return
|
||||
|
||||
if(usr.client)
|
||||
client.handle_spam_prevention(MUTE_PRAY)
|
||||
if(usr.client.prefs.muted & MUTE_PRAY)
|
||||
usr << "\red You cannot pray (muted)."
|
||||
return
|
||||
if(msg)
|
||||
client.handle_spam_prevention(MUTE_PRAY)
|
||||
if(usr.client.prefs.muted & MUTE_PRAY)
|
||||
usr << "\red You cannot pray (muted)."
|
||||
return
|
||||
|
||||
var/image/cross = image('icons/obj/storage.dmi',"bible")
|
||||
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, src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
|
||||
@@ -32,7 +32,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
|
||||
pref.age = sanitize_integer(pref.age, get_min_age(), get_max_age(), initial(pref.age))
|
||||
pref.biological_gender = sanitize_inlist(pref.biological_gender, get_genders(), pick(get_genders()))
|
||||
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
|
||||
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
||||
pref.real_name = sanitize_name(pref.real_name, pref.species, is_FBP())
|
||||
if(!pref.real_name)
|
||||
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
||||
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
||||
@@ -76,7 +76,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
|
||||
if(href_list["rename"])
|
||||
var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null
|
||||
if (!isnull(raw_name) && CanUseTopic(user))
|
||||
var/new_name = sanitize_name(raw_name, pref.species)
|
||||
var/new_name = sanitize_name(raw_name, pref.species, is_FBP())
|
||||
if(new_name)
|
||||
pref.real_name = new_name
|
||||
return TOPIC_REFRESH
|
||||
|
||||
@@ -218,7 +218,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
++ind
|
||||
if(ind > 1)
|
||||
. += ", "
|
||||
. += "\tSynthetic [organ_name]"
|
||||
switch(organ_name)
|
||||
if ("brain")
|
||||
. += "\tPositronic [organ_name]"
|
||||
else
|
||||
. += "\tSynthetic [organ_name]"
|
||||
else if(status == "digital")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
@@ -607,15 +611,23 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
organ = O_LUNGS
|
||||
if("Brain")
|
||||
if(pref.organ_data[BP_HEAD] != "cyborg")
|
||||
user << "<span class='warning'>You may only select an assisted or synthetic brain if you have a full prosthetic body.</span>"
|
||||
user << "<span class='warning'>You may only select a cybernetic or synthetic brain if you have a full prosthetic body.</span>"
|
||||
return
|
||||
organ = "brain"
|
||||
|
||||
var/list/organ_choices = list("Normal","Assisted","Mechanical")
|
||||
var/list/organ_choices = list("Normal")
|
||||
if(pref.organ_data[BP_TORSO] == "cyborg")
|
||||
organ_choices -= "Normal"
|
||||
if(organ_name == "Brain")
|
||||
organ_choices += "Digital"
|
||||
organ_choices += "Cybernetic"
|
||||
organ_choices += "Positronic"
|
||||
organ_choices += "Drone"
|
||||
else
|
||||
organ_choices += "Assisted"
|
||||
organ_choices += "Mechanical"
|
||||
else
|
||||
organ_choices += "Assisted"
|
||||
organ_choices += "Mechanical"
|
||||
|
||||
var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in organ_choices
|
||||
if(!new_state) return
|
||||
@@ -625,10 +637,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.organ_data[organ] = null
|
||||
if("Assisted")
|
||||
pref.organ_data[organ] = "assisted"
|
||||
if("Mechanical")
|
||||
if("Cybernetic")
|
||||
pref.organ_data[organ] = "assisted"
|
||||
if ("Mechanical")
|
||||
pref.organ_data[organ] = "mechanical"
|
||||
if("Digital")
|
||||
if("Drone")
|
||||
pref.organ_data[organ] = "digital"
|
||||
if("Positronic")
|
||||
pref.organ_data[organ] = "mechanical"
|
||||
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["disabilities"])
|
||||
@@ -654,6 +671,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
while(null in pref.rlimb_data)
|
||||
pref.rlimb_data -= null
|
||||
|
||||
// Sanitize the name so that there aren't any numbers sticking around.
|
||||
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
||||
if(!pref.real_name)
|
||||
pref.real_name = random_name(pref.identifying_gender, pref.species)
|
||||
|
||||
/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
|
||||
if(!pref.species_preview || !(pref.species_preview in all_species))
|
||||
pref.species_preview = "Human"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Suit slot
|
||||
/datum/gear/suit
|
||||
display_name = "apron, blue"
|
||||
path = /obj/item/clothing/suit/apron
|
||||
path = /obj/item/clothing/suit/storage/apron
|
||||
slot = slot_wear_suit
|
||||
sort_category = "Suits and Overwear"
|
||||
cost = 2
|
||||
@@ -158,7 +158,7 @@
|
||||
|
||||
/datum/gear/suit/overalls
|
||||
display_name = "overalls"
|
||||
path = /obj/item/clothing/suit/apron/overalls
|
||||
path = /obj/item/clothing/suit/storage/apron/overalls
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/poncho
|
||||
|
||||
56
code/modules/clothing/head/flowercrowns.dm
Normal file
56
code/modules/clothing/head/flowercrowns.dm
Normal file
@@ -0,0 +1,56 @@
|
||||
/obj/item/clothing/head/woodcirclet
|
||||
name = "wood circlet"
|
||||
desc = "A small wood circlet for making a flower crown."
|
||||
icon_state = "woodcirclet"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/woodcirclet/attackby(obj/item/W as obj, mob/user as mob)
|
||||
var/obj/item/complete
|
||||
if(istype(W,/obj/item/seeds/poppyseed))
|
||||
user << "You attach the poppy to the circlet and create a beautiful flower crown."
|
||||
complete = new /obj/item/clothing/head/poppy_crown(get_turf(user))
|
||||
user.drop_from_inventory(W)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
user.put_in_hands(complete)
|
||||
return
|
||||
else if(istype(W,/obj/item/seeds/sunflowerseed))
|
||||
user << "You attach the sunflower to the circlet and create a beautiful flower crown."
|
||||
complete = new /obj/item/clothing/head/sunflower_crown(get_turf(user))
|
||||
user.drop_from_inventory(W)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
user.put_in_hands(complete)
|
||||
return
|
||||
else if(istype(W,/obj/item/seeds/lavenderseed))
|
||||
user << "You attach the lavender to the circlet and create a beautiful flower crown."
|
||||
complete = new /obj/item/clothing/head/lavender_crown(get_turf(user))
|
||||
user.drop_from_inventory(W)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
user.put_in_hands(complete)
|
||||
return
|
||||
|
||||
//Flower crowns
|
||||
|
||||
/obj/item/clothing/head/sunflower_crown
|
||||
name = "sunflower crown"
|
||||
desc = "A flower crown weaved with sunflowers."
|
||||
icon_state = "sunflower_crown"
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/lavender_crown
|
||||
name = "lavender crown"
|
||||
desc = "A flower crown weaved with lavender."
|
||||
icon_state = "lavender_crown"
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/poppy_crown
|
||||
name = "poppy crown"
|
||||
desc = "A flower crown weaved with poppies."
|
||||
icon_state = "poppy_crown"
|
||||
body_parts_covered = 0
|
||||
@@ -346,25 +346,4 @@
|
||||
name = "sombrero"
|
||||
desc = "A wide-brimmed hat popularly worn in Mexico."
|
||||
icon_state = "sombrero"
|
||||
body_parts_covered = 0
|
||||
|
||||
|
||||
//Flower crowns
|
||||
|
||||
/obj/item/clothing/head/sunflower_crown
|
||||
name = "sunflower crown"
|
||||
desc = "A flower crown weaved with sunflowers."
|
||||
icon_state = "sunflower_crown"
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/lavender_crown
|
||||
name = "lavender crown"
|
||||
desc = "A flower crown weaved with lavender."
|
||||
icon_state = "lavender_crown"
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/poppy_crown
|
||||
name = "poppy crown"
|
||||
desc = "A flower crown weaved with poppies."
|
||||
icon_state = "poppy_crown"
|
||||
body_parts_covered = 0
|
||||
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
|
||||
//Botanist
|
||||
/obj/item/clothing/suit/apron
|
||||
/obj/item/clothing/suit/storage/apron
|
||||
name = "apron"
|
||||
desc = "A basic blue apron."
|
||||
icon_state = "apron"
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
name = "red sweatervest"
|
||||
icon_state = "sweatervest_red"
|
||||
*/
|
||||
/obj/item/clothing/suit/apron/overalls
|
||||
/obj/item/clothing/suit/storage/apron/overalls
|
||||
name = "coveralls"
|
||||
desc = "A set of denim overalls."
|
||||
icon_state = "overalls"
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1)
|
||||
recipes += new/datum/stack_recipe("wood circlet", /obj/item/woodcirclet, 1)
|
||||
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1)
|
||||
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1)
|
||||
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
|
||||
@@ -7,10 +7,11 @@
|
||||
log_say("Ghost/[src.key] : [message]")
|
||||
|
||||
if (src.client)
|
||||
client.handle_spam_prevention(MUTE_DEADCHAT)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot talk in deadchat (muted)."
|
||||
return
|
||||
if(message)
|
||||
client.handle_spam_prevention(MUTE_DEADCHAT)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot talk in deadchat (muted)."
|
||||
return
|
||||
|
||||
. = src.say_dead(message)
|
||||
|
||||
@@ -27,10 +28,11 @@
|
||||
log_emote("Ghost/[src.key] : [message]")
|
||||
|
||||
if(src.client)
|
||||
client.handle_spam_prevention(MUTE_DEADCHAT)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot emote in deadchat (muted)."
|
||||
return
|
||||
if(message)
|
||||
client.handle_spam_prevention(MUTE_DEADCHAT)
|
||||
if(src.client.prefs.muted & MUTE_DEADCHAT)
|
||||
src << "\red You cannot emote in deadchat (muted)."
|
||||
return
|
||||
|
||||
. = src.emote_dead(message)
|
||||
|
||||
|
||||
@@ -5,18 +5,70 @@
|
||||
ask_verb = "chimpers"
|
||||
exclaim_verb = "screeches"
|
||||
key = "6"
|
||||
machine_understands = 0
|
||||
|
||||
/datum/language/skrell/monkey
|
||||
name = "Neaera"
|
||||
desc = "Squik squik squik."
|
||||
key = "8"
|
||||
machine_understands = 0
|
||||
|
||||
/datum/language/unathi/monkey
|
||||
name = "Stok"
|
||||
desc = "Hiss hiss hiss."
|
||||
key = "7"
|
||||
machine_understands = 0
|
||||
|
||||
/datum/language/tajaran/monkey
|
||||
name = "Farwa"
|
||||
desc = "Meow meow meow."
|
||||
key = "9"
|
||||
machine_understands = 0
|
||||
|
||||
/datum/language/corgi
|
||||
name = "Dog"
|
||||
desc = "Woof woof woof."
|
||||
speech_verb = "barks"
|
||||
ask_verb = "woofs"
|
||||
exclaim_verb = "howls"
|
||||
key = "n"
|
||||
flags = RESTRICTED
|
||||
machine_understands = 0
|
||||
space_chance = 100
|
||||
syllables = list("bark", "woof", "bowwow", "yap", "arf")
|
||||
|
||||
/datum/language/cat
|
||||
name = "Cat"
|
||||
desc = "Meow meow meow."
|
||||
speech_verb = "meows"
|
||||
ask_verb = "mrowls"
|
||||
exclaim_verb = "yowls"
|
||||
key = "c"
|
||||
flags = RESTRICTED
|
||||
machine_understands = 0
|
||||
space_chance = 100
|
||||
syllables = list("meow", "mrowl", "purr", "meow", "meow", "meow")
|
||||
|
||||
/datum/language/mouse
|
||||
name = "Mouse"
|
||||
desc = "Squeak squeak. *Nibbles on cheese*"
|
||||
speech_verb = "squeaks"
|
||||
ask_verb = "squeaks"
|
||||
exclaim_verb = "squeaks"
|
||||
key = "m"
|
||||
flags = RESTRICTED
|
||||
machine_understands = 0
|
||||
space_chance = 100
|
||||
syllables = list("squeak") // , "gripes", "oi", "meow")
|
||||
|
||||
/datum/language/bird
|
||||
name = "Bird"
|
||||
desc = "Chirp chirp, give me food"
|
||||
speech_verb = "chirps"
|
||||
ask_verb = "tweets"
|
||||
exclaim_verb = "squawks"
|
||||
key = "m"
|
||||
flags = RESTRICTED
|
||||
machine_understands = 0
|
||||
space_chance = 100
|
||||
syllables = list("chirp", "squawk", "tweet")
|
||||
@@ -4,6 +4,7 @@
|
||||
speech_verb = "says"
|
||||
colour = "changeling"
|
||||
key = "g"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
|
||||
@@ -21,6 +22,7 @@
|
||||
exclaim_verb = "sings"
|
||||
colour = "alien"
|
||||
key = "x"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
/datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
|
||||
@@ -80,4 +82,5 @@
|
||||
exclaim_verb = "chants"
|
||||
colour = "cult"
|
||||
key = "y"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
exclaim_verb = "rustles"
|
||||
colour = "soghun"
|
||||
key = "q"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED
|
||||
syllables = list("hs","zt","kr","st","sh")
|
||||
|
||||
@@ -18,6 +19,7 @@
|
||||
name = LANGUAGE_ROOTGLOBAL
|
||||
desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses low frequency waves for slow communication at long ranges."
|
||||
key = "w"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
|
||||
/datum/language/unathi
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
ask_verb = "queries"
|
||||
exclaim_verb = "declares"
|
||||
key = "b"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
var/drone_only
|
||||
|
||||
@@ -64,5 +65,6 @@
|
||||
exclaim_verb = "transmits"
|
||||
colour = "say_quote"
|
||||
key = "d"
|
||||
machine_understands = 0
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
drone_only = 1
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
// Should this all be in Touch()?
|
||||
if(istype(H))
|
||||
if(get_accuracy_penalty(H)) //Should only trigger if they're not aiming well
|
||||
if(get_accuracy_penalty(H) && H != src) //Should only trigger if they're not aiming well
|
||||
var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H))
|
||||
if(!hit_zone)
|
||||
H.do_attack_animation(src)
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
var/tally = 0
|
||||
|
||||
var/item_tally = 0
|
||||
|
||||
if(species.slowdown)
|
||||
tally = species.slowdown
|
||||
|
||||
@@ -33,7 +35,7 @@
|
||||
tally += 1.5
|
||||
else
|
||||
if(shoes)
|
||||
tally += shoes.slowdown
|
||||
item_tally += shoes.slowdown
|
||||
|
||||
for(var/organ_name in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
@@ -50,36 +52,40 @@
|
||||
|
||||
if(FAT in src.mutations)
|
||||
tally += 1.5
|
||||
if (bodytemperature < 283.222)
|
||||
tally += (283.222 - bodytemperature) / 10 * 1.75
|
||||
|
||||
if (bodytemperature < species.cold_level_1)
|
||||
tally += (species.cold_level_1 - bodytemperature) / 10 * 1.75
|
||||
|
||||
tally += max(2 * stance_damage, 0) //damaged/missing feet or legs is slow
|
||||
|
||||
if(mRun in mutations)
|
||||
tally = 0
|
||||
|
||||
if(species.slowdown_fixed)
|
||||
return (tally+config.human_delay)
|
||||
|
||||
// Loop through some slots, and add up their slowdowns. Shoes are handled below, unfortunately.
|
||||
// Includes slots which can provide armor, the back slot, and suit storage.
|
||||
for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store) )
|
||||
tally += I.slowdown
|
||||
for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store))
|
||||
item_tally += I.slowdown
|
||||
|
||||
// Hands are also included, to make the 'take off your armor instantly and carry it with you to go faster' trick no longer viable.
|
||||
// This is done seperately to disallow negative numbers.
|
||||
for(var/obj/item/I in list(r_hand, l_hand) )
|
||||
tally += max(I.slowdown, 0)
|
||||
item_tally += max(I.slowdown, 0)
|
||||
|
||||
// Dragging heavy objects will also slow you down, similar to above.
|
||||
if(pulling && istype(pulling, /obj/item))
|
||||
var/obj/item/pulled = pulling
|
||||
tally += max(pulled.slowdown, 0)
|
||||
item_tally += max(pulled.slowdown, 0)
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(T && T.movement_cost)
|
||||
tally += T.movement_cost
|
||||
|
||||
if(species.item_slowdown_halved)
|
||||
if(item_tally > 0)
|
||||
item_tally *= 0.5
|
||||
|
||||
tally += item_tally
|
||||
|
||||
if(CE_SPEEDBOOST in chem_effects)
|
||||
if (tally >= 0) // cut any penalties in half
|
||||
tally = tally/2
|
||||
|
||||
@@ -352,13 +352,6 @@
|
||||
if(!L.is_bruised() && prob(8))
|
||||
rupture_lung()
|
||||
|
||||
if(should_have_organ("brain"))
|
||||
var/brainOxPercent = 0.02 //Default2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
|
||||
if(CE_STABLE in chem_effects)
|
||||
brainOxPercent = 0.01 //Halved in effect
|
||||
if(prob(5))
|
||||
adjustBrainLoss(brainOxPercent * oxyloss)
|
||||
|
||||
oxygen_alert = max(oxygen_alert, 1)
|
||||
|
||||
return 0
|
||||
@@ -377,8 +370,9 @@
|
||||
safe_pressure_min *= 1.25
|
||||
else if(breath)
|
||||
if(breath.total_moles < BREATH_MOLES / 10 || breath.total_moles > BREATH_MOLES * 5)
|
||||
if (prob(8))
|
||||
rupture_lung()
|
||||
if(is_below_sound_pressure(get_turf(src))) //No more popped lungs from choking/drowning
|
||||
if (prob(8))
|
||||
rupture_lung()
|
||||
|
||||
var/safe_exhaled_max = 10
|
||||
var/safe_toxins_max = 0.2
|
||||
@@ -925,6 +919,14 @@
|
||||
for(var/atom/a in hallucinations)
|
||||
qdel(a)
|
||||
|
||||
//Brain damage from Oxyloss
|
||||
if(should_have_organ("brain"))
|
||||
var/brainOxPercent = 0.02 //Default2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
|
||||
if(CE_STABLE in chem_effects)
|
||||
brainOxPercent = 0.01 //Halved in effect
|
||||
if(oxyloss >= 20 && prob(5))
|
||||
adjustBrainLoss(brainOxPercent * oxyloss)
|
||||
|
||||
if(halloss >= species.total_health)
|
||||
src << "<span class='notice'>You're in too much pain to keep going...</span>"
|
||||
src.visible_message("<B>[src]</B> slumps to the ground, too weak to continue fighting.")
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
var/appearance_flags = 0 // Appearance/display related features.
|
||||
var/spawn_flags = 0 // Flags that specify who can spawn as this species
|
||||
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
|
||||
var/slowdown_fixed = 0 // If this is on, they're not affected by object related slowdown (positive or negative)
|
||||
var/item_slowdown_halved = 0 // If this is on, they're not as affected by item weights for slowdown
|
||||
var/primitive_form // Lesser form, if any (ie. monkey for humans)
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
var/holder_type
|
||||
@@ -194,8 +194,8 @@
|
||||
inherent_verbs = list()
|
||||
inherent_verbs |= /mob/living/carbon/human/proc/regurgitate
|
||||
|
||||
/datum/species/proc/sanitize_name(var/name)
|
||||
return sanitizeName(name)
|
||||
/datum/species/proc/sanitize_name(var/name, var/robot = 0)
|
||||
return sanitizeName(name, MAX_NAME_LEN, robot)
|
||||
|
||||
/datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 1)
|
||||
var/boxtype = /obj/item/weapon/storage/box/survival //Default survival box
|
||||
|
||||
@@ -770,11 +770,6 @@ default behaviour is:
|
||||
if(buckled.buckle_movable)
|
||||
anchored = 0
|
||||
canmove = 1
|
||||
|
||||
else if(captured)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
lying = 0
|
||||
else
|
||||
lying = incapacitated(INCAPACITATION_KNOCKDOWN)
|
||||
canmove = !incapacitated(INCAPACITATION_DISABLED)
|
||||
|
||||
@@ -133,10 +133,11 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0)
|
||||
//If you're muted for IC chat
|
||||
if(client)
|
||||
client.handle_spam_prevention(MUTE_IC)
|
||||
if((client.prefs.muted & MUTE_IC) || say_disabled)
|
||||
src << "<span class='warning'>You cannot speak in IC (Muted).</span>"
|
||||
return
|
||||
if(message)
|
||||
client.handle_spam_prevention(MUTE_IC)
|
||||
if((client.prefs.muted & MUTE_IC) || say_disabled)
|
||||
src << "<span class='warning'>You cannot speak in IC (Muted).</span>"
|
||||
return
|
||||
|
||||
//Redirect to say_dead if talker is dead
|
||||
if(stat)
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
return
|
||||
|
||||
var/deathtime = world.time - src.timeofdeath
|
||||
var/deathtimeminutes = round(deathtime / 300)
|
||||
var/deathtimeminutes = round(deathtime / 600)
|
||||
var/pluralcheck = "minute"
|
||||
if(deathtimeminutes == 0)
|
||||
pluralcheck = ""
|
||||
@@ -122,11 +122,11 @@
|
||||
pluralcheck = " [deathtimeminutes] minute and"
|
||||
else if(deathtimeminutes > 1)
|
||||
pluralcheck = " [deathtimeminutes] minutes and"
|
||||
var/deathtimeseconds = round((deathtime - deathtimeminutes * 300) / 10,1)
|
||||
var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1)
|
||||
|
||||
if (deathtime < 3000)
|
||||
if (deathtime < 6000)
|
||||
usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds."
|
||||
usr << "You must wait 5 minutes to respawn as a drone!"
|
||||
usr << "You must wait 10 minutes to respawn as a drone!"
|
||||
return
|
||||
|
||||
var/list/all_fabricators = list()
|
||||
|
||||
@@ -18,7 +18,7 @@ var/global/list/robot_modules = list(
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "std_module"
|
||||
w_class = ITEMSIZE_NO_CONTAINER
|
||||
item_state = "electronic"
|
||||
item_state = "std_mod"
|
||||
flags = CONDUCT
|
||||
var/hide_on_manifest = 0
|
||||
var/channels = list()
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
has_langs = list("Mouse")
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
|
||||
var/mob/living/owner
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
holder_type = /obj/item/weapon/holder/cat
|
||||
mob_size = MOB_SMALL
|
||||
|
||||
has_langs = list("Cat")
|
||||
speak_chance = 1
|
||||
speak = list("Meow!","Esp!","Purr!","HSSSSS")
|
||||
speak_emote = list("purrs", "meows")
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
see_in_dark = 5
|
||||
mob_size = 8
|
||||
|
||||
has_langs = list("Dog")
|
||||
speak_chance = 1
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
|
||||
speak_emote = list("barks", "woofs")
|
||||
|
||||
@@ -167,6 +167,7 @@
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicked"
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 2
|
||||
speak = list("Cherp.","Cherp?","Chirrup.","Cheep!")
|
||||
speak_emote = list("cheeps")
|
||||
@@ -213,6 +214,7 @@ var/global/chicken_count = 0
|
||||
response_harm = "kicks"
|
||||
attacktext = "kicked"
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 2
|
||||
speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.")
|
||||
speak_emote = list("clucks","croons")
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "fish"
|
||||
desc = "Its a fishy. No touchy fishy."
|
||||
icon = 'icons/mob/fish.dmi'
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
|
||||
// By defautl they can be in any water turf. Subtypes might restrict to deep/shallow etc
|
||||
var/global/list/suitable_turf_types = list(
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 10
|
||||
speak = list("HONK!")
|
||||
emote_hear = list("honks loudly!")
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||
maxbodytemp = 323 //Above 50 Degrees Celcius
|
||||
|
||||
has_langs = list("Mouse")
|
||||
speak_chance = 1
|
||||
speak = list("Squeek!","SQUEEK!","Squeek?")
|
||||
speak_emote = list("squeeks","squeeks","squiks")
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
stop_automated_movement = 1
|
||||
universal_speak = 1
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 2
|
||||
speak = list("Hi","Hello!","Cracker?","BAWWWWK george mellons griffing me")
|
||||
speak_emote = list("squawks","says","yells")
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
melee_damage_upper = 15
|
||||
attacktext = "pecked"
|
||||
|
||||
has_langs = list("Bird")
|
||||
speak_chance = 0
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
|
||||
@@ -271,21 +271,31 @@
|
||||
update_icon()
|
||||
|
||||
ai_log("Life() - stance=[stance] ai_inactive=[ai_inactive]", 4)
|
||||
//Movement
|
||||
if(!ai_inactive && !stop_automated_movement && wander && !anchored) //Allowed to move?
|
||||
handle_wander_movement()
|
||||
|
||||
//Speaking
|
||||
if(!ai_inactive && speak_chance && stance == STANCE_IDLE) // Allowed to chatter?
|
||||
handle_idle_speaking()
|
||||
|
||||
//Stanceyness
|
||||
//AI Actions
|
||||
if(!ai_inactive)
|
||||
//Stanceyness
|
||||
handle_stance()
|
||||
|
||||
//Resisting out of things
|
||||
if(!ai_inactive && incapacitated(INCAPACITATION_DEFAULT) && stance != STANCE_IDLE)
|
||||
resist()
|
||||
//Movement
|
||||
if(!stop_automated_movement && wander && !anchored) //Allowed to move?
|
||||
handle_wander_movement()
|
||||
|
||||
//Speaking
|
||||
if(speak_chance && stance == STANCE_IDLE) // Allowed to chatter?
|
||||
handle_idle_speaking()
|
||||
|
||||
//Resisting out buckles
|
||||
if(stance != STANCE_IDLE && incapacitated(INCAPACITATION_BUCKLED_PARTIALLY))
|
||||
resist()
|
||||
|
||||
//Resisting out of closets
|
||||
if(istype(loc,/obj/structure/closet))
|
||||
var/obj/structure/closet/C = loc
|
||||
if(C.welded)
|
||||
resist()
|
||||
else
|
||||
C.open()
|
||||
|
||||
return 1
|
||||
|
||||
@@ -807,12 +817,17 @@
|
||||
|
||||
//Someone wants help?
|
||||
/mob/living/simple_animal/proc/HelpRequested(var/mob/living/simple_animal/F)
|
||||
if(!(stance == STANCE_IDLE) || stat)
|
||||
if(target_mob || stat)
|
||||
ai_log("HelpRequested() by [F] but we're busy/dead",2)
|
||||
return
|
||||
if(get_dist(src,F) <= follow_dist)
|
||||
ai_log("HelpRequested() by [F] but we're already here",2)
|
||||
return
|
||||
if(get_dist(src,F) <= view_range)
|
||||
ai_log("HelpRequested() by [F] and within targetshare range",2)
|
||||
if(F.target_mob && set_target(F.target_mob))
|
||||
handle_stance(STANCE_ATTACK)
|
||||
return
|
||||
|
||||
if(set_follow(F, 10 SECONDS))
|
||||
handle_stance(STANCE_FOLLOW)
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1)
|
||||
usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds."
|
||||
|
||||
if (deathtime < (5 * 600))
|
||||
if ((deathtime < (5 * 600)) && (ticker && ticker.current_state > GAME_STATE_PREGAME))
|
||||
usr << "You must wait 5 minutes to respawn!"
|
||||
return
|
||||
else
|
||||
|
||||
@@ -153,7 +153,6 @@
|
||||
var/voice_name = "unidentifiable voice"
|
||||
|
||||
var/faction = "neutral" //Used for checking whether hostile simple animals will attack you, possibly more stuff later
|
||||
var/captured = 0 //Functionally, should give the same effect as being buckled into a chair when true. Only used by energy nets, TODO replace with buckling
|
||||
|
||||
//Generic list for proc holders. Only way I can see to enable certain verbs/procs. Should be modified if needed.
|
||||
var/proc_holder_list[] = list()//Right now unused.
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
if(hit_zone == O_EYES)
|
||||
attack_eye(affecting, assailant)
|
||||
else if(hit_zone == BP_HEAD)
|
||||
headbut(affecting, assailant)
|
||||
headbutt(affecting, assailant)
|
||||
else
|
||||
dislocate(affecting, assailant, hit_zone)
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
attack.handle_eye_attack(attacker, target)
|
||||
|
||||
/obj/item/weapon/grab/proc/headbut(mob/living/carbon/human/target, mob/living/carbon/human/attacker)
|
||||
/obj/item/weapon/grab/proc/headbutt(mob/living/carbon/human/target, mob/living/carbon/human/attacker)
|
||||
if(!istype(attacker))
|
||||
return
|
||||
if(target.lying)
|
||||
|
||||
@@ -1025,9 +1025,13 @@
|
||||
icon_state = "tat_campbell"
|
||||
body_parts = list(BP_R_ARM)
|
||||
|
||||
left
|
||||
name = "Tattoo (Campbell, L.Arm)"
|
||||
body_parts = list(BP_L_ARM)
|
||||
|
||||
tat_tiger
|
||||
name = "Tattoo (Tiger Stripes, Body)"
|
||||
icon_state = "tat_campbell"
|
||||
icon_state = "tat_tiger"
|
||||
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN)
|
||||
|
||||
taj_paw_socks
|
||||
|
||||
@@ -1127,7 +1127,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
return !(status & (ORGAN_MUTATED|ORGAN_DEAD))
|
||||
|
||||
/obj/item/organ/external/proc/is_malfunctioning()
|
||||
return ((robotic >= ORGAN_ROBOT) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam))
|
||||
return ((robotic >= ORGAN_ROBOT) && (brute_dam + burn_dam) >= 25 && prob(brute_dam + burn_dam))
|
||||
|
||||
/obj/item/organ/external/proc/embed(var/obj/item/weapon/W, var/silent = 0)
|
||||
if(!owner || loc != owner)
|
||||
|
||||
@@ -5,9 +5,6 @@
|
||||
/obj/item/weapon/cell/New()
|
||||
..()
|
||||
charge = maxcharge
|
||||
|
||||
/obj/item/weapon/cell/initialize()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/power = 0)
|
||||
|
||||
@@ -31,6 +31,10 @@
|
||||
projectile_type = /obj/item/projectile/ion/small
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
|
||||
|
||||
/*
|
||||
* 9mm
|
||||
*/
|
||||
|
||||
/obj/item/ammo_casing/c9mm
|
||||
desc = "A 9mm bullet casing."
|
||||
caliber = "9mm"
|
||||
@@ -65,6 +69,10 @@
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/ap
|
||||
*/
|
||||
|
||||
/*
|
||||
* 45 ammo
|
||||
*/
|
||||
|
||||
/obj/item/ammo_casing/c45
|
||||
desc = "A .45 bullet casing."
|
||||
caliber = ".45"
|
||||
@@ -101,6 +109,15 @@
|
||||
icon_state = "empcasing"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
|
||||
|
||||
/obj/item/ammo_casing/c45/hp
|
||||
desc = "A .45 hollow-point bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/medium/hollow
|
||||
|
||||
|
||||
/*
|
||||
* 10mm
|
||||
*/
|
||||
|
||||
/obj/item/ammo_casing/a10mm
|
||||
desc = "A 10mm bullet casing."
|
||||
caliber = "10mm"
|
||||
@@ -113,6 +130,10 @@
|
||||
icon_state = "empcasing"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
|
||||
|
||||
/*
|
||||
* Shotguns
|
||||
*/
|
||||
|
||||
/obj/item/ammo_casing/shotgun
|
||||
name = "shotgun slug"
|
||||
desc = "A 12 gauge slug."
|
||||
@@ -178,6 +199,10 @@
|
||||
// projectile_type = /obj/item/projectile/bullet/shotgun/ion
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 360, "uranium" = 240)
|
||||
|
||||
/*
|
||||
* 762mm
|
||||
*/
|
||||
|
||||
/obj/item/ammo_casing/a762
|
||||
desc = "A 7.62mm bullet casing."
|
||||
caliber = "a762"
|
||||
@@ -199,6 +224,12 @@
|
||||
projectile_type = /obj/item/projectile/bullet/blank
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 90)
|
||||
|
||||
/obj/item/ammo_casing/a762/hp
|
||||
desc = "A 7.62mm hollow-point bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a762/hollow
|
||||
|
||||
//145mm
|
||||
|
||||
/obj/item/ammo_casing/a145
|
||||
desc = "A 14.5mm shell."
|
||||
icon_state = "lcasing"
|
||||
@@ -206,6 +237,10 @@
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a145
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1250)
|
||||
|
||||
/*
|
||||
* 556mm
|
||||
*/
|
||||
|
||||
/obj/item/ammo_casing/a556
|
||||
desc = "A 5.56mm bullet casing."
|
||||
caliber = "a556"
|
||||
@@ -222,6 +257,14 @@
|
||||
icon_state = "rifle-casing" // Need to make an icon for these
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/practice
|
||||
|
||||
/obj/item/ammo_casing/a556/hp
|
||||
desc = "A 5.56mm hollow-point bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a556/hollow
|
||||
|
||||
/*
|
||||
* Misc
|
||||
*/
|
||||
|
||||
/obj/item/ammo_casing/rocket
|
||||
name = "rocket shell"
|
||||
desc = "A high explosive designed to be fired from a launcher."
|
||||
|
||||
@@ -225,9 +225,32 @@
|
||||
light_power = 0.5
|
||||
light_color = "#00C6FF"
|
||||
|
||||
//----------------------------
|
||||
// Dark matter stun
|
||||
//----------------------------
|
||||
|
||||
/obj/effect/projectile/darkmatterstun/tracer
|
||||
icon_state = "darkt"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#8837A3"
|
||||
|
||||
/obj/effect/projectile/darkmatterstun/muzzle
|
||||
icon_state = "muzzle_darkt"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#8837A3"
|
||||
|
||||
/obj/effect/projectile/darkmatterstun/impact
|
||||
icon_state = "impact_darkt"
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#8837A3"
|
||||
|
||||
//----------------------------
|
||||
// Dark matter
|
||||
//----------------------------
|
||||
|
||||
/obj/effect/projectile/darkmatter/tracer
|
||||
icon_state = "darkb"
|
||||
light_range = 2
|
||||
|
||||
@@ -114,4 +114,93 @@
|
||||
recoil = 2 // ow my fucking hand
|
||||
accuracy = -1 // smooth bore + short barrel = shit accuracy
|
||||
ammo_type = /obj/item/ammo_casing/shotgun
|
||||
// ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it.
|
||||
// ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it.
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/lemat
|
||||
name = "LeMat Revolver"
|
||||
desc = "The LeMat Revolver is a 9 shot revolver with a secondary firing barrel loading shotgun shells. For when you really need something dead."
|
||||
icon_state = "lemat"
|
||||
item_state = "revolver"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
handle_casings = CYCLE_CASINGS
|
||||
max_shells = 9
|
||||
caliber = "38"
|
||||
ammo_type = /obj/item/ammo_casing/c38
|
||||
var/secondary_max_shells = 1
|
||||
var/secondary_caliber = "shotgun"
|
||||
var/secondary_ammo_type = /obj/item/ammo_casing/shotgun
|
||||
var/flipped_firing = 0
|
||||
var/list/secondary_loaded = list()
|
||||
var/list/tertiary_loaded = list()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/lemat/New()
|
||||
for(var/i in 1 to secondary_max_shells)
|
||||
secondary_loaded += new secondary_ammo_type(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/lemat/verb/swap_firingmode()
|
||||
set name = "Swap Firing Mode"
|
||||
set category = "Object"
|
||||
set desc = "Click to swap from one method of firing to another."
|
||||
|
||||
var/mob/living/carbon/human/M = usr
|
||||
if(!M.mind)
|
||||
return 0
|
||||
|
||||
to_chat(M, "<span class='notice'>You change the firing mode on \the [src].</span>")
|
||||
if(!flipped_firing)
|
||||
if(max_shells && secondary_max_shells)
|
||||
max_shells = secondary_max_shells
|
||||
|
||||
if(caliber && secondary_caliber)
|
||||
caliber = secondary_caliber
|
||||
|
||||
if(ammo_type && secondary_ammo_type)
|
||||
ammo_type = secondary_ammo_type
|
||||
|
||||
if(secondary_loaded)
|
||||
tertiary_loaded = loaded.Copy()
|
||||
loaded = secondary_loaded
|
||||
|
||||
flipped_firing = 1
|
||||
|
||||
else
|
||||
if(max_shells)
|
||||
max_shells = initial(max_shells)
|
||||
|
||||
if(caliber && secondary_caliber)
|
||||
caliber = initial(caliber)
|
||||
|
||||
if(ammo_type && secondary_ammo_type)
|
||||
ammo_type = initial(ammo_type)
|
||||
|
||||
if(tertiary_loaded)
|
||||
secondary_loaded = loaded.Copy()
|
||||
loaded = tertiary_loaded
|
||||
|
||||
flipped_firing = 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/lemat/spin_cylinder()
|
||||
set name = "Spin cylinder"
|
||||
set desc = "Fun when you're bored out of your skull."
|
||||
set category = "Object"
|
||||
|
||||
chamber_offset = 0
|
||||
visible_message("<span class='warning'>\The [usr] spins the cylinder of \the [src]!</span>", \
|
||||
"<span class='notice'>You hear something metallic spin and click.</span>")
|
||||
playsound(src.loc, 'sound/weapons/revolver_spin.ogg', 100, 1)
|
||||
if(!flipped_firing)
|
||||
loaded = shuffle(loaded)
|
||||
if(rand(1,max_shells) > loaded.len)
|
||||
chamber_offset = rand(0,max_shells - loaded.len)
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/lemat/examine(mob/user)
|
||||
..()
|
||||
if(secondary_loaded)
|
||||
var/to_print
|
||||
for(var/round in secondary_loaded)
|
||||
to_print += round
|
||||
to_chat(user, "\The [src] has a secondary barrel loaded with \a [to_print]")
|
||||
else
|
||||
to_chat(user, "\The [src] has a secondary barrel that is empty.")
|
||||
|
||||
@@ -58,16 +58,30 @@
|
||||
item_state = "darkcannon"
|
||||
fire_sound = 'sound/weapons/eLuger.ogg'
|
||||
w_class = ITEMSIZE_HUGE
|
||||
charge_cost = 600
|
||||
projectile_type = /obj/item/projectile/beam/darkmatter
|
||||
charge_cost = 300
|
||||
projectile_type = /obj/item/projectile/beam/stun/darkmatter
|
||||
self_recharge = 1
|
||||
accuracy = 2
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stunning", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(2), dispersion=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 300),
|
||||
list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(2), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 600),
|
||||
list(mode_name="scatter burst", burst=8, fire_delay=null, move_delay=4, burst_accuracy=list(0, 0, 0, 0, 0, 0, 0, 0), dispersion=list(3, 3, 3, 3, 3, 3, 3, 3, 3), projectile_type=/obj/item/projectile/energy/darkmatter, charge_cost = 300),
|
||||
)
|
||||
|
||||
/obj/item/projectile/beam/stun/darkmatter
|
||||
name = "dark matter wave"
|
||||
icon_state = "darkt"
|
||||
nodamage = 1
|
||||
taser_effect = 1
|
||||
agony = 55
|
||||
damage_type = HALLOSS
|
||||
light_color = "#8837A3"
|
||||
|
||||
muzzle_type = /obj/effect/projectile/darkmatterstun/muzzle
|
||||
tracer_type = /obj/effect/projectile/darkmatterstun/tracer
|
||||
impact_type = /obj/effect/projectile/darkmatterstun/impact
|
||||
|
||||
/obj/item/projectile/beam/darkmatter
|
||||
name = "dark matter bolt"
|
||||
icon_state = "darkb"
|
||||
@@ -107,33 +121,29 @@
|
||||
self_recharge = 1
|
||||
charge_cost = 600
|
||||
|
||||
projectile_type=/obj/item/projectile/sonic/strong
|
||||
projectile_type=/obj/item/projectile/sonic/weak
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="suppressive", projectile_type=/obj/item/projectile/sonic/weak, charge_cost = 200),
|
||||
list(mode_name="normal", projectile_type=/obj/item/projectile/sonic/strong, charge_cost = 600),
|
||||
list(mode_name="suppressive", projectile_type=/obj/item/projectile/sonic/weak, charge_cost = 300),
|
||||
)
|
||||
|
||||
/obj/item/projectile/sonic
|
||||
name = "sonic pulse"
|
||||
icon_state = "sound"
|
||||
damage = 15
|
||||
damage = 5
|
||||
armor_penetration = 30
|
||||
damage_type = BRUTE
|
||||
check_armour = "melee"
|
||||
embed_chance = 0
|
||||
vacuum_traversal = 0
|
||||
|
||||
// var/amplitude = 10 //Roughly how loud it is, changes the way damage will work, and such
|
||||
|
||||
/obj/item/projectile/sonic/weak
|
||||
agony = 30
|
||||
agony = 50
|
||||
|
||||
/obj/item/projectile/sonic/strong
|
||||
damage = 45
|
||||
|
||||
//Already have thoughts on how to improve this, will take a day or two after initial testing. - Anewbe
|
||||
|
||||
/obj/item/projectile/sonic/strong/on_hit(var/atom/movable/target, var/blocked = 0)
|
||||
if(ismob(target))
|
||||
var/throwdir = get_dir(firer,target)
|
||||
|
||||
@@ -137,6 +137,10 @@
|
||||
damage = 20
|
||||
armor_penetration = 15
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium/hollow
|
||||
damage = 30
|
||||
armor_penetration = -50
|
||||
|
||||
/obj/item/projectile/bullet/pistol/strong //revolvers and matebas
|
||||
damage = 60
|
||||
|
||||
@@ -200,6 +204,11 @@
|
||||
damage = 20
|
||||
armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds.
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/hollow
|
||||
damage = 35
|
||||
armor_penetration = -50
|
||||
penetrating = 0
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a556
|
||||
damage = 35
|
||||
|
||||
@@ -207,6 +216,11 @@
|
||||
damage = 30
|
||||
armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds.
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a556/hollow
|
||||
damage = 40
|
||||
armor_penetration = -50
|
||||
penetrating = 0
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a145
|
||||
damage = 80
|
||||
stun = 3
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
name = "Carthatoline"
|
||||
id = "carthatoline"
|
||||
result = "carthatoline"
|
||||
required_reagents = list("dylovene" = 1, "carbon" = 2, "phoron" = 0.1)
|
||||
required_reagents = list("anti_toxin" = 1, "carbon" = 2, "phoron" = 0.1)
|
||||
catalysts = list("phoron" = 1)
|
||||
result_amount = 2
|
||||
|
||||
@@ -1840,4 +1840,4 @@
|
||||
id = "berrytea"
|
||||
result = "berrytea"
|
||||
required_reagents = list("tea" = 5, "berryjuice" = 1)
|
||||
result_amount = 6
|
||||
result_amount = 6
|
||||
|
||||
Reference in New Issue
Block a user