mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +01:00
Merge remote-tracking branch 'upstream/master' into more-reagents
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user