Merge remote-tracking branch 'upstream/master' into more-reagents

This commit is contained in:
Fox-McCloud
2015-04-07 01:15:06 -04:00
67 changed files with 482 additions and 210 deletions
+44
View File
@@ -60,6 +60,7 @@ var/list/admin_verbs_admin = list(
/client/proc/toggledrones,
/client/proc/man_up,
/client/proc/global_man_up,
/client/proc/write_RD_json,
/client/proc/delbook,
/client/proc/empty_ai_core_toggle_latejoin,
/client/proc/freeze,
@@ -686,3 +687,46 @@ var/list/admin_verbs_mentor = list(
log_admin("[key_name(usr)] told everyone to man up and deal with it.")
message_admins("\blue [key_name_admin(usr)] told everyone to man up and deal with it.", 1)
/client/proc/object_classes_to_origin_tech()
usr << "Creating origin classes..."
var/list/result = list()
for (var/C in (typesof(/obj)-/obj))
usr << "Processing... [C]"
if (initial(C:origin_tech))
var/list/origin_tech = params2list(initial(C:origin_tech))
for (var/t in origin_tech)
origin_tech[t]=text2num(origin_tech[t])
result[C]=list("tech"=origin_tech,"name"=initial(C:name))
return result
/client/proc/list_of_build_machines(var/C)
var/build_type=initial(C:build_type)
var/list/result=list()
result["IMPRINTER"]=(build_type & IMPRINTER) ? 1 : 0
result["PROTOLATHE"]=(build_type & PROTOLATHE) ? 1 : 0
result["AUTOLATHE"]=(build_type & AUTOLATHE) ? 1 : 0
result["CRAFTLATHE"]=(build_type & CRAFTLATHE) ? 1 : 0
result["MECHFAB"]=(build_type & MECHFAB) ? 1 : 0
result["PODFAB"]=(build_type & PODFAB) ? 1 : 0
return result
/client/proc/design_classes_to_materials_and_origin()
usr << "Creating designs..."
var/list/result=list()
for (var/C in (typesof(/datum/design)-/datum/design))
var/datum/design/instance = new C()
usr << "Processing... [C]"
result[C]=list("materials"=instance.materials,"requires"=instance.req_tech,"lockbox"=instance.locked,"builds"=instance.build_path,"machines"=list_of_build_machines(C))
instance.Del()
return result
/client/proc/write_RD_json()
set category = "Debug"
set name = "Write RD Json"
set desc = "Writes a json file describing the R&D components."
text2file(list2json(list("objects"=object_classes_to_origin_tech(),"designs"=design_classes_to_materials_and_origin())),"data/origin_data.txt")
+2
View File
@@ -104,6 +104,8 @@
dat += {"
<B>Fun Secrets</B><BR>
<BR>
<A href='?src=\ref[src];secretsfun=tdomestart'>Start a Thunderdome match</A><BR>
<A href='?src=\ref[src];secretsfun=tdomereset'>Reset Thunderdome to default state</A><BR>
<A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A><BR>
<A href='?src=\ref[src];secretsfun=sec_all_clothes'>Remove ALL clothing</A><BR>
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
+29
View File
@@ -2657,6 +2657,35 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","SM")
usr.rightandwrong(1)
if("tdomereset")
var/delete_mobs = alert("Clear all mobs?","Confirm","Yes","No","Cancel")
if(delete_mobs == "Cancel")
return
var/area/thunderdome = locate(/area/tdome/arena)
if(delete_mobs == "Yes")
for(var/mob/living/mob in thunderdome)
qdel(mob) //Clear mobs
for(var/obj/obj in thunderdome)
if(!istype(obj,/obj/machinery/camera))
qdel(obj) //Clear objects
var/area/template = locate(/area/tdome/arena_source)
template.copy_contents_to(thunderdome)
log_admin("[key_name(usr)] reset the thunderdome to default with delete_mobs==[delete_mobs].", 1)
message_admins("<span class='adminnotice'>[key_name_admin(usr)] reset the thunderdome to default with delete_mobs==[delete_mobs].</span>")
if("tdomestart")
var/confirmation = alert("Start a Thunderdome match?","Confirm","Yes","No")
if(confirmation == "No")
return
if(makeThunderdomeTeams())
log_admin("[key_name(usr)] started a Thunderdome match!", 1)
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has started a Thunderdome match!</span>")
else
log_admin("[key_name(usr)] attempted to start a Thunderdome match, but no ghosts signed up.", 1)
message_admins("<span class='adminnotice'>[key_name_admin(usr)] tried starting a Thunderdome match, but no ghosts signed up.</span>")
if("securitylevel0")
set_security_level(0)
message_admins("\blue [key_name_admin(usr)] change security level to Green.", 1)
+92 -1
View File
@@ -573,4 +573,95 @@ client/proc/one_click_antag()
return 1
return 0
return 0
/datum/admins/proc/makeThunderdomeTeams() // Not strictly an antag, but this seemed to be the best place to put it.
var/list/mob/candidates = list()
var/mob/theghost = null
var/time_passed = world.time
//Generates a list of candidates from active ghosts.
for(var/mob/G in respawnable_list)
spawn(0)
switch(alert(G,"Do you wish to be considered for a Thunderdome match about to start?","Please answer in 30 seconds!","Yes","No"))
if("Yes")
if((world.time-time_passed)>300)//If more than 30 game seconds passed.
return
candidates += G
if("No")
return
else
return
sleep(300) //Debug.
for(var/mob/dead/observer/G in candidates)
if(!G.key)
candidates.Remove(G)
if(candidates.len)
var/teamOneMembers = 5
var/teamTwoMembers = 5
var/datum/preferences/A = new()
for (var/obj/effect/landmark/L in world)
if(L.name == "tdome1")
if(teamOneMembers<=0)
break
var/mob/living/carbon/human/newMember = new(L.loc)
newMember.gender = pick(MALE,FEMALE)
A.randomize_appearance_for(newMember)
if(newMember.gender == MALE)
newMember.real_name = "[pick(first_names_male)] [pick(last_names)]"
else
newMember.real_name = "[pick(first_names_female)] [pick(last_names)]"
newMember.name = newMember.real_name
newMember.age = rand(17,45)
newMember.dna.ready_dna(newMember)
while((!theghost || !theghost.client) && candidates.len)
theghost = pick(candidates)
candidates.Remove(theghost)
if(!theghost)
qdel(newMember)
break
newMember.key = theghost.key
teamOneMembers--
newMember << "You are a member of the <font color = 'green'><b>GREEN</b></font> Thunderdome team! Gear up and help your team destroy the red team!"
if(L.name == "tdome2")
if(teamTwoMembers<=0)
break
var/mob/living/carbon/human/newMember = new(L.loc)
newMember.gender = pick(MALE,FEMALE)
A.randomize_appearance_for(newMember)
if(newMember.gender == MALE)
newMember.real_name = "[pick(first_names_male)] [pick(last_names)]"
else
newMember.real_name = "[pick(first_names_female)] [pick(last_names)]"
newMember.name = newMember.real_name
newMember.age = rand(17,45)
newMember.dna.ready_dna(newMember)
while((!theghost || !theghost.client) && candidates.len)
theghost = pick(candidates)
candidates.Remove(theghost)
if(!theghost)
qdel(newMember)
break
newMember.key = theghost.key
teamTwoMembers--
newMember << "You are a member of the <font color = 'red'><b>RED</b></font> Thunderdome team! Gear up and help your team destroy the green team!"
else
return 0
return 1
+9 -6
View File
@@ -117,10 +117,10 @@
disabilities = text2num(query.item[48])
player_alt_titles = params2list(query.item[49])
organ_data = params2list(query.item[50])
nanotrasen_relation = query.item[51]
speciesprefs = text2num(query.item[52])
slime_color = query.item[53]
rlimb_data = params2list(query.item[51])
nanotrasen_relation = query.item[52]
speciesprefs = text2num(query.item[53])
slime_color = query.item[54]
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
@@ -179,9 +179,12 @@
/datum/preferences/proc/save_character(client/C)
var/organlist
var/rlimblist
var/playertitlelist
if(!isemptylist(organ_data))
organlist = list2params(organ_data)
if(!isemptylist(rlimb_data))
rlimblist = list2params(rlimb_data)
if(!isemptylist(player_alt_titles))
playertitlelist = list2params(player_alt_titles)
@@ -189,14 +192,14 @@
firstquery.Execute()
while(firstquery.NextRow())
if(text2num(firstquery.item[1]) == default_slot)
var/DBQuery/query = dbcon.NewQuery("UPDATE characters SET OOC_Notes='[sql_sanitize_text(metadata)]',real_name='[sql_sanitize_text(real_name)]',name_is_always_random='[be_random_name]',gender='[gender]',age='[age]',species='[sql_sanitize_text(species)]',language='[sql_sanitize_text(language)]',hair_red='[r_hair]',hair_green='[g_hair]',hair_blue='[b_hair]',facial_red='[r_facial]',facial_green='[g_facial]',facial_blue='[b_facial]',skin_tone='[s_tone]',skin_red='[r_skin]',skin_green='[g_skin]',skin_blue='[b_skin]',hair_style_name='[sql_sanitize_text(h_style)]',facial_style_name='[sql_sanitize_text(f_style)]',eyes_red='[r_eyes]',eyes_green='[g_eyes]',eyes_blue='[b_eyes]',underwear='[underwear]',undershirt='[undershirt]',backbag='[backbag]',b_type='[b_type]',alternate_option='[alternate_option]',job_support_high='[job_support_high]',job_support_med='[job_support_med]',job_support_low='[job_support_low]',job_medsci_high='[job_medsci_high]',job_medsci_med='[job_medsci_med]',job_medsci_low='[job_medsci_low]',job_engsec_high='[job_engsec_high]',job_engsec_med='[job_engsec_med]',job_engsec_low='[job_engsec_low]',job_karma_high='[job_karma_high]',job_karma_med='[job_karma_med]',job_karma_low='[job_karma_low]',flavor_text='[sql_sanitize_text(flavor_text)]',med_record='[sql_sanitize_text(med_record)]',sec_record='[sql_sanitize_text(sec_record)]',gen_record='[sql_sanitize_text(gen_record)]',player_alt_titles='[playertitlelist]',be_special='[be_special]',disabilities='[disabilities]',organ_data='[organlist]',rlimb_data='[rlimb_data]',nanotrasen_relation='[nanotrasen_relation]', speciesprefs='[speciesprefs]', slime_color='[slime_color]' WHERE ckey='[C.ckey]' AND slot='[default_slot]'")
var/DBQuery/query = dbcon.NewQuery("UPDATE characters SET OOC_Notes='[sql_sanitize_text(metadata)]',real_name='[sql_sanitize_text(real_name)]',name_is_always_random='[be_random_name]',gender='[gender]',age='[age]',species='[sql_sanitize_text(species)]',language='[sql_sanitize_text(language)]',hair_red='[r_hair]',hair_green='[g_hair]',hair_blue='[b_hair]',facial_red='[r_facial]',facial_green='[g_facial]',facial_blue='[b_facial]',skin_tone='[s_tone]',skin_red='[r_skin]',skin_green='[g_skin]',skin_blue='[b_skin]',hair_style_name='[sql_sanitize_text(h_style)]',facial_style_name='[sql_sanitize_text(f_style)]',eyes_red='[r_eyes]',eyes_green='[g_eyes]',eyes_blue='[b_eyes]',underwear='[underwear]',undershirt='[undershirt]',backbag='[backbag]',b_type='[b_type]',alternate_option='[alternate_option]',job_support_high='[job_support_high]',job_support_med='[job_support_med]',job_support_low='[job_support_low]',job_medsci_high='[job_medsci_high]',job_medsci_med='[job_medsci_med]',job_medsci_low='[job_medsci_low]',job_engsec_high='[job_engsec_high]',job_engsec_med='[job_engsec_med]',job_engsec_low='[job_engsec_low]',job_karma_high='[job_karma_high]',job_karma_med='[job_karma_med]',job_karma_low='[job_karma_low]',flavor_text='[sql_sanitize_text(flavor_text)]',med_record='[sql_sanitize_text(med_record)]',sec_record='[sql_sanitize_text(sec_record)]',gen_record='[sql_sanitize_text(gen_record)]',player_alt_titles='[playertitlelist]',be_special='[be_special]',disabilities='[disabilities]',organ_data='[organlist]',rlimb_data='[rlimblist]',nanotrasen_relation='[nanotrasen_relation]', speciesprefs='[speciesprefs]', slime_color='[slime_color]' WHERE ckey='[C.ckey]' AND slot='[default_slot]'")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during character slot saving. Error : \[[err]\]\n")
message_admins("SQL ERROR during character slot saving. Error : \[[err]\]\n")
return
return 1
var/DBQuery/query = dbcon.NewQuery("INSERT INTO characters (ckey,slot,OOC_Notes,real_name,name_is_always_random,gender,age,species,language,hair_red,hair_green,hair_blue,facial_red,facial_green,facial_blue,skin_tone,skin_red,skin_green,skin_blue,hair_style_name,facial_style_name,eyes_red,eyes_green,eyes_blue,underwear,undershirt,backbag,b_type,alternate_option,job_support_high,job_support_med,job_support_low,job_medsci_high,job_medsci_med,job_medsci_low,job_engsec_high,job_engsec_med,job_engsec_low,job_karma_high,job_karma_med,job_karma_low,flavor_text,med_record,sec_record,gen_record,player_alt_titles,be_special,disabilities,organ_data,rlimb_data,nanotrasen_relation, speciesprefs, slime_color) VALUES ('[C.ckey]','[default_slot]','[sql_sanitize_text(metadata)]','[sql_sanitize_text(real_name)]','[be_random_name]','[gender]','[age]','[sql_sanitize_text(species)]','[sql_sanitize_text(language)]','[r_hair]','[g_hair]','[b_hair]','[r_facial]','[g_facial]','[b_facial]','[s_tone]','[r_skin]','[g_skin]','[b_skin]','[sql_sanitize_text(h_style)]','[sql_sanitize_text(f_style)]','[r_eyes]','[g_eyes]','[b_eyes]','[underwear]','[undershirt]','[backbag]','[b_type]','[alternate_option]','[job_support_high]','[job_support_med]','[job_support_low]','[job_medsci_high]','[job_medsci_med]','[job_medsci_low]','[job_engsec_high]','[job_engsec_med]','[job_engsec_low]','[job_karma_high]','[job_karma_med]','[job_karma_low]','[sql_sanitize_text(flavor_text)]','[sql_sanitize_text(med_record)]','[sql_sanitize_text(sec_record)]','[sql_sanitize_text(gen_record)]','[playertitlelist]','[be_special]','[disabilities]','[organlist]','[rlimb_data]','[nanotrasen_relation]', '[speciesprefs]', '[slime_color]')")
var/DBQuery/query = dbcon.NewQuery("INSERT INTO characters (ckey,slot,OOC_Notes,real_name,name_is_always_random,gender,age,species,language,hair_red,hair_green,hair_blue,facial_red,facial_green,facial_blue,skin_tone,skin_red,skin_green,skin_blue,hair_style_name,facial_style_name,eyes_red,eyes_green,eyes_blue,underwear,undershirt,backbag,b_type,alternate_option,job_support_high,job_support_med,job_support_low,job_medsci_high,job_medsci_med,job_medsci_low,job_engsec_high,job_engsec_med,job_engsec_low,job_karma_high,job_karma_med,job_karma_low,flavor_text,med_record,sec_record,gen_record,player_alt_titles,be_special,disabilities,organ_data,rlimb_data,nanotrasen_relation, speciesprefs, slime_color) VALUES ('[C.ckey]','[default_slot]','[sql_sanitize_text(metadata)]','[sql_sanitize_text(real_name)]','[be_random_name]','[gender]','[age]','[sql_sanitize_text(species)]','[sql_sanitize_text(language)]','[r_hair]','[g_hair]','[b_hair]','[r_facial]','[g_facial]','[b_facial]','[s_tone]','[r_skin]','[g_skin]','[b_skin]','[sql_sanitize_text(h_style)]','[sql_sanitize_text(f_style)]','[r_eyes]','[g_eyes]','[b_eyes]','[underwear]','[undershirt]','[backbag]','[b_type]','[alternate_option]','[job_support_high]','[job_support_med]','[job_support_low]','[job_medsci_high]','[job_medsci_med]','[job_medsci_low]','[job_engsec_high]','[job_engsec_med]','[job_engsec_low]','[job_karma_high]','[job_karma_med]','[job_karma_low]','[sql_sanitize_text(flavor_text)]','[sql_sanitize_text(med_record)]','[sql_sanitize_text(sec_record)]','[sql_sanitize_text(gen_record)]','[playertitlelist]','[be_special]','[disabilities]','[organlist]','[rlimblist]','[nanotrasen_relation]', '[speciesprefs]', '[slime_color]')")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during character slot saving. Error : \[[err]\]\n")
+3 -2
View File
@@ -15,7 +15,7 @@
desc = "Used for seeing walls, floors, and stuff through anything."
icon_state = "meson"
item_state = "glasses"
origin_tech = "magnets=2;engineering=2"
origin_tech = "materials=3;magnets=3;engineering=3"
vision_flags = SEE_TURFS
species_fit = list("Vox")
sprite_sheets = list(
@@ -29,6 +29,7 @@
item_state = "glasses"
darkness_view = 8
see_darkness = 0
origin_tech="materials=5;magnets=5;engineering=4"
/obj/item/clothing/glasses/meson/prescription
name = "prescription mesons"
@@ -63,7 +64,7 @@
desc = "You can totally see in the dark now!"
icon_state = "night"
item_state = "glasses"
origin_tech = "magnets=2"
origin_tech = "magnets=4"
darkness_view = 8
see_darkness = 0
species_fit = list("Vox")
+3
View File
@@ -27,6 +27,7 @@
item_state = "glasses"
darkness_view = 8
see_darkness = 0
origin_tech="biotech=4;magnets=5"
/obj/item/clothing/glasses/hud/health/process_hud(var/mob/M)
process_med_hud(M,1)
@@ -39,6 +40,7 @@
name = "Security HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records."
icon_state = "securityhud"
origin_tech = "magnets=3;combat=2"
var/global/list/jobs[0]
/obj/item/clothing/glasses/hud/security/jensenshades
@@ -55,6 +57,7 @@
icon_state = "securityhudnight"
darkness_view = 8
see_darkness = 0
origin_tech = "magnets=5;combat=4;"
/obj/item/clothing/glasses/hud/security/process_hud(var/mob/M)
+1
View File
@@ -8,6 +8,7 @@
action_button_name = "Toggle Magboots"
icon_action_button = "action_magboots"
species_restricted = null
origin_tech="materials=4;magnets=4;engineering=5"
/obj/item/clothing/shoes/magboots/attack_self(mob/user)
if(src.magpulse)
+9 -7
View File
@@ -17,7 +17,7 @@
blood_overlay_type = "armor"
flags = ONESIZEFITSALL
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/jacket
name = "military jacket"
desc = "An old military jacket, it has armoring."
@@ -216,6 +216,7 @@
desc = "A heavily armored suit that protects against moderate damage."
icon_state = "heavy"
item_state = "swat_suit"
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
w_class = 4//bulky item
gas_transfer_coefficient = 0.90
flags = THICKMATERIAL
@@ -225,6 +226,7 @@
siemens_coefficient = 0
/obj/item/clothing/suit/armor/tdome
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags = THICKMATERIAL
@@ -232,19 +234,19 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
/obj/item/clothing/suit/armor/tdome/red
name = "Thunderdome suit (red)"
desc = "Reddish armor."
name = "Red Thunderdome Armor"
desc = "Armor worn by the red Thunderodome team"
icon_state = "tdred"
item_state = "tdred"
siemens_coefficient = 1
/obj/item/clothing/suit/armor/tdome/green
name = "Thunderdome suit (green)"
desc = "Pukish armor."
name = "Green Thunderdome Armor"
desc = "Armor worn by the green Thunderodome team"
icon_state = "tdgreen"
item_state = "tdgreen"
siemens_coefficient = 1
//Non-hardsuit ERT armor.
/obj/item/clothing/suit/armor/vest/ert
name = "emergency response team armor"
@@ -275,7 +277,7 @@
name = "emergency response team medical armor"
desc = "A set of armor worn by medical members of the Nanotrasen Emergency Response Team. Has red and white highlights."
icon_state = "ertarmor_med"
//Janitorial
/obj/item/clothing/suit/armor/vest/ert/janitor
name = "emergency response team janitor armor"
+2
View File
@@ -8,6 +8,8 @@
desc = "A prototype modular receiver and trigger assembly for a firearm."
icon = 'icons/obj/improvised.dmi'
icon_state = "receiver"
origin_tech="combat=5;materials=4"
/obj/item/weaponcrafting/stock
name = "rifle stock"
+1 -1
View File
@@ -137,7 +137,7 @@
icon_state = "diamonddrill"
item_state = "jackhammer"
digspeed = 5 //Digs through walls, girders, and can dig up sand
origin_tech = "materials=6;powerstorage=4;engineering=5"
origin_tech = "materials=6;powerstorage=4;engineering=4"
hitsound = 'sound/weapons/drill.ogg'
digsound = list('sound/weapons/drill.ogg')
desc = "Yours is the drill that will pierce the heavens!"
+2 -2
View File
@@ -6,7 +6,7 @@
icon = 'icons/obj/assemblies.dmi'
icon_state = "mmi_empty"
w_class = 3
origin_tech = "biotech=3"
origin_tech = "programming=2;biotech=3"
var/list/construction_cost = list("metal"=1000,"glass"=500)
var/construction_time = 75
@@ -114,7 +114,7 @@
/obj/item/device/mmi/radio_enabled
name = "Radio-enabled Man-Machine Interface"
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio."
origin_tech = "biotech=4"
origin_tech = "programming=2;biotech=4"
var/obj/item/device/radio/radio = null//Let's give it a radio.
@@ -87,6 +87,9 @@
if (r_hand && istype(r_hand, /obj/item/weapon/cane))
stance_damage -= 2
if(stance_damage < 0)
stance_damage = 0
// standing is poor
if(stance_damage >= 4 || (stance_damage >= 2 && prob(5)))
if(!(lying || resting))
@@ -1569,6 +1569,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(stat == DEAD)
return PULSE_NONE //that's it, you're dead, nothing can influence your pulse
if(heart_attack)
return PULSE_NONE
var/temp = PULSE_NORM
if(round(vessel.get_reagent_amount("blood")) <= BLOOD_VOLUME_BAD) //how much blood do we have
@@ -179,7 +179,7 @@
w_class = 2.0
throw_speed = 5
throw_range = 10
origin_tech = "magnets=1;biotech=1"
origin_tech = "programming=2;magnets=2;biotech=2"
var/mode = 1;
/obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
@@ -87,6 +87,7 @@
icon_state = "stunshell"
projectile_type = "/obj/item/projectile/bullet/stunshot"
m_amt = 200
origin_tech="combat=3;materials=3"
/obj/item/ammo_casing/shotgun/meteorshot
@@ -143,6 +144,7 @@
desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects."
icon_state = "cshell"
projectile_type = null
origin_tech="combat=3;materials=3;powerstorage=4;magnets=3"
/obj/item/ammo_casing/shotgun/dart
name = "shotgun dart"
@@ -122,6 +122,7 @@
ammo_type = "/obj/item/ammo_casing/c9mm"
caliber = "9mm"
max_ammo = 20
origin_tech = "combat=4;materials=3"
/obj/item/ammo_box/magazine/smgm9mm/update_icon()
..()
@@ -105,7 +105,7 @@ obj/item/weapon/gun/energy/laser/retro
desc = "A high-power laser gun capable of expelling concentrated xray blasts."
icon_state = "xray"
fire_sound = 'sound/weapons/laser3.ogg'
origin_tech = "combat=5;materials=3;magnets=2;syndicate=2"
origin_tech = "combat=6;materials=5;biotech=5;powerstorage=4"
projectile_type = "/obj/item/projectile/beam/xray"
charge_cost = 500
@@ -42,7 +42,7 @@
name = "Advanced Energy Gun"
desc = "An energy gun with an experimental miniaturized reactor."
icon_state = "nucgun"
origin_tech = "combat=3;materials=5;powerstorage=3"
origin_tech = "combat=4;materials=5;powerstorage=3"
var/lightfail = 0
var/charge_tick = 0
can_flashlight = 0
@@ -19,7 +19,7 @@
desc = "The MK.II Prototype Ion Projector is a lightweight carbine version of the larger ion rifle, built to be ergonomic and efficient."
icon_state = "ioncarbine"
item_state = "ioncarbine"
origin_tech = "combat=4;magnets=4;materials=4"
origin_tech = "combat=5;magnets=4;materials=4"
w_class = 3
slot_flags = SLOT_BELT
@@ -28,7 +28,7 @@
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
icon_state = "decloner"
fire_sound = 'sound/weapons/pulse3.ogg'
origin_tech = "combat=5;materials=4;powerstorage=3"
origin_tech = "combat=6;materials=7;biotech=5;powerstorage=6"
projectile_type = "/obj/item/projectile/energy/declone"
@@ -278,7 +278,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
icon_state = "crossbowlarge"
w_class = 3
m_amt = 4000
origin_tech = "combat=2;magnets=2;syndicate=3" //can be further researched for more syndie tech
origin_tech = "combat=5;materials=5;engineering=3;biotech=4;syndicate=3" //can be further researched for more syndie tech
silenced = 0
projectile_type = "/obj/item/projectile/energy/bolt/large"
@@ -54,6 +54,7 @@
projectile_type = "/obj/item/projectile/energy/electrode"
cell_type = "/obj/item/weapon/stock_parts/cell"
fire_delay = 15
origin_tech="combat=3;materials=3;powerstorage=2"
+2 -1
View File
@@ -146,4 +146,5 @@
icon_state = "suppressor"
w_class = 2
var/oldsound = null
var/initial_w_class = null
var/initial_w_class = null
origin_tech="combat=6;engineering=5;syndicate=3"
@@ -3,7 +3,7 @@
desc = "A lightweight, prototype 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors."
icon_state = "saber"
w_class = 3.0
origin_tech = "combat=4;materials=2"
origin_tech = "combat=4;materials=3"
automatic = 1
mag_type = "/obj/item/ammo_box/magazine/smgm9mm"
var/alarmed = 0
+1 -1
View File
@@ -334,7 +334,7 @@ datum
var/list/seen = viewers(4, get_turf(my_atom))
for(var/mob/M in seen)
M << "\blue \icon[my_atom] [C.mix_message]."
M << "\blue \icon[my_atom] [C.mix_message]"
/* if(istype(my_atom, /obj/item/slime_core))
var/obj/item/slime_core/ME = my_atom
+18 -9
View File
@@ -2479,6 +2479,12 @@ datum
M:jitteriness = max(M:jitteriness-3,0)
return
cider
name = "Cider"
id = "cider"
description = "An alcoholic beverage derived from apples."
color = "#174116"
whiskey
name = "Whiskey"
id = "whiskey"
@@ -2576,15 +2582,18 @@ datum
dizzy_adj = 4
confused_start = 115 //amount absorbed after which mob starts confusing directions
hooch
name = "Hooch"
id = "hooch"
description = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?"
color = "#664300" // rgb: 102, 67, 0
dizzy_adj = 6
slurr_adj = 5
slur_start = 35 //amount absorbed after which mob starts slurring
confused_start = 90 //amount absorbed after which mob starts confusing directions
suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning".
name = "Suicider"
id = "suicider"
description = "An unbelievably strong and potent variety of Cider."
color = "#CF3811"
dizzy_adj = 20
slurr_adj = 20
confused_adj = 3
slur_start = 15
confused_start = 40
blur_start = 60
pass_out = 80
ale
name = "Ale"
+7 -6
View File
@@ -1250,12 +1250,13 @@ datum
required_reagents = list ("beer" = 1, "ale" = 2)
result_amount = 3
hooch
name = "Hooch"
id = "hooch"
result = "hooch"
required_reagents = list ("sugar" = 1, "ethanol" = 2, "fuel" = 1)
result_amount = 3
suicider
name = "Suicider"
id = "suicider"
result = "suicider"
required_reagents = list ("vodka" = 1, "cider" = 1, "fuel" = 1, "epinephrine" = 1)
result_amount = 4
mix_message = "The drinks and chemicals mix together, emitting a potent smell."
irish_coffee
name = "Irish Coffee"
-2
View File
@@ -328,7 +328,6 @@ datum/reagent/initropidril/on_mob_life(var/mob/living/M as mob)
if(3)
var/mob/living/carbon/human/H = M
if(!H.heart_attack)
H.visible_message("<span class = 'userdanger'>[H] clutches at their chest!</span>")
H.heart_attack = 1 // rip in pepperoni
..()
return
@@ -346,7 +345,6 @@ datum/reagent/concentrated_initro/on_mob_life(var/mob/living/M as mob)
if(volume >=5)
var/mob/living/carbon/human/H = M
if(!H.heart_attack)
H.visible_message("<span class = 'userdanger'>[H] clutches at their chest!</span>")
H.heart_attack = 1 // rip in pepperoni
datum/reagent/pancuronium
@@ -96,6 +96,10 @@
icon_state = "beerglass"
name = "Beer glass"
desc = "A freezing pint of beer"
if("cider")
icon_state = "rewriter"
name = "Cider"
desc = "a refreshing glass of traditional cider"
if("beer2")
icon_state = "beerglass"
name = "Beer glass"
@@ -312,9 +316,9 @@
icon_state = "irishcoffeeglass"
name = "Irish Coffee"
desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
if("hooch")
icon_state = "glass_brown2"
name = "Hooch"
if("suicider")
icon_state = "suicider"
name = "Suicider"
desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
if("whiskeysoda")
icon_state = "whiskeysodaglass2"
@@ -247,6 +247,8 @@
volume = 50
amount_per_transfer_from_this = 10
flags = OPENCONTAINER | NOREACT
origin_tech = "materials=2"
/obj/item/weapon/reagent_containers/glass/beaker/bluespace
name = "bluespace beaker"
@@ -257,6 +259,8 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100,300)
flags = OPENCONTAINER
origin_tech = "bluespace=2;materials=6"
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
New()
@@ -250,4 +250,16 @@
icon_state = "rbottle"
New()
..()
reagents.add_reagent("formaldehyde", 50)
reagents.add_reagent("formaldehyde", 50)
////////////////////Traitor Poison Bottle//////////////////////////////
/obj/item/weapon/reagent_containers/glass/bottle/traitor
desc = "It has a small skull and crossbones on it. Uh-oh!"
possible_transfer_amounts = list(5,10,15,25,30,40)
volume = 40
New()
..()
reagents.add_reagent(pick("polonium","initropidril","concentrated_initro","pancuronium","sodium_thiopental","ketamine","sulfonal","amanitin","coniine","curare","sarin","histamine","venom","cyanide"), 40)
+2 -1
View File
@@ -64,4 +64,5 @@
name = "rapid syringe gun"
desc = "A modification of the syringe gun design, using a rotating cylinder to store up to six syringes."
icon_state = "rapidsyringegun"
max_syringes = 6
max_syringes = 6
origin_tech="combat=3;materials=3;engineering=3;biotech=2"
@@ -5,7 +5,7 @@
name = "Artificial Bluespace Crystal"
desc = "A small blue crystal with mystical properties."
id = "bluespace_crystal"
req_tech = list("bluespace" = 4, "materials" = 6)
req_tech = list("bluespace" = 2)
build_type = PROTOLATHE
materials = list("$diamond" = 1500, "$plasma" = 1500)
reliability_base = 100
@@ -15,7 +15,7 @@
name = "Holographic Sign Projector"
desc = "A holograpic projector used to project various warning signs."
id = "holosign"
req_tech = list("magnets" = 3, "powerstorage" = 2)
req_tech = list("programming"=3, "magnets" = 3, "powerstorage" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 2000, "$glass" = 1000)
build_path = /obj/item/weapon/holosign_creator
@@ -296,7 +296,7 @@
name = "Machine Board (Programmable Unloader)"
desc = "The circuit board for a Programmable Unloader."
id = "selunload"
req_tech = list("programming" = 5)
req_tech = list("engineering"=3, "programming" = 6)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/programmable
@@ -59,7 +59,7 @@
name = "Defibrillator"
desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients."
id = "defib"
req_tech = list("materials" = 7, "biotech" = 5, "powerstorage" = 5)
req_tech = list("biotech" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 5000, "$glass" = 2000, "$silver" = 1000)
reliability = 76
@@ -105,7 +105,7 @@
name = "Positronic Brain"
desc = "Allows for the construction of a positronic brain"
id = "posibrain"
req_tech = list("engineering" = 4, "materials" = 6, "bluespace" = 2, "programming" = 4)
req_tech = list("engineering" = 4, "materials" = 4, "bluespace" = 2, "programming" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$plasma" = 500, "$diamond" = 100)
build_path = /obj/item/device/mmi/posibrain
@@ -11,12 +11,12 @@
reliability_base = 79
build_path = /obj/item/weapon/pickaxe/diamonddrill
category = list("Mining")
/datum/design/pick_diamond
name = "Diamond Pickaxe"
desc = "A pickaxe with a diamond pick head, this is just like minecraft."
id = "pick_diamond"
req_tech = list("materials" = 6)
req_tech = list("materials" = 6, "engineering" = 4)
build_type = PROTOLATHE
materials = list("$diamond" = 3000)
build_path = /obj/item/weapon/pickaxe/diamond
@@ -30,8 +30,8 @@
build_type = PROTOLATHE
materials = list("$metal" = 6000, "$glass" = 1000)
build_path = /obj/item/weapon/pickaxe/drill
category = list("Mining")
category = list("Mining")
/datum/design/plasmacutter
name = "Plasma Cutter"
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
@@ -42,7 +42,7 @@
reliability_base = 79
build_path = /obj/item/weapon/pickaxe/plasmacutter
category = list("Mining")
/datum/design/jackhammer
name = "Sonic Jackhammer"
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
@@ -40,7 +40,7 @@
name = "Super-Capacity Power Cell"
desc = "A power cell that holds 20000 units of energy"
id = "super_cell"
req_tech = list("powerstorage" = 3, "materials" = 2)
req_tech = list("powerstorage" = 5, "materials" = 2)
reliability_base = 75
build_type = PROTOLATHE | MECHFAB | PODFAB
materials = list("$metal" = 700, "$glass" = 70)
+2
View File
@@ -274,6 +274,7 @@ datum/tech/robotics
m_amt = 30
g_amt = 10
var/datum/tech/stored
origin_tech="programming=1"
/obj/item/weapon/disk/tech_disk/New()
src.pixel_x = rand(-5.0, 5)
@@ -289,6 +290,7 @@ datum/tech/robotics
m_amt = 30
g_amt = 10
var/datum/design/blueprint
origin_tech = "programming=1"
/obj/item/weapon/disk/design_disk/New()
src.pixel_x = rand(-5.0, 5)
@@ -20,7 +20,7 @@ datum/design/shield_gen_ex
name = "Circuit Design (Experimental hull shield generator)"
desc = "Allows for the construction of circuit boards used to build an experimental hull shield generator."
id = "shield_gen"
req_tech = list("bluespace" = 4, "plasmatech" = 3)
req_tech = list("powerstorage" = 4, "magnets" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000)
build_path = "/obj/machinery/shield_gen/external"
@@ -46,7 +46,7 @@ datum/design/shield_gen
name = "Circuit Design (Experimental shield generator)"
desc = "Allows for the construction of circuit boards used to build an experimental shield generator."
id = "shield_gen"
req_tech = list("bluespace" = 4, "plasmatech" = 3)
req_tech = list("powerstorage" = 4, "magnets" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000)
build_path = "/obj/machinery/shield_gen/external"
+1
View File
@@ -31,6 +31,7 @@
//2 use active power
idle_power_usage = 20
active_power_usage = 100
origin_tech="bluespace=4;plasmatech=3"
/obj/machinery/shield_gen/New()
spawn(10)
@@ -2,9 +2,14 @@
//---------- external shield generator
//generates an energy field that loops around any built up area in space (is useless inside) halts movement and airflow, is blocked by walls, windows, airlocks etc
/obj/machinery/shield_gen/external
origin_tech="magnets=3;powerstorage=4"
/obj/machinery/shield_gen/external/New()
..()
/obj/machinery/shield_gen/external/get_shielded_turfs()
var
list
+26 -11
View File
@@ -77,22 +77,37 @@ proc/spread_germs_to_organ(obj/item/organ/external/E, mob/living/carbon/human/us
if(!(E.status & ORGAN_ROBOT)) //Germs on robotic limbs bad
E.germ_level = max(germ_level,E.germ_level) //as funny as scrubbing microbes out with clean gloves is - no.
proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool)
if(!istype(M,/mob/living/carbon))
proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
if(!istype(M))
return 0
if (user.a_intent == "harm") //check for Hippocratic Oath
return 0
var/zone = user.zone_sel.selecting
if(zone in M.op_stage.in_progress) //Can't operate on someone repeatedly.
user << "\red You can't operate on this area while surgery is already in progress."
return 1
for(var/datum/surgery_step/S in surgery_steps)
//check if tool is right or close enough and if this step is possible
if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool) && S.is_valid_target(M))
S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it
//We had proper tools! (or RNG smiled.) and User did not move or change hands.
if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully
else //or
if(!isrobot(user))
S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~
return 1 //don't want to do weapony things after surgery
if(S.tool_quality(tool))
var/step_is_valid = S.can_use(user, M, zone, tool)
if(step_is_valid && S.is_valid_target(M))
if(step_is_valid == 2) // This is a failure that already has a message for failing.
return 1
M.op_stage.in_progress += zone
S.begin_step(user, M, zone, tool) //start on it
//We had proper tools! (or RNG smiled.) and user did not move or change hands.
if(prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
S.end_step(user, M, zone, tool) //finish successfully
else if ((tool in user.contents) && user.Adjacent(M)) //or
S.fail_step(user, M, zone, tool) //malpractice~
else // This failing silently was a pain.
user << "\red You must remain close to your patient to conduct surgery."
M.op_stage.in_progress -= zone // Clear the in-progress flag.
return 1 //don't want to do weapony things after surgery
if (user.a_intent == "help")
user << "\red You can't see any useful way to use [tool] on [M]."
return 1
return 0
proc/sort_surgeries()
+1 -1
View File
@@ -6,7 +6,7 @@ var/list/GPS_list = list()
icon_state = "gps-c"
w_class = 2.0
slot_flags = SLOT_BELT
origin_tech = "programming=2;engineering=2"
origin_tech = "materials=2;magnets=3;bluespace=3"
var/gpstag = "COM0"
var/emped = 0
var/turf/locked_location