From ac6a2baa802245e3cb7899d15a89a88bf2c76a23 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 21 Aug 2015 17:43:16 -0400 Subject: [PATCH 01/25] Sock port Plus fix to secruity records text --- code/__HELPERS/global_lists.dm | 4 + code/__HELPERS/mobs.dm | 6 ++ code/_globalvars/lists/flavor_misc.dm | 4 + code/game/objects/structures/dresser.dm | 8 +- code/modules/client/preferences.dm | 16 +++ code/modules/client/preferences_savefile.dm | 2 + code/modules/computer3/computers/security.dm | 10 +- .../mob/living/carbon/human/human_defines.dm | 3 +- .../mob/living/carbon/human/update_icons.dm | 7 ++ .../mob/new_player/preferences_setup.dm | 10 ++ .../mob/new_player/sprite_accessories.dm | 94 +++++++++++++++++- icons/mob/underwear.dmi | Bin 33606 -> 37928 bytes 12 files changed, 156 insertions(+), 8 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index c69742b94c8..a81a99c540b 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -12,6 +12,10 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f) //undershirt init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f) + //socks + init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f) + + var/list/paths //Surgery Steps - Initialize all /datum/surgery_step into a list diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 619716363f9..fe27e399c84 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -10,6 +10,12 @@ if(FEMALE) return pick(undershirt_f) else return pick(undershirt_list) +/proc/random_socks(gender) + switch(gender) + if(MALE) return pick(socks_m) + if(FEMALE) return pick(socks_f) + else return pick(socks_list) + proc/random_hair_style(var/gender, species = "Human") var/h_style = "Bald" diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 882331d21de..516ae5630f9 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -15,6 +15,10 @@ var/global/list/underwear_f = list() //stores only underwear name var/global/list/undershirt_list = list() //stores /datum/sprite_accessory/undershirt indexed by name var/global/list/undershirt_m = list() //stores only undershirt name var/global/list/undershirt_f = list() //stores only undershirt name + //Socks +var/global/list/socks_list = list() //stores /datum/sprite_accessory/socks indexed by name +var/global/list/socks_m = list() //stores only socks name +var/global/list/socks_f = list() //stores only socks name //Backpacks var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt") diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 10898e80a47..f1eca747755 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -12,7 +12,7 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user - var/choice = input(user, "Underwear or Undershirt?", "Changing") as null|anything in list("Underwear","Undershirt") + var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks") if(!Adjacent(user)) return @@ -27,5 +27,11 @@ if(new_undershirt) H.undershirt = new_undershirt + if("Socks") + var/new_socks = input(user, "Select your socks", "Changing") as null|anything in socks_list + if(new_socks) + H.socks= new_socks + + add_fingerprint(H) H.update_body() \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e2d4a48e58d..e3696ae4703 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -106,6 +106,7 @@ datum/preferences var/b_type = "A+" //blood type (not-chooseable) var/underwear = "Nude" //underwear type var/undershirt = "Nude" //undershirt type + var/socks = "Nude" //socks type var/backbag = 2 //backpack type var/h_style = "Bald" //Hair type var/r_hair = 0 //Hair color @@ -321,6 +322,7 @@ datum/preferences dat += "

" dat += "Underwear:
[underwear]
" dat += "Undershirt:
[undershirt]
" + dat += "Socks:
[socks]
" dat += "Backpack Type:
[backbaglist[backbag]]
" dat += "Nanotrasen Relation:
[nanotrasen_relation]
" dat += "Preview
" @@ -989,6 +991,9 @@ datum/preferences if("undershirt") undershirt = random_undershirt(gender) ShowChoices(user) + if("socks") + socks = random_socks(gender) + ShowChoices(user) if("eyes") r_eyes = rand(0,255) g_eyes = rand(0,255) @@ -1189,6 +1194,16 @@ datum/preferences undershirt = new_undershirt ShowChoices(user) + if("socks") + var/new_socks + if(gender == MALE) + new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in socks_m + else + new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in socks_f + if(new_socks) + socks = new_socks + ShowChoices(user) + if("eyes") var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference") as color|null if(new_eyes) @@ -1523,6 +1538,7 @@ datum/preferences character.underwear = underwear character.undershirt = undershirt + character.socks = socks if(backbag > 4 || backbag < 1) backbag = 1 //Same as above diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 8e1c0e12964..f1dd7b307f3 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -141,6 +141,7 @@ S["eyes_blue"] >> b_eyes S["underwear"] >> underwear S["undershirt"] >> undershirt + S["socks"] >> socks S["backbag"] >> backbag S["b_type"] >> b_type S["accent"] >> accent @@ -203,6 +204,7 @@ b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes)) underwear = sanitize_integer(underwear, 1, underwear_m.len, initial(underwear)) undershirt = sanitize_integer(undershirt, 1, undershirt_t.len, initial(undershirt)) + socks = sanitize_integer(socks,1 socks_t.len, initial(socks)) backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) b_type = sanitize_text(b_type, initial(b_type)) accent = sanitize_text(accent, initial(accent)) diff --git a/code/modules/computer3/computers/security.dm b/code/modules/computer3/computers/security.dm index 4f9d2088074..22081177a61 100644 --- a/code/modules/computer3/computers/security.dm +++ b/code/modules/computer3/computers/security.dm @@ -497,31 +497,31 @@ What a mess.*/ active1.fields["age"] = t1 if("mi_crim") if (istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input minor disabilities list:", "Secure. records", active2.fields["mi_crim"], null) as text,1,MAX_MESSAGE_LEN)) + var/t1 = sanitize(copytext(input("Please input minor crime list:", "Secure. records", active2.fields["mi_crim"], null) as text,1,MAX_MESSAGE_LEN)) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["mi_crim"] = t1 if("mi_crim_d") if (istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize minor dis.:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) + var/t1 = sanitize(copytext(input("Please summarize minor crimes.:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["mi_crim_d"] = t1 if("ma_crim") if (istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input major diabilities list:", "Secure. records", active2.fields["ma_crim"], null) as text,1,MAX_MESSAGE_LEN)) + var/t1 = sanitize(copytext(input("Please input major crime list:", "Secure. records", active2.fields["ma_crim"], null) as text,1,MAX_MESSAGE_LEN)) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["ma_crim"] = t1 if("ma_crim_d") if (istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize major dis.:", "Secure. records", active2.fields["ma_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) + var/t1 = sanitize(copytext(input("Please summarize major crimes:", "Secure. records", active2.fields["ma_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["ma_crim_d"] = t1 if("notes") if (istype(active2, /datum/data/record)) - var/t1 = trim(sanitize(copytext(input("Please summarize minor dis.:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN))) + var/t1 = trim(sanitize(copytext(input("Please summarize other details:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN))) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["notes"] = t1 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index bc10d54b1c8..7d7d400c9c3 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -30,7 +30,8 @@ var/b_type = "A+" //Player's bloodtype var/underwear = "Nude" //Which underwear the player wants - var/undershirt = "Nude" //Which undershirt the player wants. + var/undershirt = "Nude" //Which undershirt the player wants + var/socks = "Nude" //Which socks the player wants var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. //Equipment slots diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 2e7a5e2be23..e6f6856b2b7 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -327,6 +327,13 @@ var/global/list/damage_icon_parts = list() if(U2) stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY) + + if(socks && species.flags & HAS_UNDERWEAR) + var/datum/sprite_accessory/socks/U3 = socks_list[socks] + if(U3) + stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY) + + if(update_icons) update_icons() diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index b60ebe12c5d..a05a2af391c 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -7,6 +7,7 @@ datum/preferences gender = pick(MALE, FEMALE) underwear = random_underwear(gender) undershirt = random_undershirt(gender) + socks = random_socks(gender) if(species == "Human") s_tone = random_skin_tone() h_style = random_hair_style(gender, species) @@ -264,6 +265,12 @@ datum/preferences if(U2) undershirt_s = new/icon(U2.icon, "[U2.icon_state]_s", ICON_OVERLAY) + var/icon/socks_s = null + if(socks && current_species.flags & HAS_UNDERWEAR) + var/datum/sprite_accessory/socks/U3 = socks_list[socks] + if(U3) + socks_s = new/icon(U3.icon, "[U3.icon_state]_s", ICON_OVERLAY) + var/icon/clothes_s = null var/uniform_dmi='icons/mob/uniform.dmi' if(disabilities&DISABILITY_FLAG_FAT) @@ -792,6 +799,8 @@ datum/preferences preview_icon.Blend(underwear_s, ICON_OVERLAY) if(undershirt_s) preview_icon.Blend(undershirt_s, ICON_OVERLAY) + if(socks_s) + preview_icon.Blend(socks_s, ICON_OVERLAY) if(clothes_s) preview_icon.Blend(clothes_s, ICON_OVERLAY) preview_icon_front = new(preview_icon, dir = SOUTH) @@ -800,4 +809,5 @@ datum/preferences del(eyes_s) del(underwear_s) del(undershirt_s) + del(socks_s) del(clothes_s) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 45fe53c3d82..0175c6d9663 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1260,4 +1260,96 @@ name = "Fire Tank-Top" icon_state = "tank_fire" gender = NEUTER -//end tanktops \ No newline at end of file +//end tanktops + +/////////////////////// +// Socks Definitions // +/////////////////////// +/datum/sprite_accessory/socks + icon = 'icons/mob/underwear.dmi' + species_allowed = list("Human","Unathi","Vox","Diona","Kidan","Grey","Plasmaman","Skellington") + +/datum/sprite_accessory/socks/nude + name = "Nude" + icon_state = null + gender = NEUTER + +/datum/sprite_accessory/socks/white_norm + name = "Normal White" + icon_state = "white_norm" + gender = NEUTER + +/datum/sprite_accessory/socks/black_norm + name = "Normal Black" + icon_state = "black_norm" + gender = NEUTER + +/datum/sprite_accessory/socks/white_short + name = "Short White" + icon_state = "white_short" + gender = NEUTER + +/datum/sprite_accessory/socks/black_short + name = "Short Black" + icon_state = "black_short" + gender = NEUTER + +/datum/sprite_accessory/socks/white_knee + name = "Knee-high White" + icon_state = "white_knee" + gender = NEUTER + +/datum/sprite_accessory/socks/black_knee + name = "Knee-high Black" + icon_state = "black_knee" + gender = NEUTER + +/datum/sprite_accessory/socks/thin_knee + name = "Knee-high Thin" + icon_state = "thin_knee" + gender = FEMALE + +/datum/sprite_accessory/socks/striped_knee + name = "Knee-high Striped" + icon_state = "striped_knee" + gender = NEUTER + +/datum/sprite_accessory/socks/rainbow_knee + name = "Knee-high Rainbow" + icon_state = "rainbow_knee" + gender = NEUTER + +/datum/sprite_accessory/socks/white_thigh + name = "Thigh-high White" + icon_state = "white_thigh" + gender = NEUTER + +/datum/sprite_accessory/socks/black_thigh + name = "Thigh-high Black" + icon_state = "black_thigh" + gender = NEUTER + +/datum/sprite_accessory/socks/thin_thigh + name = "Thigh-high Thin" + icon_state = "thin_thigh" + gender = FEMALE + +/datum/sprite_accessory/socks/striped_thigh + name = "Thigh-high Striped" + icon_state = "striped_thigh" + gender = NEUTER + +/datum/sprite_accessory/socks/rainbow_thigh + name = "Thigh-high Rainbow" + icon_state = "rainbow_thigh" + gender = NEUTER + +/datum/sprite_accessory/socks/pantyhose + name = "Pantyhose" + icon_state = "pantyhose" + gender = FEMALE + +/datum/sprite_accessory/socks/black_fishnet + name = "Black Fishnet" + icon_state = "black_fishnet" + gender = NEUTER \ No newline at end of file diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index 5c303cbf642fffb2402895328c32221b94219806..ad5e5019fd8c26faeb677e02bef5641df0353dcb 100644 GIT binary patch literal 37928 zcmd3ubyQqS*QXB-2^utbNP+}+f(Lh^xCM77I1RyrhTsrfLU0T2ZfV@zT>_0XHmC1> z?>m2ttZ!z`n(t!)-F>8}+NWyQul9b5(AO%mI1k7l004j^FDLaD0FcGOA6iUw@Q97= zq%{B_oqN33aF#N0GIF%Aceb#z1pv3y>bO^Sa~#-#(7saq+3T{RrcJIKGDq|K&uyLI zxe6q_3MF45E&glHtwDZAW!Zig@=;Mdu#0b$ zOv)iC@3Ndw&z^3OIhGNSQZqT^&(EE`JJd9z*OjN8qj1=WH4eh}G<0oEorwr}BKvO4 zO5JHr`*K75rCc745gKJK;42Fmw#c4dB<1TUt&Nq{)p0sK@ zbKC|pALIU(jlugJo!jo*Z5q!NYyI_=%xA}9my3XHh>DIj{(huDZUD@d5+(M19!rRi z@n@|mxI~?9 z)B9|i+-OxU6yhS(WefLEkL8$Ip4fH~QN@JU-kT7mo@`Hdp<2WfdT7}hj-|994g&yM zKwj$Ad$-j6CQq;T6Lt6ZGvAWrx#WAP9Q}MrQQz+6N)xoCa@~Hec_*O-eWk)Wjq>G} zns&J!eq@iE@LNk}i>P@0CZfHKW8$(|)N7QVH-c$2yoR9{r@{Wm#N#fe){_ZwA^8Pd0L-QLnLzk9b`*BQ(L-5|kZg1dsx9hU+^?|49^FIj8Ghv@nv<7DM~2;Qz|p#P(rV1L za?(RXI(va9d<+cq_WHKrYt^j4Z?0Nf0iUY@{cd7O9cJ-Q4d0QLO&JXTyrZ6aD0;Oc z{qEgZ*|n9Wr6F#x|IEQBl7re1vi(m&P6Cu~U{c*>ko!A=o^+b2hfO^YXqrgJp&j_U zsH7zFV5uctT8ND<==S=evcA6lhXG`PKRl}zSbCCI&PMZx0$IFgi(-Gm7?W!-hyYp-4wT6H=(zIx^NUR@m{tcyKnFdRJQM3K6`F1rtn}>`fEO5bjOgT}=m2DH69+jF(Ir68sudnUq>Xg&7~ejqN+$si_5RZkjF_mdzc6 zTOo_<>!*9|uZFRcP@||yGxg|0$H(q&uY)66^xz8L+Hh1I95`p^=3K%)g8d%6-gj&# zHfq6bEn<}cDea4(CEjD&@9$LAw23=n6ocLx*g-N=d;v@bYrzj>t)g{otM8+-U<_qnTxC8@t2TWHeoAhWCymAiMY7LtY|GrD( zqGd2vro+RHVQk>0bM$>rjw1F4zW5)>6ejh`M`T5NmWiY08uz!lc?nmcxdoB(c+_so zNO}1uZ>&zY%m_O)|K+(toCs#oRsS>m+ke#KcFUDdz~^Tu#in52z7Gy6ed6nZy4)Hw zaGO)r-OIl8DcMVpLilRKK_cy9sIpXcuB=X1SC^T~jm{K?1U)l1_czVrNuj{72!g^1 z4~8hk92JL=87i;=EafPG0zTRZ(-3ayCJ8=j%b$;mA@9lC1SJ-v~IbaU_;a_g8egKwrPX#(`-o5sv* z4qexFeE@+JWvoUq@yKkLQB``WJz?ij!?b1ba0ij}7?F)vY-jR1!|0a~Y92m5h46Ar z!cHp+K}*&R%#vSyJ|b^L%?+f91AsrLARRaZN6XG)fNazy?bzbIw) zr%Zy*E5%Sl$1VC0B*kaTHZXUa&-CjfiyK(UXz`$7>cfJRhaZXX&dtuYl6k7cJe#)u zwdF399s(XX!#0y>y?%P5L#k|Bf5xGsFgq(j$l;rNh#V2}eU)n?gZB!I_^LjM{qtDmPVAKXVpuabBR55JAmH#RJa<{snCf*FEZgSg zR0FjckI2`#RilX|d#R}vMp#@|OF!RNxLP4hrMhi3PswhLSdm{VT#M7m@eJ8mMLT6$ zkgU2n3saNd8wR_Ybkz%Bt;hW`MRjuRbM#HF$(%D%YMys(Z>lumVYJUln10#l=-c(J zt?aTgeACL8ivwK|GuAR6KR)?$diq97>x=%)DygGz|FqQW*RN@L!KdNk;sVg7q}SIA zB0784kSsVm=CAwOD6E+F*mP>6ndb1Qg@4RNR!RBnA@Ngs zbPq2QX!;h_Tp>x2_g|~|TnrEPsdc;VM#R-x`Nq=wQ>2B5V}oBAKYuDDOa%Y@`J$T_ zsdW$5-y>Bj?f^;^W@ctdC#T9oi+r%#ac$^(>@LCD4?b}lY_ku8;v~DVQOBGT2M5Qx z?K2t>boW3-QE?2ms2Bvn7@D);J3;eJdZ4>;?izUFKF1^wS=Q&)pqtsz@=bP2*8nTb zuT+#$*zLHk&S`5AZMy+EM(!4LjC`(#^9|sjI2DdWxTdrDh%VQ3hmIbjmu|<)PIN}E zOInZR_3Ox=c%aGD?J2w*VV*nF^ZQz}B-x^Cf78+!LL%G98D5B~_1*O6&!2`KN$DEN zbno=b<&688$gnHY(x}%rHrfn0w#og$2c$4IGBMEwYOH`18Wl-N6lN9{sgEBsi}EAo zdHU@FCOdBIxnwW9Ek-tjX|tYi9q@eR$vzMrbz*p*1vBc(OehH*n~dtWGe1s|p8$YOO-RAnP$} z(<)cWkVExeX0aJ|TwI*>XpX!aY(kx(bG=8i&hfdB(EMFARQWAF{z$I>juNJ_h!)OXKvUq)@PvyG#6Fb33-Ny z(8HOu?}7POsd&{3dL`N_rQ;qc{C48r@}zr=sxjgz>^v)_lh%R z=m*%3$ViI|N=i&OHa2<(2EvB1P?5o@08yfMOhQ61IL&b87Iyzc*r%~kn24A-Gdmjv zY$!*{5cr_{XRPDrz$X=*kibxi8nFR)Cu3>$A> zvKxNk=PMPT*N?qz%H}0 zsk}TBuv~Eu3qAJyrB$qod>oh#Sum}fV2gqP{5{xz`wDRtQdP`4-L+!k;?Nov z*!C_iF0yNDHAEK|7FcUMg{eV9V;&^j-T9;nI7q169`iMA9~~vAH<=D5`oZDw5RIz5 zy1K_I`GiSHNsKRENT{kp%bY-qf&Df-C@APhX;fuqQIS%!t)}MV`-mF!qb!KM% zhmeTs>gv^W^*C49_jA%srQb&$Yq{u|7f>vVPl%6);K!i$firxnEaYLc>Zjzp9}=)y zr;61I53^S8RHuKY3|X4AFtKz-)z=$T&p306+SUkdz8LS1V@`5p(kpedR%0I9yPKFU zQrl!By8cS2vd2L?YR$y(GWTj_%OVc<&-Lx2((08d^}M#rBL#2JVmb8rWo54g9aaM> zfMg^|@63cJoAj}zy;7ly+><4`%qJ5>`D3Br0xLEyPCAj+*2hh7c*ogN4O=9p+3~qt z!P4+BhpBg;X=N8NzP{h~3C`-I_V>|WHc2edSX}X&-5x1P_ak4Qi&7o5)wPV^l2I?l zF}CtqsOz|?QmLnEY{`&ioW5(n^VmVYN*`1@1xYW!>$>2b_y^+G9|D(@Q_#PnwLa}a z2CS%Xfz_k$9X*+XLKJ{=gI!uAvhU4}*UN+Pg#{dO?KSS0=20MVXcH49&y3SiMh1QD z762GjQt?ZmdznD5w-^UU#(>DFGm&pd)l+^$E%NlQXLU%cYo$B}?XG?W3|GVJd*K&c zTWF#67gCRhGze|DlBl1D)*ngjXxZ>t%v6}Lu(Gn!Ep(~te>$9Jx^a1FT~RY*K+H;x zLOoDnGC&3_tX?X+P2|f2-$kOAHX+eYt!^hFCx?U-b%f^S_C)q*Fsl0wnmTo=6glC{ zqRHTQCWe|i#uT5+Mo@RNfAt{zdVc;1A(on&bX7t_yUlrI_Rq-4$f7})N0!lov>LTL zLE{p>#jKM5PVaVLV1VMnWtC6d>q4E!R%epeef}#rKZdu0ePJf`U4EIU!cU9riT+5X z6#DUSn<_0$o`cZNI{dYn)-ioyv}~nU&np;pkLb2R8!nvDKk|ZwMu`DuXJ@^EqbH9N zkY<0eep_%ib04JJ-bybuquYBkUd^s>_Cs>EvNF1$v~&?(y2Vyz?lEFG{-vCVHtddm zTWYVcwA5APx48#hO&7zgZ>pe+RER3jXD0W>2(likW(oQkP(Nda{|+b0c;- zlh3K{_K5dqDJmM^Dz2o5Goc}Fr~^|*>)&NzPbr1iUz20QR0KpUoyM2MI%`%=r=={@ z!6vLRwE~54x`pNtn$~nb<<~@#VXdZ>A{Ev%6)q5TKIIfX8!DCW?O!d%?03ftlmksq z1yhF3L*#BtN=h*OKWJ+9ZN8*j_Re%AIJ?GtEM}q`D=5SI<_NQL?qDSHp=90Da4Tk` zVM+ZYLoV_NB~|Z|k;zGV$nU~6g2(=jvLyO8JK$_2z^0>spoPwKfvvNtzgAGshKJ zaw%m5{Vg%MM$yT-l=j4~Z|S6mu$Mb`?=5A~{ME!7MXY+-o%;v(gt4nMHm26W!NB~w znRne8J&_z;Ii)-jFrbye@Ow2ZGV_6WQ@eBT+z4UWLu(C6kIpj34TVpL#*F1DYxmH= zexj_-Ef=fpL2H|bOg*0wEDc&$Ye7Dpbdi>#NCb&PMVA}OlarJALiv199hx20&>6ql zKg~%1LkY~h(s|$MEwTG2@J8~Co*hVaX6U$to?l;4`_Ec$TZn!sR-2?Y$$hTYV18J; zhID1>A%jRI*8i;CI^G3kH8C`^?NCyf^pZ*Iz^p(geDA_-G5eih2$&7%lkZ+ z?^P<^@PmH>uEqal!m}qg*`Ovu2dt(_;;L}Wytav$x4G{J3@Tt39nLa>dBj7I<_IM5 z8CWUy7}-wZWYyudD2gw0sY=gI(GtD$4a3E~ulLOgEs)_nGT_idH)H*)_U@I73okP} zI|jhR!_#}=M0WhSy3@&6z4Y3gy zur(e_qzbz~0;0ct^RKGnsa>!=gTau1Jk|6__LiHsKRDf20!gRi)b+4{?ZdhBVXg2n^QOUZHU0d!!;$5?uC4_As??rrm?Zle=UW!>-jEYF zsV+nBks$-7Xo$MX&7@6|BqXtR|L@BpBpKE?4OxKLlaMbPRR{Vrx%#RUa9z$5)x&$g z`TO*VhQP#(O|hl!&EGZQKOtqmpO2$fgO+Ldv+E4B&XD018zM=_g!d5Iu{b@?-X=8M&gr`Uksu)9k)N+|NM|mTtx-9qOuYRzzs$b@5SCR`HV1O z?arI-k*TTRwVo&|+t1_Q?qb^|+$%PE+=Rqr2SNqnMP;jessv(>HE`>7YWHDNfz9Z+ z_X90ub@9Ve_{=25N8Zypc1+O>+E-+DcDE-Z7{b(1^M|Kb%g%yN2cvq{{5n>|eSGc`M?V-%sLIQOAARQzWVE!vdN?{dMuWDh zsavoWpv29|$uS4Da8wUU%1}^M)o|Fq)UdpwqCXfh2G#JJlqmm_VGL+&dwYlxhA!I- z=CM&0EG{bR%xGk0f;f{uw+w$iF~qo}i*B!A4Zn@!bmY&g?YdmrKNlb8+&TG?l7Qu@)3%0rMa$Wq1wjuk6-B2R>@dVgYrAj=x|J`H z?$Q_`=Ht`D0txkBKpT(&E?G*E1R#v?q`D_BzgX z#x~YK4e#hliw|1ON6JIN>QZ3$1nQvsO9sVeYkqg{oR5ipOw}NQL&A- z3){X3k45lz7vyLg4WCOgOU=Ay|56my)W1*s0|5zC19 zP1ypdx)1JT9o?w@F5lP9;QZQ4)efu+&C=Fz(h>^RJhu=}G{*S0*W`~zq{bd;LOO>~ zRZl=q*=NBR)k9bgf70&u1J>hM!f5z7e1G3Mvrxs7l{d@PSN9ygH@X73B1NaAgJq}P zNGIWy&=em^+X}hAHOGmB&k9q;Vb&hbm#{HT`A9FcfYk=mQ<)d(T(In9#MPQ&S_@$n z0$K(*zssyno!`?f*Z(A@d2;~)hjgy1PfaRPh@8vGR{yEgF7w08m;F46z2uazYIngG z1f8Q17k52z$YDXfMDKZ6D`$#Q(#Z8ZQN&BSM!3;<2naNT36;YxAat));JZ|Bq#k9Y zo_!F?3OS`Q*;Uk}kxKRKj6;4$`m$8BQs%{r7oVs0q~E;x`s-_i@7s5`2`$ut(}YOP zRChU9^pZTg#6P;iNEN}wj-hKZH6t%6yB;Oyod=PjD$$vq_X@KC<mq3?vb?A?N&tH%Sk<%1ma6Y5#tFxIpsJed4a({0AX!!7PX9wU`PBRXSdW;TE}?6GPuU~F@j zXpRVq%+CHyQOgS9MG9kV{@{e@aTp!Ul>KD2zqXH-LtVT}#HI}WwxtA?aC*`U2^KIo z84QrRYAoq?qhmP(s-+Nv7H<%t-*R*P!XBuHSP;?Wjm`8fFtZ*SWLtRLt zP+7O+Rd^KvZ1uq3!JCkWT|g~A;Uh{R=BJ!*u|2E`jRX>4YkYqv$MLrW&sy3D z5dpgY`>goqiFA#BSb+bZsrHZITk8ob3*CUhM3s7uTcm|_7HmT6v3lMb$+c5EOvX^Q zP1kyP?G>oGnkpQ**PvFGhY2!Pqy;n&zrs_$eCc@%?9ak9Bzn?1uBFeK>`IGbuOaTr z5j{G<6G9nKMa5}kEs$Y&bvl^sio_m2a>nL;BX&-drfR5g< z#10P?07&FN%f~DmVY89!e)$|r^bwv~OiaALdVKpU*a+#2Q%@n*v`pYR8Zf+mip6bG z_)EPaJS?c&eR+ELvT#mXsZ(dk3J+G-M%QK#i+{$As+(EDL7Ia(wpBE*)yBn!yHJ|% zZGHpeK$OE#Ex>b!qAUv5W^*uU(6GF>g+|a>ZnEy?&%lNTm`TAWe5L?VLYEWSF#~O* z`s;?wZfnc@B|*>VR>))&N$?|T#cKloN&ObdZHkX;>2@ExoJIlc$22Z1T1ySHH{n4D zX~w;YvW!!c+@`_)jEO%>IYy~n>9us%8q4!s?3h>rK7;5Xb&lz*6s(^`^MeRI);0|w z`j6HJLxV^(UnmR9TJ?YyT%%L(k;fm4+w3JWw;_X{VDfBa@gwDKWtRTh;wi zSL3qvh;^tXlT2AEt;2eol0Gs#8(@E%k?>?2FQU4Qu?<3xx%Ny_Dy5ADi~ALGjau2+ zqo>#;STc$~mTpUiFFj{b>XR})%rQUa7wH%H%ofzf*Rn}3XCbP?M#@4GX3g`DZtEJ| zN{zVt!7FZgI^xrbL(6mZBC49kVE|M(6sJ^?@AR)26~stTXz*mV!LEgCt0eVSm_d2+ zUC$F_(U~B6jirz+u1ypp6b`byNG4rgHE;QT910wEi9*pQ*@Rql^mP%X=<;t%OyT7Q zgBa;Y1{$Qvi>GpoLwE*3P*?kLhnEzW#(NLYS4^HRr6q9Iett!ipA(KK=+@dF2{edk zxA8Zlm}l<9y*WBK4^rrg&x}?~u!BXY$#RFcisCPXA1Ry~#Xh4vcaxz?sPt3)<)e=O z>Zn)n6}$fuv6Q7l|6gK}--JQ}?nA=$@?*A9SpZFhWZ^6Dx;$%tuwIxRk12yiILIW| zN;gEJ0!DAh!XJSLvLgp(GWfvgvkM@RC+QB7Au4>&ZxYSDH`d%>vb^Gjc};Y@HhXbH z!HzNNCE`R-`ESZ{W54u<)SisPNtco-V2xpRL&RC7c^2C2$-iLzGS+m%KAo&R&yl;) z@v(pTmg~89J)M0S4hw>Y`TTbKnuFct(qzE$M^v)Kb3@?jX9y!1h3^sslZnZMz{VqU zTtS}6e+eS@qdAPT3Ikby5WAn5y5lz%x&u9#lqW51eohtGkN&uLhqq;ZX(Qm16;=s* zc8=#jY9z1=%jy((FJVDcR3KIG!H{S5$5f$vIx|*1neYM9B@}go7>^e;#~t@8w^ ztyD0_Y_ZhrU2&Bt1`!38w}&oT4a*TP002@c>?zUS*XI_$kaH&WtIXewpMr=658Ey0 z0kSsa7T2PPusMV$`mNaPm*5IzWAZQhDfjjr&mGa|Np$$Nl(gQyb86|t!QdC)?TfEr zLa4R(h$B`uwRh2NSjEk9Z)F0Se>jhq=tjx=iJzA7eB*kahhf>I;b77BCz(8y0#}v; zGy541_p1{7hCjl^qpt?6ET8FFtzqW7*S2v6(y+#$CbW}e zAmfCPiy1lYTIJMME$43V#y|;n)zhDnDTov(MK2Lss;A|D5Zne&fC1B!ml77#w)V9I z92(D1b(JPb<03s=U~Cp;Lt-pL##Pw4D`&LZW`CCjM)1W~nc2mAZ*p?-vrjzn=$?z{ z^1Tu_f1U@P86%5@vn4Ro-R9bcsY3=ES`n^k_Hs*`%r|5_%Ht2IiD<1)RXu5)vi-mH zn{D||-OgJl?zVTrPf&;yBu}am;5uL7MlaQg%CUnM(d8m~sVwG|tV@fG%|5?U;v!o% z!8VnDklRG&FYQvocw3&v{6z!3!;k~`l4brC9G$Z3kvz8aYBr_Djtdb9Z3giYE-%^8 z?~w673dh2YME)vv#LyQ59^Nu~V=r|i$IQqW4W=wnd@H8XBu>8sN5`Z^wl355>v_Id z75)nEmoSg4VAZ>I@WzX-K$pHsmBS6Pv;*Ux&xGjq>>m{n<3Ofw0Nim(Js79CuT^+3LCxfvzta|N$`~}wx!aXQR{bh# zd2Z!Eu(%%RP|vXS+GFj5k~N0!q#>^*^EboPIxqL$gi!J3al<3UmT;joF!3g2*iD3; z{424r>F;?M3PW3V;UG~JI6cHn9g`0AIi2}&;E@@4@?|d!p8>i5ECr$Y_M$kHi`1?O zF3PIZxj5h78{(EqZ1fkt*P%Nc0<%7|He^5?Dj{CX@`c`!(#wr)s<1! z$N=D2EY+s&af8`z&e^*pMi>yuY*6w9Az{zBe07-Lj89B_Y|h%0oncG1=j1`5J(786 z8I^x$KDdNh{7frZIx3W3?JuP$M}PbEEsKX2!LrnF)Q8yOEz&14V;{Qdzx*E@eWZt7 zEcO26RKrk!;=tkGXi}0>J!Ucjxx_RS{?EoS|0B54M@pzzGAQrXpcE7o&kx#@rpq<- zow7hudrO8zBG87NtTrKp+$wpjS@j`KLIm{#Yh5N=l{e%l!QO%HO|L zfVGB;T6JHLZ0KVlc?jx-8_&k6;Rhu{V8A&HCe81k3zQKBh&sph{4&9%TH9O}9*ZKu z(D}6Dk=?yoAsOX)p;=sXPGa|-YLTJ3#%-liE3k99QftP~(@Az*%-*hq!#j5}2L;3a zxSHZkLk{c8ntnqL4u*aM!8cq=eDbhAPDg(R*rSFK8ZK!Ynt_Pr`QNj>wX4zqyhZP! zsV_V7l#)I(z00FTghCiZM07>FhuW_4Xjmh`>Vwtj8l9O5t*mnevrZ9L#&@ggYmRjQ z08ZwNjEwlZmsq&)Ta~)geR|#$`-jCbhZ`NM7 z8(CZdzg`qhe@J{m(J^i%(b5?rz2{leylskcI3(TQ=x$zE+%;OG7!(0Hh~bN6(f!iu zhmv@qRJyrFql|bEsQRG<1*PHs7gv6BC~`^ss*@-g124iG;i$eB^2@DAgV(wW+o(uu zr8o0Vbvhud`DY7Ttb6Y2rIrsmsL%dVsWGRwr|DolTN&oT7Aht4$gln#;EPK%ha3{t51$e z^W+fJ=q53qbmL4M4Z0ThpjVX_{_S5;F7b|ukVJT+a+!~k&N-%t#sgX~I;GTPDyK>n z47lAxuXP{HT3U@XJ2T(N}$C^*WU$lYSeq5#+e+9EXIG;K#( z+lKY+<`9a0QvZaGy+EBXZs3!3be1fA9tj)K-Q8V4T+d;-2Yf>(idU@_K_>sV{@jH^ z!n(5Nwptv~6wbCDF7u8sd(Z8e?`B735kCVU^d4gYqG+Sdw12UovEd)piokIIugsRwzn!=UV zDA#4kNKRh0XC&q5>l|2@_1dcLPqN7Y?2FV~H1A50bUyJw3&c-Tzhw5g?(#~~uZPv} zUNbu<-aS{$N_Xpf^aS2?d+X$%I4 zX|kG|^_;lpr>7YY=4w>=X!_;#>X11hcV06A`{04f517?=S<+!yX*K2}bWh-xS>AVB zn?Xf(o)!g|eVDU~iViINq&<$o`@edj_wwK90pn9sR=<$5 zCm{#bQ$a})U_86=eAY_hYyv!y4gPh$&;8BAgo{VwyFQD;1{65m zKLBS!2?Y<2d8F{*zXgE8-Rsvq?_Xye==*`g$hf$oFS6cU1ubt-FW`6fn?-x%QE>uz z{|C~@Ka%>!$sSWHc$PQ}`zDJVt*KEk%=B~lq=MFd zA`lRQE8DyUj*_}x&;R(inv30`p`pD6F}RyM=+Ka~ot<6hGoAU_2jWWPas{P2E-Q@c z;!=5;hTeBhU$nJHK-)_QN@O=x5p@+8*L&Y3fCR-7WJF!)(zwyE>jBs`Ge9zH>`r|b zB}C5kWa%Z{nUQWvPfnyP-ld3aSV3c>*Wgs>08p@`;q~$nVA^tJ-T5<|5!v5A@piM4 zfRk~_IcxD|KHxZ%8bBDy^nJ#DZ%GIkV3XBdRj&#yYJ2?Yz+UjDJKU>IRf=%;^omhP zlb@(Vj?+@g-M#LtZlZq_31r;Xkp&#aK$zGWU;<3Be)_GzpRX*{&DhU76S`?PheV4J}3Bw-*hterjtgf7$MZp~fTLFA8Dpj`Cc)6-L0 zUS@+XFikK0UV$)+hjRBUjPW#cTzwKKP&bg;k!?61FL;*;wl(%*&}g~S^WN-ML|kF) z-TCZ0Gtas=Z!EVz*2>Vq($5Y0_oW3YJ_<%!C#DT+#Gutdr%ac7XR&pwk1Etw>WMu$ zc0kuS-9!O!7+u&Z3EBhT)aKt%^r0QLRWj|5=m)raW=D$=2ya{He^=(Fw%;}{geTLP zjqyih$sOM{@L?7#r=~`okBXEjje%JhP3@=TgK(?$&D}Q+B;Uc=qnDQvOwEqE!2C=3 z3f|d=%1J&~&{rI)#g6{NPD>k`&gOZ*MA>vj&Es?QYQfT%yyb#6a?uM9?B$jkCE8Tk z@jUt$#+?emTX_7)m`zMugGv5R@1c%wMn^_!mz{WGEyQWxr)O>L;&C)WC#uax*{Rb%J|^HPdroK+-ayO8P9Ay7!_n$7cF6?2a5T zF#q#GY&T-Dn|T(@^0hqA!pl0id~|h%7x0Njnwu8%?u1Mfeie7ps;8Ms9Y~q*oZr8H zhq#^jE;;=j!Zgy+5BL#O+7BwSS7)*Fjc^&=PZZ(AP!}Npkd35lOQo?521CDU_EqE= zsH5)AG{-HS5PZh#8|zO%=RmwR{ZsFqw}VZmw73R8wp|auW1RdRt(yj!2KQpf!WWUU zg4xjowyt?%&)0J^q0Rt(CIQd{pbH6=J9kkxR-Sc-oT(R)Nk=n|ackkcrZfLAE*82O z!N2G`uo1&c_=*Q5YibLB>P<4Wh!{%t2sm}S>`nFsj?ihA8=~c@eE&HklKue)Ke*+1 z;!1(~b#(`~a46#7k0zJ{naq5l#Z?Iy}5$pQO+Nu?SRn~w zU0vPI^#KMW5qgLTXVss|D66o${cI?t_gkZ5mu#Jg-m_gpa~CDLJ%~)b=#=`@T8Qt_ zudrNFJDN_Ibcp4pWA--bg49^cap@E%KvsKIX6+@Fg2&tcK5B7xmn=qkNz24Y+cqgY zw&6&|V1Q)4X|3vz6U@7El(577?Q+N-IUG@n;(9DWz^LqE`m27jn1fUP5kydSvGkP* zcBt2V`X1cOL7#msfyk5p!lZWo#nq3?x~_1 zfm^bE>kFW{zw7}6v8ye2do793Efm_jMZ$&q&`EWx=W~}}TD3bJq~jF+NvNx+tCOPm zwzszjM2Z9>!l_GjPWkiq1M#fi{)yV|3Y-m-KP+wh^8m$n&bC3>TzHO|dE-uB@7>dg zNw&9QBqzIyd?_|c3?TA2HfYR+1bB(+cLpEG^;Ag|eB>arhl*VEl0!wWSstSMOTePOt$%BY#2Fh{f>j-Q3*aXraN~N-e=ao zdH`-iK>{>2H9-y!!5khPVE{y=q-#fz`-ay~he4*X89q^p45*|DGu7;UY>Z_bS_ad8 zNI<#|yny4~FQ+Y)PZJ;15qV|+-0^oZvFmD#5h^U<-Ln!{!qS_adH0AOxzj&J%Ij8ayFwI6u{ z0wj0)D1b`?xbFaV;0FM$bn+bXkG#U$x+HYpM8`a;xl6>3hD$CPbM?{uEBt!(s%Wz1 zjQO2?*M`2N)t*Cad=UD5wM|2yDr!HNcMg3WMU1qee^ZV~H#5v$-tRIr0Km|JxTeE) z>a~yVt2I2%i{C@RAi>Glf_viw>EtX{#+892QC zol+kumTvuBCEuC{Xg#_xvbX1Gzj15Q1Nm2_bW!iWxYDhSjXwDNdg73&J8{Up{Vhm@ z4uMfun8zD%6I$gAHt=@@HwxtR5&o{$9OvJ;`ewHi!+PBIB6Tbm4E&jc541Z!Em;26|&PBLo ze*>Q(&HR-vOYJ!wh(KSxgdoAaM9(fRj5>mFk_E)8ebm%QNOU|2eC)Se9gd=GzriXi zDgw3(caDx^A&?epRG^o0J5URH@M*xoLb>V$!&iU)*0eLHbn6nORnV1sQi$Q>cOg9B zk>FiR?X|M8NyzK4$XWAHN(ikpltDF33dE9ART$FTRJ$td?1zVu0tiMmza25WTV$k0mX@O6aF0Qdbhg#5vHkv9`FD2&#nY<4K~;~B zMtA@?doak`%a$EN)}NO2VeYc(3>N?dK>_ zxZJ6z`l=x|IN&MUXwTU-eD!a4)jNE^cL12Sv*VXH&H5JA)! zUBqoRM5&>b&w84cN$eP@w}1htJsU0D*aBJW(>~b(vAq~!&Ff02Xsl6^i+mb~H*O2x z{hJa&#%oDDwx%=78KNIXqvSA`s{kk@mat;`}5meQLL>U)qsD#*{r0EWlL{6SsOW==UPbh4ctWq2@Ktx;o36^p=L6_l0Z+!heK zYrqY5CjK4j`XEyYlEmzLVG6RuBqRzTCrTD?`m>}&2Ha;j>G%e*sRpqC1=ojf)@ z48+SfH8lagi;H?-T7CtwsZyW^q_s;+@%m4z6fjt|e<`h2^Xa5hP~P=usHmv?6|%Oe zS)d1jUmQhl6Em~5ri;ZfEjD`4P5m7xHUN`^ojAcZlPtoQ%l_LS)Zu-xfC1DVHD81D zLNEr67yd8JN+19`RE?=@gO~TMXYFAR0d{*=qP4x!ifq`kwpaROawzP4W55KiPqRT~3%;zGPMu1q`(&M* zjj2}Z-x?=0!cQ;g#gk3POm6I&U~1NLzm%s=wswAig+5B*w~HTBxmbdT0n5Q+H<`z} z2JY_ejySlgp(k)s)`%&M-rin=tE($;{&QOmWw1XT;(s`G0ZxuX{E~UsE5S4};BZ1m zM|Un1=^GkC13=%r0#0sxje6|AY!@E<#r%qvww<^M%Yn~#Paot@-7gkgH9?F(hm5Tr zpumiPfJ_zy90s^7dW{+ho_b)1@Lcx8Kx}qcT{U!{NVikEtbttf3!hILNx1r%P+*tI zJz`mzrTO-(jhIhnjZ<$8PMtwqvl!qBai##4M@yC3zG&N#LruDe%+kFXO9gd7v;I+d zou$!i&53X;E@LS!^3?I{+QRVA&zJpOndx^(%Sko1L4C&U7cKYRx<-s}8`fPded!T9 ztCNpVih9eQ&!om->v!4`Xv=fIYzWy&{1N*rU|rUHMj(HQ6=sq}TY)P()PW~fl%mGt zc7OvQf&p&*J38XVRFN^Wvsw#P<2vr^m}%bUn&4J4cNhpNq~Nn|-H#Ggkkc{i zsKtJ5wKsg;!pwG0?&$Q8_n|qD=zSK3?zx`V`Al%{5Njvco)9)qcJQcd?XUW>^L(+} zg7woYI&hDhTe|G^p1$)*=_3>P-bRA{q#_AW##D^Kw6ilEOYbxPa-{pdSzkQ^B3^?J zV8h($y6-`efeO^&Zih0YwQ@s+{Xr)k5=(`CU-(UI*RQ_U-M~Qnk4KZ+*@*1Nat%Z< zYlYK#zLo%?0I7XgYh&gAVF4~bx-~6+EEEH252sH@i^U1!9Bx|guRfq=y&+X&2Oq0r z!vaCW*qL}if!-~F?v3|QrsU<2oev7&NWRbCa)nd!(pfHNpX2hA+ns>kDx6O0_uWO* z$NTFZ0GM-a_Ebaa41;cUm_d#L`o^F3Wb_;se!U#lnw z;mdW%+Dbl}UQOw%N_a2$j~LHEl~ z48EQ1_&@=#mT&2*>)mT$ot(DG9c=W-!a{M_9UQjz6~vo$%vg>M%|%vr*qaH#$mc4r zc&NBBfg?|GRulpEXlTIa9-Va?I1mxM4Uf{8Qojh6JJh(P0y0JK!G;A>kuD%4&&6%Mgi06i zeI*EZ8)@s>Yt6WKA`|vTv33UB zR5LztV-LcPMME@%%052Lw&*NkV)~@tHIDmyz)8vRHX;oK^^DETWQFOI5v{=1$Qpv~ zUo3u$z$|SUAynsJ{EO*UC*Wa7#u}--d{5>7_aZ30TZ}8nc$9{zD@zvXkJRv%;I791 z1X|INr3y>a4CWo1CQZL%UFniz3^Y?A2$4N)h*QoBwsUQn9> zWmZ#0goZcnEg{VpALfD=A?&O)9>raj{~}f5v?Y)3)zwwQFT{>WM=qN8TkiXnx}zKv zXRa^LZ)_?iWsm0j(MLT$DzJ9)syETGpy%F=8{mb%;+`*{PoydsmP|k0W92WqZ?Pd? zyo8c6bY6-%b&#Lm;ViY?*WJ^sMaovpSUcSMBVZ82Z&<)EH6}<5D>Z@`N5(%mNJ?zY zU+ans9H7Tb^s262S4!XB+p`u5CTT&J+e4R(Z?_tTRg1^ZFawpvbX4dRMd6-V^ITuru((AiBaF2=k}() z#QOcgW%|#YD2v7=!;sN3{Bb&KtE1PKf+EUpR`gWC-Os0mNpk7&egiaiM0rs6t6Yki z@2+vHZIbAzm-`ru{U~3Cpeywq`$=YurgLmqM2#s_!4E zQ-UNiXyu|#^8o1>1I~a7GXz{>&NXiJXkJgV?=mMpyrYY3_Qq$3;Z^n3W1PQMPn_ub z)BB0fup$lcK`$beA|DfwlwnK-`R4+&L5x-kTVDTiJ-N5GQYp`pz|$bzq^Y3r_!-kv z>sH#7QiC#Se!};fbx96m+2Q`>;8wb!G;F?YBV(5ooU9tma3OIDPTXP)X#)~XKJgl@lf;}S~Dbdk}CFOEsN;JNRmH%p|I@Z ziQfS zVS~@8i;2ldK|SJw*qlK$tgeq!KBn=3@!JygK;^G$@bcGDEePbLUovJMQ+Ay?jIiQH|c%LIJ}$rWSV-%E1>$zz;YI?Oiv?30)n2mzG09og6Z^=pfX+u z9qPaz*+Mzm;@B3Kyu<83BNE81>WzN7?tXlZI^29kt>e5hWp83jZL1d@)>5Rw)^~Gu!wgDhRrlV-ottEF{NsNZSAwzv>G$)i=IbR(2Z5ZYnMNsXh>A^2@W70Iui0!uQV0?zcu&XQB6hNzUZb%QL3o)A}FXx zQKU-|5m2Ow5TzqX@4W;9f`ZZo=^Yi2CcOs)Y0{*3LI>#(S}4g~@jK^y-#PD$JKi7f z-FqAZldQe>+Sw~}%{AAYzxkUN{r^I99EbxP&IPeiOj`@sP=N#jHW z-6q9KAL07!CJuohD>VGO_?)B8wPFQ5DJ=Be)P(vLn;Y5CIX``w-qw#{QoCDTp)w{! zKw~w&5J*g9d*FVkxw7ed9$HvdQHk&?p5FE(N?cWb_HM4mKyWzkLlOPtDZuIN{ws6{ z@-u0}(y{wiT`4b@x%}+{1YTN#*b7^VO>pFp(myaoU?+Fc$b9klp=Hmz_cXuiQMjKaRaM|TtGpY2o}iQ;!lG$mg?hnVe@fL) zg0dXGnx>1lZ?{bkRHaX3Bp@$#L=xKnju5a`or4WgFoxLuaKC^Ed7doaJat8^_UBga zlkSvIoac!$LufPyqo$*enF#h^vcY8LIUR-NMYAsmrjh-*4<7r4`p=S3>``VOTi^1& zzwW#OoD*{i=Be+M;rH*OyM)@iyIW%UbhoFqU@f7_ys;yLN|O#^Zywwp8x1fpUl4D= zj@$?Di55L|z69Wp)(yAPs-hk6d&=AY4m4_6T~0eil6pp$X@_)Atf9A~QPc?>QS*lX zfI6ArxBm(T(-8~vz{#IcSxHZCP<7?+K5}SqQea1ixz($g_x|Keptd1Uy>)Vz`vKr+ zynOA>O&SZfShHW?I}X8M)_nAzz9^?D`1(qNoNx22)-UG-_==+7;lEFQEt9=EQ(TOE z79i&H)eu`8-wj^b|K6d#tWE*!RHYSfbT?B{8T#D$ZxBtN*XjChoOqX2l^IP~Gk?B# z!V|Ay)Wj}xb~U{6Q)Z`dFpH)HiOd;83ia!`!vKo56e5c~k0>kE2WR&1Dz^*~M;mY3 zfEdJ47}?pM)=LZV{ZYd%m+&XkA>0D7%*-VB24GIhNs^!4^{MKLtJ!&B8?ne|i62DA zaOp=)FXQc=KJfZAI`DJ;3qs?T^o}`~`|n_vhqw9%LXVo6)s$l+++Ou(RDSn$g%_Pv zx%)p#GEz;EcxyTE^-l$1Oms96)ZWf;tPEQSzh=jc_hYg~EX>8G?a$#RlOk#jOH4Yy zodyq)(zZU#l^J$^L|c%CxiwmtW^UpcrnFB}w`mR@{7n*h>YT9+1nlIDWoZ|8cWO!4 zXY7lf%a3jcT=g1y{MgQJ^SeltWPeq{jOCZdtu8V8F9heRIsYA{4_ZKI(Iu)M^2_5- z4)3~=$IR*eS*qH!kQmCdb}LCyVLKhD z$uVc2{dkt*2w|=`A9WipzQzTwnbBDo+_?O;XyHKAt$hT6+d7MvJfrd5aGFnbeVyZT z^j!&{e0`iQ=+GB6@thnQ+u2Lhkmw3BHrj7uH>);J@<;NoU^ncKB5+64fK@1E<4fyP zO-(wG3K3B4xM?)-p>kyT$F;{E#;ydLzPY;iEv8ZDH@LnFUUd~<7%zN`@dpvmZD+b& z^nUf>`_Og?7U4-a_lE{Hsqh9L&x<@8Qeu`{4#?5Hk znw7kp9V$PTS#f?cWmqARo^`p26#qV4-%F>#GggXwDe`%!pis}~sJErMt{*_)6~^%w z>ea?@1-?xnVm}Sn_W#+u)SXlebUZ*UH7tGG8{4NE)Pub0y{MzupYG{9 z(zKLY_DHTx3^NxB#~IQvE7zAS_q`B{ z&$#wN%A;i@)4F%5is;#49Ez>4vY|mj>tkYreBOM}kqP?Y=tQMXjx?0K-u2)Zg?smU z?2m(w7vXDrEdQ%hUf)`o!kv+PtB(1d6>Xx09go1ZpMU4aC-2<_xfNmE4Ufgt`;)su z#RAe)s5hy$f{oW6w~H_s-C?*`bH4nz+V1o~vAX8c1K9obMtej|$WZSeld3^ISFM~Q z5gFXo>W$10tcs`)@|^xhr)J3?PFxjVc;0;csMt6P#q#^;(AQrO(8~)^y(gmYLyVW0 z!AVYBorTo7`D;GN=V|s2L{;xL8pRqVoBH*=qA@tSfANbLw{Czt@?F&O+n@U&x;qSIG8EkF+1FiyDFr18`Now@r-6u}LPYdrbkP__>b;RzMv1u#w zmEX2R$<(-8y65T&j1+!+j_TFXSuM0XJcMagtYz!hKG{B7uysL715uBgJsrV`BG*N~ z-_SBLEuNk}G11O5czRjDTg-+zizvlGck)&5)AmTQ)>DxXm=Z6TQmj z#d^lRYTxQCb3eSHBe*f{mLN-V{9&;>PB5!CX($C`r!4g%THi;})=Kl|hETCImfV~8 zm0G-_6w!E)Sk*;avn?iy60XD=Yu#nLtBT zLZe(oVoYi9{H^n!O)+kVM+DZruuETZ32O#JboBnoI zfy3?`-g!~SAZpn&R_lA`E{l~&L7}84i#T6Hldd%TFVrb&<>aWPYOnW1{ZiLM(=x_@ z057#}1NU7q?YeED(>p$QhH*RYVm03wL|NeMLu1z&SR})L5Y%G=eCT9wJ?>bUy*g*I z{Sf;3m5KdE#98t%6F;hfH0iud_>VrWm5umONZ)<;C{)_M)%^{2=p7~J*k?T+`@pyx zu!8Q~b$Qp@dvJj*T!(70m?KwXb!3{&vx;a@xu-FC!(Tg1vtJ}v(az|#tBKs4=wQCe z{Y%SwVDYUQLVw}%0*4cKU|(^ml3}ucU#WRiqWFh3gWovo8h~Me) zaW`jWK8-$mik!g%Dy!8B$r9Y*bk*a}X5p_aOeq)`19W=n4|{Ab9)&Vj@A13qWx3U-m&#%+!%iG-k}?{svknY?-YStczJp#aL;brt4P;B9 z_P80Xn`Wvj-FKW%g1nmkJ`m40u0as8wiA9(g3(y()9Re(8_T>AZzqkD`##m>dFQ!> z9j-!MUYYJQFG7bhazC9Kf%Nr#EN)mZ-;Lwtu^ZEpeAZ@dIURI- zVqJzc$*FEINMB!Fp+iVd*S)@nOikMxMQ$2S_HjSs$NVZo$+)e+D#8`o;U=bJCIKLX z5ff??>Q)yq_=UcWkIpj0wl@x0cIHR3C@lDX<)PQ(U~uLhPn~XPyN%%xkP=}-=ewi_irQVhRvEa4nV2+?i~pT z&sv{JIvnp=7Mpc5LGxj~_J|W*^uDn5u!ZFt(`edNa<2G!QEDvIwY)2vFT!)-I(x7P z3m!*IH<7?L6&Aw&H3gB!*3WR|aTvcQM%#0xD-+xF&O>N@g!6576@-ti` zO6eM>le04|1xYv4!XaRl0c1i#n!eO;<$y(B;q&}!X{qM(=g;G_)bKYfteQJNG2(f5 z_$*_X=KR~=qoX;lmvS;Pu5LCKu?4!a!k3?5{|scm9iK^-_R(qAF_o%O49Mp)ZaCYp zH!gS#qvK|V_WyY*wk?9J{Kps=i>uaA`zvgeCEx#U9^~{_nB&q zihPW2mTnYaU+aJs6rpE})lOe}8i=Q|=VfEHYc+X>jk@9MbZrDIqShs)?~<_fr0u*= z4fgzk&uzQChnHFXSA0wCvG2E%RFE2uH|6KIOfWBLGPFO(=uy#H1<>AZdeJ!n zWXueyv2!!H)udt}54p4cIC%FKWXzy~6Oi|$d=_!Z#O6Ca=b+Vugqp%8HP;Ik=5u*( zcGi`FctX#N@1^{_;7)JRVP|3C$KnIEDsuR(v_G^VmRGLmf-zGKxsK@bBoWwRhFj&P zuGqa7_E~aH;Zg@OB^NFY&2!Pnx-4WYW@*P5RTp~XbVm%m&CAPFiEM>in`GEssC;4l zTbyucbSUCOogYR|>bh1Gy{rigp{JbAWhf$}4TCKh8=8!SqO*m`Yp__R`R&Yn2*$umc)+MZL0qpBqY_ zLFa{ab!kM!jW98X?PlfPH2)SMX5Q<=N4mHOgg1+U&F&FwrYu%g=-DD!@By4F{v6i}V$j5C>u9rgGoR1!OR7Q5Y+SCAz79py6fo zq`mLiT&eyq*DTs+Ns-Q$(q<2B;rX3Rwa4bCo(#N2_KcJ*8w^BD72TpZ0ydg&zF*x6^rYPs%NaoO2{oCaav zrqXf+$*^9Tjt@zsri}i5v{F|M19hTm_Fe(i&YpzJlEH;Yjt5FK0cKsJ$s?x(rH=OS z9wI9jGpb09D1rn`lPi(q$+*tE+|u4ki0hjjz!gWa_Sux@dZJ5#^Tj>A`M=GM9bp8` z5;w;lzvtFpOD2{YxyD49nENsuQV}6lVy{Hgc~-kI$X@VUfwM?1qpt0a@`OL^k^JCf zwnrK-M#v>DObCp->&()Iu=SH1E@y|-lkuOui21GF#${%C7%Yy9OTEwMcW7PR0}5*D ztODCrCi;)npzH1tDRMotuD2Z{b_v$beuMC-=*Bjo$u#)Jm60WgpqQ4yrLm4W>>CDv zm00~5(@0~)3=gF|E{5gj7oi^&0alZey!oa16^FL8Tl47KT>+2x#$xU|_cfhx48} zoGP-=1N{NeF~3=ED0YdUo=&7q=i#8u>AbGMyo7Ys<})_{RR6HN+u8 zI4Cmfnj(Bn63RPl>$@%^gTlk4WKS=@xT|~Eu2|9=hZ*KAafyUYbhK&LR6Zyn`tF5b z(Jwq*ax%fqD`vXGwXGt@Y80hE`XIa9=e`Mgmg|??pPJwpyPq`H)sT=I#LsxAf`zF8 zT`qi*p{!t5w>f~ME4$_ONc(;Y>2$7@gT#bRK-}(-B#o}Pqv%3)q=0jNxtOcyifOf# ztwf5nk5`kl!*N-NPJnJU+?3LwGfpM=*Pj7?D@wbR-6&xXK163m8Tko9q&rAoI9d51 zpXncVYUuwMJ9X?dqfNKuE&R0mqd_y$X~~W6@aq;GwC%94N-iEeYjbJ3<(>J{=UTO|E6-%N=G=M+!PApq#h2WS_mYryJ`jEeGCWb?en zzZ|8=cE?bYy8XgUU{>x{_tfQD5kNe{XZUBzE5s0M%F;Jc+dR z(Qm7`A1PwLStI?r-khg!5lJ*mICnX+=+7^;=Rt{IBu8|bpYM-u?2qg0l!sGIj`sPF z#PUDVQ3-=ulhT+aCAQ1M!~ga$0tjj9#fXA}NVUCiR zX#@klXuQ!{oQHz@x<11by}2d5X~!Ip^*!VCaC6Et_SqToX=%X=yzeCWg3d>piY1ZmAi&@7Hnn ze<&en)I*uHg(nncUw&=P$hWKg^xv@n_SLP$rE@7&T zI0+)VWWZ3#=MvF0iT!OYH?>(pQmwx}eE`v{`=-9<-76&;QcoGGu_qNq!#5?o)s6pu}@_%Ly$M)9pdQNiU^w>aVUjk^Q3 zGFh}7V>9gnV;=3a3}f*t&!g!5BnZokig^pU%O8{uOigu$ef8&WCy`}?FCIo!7~G?D zv9y*3J3PjSg-MHlUKpbtL+MJq3b@`Kg>xwrQ-Gn)58#0`B?OVAh8Q1HQ)0kDIi5&e ziGJM*P)O$ga%F5Ri7WA~OXpjLK8skmRh?ywbS-5!oIQkOH453^^4detrNTM_YFzJ{ zLrXI(3mhqP4YFkoQ%_>YU_R~_!_Nx54=tG~F+IH_@oN&l$1LnFh+q7YRQ`u$#U}Z? z{`#JmZNb=S@(XP$j&ajT25VycWSoA6qsKM=_LRqS6FjvUiRUl^-jZ9)EI` zx_|FKdbxl9UNBwfFUQ6b+ppFNl##A3ZSUWi-x_9e36~8k+izuESbV?`%oY#q?IF1M z>MJcRtuIn2iJE!&W}(a0loE>R3JMByRJ*$z6!O$vZtQTn#ZC?SJR`xJe?3bf-PHLG z`0i{LAx>vY?ad9RCPW7H8253iRx7NjizpG~uoZ_0G4wfbES-(YQY|6xw@ojlZ8)7V z+^$B{Ua_4rF1^}cJzY{Q2EIF+DVo4};i~$D!BYURx}QX}Fair1N4GY1cnx=&#?E@-S=r5^M&N`W1$zA(Q zo;8nck%I%qs>;tJqN{7pfYwte>5IW0Q2S4I&c}9mio2z}D_%ORLIl ziF&g1;_~8gUm=&EKLXSCZiPs>IXb_>xwxXR$D^P^o8!lWgP$c%3uzV~blp5GXo76- zpEK*0Db8n6SH(cTR$`LrP0=^SKCzrDOGj*a2BS1+aV_z}{H4E*bQ6Xmbi)cOZ$bpr zjtx>U!=AE_s(o2(N8$utUwJ+=+fCmhjpLlGMH3Mi{i=Q}k&`90DuJq{t4KSJ>JHp5 z>$g%yXCYzc$nvpvQU^H`UNx_fzo=OI?kbC({DsuV{apgq9owl8B3v(s#u5VV>Re&bCyMi8B4e z7Zz5!nJm{HX+}+lR@)SI6Fft^sx`$j+7%Tg2W3gS_xBy5!X?k#_RcCJ8#Wr5y62j>Cx%QLZD%bN$B2qkGJ=j(36h!69K4vGm zh_X8K$@E!XnIfI;_=lAJi3u&?dE_wIe}Ug!pt_NkB` zNN2>C+jysEprv))z!&oxYW#4SH}o3fG`Rx~<>cfD#sNzDe_9&J-^_b^B+o&5wKX&$ z{3rHi!(;A90bloYR>+}wNwIv015Gef*YwmG({Vt6F7AO_v#Oe^1ZnQy_t{+|ghWyf zL;k~ZN{BO0KiKQlJCjt8L)0>Oc+>b{T@P)iZ$m~N%RT>b+S_yI#4x`f7H;Cu6*jaR zDJjrik$1P|LqcfPUjP18^OBJzCv2IbAKryl43bat4eFTyliyvy2Tm+FeTx4G*xw_p zpRHd*j}#e3eE4u4Fu5lh0#c>_YM0o8XKN|XyWlvst9QC7E7^lY`w)bR%Ea;Y;+y9a zFR@}q3i*F}zD*DtlQ!~AfyI+!5)1#uGKrWa`7tnmYao{5s{ z{L6KGx?Llt&fkCU(hc=ZkL60)f72P4l$`xpGjd<}+DtF$DJI8LgeFcCZ6n*57V%E9 zv`gV<82kuro-9*9vhpX|kRCigo(d4So4U9yjEov>e8F45C!D`1dz*TQn zwDA}Q;{)DZg1X@PIPzb>uz2+7T>rp83#fp=11ParEZ+>~@9nv0XlNMQ(TAx-R=K%e zt$Ao3#jIy4@*v3YEPU*AfrLIo(nY(|{{`DZ?L%_{s8gB9tl4>ERqnO`CFGYtEo)83 zUE0IjC4a)+z;m!(r z4bnMN%&xLKQm0MmN7Byxtm~0L2I3(&&x6~e^krv&w{`gzj`VOiaqaBswwb9xsz2`H zvFNFXN6O2PsRU$q(xU@B4l^=~a@UBrp>uJp0TcGOQ}A0fy$8}7m7PZ7SJm1Keg%hB z93p`SO~A3cH!watWdqW;;a>2B-Lq{eUx1qL{zjf)i#&Z6*Lx4~i)000sp(|$J&C|* z0?!)>R7y_hHykMNBMk<*Z-}1YZ?~PX%bDA_Qvy}`>34<5;0-+M zPkV1%e#GJ$I2Bo8X4>}}*R3}ay+QOZ-KN^G%fbwa6;=1GJG_qTjuHBOjHMx&X8S3Hgl&T{obV+}xQzo(;lBwVqEl?Rc=$p@zn9p)6&d`~6m_w?BNvsppEl^-%7SH7KS8|%OTX08&dtYf$@ zxMO!{t7f;LU)1)lb(Bh+jr_tLjchPhzyo5+TEY*qpQIBHAF+2TG^a&0A0F+b;V@}A zzT5Jr)`{qOr074|%x4Zmsyb-aqAodfM|>}M{~Dl+_d zKMR*OV+$Q>{aFa-@GVs1tl8DVH+xZ?w%d3NY82p*A{(%+ z71gqIyD|rr?@>p^4JlgKnCNs^{tIIkF$WG~(V?lSFpz~%_1eiGTpv_W!K~hh`5dk~ zmSX?O=JS{Qd*} zYj<4sPrsc3!|vI}&Oq)*nQ!JaJJo#u za$2S9Ngif3C*)cj*k&G#oirS4Ilg}5mCP|BuAve)o~(sHglRY<&H~Q_lG0Y$dAp6! z(t{{NleL40PMCt{Q>U@pyV9IT|iNT1j@)B-VC7mA`=oU ze>w>Y3UWa4S+c6nlGt5ScyHaZVL$%V9av8L(b@iD{Xa}RO8&dd94Rn4usFP5?L7-2 zfQBHdhGSNOMwW9<%99dpRwYR`a(+h`k=^2B=@blb5IQG(Vf?KTa9npZ*Agx&{jrO$ z;`T^6HclE>w^R6qyh8zwzKY5glEFI;t*!cF1+3N64F4QTP9G`VJ^a<9O2OOdTF_8V zZdoNHacrJ?@N7C;*w7Y!?e*AGw7Co8eZhUQ&=G(b;Sv=cDYwa15hk1$#{Xh`kKOqu zC|4h#B*YW0NITCJ?2e9;^)abV42;QS6Qy{)LDyDiq$!1&zjATOpl3!L*)v! z30yM80|r4`J6XojNb$JnC-<1{JrrUiAmk3eFD7+yXR~&zHN|(p_1vI~csR2gxx7N89mH+0>7Bj>secp2)sBoXIo^xbX5|naq1+Z$vw~YVtfZ92>J->a*E~II6dci!gG{f+N)r&K zfD)m1h5D%*f|UnB`8EmD!TnZpKkv@R#c$<*?v9@%56kpp8^lz!;7O*h|6-X<3n z-&9q~<&RSH|FB$<^Va}L66gPgVDW!3V9kc0Az<}br7~Rhkah+Xm&OdiUt1rlxMLpa{yzJ<(s2KqftiFE7Ci`kuAnpK5Rr1g?9fDu?0l0hOYp z2t`GipPN&M;|2j;?96Kr#Gt?pvHKa5-GKlO^W`@_L!C;yBqilq27E~k=B`D%OEO*xeKiu#bY}IhXEYCf}a|!WRv7btAFro@kA=$nrm3 z(WK)bmO9aD+Uc@HN=N|G8I@FrX8O9USQ`Uyxe=NIqL`j5=S(!2Ru%VDGV{}^OV0bSdXyY{~(Il7t+Vtna zKl{Akc!iP@1<_35@?iGO{zSUnXANfEbb_IeKyR*V74HWJUkiqIy&xhf#du*cl;N9* zvArBuvO9i#eRMiW>3}sH*uVb3jtC76Wf)$raT+=WB@2$=(x6VwRRIC&=H_NGpX0Lm z?sky9%)!LWOdy6L>uAl+%p_EdU~|2Fq9}75g)i-)tDEHcTPsa63e>9!19`jP$(onZ z896y*LDcMSb&Q^y)ywjr+!(aXe0A&ypKSIu$u80LV0{^Ss}>@C{X!M_?S9U+rpC7+Sz5v29f z+q%G|k0=4uOX)UfZ>fL})uc%7e5v;)kRREfQX;lg*xQ;;5}o>dec*|$Z$AammICLJ zFQ$LG{zav8_J${53M?jCAA5}A{rM7%PD~8ga5oq){A3DSL3mgX-v{>~ZEg?s=2r}$ z;8N^Fj#i_oPTLUh3$iZyy{S_XD>t6ITx!h)t1^3IP^tN0(#fI>c3u~Mn(f%CWh~gK zl`=lrtLcG*jsRZ5NYFysjT7}PBZJ`j_3Q1uz3%JxV!Aqddler)CTC(|a#2hi9Ju}H z(IYdVm=)I)45*s6je)tDuo;BLKaW#QqO_BLHCJKxVogk{*GyRs3`0$+u#6K0%zPv*g-vPfS*KJ}QMMX#FhXJ;jZ!i)2)(ap_ zvv+eWU=d{E0-;5h-)sK;(Q^M8@He^;$UfF#ij~DIN4(ma zR$*Yaen%s<6da^g_F(nL=nEl0#U405u4vnds@zI5!4TmCuQXDz>#3u=1fgNVCMYDL zg3qwr6K!(TW$yc--dl8bSq69QnP%KgVG4_mvTp@G_w3j|f8}rPMPMJVPt}sAVY<|c z!TCC9G`dZ(acD_VzfiIvFOS#mB?yg~U~ajd4Gavhc50OlG9|0)>)T3e12d?46D~f- zOG!;F8C!Ion2?;kH+wQcShiSGZ}&p?$(+I)rp+#i>{nkOn#FU;ytgXpgSl;qxE1P$ z^o|V8c8xOhQ<%unT?*%u5fXU^nv9pn%PUge9RJ#!YCXs+yo-LAL33J6A}c}&bmNUn zchQxGuAgExjgkyKTPzqEf2bAKUs2QeZI#RAh`_n$v|jZZNFAO4zy#A7`v|cenZ*vs zAe?W@M1fsmDL2n;-3khjpj`pi9v`%46gBo$TX(rc!}>|wc`20dk;<3jHe;a?uW^+& zmTO-UXnageUVQxc#`x-tQ0R)Kz}1Q%7I~JET{W(FExSYKRZs_2B=zIHJL* zq9?;fN1D(4Mu}~w2A353g)xkN<4?(Cd%Smk2wq9ZuKx^n_$G&&-sMZ8_a-kNdOd8` zcRWFD!nI0Bn*WfrKXISWI{#K~DK{Gcm|!5b%}GNxvuEj}Nt^%D4wUVYpTxSCV&Zw% zt(1~`5`kMU^#1kor9PpY2G?R%_JqMi#a@nCc^lGPE*j}(!J>AjCNL}5MaeOkPJSUC zsMhiuM#Ieg~~YtUR#!RkeO)u6IS7)Tqu zinwTHW!0ZZEnoQnkRM?NV7j`xlgNr;3!qFS^`~%FSiMo4Kz&)q&Y2;QIO`Jxza=OZ z3;F|fI9VmnKq+MI!Mu8qL>y`)cmrCd_S-#aY?Q@!QKi0rc!*yB8X6EyH^uey;}TGA z6Sl3XQr`Gg0MK*;@X1Hm6!2WlzGJovo){6Tzcd|7o4!hFGG&jJhJ@YVrcT`_>SyWG z!KMb^3R*lZE$Noh+r?#h6cy6ZdjrblOL!T5kC?WAp3U!QeO*8+lR<_yzA@ALal-P452*Z%>yBP+1dh0l%y5svJ2eGCuJw{y^J=|+^3noX zybZQqDO@@ihU*X)!!LIQ{5*<{3pbS{yN(oswefg6=Q+o*p>g{UD=w+GF1{xlv+cwM z50XcMnW3}w_Tqbaz&<7Jx07U;E82qpO;YX8;NpaT`Gxv?1>ylPDptUd3JQ;a8~~3L zjwssDYID%XZ}OMgy_#pwpI=*;WY1PGSP%gVN!oXuYXqd?mRqTLNZ`aP)3@>q40@nV zU2+Y5~A?2umM!5kv5m?u3yr6wH+Wa0mXkKA`QWt@YgbcOvEf}dC!X{Q$$8h8uOWJU(apq z_0j`SN2Xw|q?6y7a~Nbs1bpI!WtNm&1m)@E0ZD|(7+{*X406tevMRen)d?K6s)kFFspibfwm7WG*8O`<>cqzQ-mL^k8$1N<#jwga;&vhz9lKi96~Rk z@Q(>2c<)|dVIjX_iGA&c2oZqu0rDwYyD*ZD$zQ*o+%`l`s#_1(T3C?rYUekC$7})4 zZ*a+ie12|O*(HFb1ayx}&X^aX;=f8jLO6)$$^*6#acM#>H2(X6m@dc=?{m1D7Hn}f zzK<+YV(w~EI`FLq7Oio}Aa>?jl+@G|-P}ZgGqV^_l_>5Otgfx$%Zvh!6KDA+?q9n) zIy)a)THXZBuE2VseYbTW^A2oVja*zVxhG@C!0cHH0`Nw-G|(GO%jl~tRFWU<_kWPG zbFfh1D-=d@$<+ug2KRy*TeMU`JK(@d_%%+QNHh5P+X4c;@O%-ORi_ku`MBZXE0y^L z1>ME)A47kKqhvut*3@|XeQ5D==F%!RL6sHv$%fF*x_a3WVT zdwXhTi?w5FyDy8}nu9a*Pm&|i;KW1-s8sut4`1ie%iG(Q*Xr9Ts00BCD*A$&F|3_x z*MQ?Hzk_^iY^?p)FQ?mTuB(GLO;7xmgk&{ns=l0=S0M~tsx>j7!Z>6UehQvXA~p^1 zFOVUJaUV@QJ4-SXz%21DO(dQIw^F)B2!Rbqp$NP4+i1%7y4?|F?WCvGlpfo?jp2v> z14C)<<*C(1o>zWP7s)IS$Drn;D)*OZX!%@9t^5`ynV}^;mZE6NS-H+93lThiWtWUz zQ$<=qn4lEqv-rF>jEyH#$Ib>AG6ucU#|RqQK0;A@`@qq`!Aplz&$2&jWyJ{bTtD&!rC#lkWrKro-`neQHzTd%csnl1^_9 z4i2ieRKKe_A(vCVDH>1_VBM_SgSGvVU1e6oLpedg#luNwwMp#qmu-3Z0inFknW<~b z4eh)?fX?sgyOGWRR_$lUfFB_I0NVzq+xGl7`S@DEP=P8mGiVIHlo1d`MS-_!3)I)s z@T4Mkzmo?Hus11|7yLBS-Us(|hca<^qS8S9ufXnio8GfIm=1%HgtX9PzcqQ}BuTbv ziqq*YQP0wP)3A4&C%>P%mdaFa25@cpFUlips3)s-!-6d`1e5C`y5!~$iherawHfyE zCA(!h+HUiIgN`q4{B;s!j=lQdpvIFu-MQpBcfTg*r-RumZ*MP9Q(N2T%x$`0dhU^( z9X}8q{6yYMCbz7;E<1!-T&zWkSS*TG_PI?{ROdSfYb8X?Q=VlCuZsVv{4D9uB*fEHg?VRdWeGSx*cNWSN^vesPTwEluIZ$Rp_dzDM|O@?n$wUV)+K{+ai4? z$lR;OD1-3~oIL#^M#m&O1dQ+zwG@djuDDKDlGc%lg0rIGL1*sIe3~N-h#msYO!1=Z zY-YL82f=sBD%@W=a2%&?%*c`zY@{q%11mCdw+(R?LPH32Aw)wJ)NR&&EUllvcKc`i zd_#zOxAtKW|0Hg{3b!$VtD^%YRzO~X;{UNsg8w(G+kehoP)(dTN7J_lgzfEd-SX3R zr81k0C7!(I+{tQfBH9$@aEP{>3;2E8yA7EtZ;K*sf`x^(qe#csxaky(uf#`z*QO+_ zy2~A)nl2}o(25(Q{JjhRCjTDiZP*-7E(K0tI#wNSx$_SiedbT>bK>ND63Qiurcm<_ zHShVP$uYd~KwjP%6{_I(tw(@f-1FSZpH*UrV{5!sQvjX=!0=yGRDn zMs>Swj9=H$(E%ldzMFPj#4k9b<<@b4o#!C}A@k(P6FgOkEsnH0#l9fx^Jn7STDofI z0ul-L0Xx4BK(tg12*4yLf(RjLD><;#P(XyT-~}R^Qc-{X`uelb=b`U4pvIl~HrLkc zT3W6Ifeb>{o?yC+m*6jdtl{$cswnS;F=ayh9CFO!0K;Qpx%Ru{3@^AgI8IR>QgLzd z(FTOfw^&1qO}re=f$tx_i38JYA?cs*Cr*k@@GTXke83|k)z{IU>~hyIS}Qip-qC%j2Ld_fGGphLq562 z^r=`^Ra;%p5pzoeJSWsB_)L&np>KRTSGcsSs$I`eSj{)C=+hPY>nte}^gyf!0m(ID z#b^pk7(9VpeX=%+1&x!VI7zql`0ob(vK*Ty&$lXtWN65KF6vr;mqgv_ldwl2^;de% zWv+b{35XstHUC=P2Nw5`lR{*n2`(>8ci%Zn&VbQk1{8yq+$A=xRX%n3v?}{E5u$Y+X(1!-j<( z?ACkld^^ONbq%^2mx96pb4HLIc;aH>;)tMMot^Vk$kh{<#ZJBb+D*81Mft1)r|8Sr z8kyww1#G1~jv1ioL}LD0rHJiYg8w5tz5l(by5vS6KTz&-;+7%Z0B{~*@|{<#d`l#f zf2CLpM^;vyZS`)Pn!1X8T63cWG*|8fV#Mj^{Td1jH={;N1pQ1P{@lDgZ&U8H4qA>x z7??XVhbQx~m@{9%J?6n_2;3Lp=G>sd*&A7o88^lST07i{v!vnfQ3DQnGgXcG9~o20 zp04M+Hm)jFqN9gqpKt2r`PV&aqd9{AsvM*Zm)a-tqpK#j^3w?#5T;4V^AsgqIH37F zf%(`LB-=4z!%Uc#jp@G==cMJFL6Z40!ToPCR$q0ZD^Z#C2!ApD(R?dQ1$p;lKvqw< zw~9~d%3zmV`=LZ-Wy1un+&rKJb1YzQyEOiX-kifDf-Q4Wt1k5h22d@3 z+G8TBarKqBPt~G9Up>~YLP6_xa+5u2c3h*Bm3o#I!I zCegASe!#pOgAeB49jXKGs>19GR1}e2S`BMGYB5v&{jadi&YZB1FRg&6PM^w;8I0o~ zehuV@+eMdO8W;v+w0-ICYFSkvJ{+bBVNcTHyAimrFL5VAVA^cl2nUI07Sl8TL&6XJ zll*>Piz+G(3UjA5VX(t?xt>a2WI1;VW}rj)ITtN$w-gIOB7&*~IUXZWZS!L}k5b9j zcB8{$s zknk{b2sgBMz!$eB0~b{ndOtC>dlL$yXkhurkUeW18T8u_7f73fc?Ut&bq!c@lZ>T2 z*V_*z&TF%V<~?#REGOZpnNA^v%@T8lkH{|DRdC7r1j|5&W9pqYRZ@f;);UgMrPMo= zIRg`@4LE0S$LRs7EPtfu1}Ws{TTLMtcPKCeFAsk+IcoCd3Qz8u{`O+P%BmX@tVj3H zDahZWUVt-#^9NXcrhP>!DCRpSdif^-?m`yMr}}I}cX-x?(q$9O{cbwDv^Nfth6T+v zT?LvPs>9pU7+LQ-4mHBZ_xFqXUN;`?4mSL!D>G`}CFdJWqN;&i#MM{wHZd(f+_~d5 zk^DWiDxdRB8{k`oypr)m&@dB#B(R4)h_FKU*V=oS9ie0EDq-TI5B{_2dzgV@eAn6Z z4#;vU4kZ2w_||^wH?yK@E-1(GpMya8NWj*{rd0LUZXjyRcLt_jHyw5#`T!x4UNds@ z1Bo7%fR^tT^h?uw)8uh=`%6e4Z#9tqDkMn6(dchebJkEW7-FgEe8nmRaLast4Gd&$ z@AQYygz@c2Rh)WgHLG8h?d<2O4gR&?dd(&>KE(7|MZ^%?;YeUbobJg#@0~pbsT{KL z)X^rh+1Vp1(e-wkj$sglYV(^NovKZ>J7@JIGomeSBsg1l&6fS0o1~$Z=EZKJIcvv{ zHPa}~CKb+C(xqG5?SjR|BMH!z$b?apmK zU3c7Mg+6GYyFzq!=j)E+R*ngGCYl}tbg-*M{w(rjlMedI;!nT1{N@d(Iyun@GnHX?a`C93qcS@dU&sFha}!BrgWE2 z1NBi^Et;4ih40lSmw)X%cJ|ymvkxvBi5RV5&BV+ne!q2a1EiZRvVyDyo8HRt$>Q@X z9$Yok#jaQ%N_o0zzaBk~8a{BLO>=hU1qqr7`aCGqqNA(h{0G$8rn_V3#jwU3MdXsp zb1%?C8gXsDOlMo#1wR1HK|TSJw@K={;m)1i$Xz>GN48}2-Q?5($L-;Kz4txd_W5Lf zfU{09B$QxwWV;3GfcKHjC_{sw5rsdr`b+zrNEeidxPAP%1jyO>rDIc z>*a4h%4kU~f3yYx;|XmB+PJA@=UTr6Jl*8a{x8Y| z5U3^!u&Sh?@|`Zr?k+BP@EGJ&jRzG%b5?yR)&&H?g_Zda-6M?f zVy$)CxCodGRUdIb2S!2|v#3PPro6lx{w6>}bV|%cIwWkuUk{#hhp+KNj$E?iy9KU) zUqRjiM5o|aw!ArBuKXe?43Io`4v^`Ds8}P8=zvA7^t?6hrY4MDkFLN;ce3g@P9s{4+ z3-xQ4MTja?jnjxc6^qc%a%fXpgWHtp=-ysx)Dd7E~+N6!N z9N|!P0GF)%J;UxK+VpEM*6U1^v=W61PLhU;Ewmh-ekoSOX28ObYa3FsTh?_X4h~+K zWB`Vv&@qwt%Li8xt8p4alm05VUn1+qx5bFrIx2?cf+UIye_eocdE zYMQtMm+!z`;P_ip!}?)0g5|R)@7kA)TzP_hz7I@3vjgD0`wq%+lwtspIw=H<->lr+ z4i-<(v;C1rnwkS|I$@vU;@ZL>@lU+D6LKPfPTs&%K#!AoVcNpbTtb-#fq#!5smd41 H8NK;m71ff# literal 33606 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 F{{cx2m?8iG From 347bf52e5503cd5fa7c2417921a52e51ef2c9c3b Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 21 Aug 2015 19:54:47 -0400 Subject: [PATCH 02/25] Reverting change to sec records Will make seperate PR for it. --- code/modules/computer3/computers/security.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/computer3/computers/security.dm b/code/modules/computer3/computers/security.dm index 22081177a61..12ae9e50475 100644 --- a/code/modules/computer3/computers/security.dm +++ b/code/modules/computer3/computers/security.dm @@ -497,31 +497,31 @@ What a mess.*/ active1.fields["age"] = t1 if("mi_crim") if (istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input minor crime list:", "Secure. records", active2.fields["mi_crim"], null) as text,1,MAX_MESSAGE_LEN)) + var/t1 = sanitize(copytext(input("Please input minor disabilities list:", "Secure. records", active2.fields["mi_crim"], null) as text,1,MAX_MESSAGE_LEN)) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["mi_crim"] = t1 if("mi_crim_d") if (istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize minor crimes.:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) + var/t1 = sanitize(copytext(input("Please summarize minor dis.:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["mi_crim_d"] = t1 if("ma_crim") if (istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input major crime list:", "Secure. records", active2.fields["ma_crim"], null) as text,1,MAX_MESSAGE_LEN)) + var/t1 = sanitize(copytext(input("Please input major diabilities list:", "Secure. records", active2.fields["ma_crim"], null) as text,1,MAX_MESSAGE_LEN)) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["ma_crim"] = t1 if("ma_crim_d") if (istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize major crimes:", "Secure. records", active2.fields["ma_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) + var/t1 = sanitize(copytext(input("Please summarize major dis.:", "Secure. records", active2.fields["ma_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["ma_crim_d"] = t1 if("notes") if (istype(active2, /datum/data/record)) - var/t1 = trim(sanitize(copytext(input("Please summarize other details:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN))) + var/t1 = trim(sanitize(copytext(input("Please summarize minor dis.:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN))) if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) return active2.fields["notes"] = t1 @@ -629,4 +629,4 @@ What a mess.*/ /obj/machinery/computer3/secure_data/detective_computer icon = 'icons/obj/computer.dmi' - icon_state = "messyfiles" + icon_state = "messyfiles" \ No newline at end of file From 3560722717ae7ea39aa1af1a4a8435ab8666aa54 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Mon, 24 Aug 2015 07:42:37 -0400 Subject: [PATCH 03/25] SQL files, Structure rearrange, Vox Sox I still need to get species restrict to work properly for vox sox. Not the BEST sprite edit for it but it works. --- SQL/paradise_schema.sql | 1 + code/modules/client/preferences_mysql.dm | 9 +- .../mob/living/carbon/human/update_icons.dm | 2 +- .../mob/new_player/preferences_setup.dm | 2 +- .../mob/new_player/sprite_accessories.dm | 185 +++++++++++------- icons/mob/underwear.dmi | Bin 37928 -> 38361 bytes 6 files changed, 126 insertions(+), 73 deletions(-) diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 043a47a02ad..ffc0e770e83 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -52,6 +52,7 @@ CREATE TABLE `characters` ( `eyes_blue` smallint(4) NOT NULL, `underwear` mediumtext NOT NULL, `undershirt` mediumtext NOT NULL, + `socks` mediumtext NOT NULL, `backbag` smallint(4) NOT NULL, `b_type` varchar(45) NOT NULL, `alternate_option` smallint(4) NOT NULL, diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm index 816bb2d080e..086b2b4c9d1 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preferences_mysql.dm @@ -149,6 +149,9 @@ nanotrasen_relation = query.item[52] speciesprefs = text2num(query.item[53]) + //socks + socks = query.item[54] + //Sanitize metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) @@ -177,6 +180,7 @@ b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes)) underwear = sanitize_text(underwear, initial(underwear)) undershirt = sanitize_text(undershirt, initial(undershirt)) + socks = sanitize_text(socks, initial(socks)) backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) b_type = sanitize_text(b_type, initial(b_type)) @@ -242,6 +246,7 @@ eyes_blue='[b_eyes]', underwear='[underwear]', undershirt='[undershirt]', + socks='[socks]', backbag='[backbag]', b_type='[b_type]', alternate_option='[alternate_option]', @@ -287,7 +292,7 @@ skin_tone, skin_red, skin_green, skin_blue, hair_style_name, facial_style_name, eyes_red, eyes_green, eyes_blue, - underwear, undershirt, + underwear, undershirt,socks, backbag, b_type, alternate_option, job_support_high, job_support_med, job_support_low, job_medsci_high, job_medsci_med, job_medsci_low, @@ -304,7 +309,7 @@ '[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]', + '[underwear]', '[undershirt]','[socks]', '[backbag]', '[b_type]', '[alternate_option]', '[job_support_high]', '[job_support_med]', '[job_support_low]', '[job_medsci_high]', '[job_medsci_med]', '[job_medsci_low]', diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e6f6856b2b7..f7493c272d8 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -328,7 +328,7 @@ var/global/list/damage_icon_parts = list() stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY) - if(socks && species.flags & HAS_UNDERWEAR) + if(socks) var/datum/sprite_accessory/socks/U3 = socks_list[socks] if(U3) stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index a05a2af391c..77f48b976d5 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -266,7 +266,7 @@ datum/preferences undershirt_s = new/icon(U2.icon, "[U2.icon_state]_s", ICON_OVERLAY) var/icon/socks_s = null - if(socks && current_species.flags & HAS_UNDERWEAR) + if(socks) var/datum/sprite_accessory/socks/U3 = socks_list[socks] if(U3) socks_s = new/icon(U3.icon, "[U3.icon_state]_s", ICON_OVERLAY) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 0175c6d9663..9882e9a1c6e 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1267,89 +1267,136 @@ /////////////////////// /datum/sprite_accessory/socks icon = 'icons/mob/underwear.dmi' - species_allowed = list("Human","Unathi","Vox","Diona","Kidan","Grey","Plasmaman","Skellington") -/datum/sprite_accessory/socks/nude - name = "Nude" - icon_state = null - gender = NEUTER + nude + name = "Nude" + icon_state = null + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") -/datum/sprite_accessory/socks/white_norm - name = "Normal White" - icon_state = "white_norm" - gender = NEUTER -/datum/sprite_accessory/socks/black_norm - name = "Normal Black" - icon_state = "black_norm" - gender = NEUTER + white_norm + name = "Normal White" + icon_state = "white_norm" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") -/datum/sprite_accessory/socks/white_short - name = "Short White" - icon_state = "white_short" - gender = NEUTER -/datum/sprite_accessory/socks/black_short - name = "Short Black" - icon_state = "black_short" - gender = NEUTER + black_norm + name = "Normal Black" + icon_state = "black_norm" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") -/datum/sprite_accessory/socks/white_knee - name = "Knee-high White" - icon_state = "white_knee" - gender = NEUTER -/datum/sprite_accessory/socks/black_knee - name = "Knee-high Black" - icon_state = "black_knee" - gender = NEUTER + white_short + name = "Short White" + icon_state = "white_short" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") -/datum/sprite_accessory/socks/thin_knee - name = "Knee-high Thin" - icon_state = "thin_knee" - gender = FEMALE -/datum/sprite_accessory/socks/striped_knee - name = "Knee-high Striped" - icon_state = "striped_knee" - gender = NEUTER + black_short + name = "Short Black" + icon_state = "black_short" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") -/datum/sprite_accessory/socks/rainbow_knee - name = "Knee-high Rainbow" - icon_state = "rainbow_knee" - gender = NEUTER -/datum/sprite_accessory/socks/white_thigh - name = "Thigh-high White" - icon_state = "white_thigh" - gender = NEUTER + white_knee + name = "Knee-high White" + icon_state = "white_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") -/datum/sprite_accessory/socks/black_thigh - name = "Thigh-high Black" - icon_state = "black_thigh" - gender = NEUTER -/datum/sprite_accessory/socks/thin_thigh - name = "Thigh-high Thin" - icon_state = "thin_thigh" - gender = FEMALE + black_knee + name = "Knee-high Black" + icon_state = "black_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") -/datum/sprite_accessory/socks/striped_thigh - name = "Thigh-high Striped" - icon_state = "striped_thigh" - gender = NEUTER -/datum/sprite_accessory/socks/rainbow_thigh - name = "Thigh-high Rainbow" - icon_state = "rainbow_thigh" - gender = NEUTER + thin_knee + name = "Knee-high Thin" + icon_state = "thin_knee" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") -/datum/sprite_accessory/socks/pantyhose - name = "Pantyhose" - icon_state = "pantyhose" - gender = FEMALE -/datum/sprite_accessory/socks/black_fishnet - name = "Black Fishnet" - icon_state = "black_fishnet" - gender = NEUTER \ No newline at end of file + striped_knee + name = "Knee-high Striped" + icon_state = "striped_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + + rainbow_knee + name = "Knee-high Rainbow" + icon_state = "rainbow_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + + white_thigh + name = "Thigh-high White" + icon_state = "white_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + black_thigh + name = "Thigh-high Black" + icon_state = "black_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + + thin_thigh + name = "Thigh-high Thin" + icon_state = "thin_thigh" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + + striped_thigh + name = "Thigh-high Striped" + icon_state = "striped_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + + rainbow_thigh + name = "Thigh-high Rainbow" + icon_state = "rainbow_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + + pantyhose + name = "Pantyhose" + icon_state = "pantyhose" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + + black_fishnet + name = "Black Fishnet" + icon_state = "black_fishnet" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") + + +/datum/sprite_accessory/socks/ + + vox_white + name = "Vox White" + icon_state = "vox_white" + gender = NEUTER + species_allowed = list("Vox") + + vox_white_thigh + name = "Vox Thigh-high White" + icon_state = "vox_whiteTH" + gender = NEUTER + species_allowed = list("Vox") + diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index ad5e5019fd8c26faeb677e02bef5641df0353dcb..e923f3f3814ab6a6f7fcca780a31cc842d236b55 100644 GIT binary patch delta 16712 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 GefVG6Nb$Y^ delta 16289 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 L1y(F){QiFck)^v5 From 1104ca5d2b44dc018a440886f7f22643716719cf Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 25 Aug 2015 06:33:56 -0400 Subject: [PATCH 04/25] Ever try to put a vox in fishnets? --- SQL/paradise_schema.sql | 2 +- code/modules/client/preferences.dm | 18 ++++++++++++------ code/modules/client/preferences_mysql.dm | 14 ++++++++------ .../mob/new_player/sprite_accessories.dm | 7 ++++++- icons/mob/underwear.dmi | Bin 38361 -> 39100 bytes 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index ffc0e770e83..c35edc56969 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -52,7 +52,6 @@ CREATE TABLE `characters` ( `eyes_blue` smallint(4) NOT NULL, `underwear` mediumtext NOT NULL, `undershirt` mediumtext NOT NULL, - `socks` mediumtext NOT NULL, `backbag` smallint(4) NOT NULL, `b_type` varchar(45) NOT NULL, `alternate_option` smallint(4) NOT NULL, @@ -79,6 +78,7 @@ CREATE TABLE `characters` ( `rlimb_data` mediumtext NOT NULL, `nanotrasen_relation` varchar(45) NOT NULL, `speciesprefs` int(1) NOT NULL, + `socks` mediumtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e3696ae4703..a36743760d7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1195,14 +1195,20 @@ datum/preferences ShowChoices(user) if("socks") - var/new_socks - if(gender == MALE) - new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in socks_m - else - new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in socks_f + var/list/valid_sockstyles = list() + for(var/sockstyle in socks_list) + var/datum/sprite_accessory/S = socks_list[sockstyle] + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue + if( !(species in S.species_allowed)) + continue + valid_sockstyles[sockstyle] = socks_list[sockstyle] + var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles + ShowChoices(user) if(new_socks) socks = new_socks - ShowChoices(user) if("eyes") var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference") as color|null diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm index 086b2b4c9d1..572bb054326 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preferences_mysql.dm @@ -180,7 +180,6 @@ b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes)) underwear = sanitize_text(underwear, initial(underwear)) undershirt = sanitize_text(undershirt, initial(undershirt)) - socks = sanitize_text(socks, initial(socks)) backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) b_type = sanitize_text(b_type, initial(b_type)) @@ -200,6 +199,9 @@ disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities)) be_special = sanitize_integer(be_special, 0, 65535, initial(be_special)) + socks = sanitize_text(socks, initial(socks)) + + // if(isnull(disabilities)) disabilities = 0 if(!player_alt_titles) player_alt_titles = new() if(!organ_data) src.organ_data = list() @@ -246,7 +248,6 @@ eyes_blue='[b_eyes]', underwear='[underwear]', undershirt='[undershirt]', - socks='[socks]', backbag='[backbag]', b_type='[b_type]', alternate_option='[alternate_option]', @@ -273,6 +274,7 @@ rlimb_data='[rlimblist]', nanotrasen_relation='[nanotrasen_relation]', speciesprefs='[speciesprefs]' + socks='[socks]', WHERE ckey='[C.ckey]' AND slot='[default_slot]'"} ) @@ -292,7 +294,7 @@ skin_tone, skin_red, skin_green, skin_blue, hair_style_name, facial_style_name, eyes_red, eyes_green, eyes_blue, - underwear, undershirt,socks, + 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, @@ -300,7 +302,7 @@ 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) + disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs, socks) 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)]', @@ -309,7 +311,7 @@ '[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]','[socks]', + '[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]', @@ -317,7 +319,7 @@ '[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]') + '[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]','[socks]') "} ) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 9882e9a1c6e..cd4c9c2a554 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1,4 +1,4 @@ -/* +/paradise_schema.sql/* Hello and welcome to sprite_accessories: For sprite accessories, such as hair, facial hair, and possibly tattoos and stuff somewhere along the line. This file is @@ -1400,3 +1400,8 @@ gender = NEUTER species_allowed = list("Vox") + vox_fishnet + name = "Vox Fishnets" + icon_state = "vox_fishnet" + gender = NEUTER + species_allowed = list("Vox") \ No newline at end of file diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index e923f3f3814ab6a6f7fcca780a31cc842d236b55..a8b4d971b101de9af2656f3835d84dec7fd70a51 100644 GIT binary patch delta 18198 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 G_WuFrVAj9@ delta 17453 zcmcJ%2UJsCw>G*df~Yj3f)r^2DpI6N7ZFq>U`1+Figb`(LNZH#z-s|}4;-DsLj zy2Q+j8IMI%^3BYcmlBuKjmqZu1nEO_C_FcRa^y7MtzXlna)G>{;joF`OOgE&w($J4zyG#zT+OZ@?D@`$ z_GVLi+7L9&siC;DhTsBc-)!_N3nH~Y%?^%nN1H@)t0s_B_B!e!i0Vvq*NI}-ZV z<<4Yd82oL6ZDA%U15-Rs7Vlt28Y{~27KrJdq$dur`;OXXwb~{W9{p4fEoG`b|%_xsHv&V-n8)v3=C{` z8ai%{nEye+3;lGxq=N3LCDqeF_W~6H=$W9K9t`Z<(7i1VX_f!MK=6M&(zG4dQliXt z0qAyUdt@RVHr%j^%*0|5fXc&%%>MrV#q(PHLPDC(&dvZ3Eo_ip65X|K!?LxTZ!aR9 zKAI}R>E1_tZ^H|v?YdHhRLQ|c)P zRzT;`qqk*~C<9GQUw=QpNaX@ApyK3IRAKbmT)fAkj|gJEex(E)_BURhyKuoO(`2qS zs&0KRevgq;&J>rUSJarpe-;d~xXE0Vh|USUdzrGfM&PcrvXx?`m8G|b3N>C}7u@(D zDIrKaD6b&b*DwnUzAD2<_A{@AaDruV+{480I}2IIB6-NsF1Zeh486oDu!xB7fnKs% zX>`A%lv8P%J%0yaYZZp$!dg~0=Z8Fa;ZgR#6Y>W(56Dq5KUP10iHoq3;+5O=-X;2E z@xF;cZXJ}_N+=e{pHzr`-WBF$3$CIkhedvi9Q+POE2H*xOW}N`m>Y7zn<+|wivBZ^ zM!Csb2U}s6ZD1EQZM$MHKW2QG&XnhmtV81-y8=d7Zfm`IB`Os z%q8o6P+Y#0l?^)(W=~ud89E#uITZTs|I%q`-chX~8U2fq&}G zku;w4-a4Ddn$l-rZ`6S>sB5K2I^Z#C+XSQnopiRi|fshnQ*5%e)np= z$F+f(lmRBFOJCnNms5R1Lth-Gb+zj%;TSwWd3&)})z$%yRuVQ9F1$3}%e{Pgr3`x{ zoFlbpRcA_-oV4E``6DlK9oaHTUU--yEejqC;~#x%sG45p-qVHcT3F{2iQ@4Hle7wqbY}ai!QIt1+cD{pu@_RMw*Tua}B1fPD`|tar?@yN1pS)mFy~7>+ zA}H4W35xRTV!1FOD_?PkLhX)}&&gmMndR%(3yT_>VoH6q%yvbqQrdSeG4ee>i+=mG z-hIg<@Pj_EC>Ez&3l_PZw`#Gov3ZxE1i)Y?xurbTw4|?wi?WW{T?? z9)y!0J~Rp_W~7=>3k$bVB&cYG)O2WM5ko_NjaF`@X(+i;N=ZrK_E6LsY91ad8RV~D zd7Yhuf#+F#Bj@7fLT-s5?JO;0pTKlX3?`1f@7Ep?idl*U)hm+zFE-9l`UYW7Lb`_Q zyQ3s30rn=f-6|lKQIpg=7$ zrCc@8+<6H`AlPnNe&*`v@aXma=(M}7yQTARN`qU>KO#cf*)8m)gIIyc>Yeht#&(b5 zMRy#(^nU7}G0hunZqu^Drx`Oi=@)t?wC}KafQy>8n7+1`MN%_vzWsfDtOYxQPXSL8 zcG$r5zE3pV*80UKTz!nYfe9w(Rtb zOpqr!6&Rc*rXFx(V3>~E2(D5*&;FBx_2(r&pSF#u`Seix0FDlflwyO+aN&7IE15>`E!~@3guN+L zuOHjRq^4aqull^K&i754XZ|;`{r$-P^D-$H#`c55jwRcTu)Y?$U_(D~{~_%$NAJ!p zJr)NM!V(*|;8yOeq`IRc<*aG?_BN=y^_lKLS%spsFI{Se#yYhrFZltIQv6lkiBkbh z#q$QMM~63>>AIVnPlo2bF{dncoI5l(x1sz74e z9tX|ox38^3T;raDpCW%SG>iN8Fe_d~yc-S25cyb_k%AbK21uHBD?RN}Cn+myF}9&v zaks5CB$vv{(VRZ~VeE-m!b*uBUDJsE%q!gXc0*gE% zUKzbG^t@gBL*%~eqry9baxAyNE}53}TSZb$blp#^eYW4oE61`dsRPB7fw@fuPDfhe zVaOHg*~(Pb*Xhc&vvk3;ebfSPjx@E8yW+D6po@GUsi%urb64F93LMKeUSXB zDft9}a2xWox4aIwr9=eqw)Ej~`CiQB?Ozx_=8ua{4gi^iN)}&j({d2IKO&r$OF=me zV|A`0aSRZSNSPFPEP<{nXc@! z6)L9Iel`5&QS5W7Z$cAD4OW2lCw^v~QeK&)r*LybP)vq&IJ-{XMBuoEg;-SR8YhNl znyIfG@##{jASwHlz{NL-Qs3k#ve99wnzwHG_6!YO@%iQUqQz!BGVIAD0%tH8k>-ai zORTm{^WyqH9oyy*2+I|4+hPTVj$$({U2D zMcJfEFD32IT3he>v4nIUlyvP!CO<83Gv)v7F`bwP(qt6nO1WP}98td#5>%r1P?~My zuoi}UvpHuOmPjW;p+s?!Rn~j>PVUcKO{GGb{JAy(wYhCGmJ*sW5kfOtbu@Ozq4C>{ zaty9MkFAs63;q`h?NM!eI`E>S zA6>tyOCPHjCTSjY8+2y?HhObqEV6Ims8n2Erd4?V$Zo05m6+5Ifayt0JyFab=%)k9 zQ;J}z^z`P>)NOO!JqQrGtUU0vm1;%;-}U0mKs#k|1=ERvSo_@ipqyCQ7*BIW3eRFG z-E*`Of1$drU9X`#=53zN1CH7_rH2uTVINkIDQ$JES>M@Z;2qvE!XYUgc6MbrPNc;B-abTan>t>ZZc)FZ@11 zxD1P(o##$F^JnAEaT2WaNF0Tyg>DS>o03{Ya^4{y=t8gSyFOkqz?PofWCyJ=DBsz2 z+P@QCU5&gcZe@K!tcN((J$&3MAbC}83;TOGC@xJ;7Fs7MQ!nm)zD1|@vw*lX`9b}9 zXK<(eb5D1-*o>g^NSshyC2jkm?z2Yt+tsNn02D0&Mq|mW5}`3q+1pQWv_P#*-L8~N ze3&kdw)nwY)7~D1p%6$Ml8kWE*2BW9<=L<2zP8c6qHnVBLVI8-ZX*ZnWWuAO-lwDlp(|&- zhtG|9%qM;n;R=-ENKH+}9la1csRsjsLqn%0yw>|YiR)N03JRI*hHZoF3;`WY65`@E zXzCiwV&rs)*KSIU;M?hNu2n^5XQEmDaNxOI%*2>6$JR_YS5lD+8;|xDxOJGp%Y|K` z)t&w@PPROJ6YkQS;~Toibfr@4C1N3|Zfy5Yo9g&_Ax#BhWnvFtTF5!?EB8mzhw>K& zQ;n<`4unK)X(tM7thdFC%5g>rdJv8tM}#rGQ_$#-Z}9s!3I9WQkkK8 ztdlO-Hnv$*>?#J`4^rQimfZ@oQJAGxmllwFila@2Cqpt8?E5Bd;aZvfIt`LB{V>oR znNO4(nFzrBw6pC97$u0$q*Sw?A!tZna-`&Ahb4-Ca7uwEhjJ+==|qks4=;AguS-Ir zv;>C+Pf;v+UvMB;3w~Fc^ zQ?rp)rs7e;t7O_sk# zms&QLpH)s`+c->k{(zEsiP5|4|l zd~$j@1=*4o|H5}{w(FX*Ep3rvO!7CD$E8?C*{W9e4UC7Eul$-eedb% zc^6r&Ku1*oD;gJ^G(GNh{tQjYyaAXY50_NvEf`2Pq2!PM_%lxcuV%op6(1P@5}MSj zoqN}d6NCGSnG1F_z@H>h(gp0ncB*+jUk1F8?zioaY&tA*53vyoR?$F8R>bq0P-*7$ z#?-x8q2&UAo8{4=?IW2^n<~V>HXqb4k#tM*aVd=IoTmJ^doA;>5c* zFELe0zKl1FF&Q*twI-=Fd08~Qr;DlUTl_pucqZPIB|EDT5L$bgG{?nmB6FQyJ8Pt~ z0dj*gb6};M?`6T^NTF*w4uv;gjzXg5DA+vvMT$K8;gm|nEY+3Xs}&;6I8BFZH%}DB zE&Wayr*x@h@x2$4G)7zWrjtIrHzZ7IFhu>X;-b7aFMPn_ON?K#8|CNVe`+5`UbdF} zl>7e8hrb$wjzr_>tofXOYKUlo1j9tafQw24k8-HXLR$>v>Nfp^xk5oQ<4ls#`YE6{ zPwV%s#NF@tge0RMN58{t1ae}c2K3{&b}HoXxgF{hK9OwrG|0bQIcgxA04i5~2J%UM zfY|EDWzIgF;FMI8b=*}HLpR5FYn{H)S^6cmb34+)s1}iu?=aT^Y-FWU zv-KEq+|{%zi()`xb9+M*_Vh)!vcH0#oQ4^uS_Q-If=o-SsRpt_HDB255USL3P;%Wh1fWBY*z|lp8OboWY>q_SdNk-~^ zw^4pCmbf+V@FnV%UoB+F-%8ECyPbQ>e3^76=@=Tx??~@wZaJ@0-9wRr4Fq2eZ*w?V z&E4P+M=Q?^@N*AuCnVrJBun(XnZ8Cm43|unQVo5&!sD zaKcndHqkcsrzYXCHzqU^>tEMFeDbj_@t~hI)3JZVId%!}l0cL?XNSwsKeyJG-*`7F zdqDc}eBa+mIyEE<>%W|N`x~Nw|BIa6KZBe9PqOb~k;m4kJysZaQSVPL3q?7eGF@HW zk1WRS6u=Lw{%d>yP=AF&E201n0vODm52LT}+qJCW9$aMO-=k9QO{f9jq9Y?Rhn{vAsd zigu`uFQO|C$SU4HZC`EtVFHfw$IHw<0zMH&RRVJlc7|THl$oDDe*v8Kqvdkm*+-YT zWG^f%Q6`g121&^0fJ(ivrr>cuWG8x)dSSI}@&dcGP3=gD^=92^(d5cXeE`x^a~PyF-SSHO7nce~ zVO+?krii%rE1E?*2nPdIIJ7*RN#V`sHiSp!=IP~oA9N$UEice8GVn-9^cKt{U1@ zAImo?Dk@a+men(89grL)_dYfX+%+sJJ*hZVbn-;Z7p?Ay7>t>;a>}2x+wZ!pZZfw; zBDMD+RBWbKYvX>bHBn|1fEb>_!nV$Iz~j#F!v2iguL&c!KuD0BmT&uVLX}Y(3A&$c z*I10SbfC8!ivS&|IV!n8*3<9IAa*g$Q~9z_L&_tJP2Mj_^Q$0mu5 zyRbJ|#P;?FQ)-x!&;{6W4svE{wD6AX&N>!sk0bz0-qUop`QtW90Jo#(tN5**=5f^Q z>}-1`U92^Rm}-Z%B^A?mAKMiMamc2xuixFIy>zk{7FsH<&9^CwMGJV9T1fmQM! z&m|_CFpVEQ|wNNRw}sC+%Eg6#1vaJuD> zR_PIw_)`+J4(f42R#T|=)u~dO%Hy$ueljVue44AF3E!YghXVJ&zTR?Sq(YCm-9&I` zp2$j=8t@BFf;31q$!AZ47qVbg9IgXO5vRB6VwYOWTF0t~bM8nR6+$%&wZwruqthju z5iZS@E7F++i(!^3VUV33qzD~bZGy53;8&b)WKfu8r}q9xp*>uyJ6J%au)+coU3}=) zmg75Bp3gBcGlwPlFAonCaV^hnAFL$fwD0I*mY}w&yf9@5)+{}-sXSQe?(2J}Eb7HH zYCL8EPjQ}a#Z5y_t7s9@V{TASK=miT>>WRvigW7w% z{sfrUr@|Z3v%46$oX<=j2s4@x-;Q=%{oFa$F@IDiyZc0R4fN(z8o^3UT^7}@Q(5^% z>>=frlXqO8d-=A@4|51CL?h$h^F|wP9{O9kp^E(_F-Gu(l%KpWLlN-2OWodbpP!Kx-wU5Gl%dcb6ml5ZJMuYf6a*+5gv_#^7V9+hmb+5 z-6NLjhrwp8;m=^5MKa6Nuaj=fRe z;$=W{0%Ywqj@bIv@0>O*`S;=Ot0k(wa0g?z=MehPkn>F48D>i0B zghHH_{_^ZE`5xS97y3`Ii9$mfj^UCvhoa5pg{8RSffoJL@%9#NV&Py!)se+mj(x}6 z=TBOG=9U96?iX9LKNs))GO(`!qZ|lYgYwDdt&4-}yT3Z*JRCgFzS-_mshg8AvPPJ< zhTIF*6|`HLlUbH7`@Z~U#TYc{-|gJ^)@E!hKF-E1(@gZEWq8q_^;ExzfkW0u(+E|w z6o($Nr4=P>m(f^6Q2LdFKXK1#DqWnCXR zx#pEj26WP8$fJY(?2eqt`t`n~p?Jn;Mj3mN-I2NZgpm_i@k!zj*CTzkR8KNEhCy|y zO^md7$PKDc6x=CuoXUTLJM*rPRaeI4#`c_%kvXP)pn~)|YaOe6_SS(LCUV<-$aZz4 zM0P`){H|c#TXc%kqZjPAh{+~-*iXy2gUm5mt_go zSH{|*YV=qpA|&G4aossn3DMMoxIJZ#%DOWJKe7sbQekB)$A2ilu$}+@p|!)Z?r$j9 zUKt-sh!zzs`UcL+vmQd}g9YVH0VrK1pO`xU$dX6KJ3;N;P%)#A=+}?xD@?m8|0*l% zFO;8*gFxp0s-XN|fYbk|gbn_eHSC0&QYyza=f6JMC*F;p=%|d&pi~`5m0#9nm-&FO z9lP?i$3pcPRHNOxk+GEvCN#&m<|0I)&-y_@OoHbsy9`OiW^CW@TN6SF_XM*O1|$4F z*cokrKJy)$Zs1nQYg5z99rsF%G%!*^!_pbn4v~>N#Ek&u2XT>BRiQ}hXN9)#!9VFv znN5FxBRYrpmlWWw75Jno>prKxuvq?~ya1T)Fpb{+U-^vbQzq9j+ zA9wT-MbO0WPGQMj_}$H-*PCgIUN-r+aOg|yR3NZVPj%7X_aP4xbAbsWJSk5YF;ar6 zDd)y;<+&eNI(b1rDV5ClU8{LnX5u6u>$-crw0i$*w4AgZ(f6)4w!50V-MidADl@U4 z<>6(sqPQ~b6t*hWOx)ar13oWJsWvEBeVP0KpW@=Vk*&0y<+6{#!C?T9sT=>-w^Cw+3J zwsQE{pxyXMV)~7K=|qCB3UFLelJ=O)B-*3!@&1wd9+jS^oQ0*s#62iuayE|ZX*IKI zo08<1ZnjIn-(_Zg;Ll(F2e3k&yZ60eO`v&%_@HS`Kn)jm(zgq{%LdfWnR&Y9 zRY#Ku&Urb=gdIf}K;5RJizXndudiiHTr|^ere&^%aT_T3TAHkbH9XT;{R}P+fY1fLvHx zQ%9kc)Ya7;4z?|u;v-Irl&eTeNl`dpm_LPRo0;*4a?0bL?=ph>w;viB2Jh~=;=g52 zxbb4s(?Ocm)m5lc;oCKT`^}php&U1--6giRd$m78y?{;`)xyoIA|j0;G83}%D;4<^ z9}I?zP2SuPBKtE_3LFt&WO!7!GW0>Hhikw;!2^Pww<4g zMkZ*Y;QDO5Gc&B`DV5No0}K1e4R-aqqaJq@2-lCZC1mYXxlWzVucqYQ)t~&J9`W)Q zY0~Sck-fxJKeI#I|K*=ti#`Prg!|n2oXL{5-Rk1vt$n)PmCs%0r?0M`Zi-a zK*m4y!$pT3Gh1BbP5PA)m#R{m9dS)Fv$Wwe{9cByFA`lj(O@4sV-_`0fE1F+k z+E}dd>XDZACvCoQntplyB9{hvUv{Li@wj~xX_RP7kdc!9YHM?bnMX`q{4Gk8{s@vY zRC-c7SsW5FmENd6y7g4lZusr%{3-_YL=}q=m)DuJix+Vw7yVQCd%-0_rCiY>r4OXc zImne8NY8a+1+Q@z_cv`94Dd@!ml}ogZ5sF8PrqA`61?=RfF_e=W=7b3E~?{uw%1T8 z(fg2eGf6oRN3Y)d=0(Upj6?lw)c|Yargb%L zNJvOH^VN2fU7a`CJAD$Js z72-CV@c4!Vj|7AT3gc|HA>S8lv^+3Xw6h~Cp#%a6--ED4GQ!sjs22Ib)sY>zO-_j`r`d zOgC|5J6~75eFAv@{(WOueuaA5T)v{$+KqwS!%Iuc>tgKO*09TEbUhyr4&;B>jqll1 zQG+F~yA&JG>mu9Q83XEZW?VPDZv@-CtA8m${vd=&gWmK})J~$Y5k4Jfjfrv~_G`X^ z|G=HUaDi>m5HGwMg9W%b7zA^$fRC>)1vD(NfR6C<1rq?RR*cp8x^k=v_ltqqcQ3>i z7U*)_I@kby7-GEScu?@F;Z)OBK(w5UxNHVFNTQ}&VDdYZ|02GnO`LL}$LkATFxl^2w$ zbmHkKnq5SdSR2pc3u8XV##$bSkpW_3qde@Ay-l^m)c$B<{{8+Jvg3f>q8;+dl*3T< zwxqcDv=#maf|`;dK`Gb%>RYKcEofa2WJz|?T=@4!^g+FPkoSKS5%Vq2bN>vRot{-w z*@MNbfG+MuRU6t&*hw__^2>U&V_ngpQOu8%gjh|H8!SMTW#!I8*VhD&k;#@{0!*6I zWidcA+{3cn?pR093UIR^s`(b5v|9G&h84ohKu zJS;q3HFWylo4{xEI;-CFs);`&#|rzJ+ZBX>Hu(Zci9vwh101a?QJ42F#av3!vG{%R zS!k_`+fOT$EXT1&udJ%-IIP5{_I%fwTy&~;>bls_(4b1X+&4CsBgGZC>i6NpDSSr$ z?(Xh86WiP#_|A@7xhJuoNN^ycK~&L96Ba{a7z`yNe-8}!6N$*;l9HRQgsXgfx4*CN zvT<-ozWoU%0}09$t@+S~s)~8APyMVOYN?W3yqA9LeXPo z=-ge*a$b2k>mUO3t}94dHJGxE1^N}3)=>t#6yHl`4AKV*8KoE(LhjB%z9k_h;)W&t z2Scjup9@!eFzb#Oso8I7 zFZGb)J^fhHPO;QTTHe}AR`rQ*Qdb}jLt+dX@*wK^`Zv$;jV8Q(fD94#8A!B0BIz3K zFaZdp_veX0QR_fXKLvo#eXXMMUf6QpPpv{ibj*t_JiY_%-`_>!7#9f>8wQD95eZ6} z>!e6)hvVR!@YmpY&KfX|^*U-To%xv$D9@ zbD(zxYJq-$FZ&xpJGTqs;^U#33Kp9H0JS}-8YSR`2M{t8(#@j=ngjs_(u5MJw$EP5 zZOO@JtW{gu=&A@Pa=~#m>~SPZ1>>nxr=YFlI4n7HVrjK+9;k>y+f)|1tsC>Oi)JXD zzPsiZ7Z>N01SCGDdg6uf1GcX#B;^wxAGMxHMAs^yx6DFIE(mUAv_7@&HOoR&B;#RU z<{x9)3kIguNXO{>8+sH?v+9Z&tT?jlcAZ7zsUfTk23n*{+4~9p-(hq9i{Kl=-rzqI zNCizw$v-D*yc%`}5%%rQRpZBM2cg;fr5%fGW3#4;qouYm;D`62t4Wq^B|h>EFCzD6 zX7yrwnP*_&g||1gd}irn`n|`0_x2VX%Z>akBSSv=Xn!UwJ|w9(U;bhV!GpNj#F;t& z2{Lr;O6YMQEXL3=2v(3@U9FH~T*LPC>C@*mo>E&|TO4f@rMB@y81JeA&mAk9(Ne7k z{oywsww2nB{#xqKE`VlH-=Pn^H%?F62T0D!YE9T*8L!fP^7QG{uOOJ~VDuw9JCSG+ zqYn@mILE?b;_l9R%nvc0^jyxRVX~GDy`*?;42+{`8OzGLmSb4)TgSTB7U~3%J?oBN zlJzuOOhI8qEhjT4=S;+1>YADwoVSO8%uTc5V#~-Ia&p(i#l<<$wawN2*}5jq&gbH# zZN(GX1$p()m`hPS61-GMmz9-u|Dc><>rm9F@*I>UYwqZ{V{R@0O={^b=IQO*RIOlZ zYd9Kh5C7);x-|iE5uc-?Qc_ZGxqZ8rD2DX~TSr2J@GTTl@q(Vh*0KyeB* zAqdw*-2D}S%yygfW`Smxt()(kaB{KpGYkz)hwp6ApK-Uze$IPp#aB8G&OS$>FdhcB zsJ>OXx%v6jni|EI23}rOCIm1G-=#cRy*g_qE2WwHlMZ@JVH4i8%hB>?d%vpbrQQ>M44 zpW*q0Hz`0n+DrQqKk%G?oI73{<-S&W9!uqXW}&Nse|67&A(_O%`?bLiP7kGUsA>&A z&bSov7~1H8EyT^s;Sn@Bom9W+lm7%d^@b6yeK}Fxo2oqDu;-hSExpXh%d0GIYk0$=H}96UAkQZ4nN#w1;ud7eR;$W)?o<0DHX0Ki@ya|z(re<_i`G2h!P zlm5q_0_`#XcJ1*LdB;zop`q{c;XgziF^6kaAU$?63_@=TWZkA#l>=+-7ZAA^h2?_2 zRkym$d4s8-Ky!1ry`Nj8A(?lQ?wO&X4Lmi$QwS*zH>O!xUWPUe1tuQ&dwO~o)ipFC zVqzegX#iwP5JN%k;Mu+@N#{Usdv|x*v*RY`d35bv<4fh+v4IO??O7C`(1*R_;CN#3 zaQBg(tQ9J&$px3e%koDqLUivZ^gVNc^YO$VHBUnP*Sb<-*Xl`Q2OJ!Pi_hV+*-f<} zZWxH2e!)Ky%~v#3ek62btaDGU3_S6El%S?|`r_Xd^n?>tebL$c>U9x ziI>^qu`yf+GTxN@d`2jhzMu$`-g10XCzJC)ChKxXp3dZ$ov3P0eH21G^y*74QM$5KOf>@X!Tm=;+SZg}UVt^{tKf_1g z6vjpM$C&CmnXCJ#(&gyrHN@7(>qD#j9QA;>6!YeWe`zQ6fae7>}&toEL-2l zM?QSqvGD z^9J;4&UVo3^;IBUVY>D_>4)%>9~@Ai3Z2!>uNJdJ?X;feY>6o>^b4)QWkMRvBP74z zdQnZ1_W#Vroz8~h&EeU1qlC;Qhih(1eJ{R=#`e4N^4<@HfypQQV^jph=iB(1mPwF1 zCD=cMB`@KH)QnL)o>f%<&@^c;egFRbcVH%?2jRUexSu9nYU}C*SU8u zsJTs)8UWvIo#p}l9GOFb=O@I2f-V$3-Q(2I@_0J#HkGqd0SU5iR9_q3@9$?(34Bu& zEyHl>cl1-pMDBkyiS*ZjGdRYa*l7HDo9=Nq6i16o-K>VmkfHISkj$-Zw~dW2?XFLT zEk&`!HDMvOgXaG^wFwJF>yjDKy&6wY!TF6BxhgR~&b|qoQ_ec`RcCo~vcM#OKs8uf z3((L&C%STTb8$}k1_lKtO$=`ajogMYN4 zUo0u3fbP-3fQgBTq16fF?cJT&FsQbf^6i`HZ|7fdTTUZZ789{xNmg~XtZY!U)+{EE zxg}lPwXKcrLz{>ZUskp#02vlrV*@Ls?#1TOQRm|Gbvq&vb0%i|4fir0&%bQ~-+B@w zIT<-~4iNy|A;P;yZdW;sOf3^i?o5;ytjSa14&QL8oF9$lI!S$YD_3d=Dz2f>`i)!-^FkuT;`d?Np$ z@L{5aB0Rtpq{jX3?ty}lKTSPkly8}4aA>7Du9xFb#64R$Dpx5c$vO}>JUSXF*;Og} zmzCo8HP<-E6YoZsNM%at^5~{X!VDJT0pMM^nN;rFIRSvl5PN)THd{$s7t{U}yVO}` zZotkU==j(yv#CDl!6oo86bte5UfjNS3=~h(PM%Qz?@68i0;d!F7tSjE_vlu9OvJ|` z-F0P%r|-~h+$AQ$X7p8u_S1mJ75H45tqWyjQbpolMm?UFl9#sz2LeEfCsZ4QgM-TF zCNEGpaMa$}+1X+2zsz2F}5?ERQg0p?8USTtGsz z)+4Guxr9951w&A{oGyHn?`|2MKP*h8Wz>egzup@e3qC8vp&jwvqNT1MlwKTsm>ylQ zx$Jy&1R=Cyr+N6X{q&5CoC3lThle{_zHVz{mLN%+A3tlxLU?Ldri9Qy{X+x$G~rv~ zLr~`O-J0Qx>HX~CfjDQ=)=_8^B~NM{iLdWf*b(!oca`C>o9~kB4Kn0^EpS+Wfp~}x z1j&!%b|$gVcHmjAew2eU(@99lUWrUv!DFqA@7%dl*I71@&WFHdAzbD`!8SWvTPgDN z%?P2E>r&_@ggvUzMwAl-SgwK}gu~7oTtWmBo}pO8pIViIaq~$Mq$6}f2bP?ElYAt> z#>TdCB^1&Ni=TgZE&k`H-u|IU;J$x-L!jRR#V^xYYn$i+h7ELeI6oiEMp;^I>Fy#g+IDLS}*lTDx>GBP~7pvvjT zFFzd`iOjO_4FESkA)u$}7#WQxZmRQ9{*m?h=sXXf;(Z`_3#FI(afgYy=M2QR`ha$4 zp!!bpCr0q{6+u2hIB;L!&+i}&g5_jR{ZF=N9#Ul#TY?Ql^?D_Uk0Q^50=90vAf``c z0`~nVuH2@h%6+CgfC8YR54-3)l1~SOkJ7STlDJ@v(Qi6s`qiN$<(>X9qXu}DU$xxL zmY~+R$+j@o;X>IL_6z2Kr7vlJKMDi%ZkN=@9^JK3Nt__t&BHw4yE2m}R8@AR)+qs+ zS?Ss_r5}O#ez{Y(H^I^S!th53w<#9Jl&U5I^sLRZtjs->;d^%g9`1ZWSL}=pl3k$G zEy1XoFd*miOF!Wo#!fGwSE{=LGPh!ta&Nl2Rb&YRR2~%ZmDQ^sou}gDuU#x1I@-oI zmQuh*d&!mVPyhsiN@VYOj~6nGOF`%mMnW$`0P~YAXpjR%W!V@*=(ObNccU@fV-WXb z-+?H&?luDhGDMYUj|PX9^IC((mEWj?^kwfT5OiW^L&rg04E>iO(l1^}mnkj}Okdt{ zX_IpvbU2h*`?WO(ogqj}Oe`mp4kPXUdI2Cd|Mwd}DxX)ilXk=YEu$veGmu6D%G4AUMKi!*v^q$XUW6a}@t3wM41D zff`QvD*rqh&sXGy8Lnp(q7C*LE8#ByFz|34JGpzb?uu#Mqzm8L-CN{{ z?sD6>Y++6riaPt_F_*%^0m)4sOpmRdRv?wc@1CADKvk}gbYIA9kS2+Y++_4w^yE?g z*Oz;9rAK^{SFwi(6NH&kxQ-u0J-sJE;kyRD?=)0d`v_8oBf*7@k0WOaILn&WoGEKp zEgC^Kg8z-+7LVi%bbnr+i*DC@nu0Q}K6wL^nPu%Jmwe2b!`CUP?fE3=X zoXIEbl`wU<)5|&e4q?96HWhH918o=7h|hB<#IpD$L1E-k;JNDy3T^!_? zDh%K(HKp)`5>Qfs`G^7*Nn1C(35Y=Dvt6_f#>B_T&a;BK8ZFM(2HT(Q-ns7e3S7_$ z5C?*q_D_AL_`9>&riQ7KgE8`BC~BCN};Ld5z%z>J+nSxe>&?>`@Je;QE#;v@v{HvkreM zse3w$qH=G-tKpw5FvN7!dEU*{mC`4c5pb+J<}Ctet$Grzb14FA>_EMMHMai*F!0L! zwH*Zk$dpc=zpk-X2*49$r!43_Zr*}6Q#OXKi)=haiB`3yy}D1IzK4LZxT!GQbkz2i zlu8(JmIqmGE(QD<=L2u8$2$Cm5@wT%TP(*6xi6zGID=&%T<2pX*f%J=?C{mUYOS)( z9mqNJ@kJEIUAFbOpTdFi7hSmgSRBv- z^XV0&ytzc{b1YbqD(4Wu2ijxHZauE3rapV>{qg3%-V@;lky+6Q9#2otb}81jyi_SjvUNz{kSey6wFqB!ix-NRz$*|j3ldah>ZkGefUu>6LPNf<^`*24m zrw-)J6HCj>y-D;B5;nlgGTI88L17+~K}Y#;#J4dsiYAfUoBP@hGy9_*e-jS=(((+{ zy;xNXLV)tqbPnGP&j-4g1J5~a^gxpf`Lb1qGq0|>yf+a-bXSkJOb@De6qru_fn+Z| zYqDhUd(NbCYmN?qYl9AuM)vawsw~O>fLL)hE(oxh%~Y$>u^){&gfpXnui^G{aZEY=O=YPQAa1M83 z^0U5whg9@tlu+iOs`NWYaDkhhgu!6$3336lBvesEOs`4OyA@-W&ycl?vws;|Xj(tL zL#TwSL1i?@jxf*3AR7-3( Date: Tue, 25 Aug 2015 08:28:06 -0400 Subject: [PATCH 05/25] Changes pathing back probaly only need the species allowed for non-vox once though will fix later. --- .../mob/new_player/sprite_accessories.dm | 203 +++++++++--------- 1 file changed, 100 insertions(+), 103 deletions(-) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index cd4c9c2a554..0fbe56607c8 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1268,140 +1268,137 @@ /datum/sprite_accessory/socks icon = 'icons/mob/underwear.dmi' - nude - name = "Nude" - icon_state = null - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/nude + name = "Nude" + icon_state = null + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - white_norm - name = "Normal White" - icon_state = "white_norm" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/white_norm + name = "Normal White" + icon_state = "white_norm" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - black_norm - name = "Normal Black" - icon_state = "black_norm" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/black_norm + name = "Normal Black" + icon_state = "black_norm" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - white_short - name = "Short White" - icon_state = "white_short" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/white_short + name = "Short White" + icon_state = "white_short" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - black_short - name = "Short Black" - icon_state = "black_short" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/black_short + name = "Short Black" + icon_state = "black_short" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - white_knee - name = "Knee-high White" - icon_state = "white_knee" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/white_knee + name = "Knee-high White" + icon_state = "white_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - black_knee - name = "Knee-high Black" - icon_state = "black_knee" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/black_knee + name = "Knee-high Black" + icon_state = "black_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - thin_knee - name = "Knee-high Thin" - icon_state = "thin_knee" - gender = FEMALE - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/thin_knee + name = "Knee-high Thin" + icon_state = "thin_knee" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - striped_knee - name = "Knee-high Striped" - icon_state = "striped_knee" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/striped_knee + name = "Knee-high Striped" + icon_state = "striped_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - rainbow_knee - name = "Knee-high Rainbow" - icon_state = "rainbow_knee" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/rainbow_knee + name = "Knee-high Rainbow" + icon_state = "rainbow_knee" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - white_thigh - name = "Thigh-high White" - icon_state = "white_thigh" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/white_thigh + name = "Thigh-high White" + icon_state = "white_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - black_thigh - name = "Thigh-high Black" - icon_state = "black_thigh" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/black_thigh + name = "Thigh-high Black" + icon_state = "black_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - thin_thigh - name = "Thigh-high Thin" - icon_state = "thin_thigh" - gender = FEMALE - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/thin_thigh + name = "Thigh-high Thin" + icon_state = "thin_thigh" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - striped_thigh - name = "Thigh-high Striped" - icon_state = "striped_thigh" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/striped_thigh + name = "Thigh-high Striped" + icon_state = "striped_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - rainbow_thigh - name = "Thigh-high Rainbow" - icon_state = "rainbow_thigh" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/rainbow_thigh + name = "Thigh-high Rainbow" + icon_state = "rainbow_thigh" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - pantyhose - name = "Pantyhose" - icon_state = "pantyhose" - gender = FEMALE - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/pantyhose + name = "Pantyhose" + icon_state = "pantyhose" + gender = FEMALE + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") - black_fishnet - name = "Black Fishnet" - icon_state = "black_fishnet" - gender = NEUTER - species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/black_fishnet + name = "Black Fishnet" + icon_state = "black_fishnet" + gender = NEUTER + species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington") +/datum/sprite_accessory/socks/vox_white + name = "Vox White" + icon_state = "vox_white" + gender = NEUTER + species_allowed = list("Vox") -/datum/sprite_accessory/socks/ +/datum/sprite_accessory/socks/vox_white_thigh + name = "Vox Thigh-high White" + icon_state = "vox_whiteTH" + gender = NEUTER + species_allowed = list("Vox") - vox_white - name = "Vox White" - icon_state = "vox_white" - gender = NEUTER - species_allowed = list("Vox") - - vox_white_thigh - name = "Vox Thigh-high White" - icon_state = "vox_whiteTH" - gender = NEUTER - species_allowed = list("Vox") - - vox_fishnet - name = "Vox Fishnets" - icon_state = "vox_fishnet" - gender = NEUTER - species_allowed = list("Vox") \ No newline at end of file +/datum/sprite_accessory/socks/vox_fishnet + name = "Vox Fishnets" + icon_state = "vox_fishnet" + gender = NEUTER + species_allowed = list("Vox") \ No newline at end of file From 7ef6ae96c6b4bfd2d9b0ad41f25cc13e5af03877 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 26 Aug 2015 21:30:42 -0400 Subject: [PATCH 06/25] Finishes voxxy soxs --- .../mob/new_player/sprite_accessories.dm | 48 ++++++++++++++++++ icons/mob/underwear.dmi | Bin 39100 -> 41973 bytes 2 files changed, 48 insertions(+) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 0fbe56607c8..f5e8db924a9 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1391,12 +1391,60 @@ gender = NEUTER species_allowed = list("Vox") +/datum/sprite_accessory/socks/vox_black + name = "Vox Black" + icon_state = "vox_black" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_thin + name = "Vox Black Thin" + icon_state = "vox_blackthin" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_rainbow + name = "Vox Rainbow" + icon_state = "vox_rainbow" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_stripped + name = "Vox Stripped" + icon_state = "vox_white" + gender = NEUTER + species_allowed = list("Vox") + /datum/sprite_accessory/socks/vox_white_thigh name = "Vox Thigh-high White" icon_state = "vox_whiteTH" gender = NEUTER species_allowed = list("Vox") +/datum/sprite_accessory/socks/vox_black_thigh + name = "Vox Thigh-high Black" + icon_state = "vox_blackTH" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_thin_thigh + name = "Vox Thigh-high Thin" + icon_state = "vox_blackthinTH" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_rainbow_thigh + name = "Vox Thigh-high Rainbow" + icon_state = "vox_rainbowTH" + gender = NEUTER + species_allowed = list("Vox") + +/datum/sprite_accessory/socks/vox_stripped_thigh + name = "Vox Thigh-high Stripped" + icon_state = "vox_strippedTH" + gender = NEUTER + species_allowed = list("Vox") + /datum/sprite_accessory/socks/vox_fishnet name = "Vox Fishnets" icon_state = "vox_fishnet" diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index a8b4d971b101de9af2656f3835d84dec7fd70a51..3ec99db4cee1e6b5eb074b4e6b5373f1fb9e5215 100644 GIT binary patch literal 41973 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 From dd558c68e201db349e0fb1b8e0796e729b113415 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 29 Aug 2015 20:05:25 -0400 Subject: [PATCH 07/25] Remove an opps and sprite name tweak --- .../mob/new_player/sprite_accessories.dm | 2 +- icons/mob/underwear.dmi | Bin 41973 -> 41975 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index f5e8db924a9..5cc722bb7fd 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1,4 +1,4 @@ -/paradise_schema.sql/* +/* Hello and welcome to sprite_accessories: For sprite accessories, such as hair, facial hair, and possibly tattoos and stuff somewhere along the line. This file is diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index 3ec99db4cee1e6b5eb074b4e6b5373f1fb9e5215..6c36fd0651b951735bb2fe6a60b7427a043d8863 100644 GIT binary patch delta 545 zcmV++0^a@g#{&1q0+1vDDUl^7f7U}XWf#uYS!77@Sdy~pf8RlpHg2_1o`a>8IH-|t+59kMq-bJS)e@;A5;5Kuo z(~q&^JTc{!1hQR-3x^;Rgy<8y0_w~b!n^2IO)qV+E?0fwE1>qY0@^WL^~xrG_|b*B z>h*oQDM0sQtUyQEqqaKA9<02h>|t+~DOUtIO72yE;R?Ki^AY6C5wet+j@Zmngpy6t z%Ro@BrEDJ%{g07Lb%NdDf5#B8-VK9;l8O`s(GN^e>#E}pb94wJmzrI|sO)-MaaPck zD7m(2%qc(wvK<6nL4s}RBtZZ}NrLEibdn%Qph<$XeP(D&Cp4lY&^wc`mc4T>e9@o3 z==B#=iXI8IQuN3~REi#Wwkt*7o?O*9YuAJ8X?^&H&;MRhd@VPt&0e> j6oMdYDgR>b&GYM%4taXnH@^TXwl;rVy(ChzR05%)=iL(( delta 543 zcmV+)0^t4k#{%`o0+1vDCy^y5f7C-VWf#uYS!77@Sdy~pf8RlpW1vNGZ|ErCedN1$ zr{lf({`|6kGf%Jk=FGV`iDqXWzkF>rlk2KAJM-|Z*;sbHt@B5zRN3sz-8i)a1#Tzn zD!1jX*>o-!vonv)=9FpRVs>Wxr@qg8!Q>nP{UMBqn?sBrb{o|y7V0@*Iag+q`DLiCAU0d-~z;a&8qrkA!@m#e<;6;OLx0qq#BdSw$o{pdnn z_4>Zu6rlStR-mKoQCl5l4_4k$_OLh0lq&)pCHJboa0NcV`3Q362w6%@M{H&(LdhoS zWgsZmQnn9>{^!W0I>GMne`5$(?}ouaNkxi+=m#dKb=7f)IXZ-qOU*7}RCc|sI4kH% zlw8|1<`f_T*$#rPAi=hDk|2PgBti5$I!O>D&?G_HJ~OnX6B7~Bn8PHcS>wyZYb@9KS59kxcda+WJelodukO`<@B>+$JOVk0El$u>i z+~Koya>YhgPRCh(sn^M^{QZX>fDLK))vf&9I?WTXAZrWNz_lHqD Date: Fri, 4 Sep 2015 01:40:06 -0400 Subject: [PATCH 08/25] Materialized Datums --- code/__DEFINES/misc.dm | 17 +- code/datums/material_container.dm | 249 ++++++++++++++++++ code/game/machinery/autolathe.dm | 145 +++++----- code/game/machinery/robot_fabricator.dm | 2 +- code/game/mecha/mech_fabricator.dm | 56 ++-- code/game/objects/items.dm | 1 + .../objects/items/stacks/sheets/mineral.dm | 15 +- code/game/objects/objs.dm | 2 - .../recycling/disposal-construction.dm | 1 - code/modules/research/circuitprinter.dm | 6 +- code/modules/research/designs.dm | 17 +- code/modules/research/protolathe.dm | 18 +- code/modules/research/rdconsole.dm | 30 +-- paradise.dme | 1 + 14 files changed, 398 insertions(+), 162 deletions(-) create mode 100644 code/datums/material_container.dm diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index f797c520522..031c8a12f60 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -137,7 +137,7 @@ //transfer_ai() defines. Main proc in ai_core.dm #define AI_TRANS_TO_CARD 1 //Downloading AI to InteliCard. #define AI_TRANS_FROM_CARD 2 //Uploading AI from InteliCard -#define AI_MECH_HACK 3 //Malfunctioning AI hijacking mecha +#define AI_MECH_HACK 3 //Malfunctioning AI hijacking mecha //singularity defines #define STAGE_ONE 1 @@ -154,4 +154,17 @@ #define END_FOR_DVIEW dview_mob.loc = null #define MIN_SUPPLIED_LAW_NUMBER 15 -#define MAX_SUPPLIED_LAW_NUMBER 50 \ No newline at end of file +#define MAX_SUPPLIED_LAW_NUMBER 50 + +//Material defines +#define MAT_METAL "$metal" +#define MAT_GLASS "$glass" +#define MAT_SILVER "$silver" +#define MAT_GOLD "$gold" +#define MAT_DIAMOND "$diamond" +#define MAT_URANIUM "$uranium" +#define MAT_PLASMA "$plasma" +#define MAT_BANANIUM "$bananium" + +#define MAX_STACK_SIZE 50 +//The maximum size of a stack object. \ No newline at end of file diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm new file mode 100644 index 00000000000..56750520095 --- /dev/null +++ b/code/datums/material_container.dm @@ -0,0 +1,249 @@ +/* + This datum should be used for handling mineral contents of machines and whatever else is supposed to hold minerals and make use of them. + + Variables: + amount - raw amount of the mineral this container is holding, calculated by the defined value MINERAL_MATERIAL_AMOUNT=2000. + max_amount - max raw amount of mineral this container can hold. + sheet_type - type of the mineral sheet the container handles, used for output. + owner - object that this container is being used by, used for output. + MAX_STACK_SIZE - size of a stack of mineral sheets. Constant. +*/ + +/datum/material_container + var/total_amount = 0 + var/max_amount + var/sheet_type + var/obj/owner + var/list/materials = list() + //MAX_STACK_SIZE = 50 + //MINERAL_MATERIAL_AMOUNT = 2000 + +/datum/material_container/New(obj/O, list/mat_list, max_amt = 0) + owner = O + max_amount = max(0, max_amt) + + if(mat_list[MAT_METAL]) + materials[MAT_METAL] = new /datum/material/metal() + if(mat_list[MAT_GLASS]) + materials[MAT_GLASS] = new /datum/material/glass() + if(mat_list[MAT_SILVER]) + materials[MAT_SILVER] = new /datum/material/silver() + if(mat_list[MAT_GOLD]) + materials[MAT_GOLD] = new /datum/material/gold() + if(mat_list[MAT_DIAMOND]) + materials[MAT_DIAMOND] = new /datum/material/diamond() + if(mat_list[MAT_URANIUM]) + materials[MAT_URANIUM] = new /datum/material/uranium() + if(mat_list[MAT_PLASMA]) + materials[MAT_PLASMA] = new /datum/material/plasma() + if(mat_list[MAT_BANANIUM]) + materials[MAT_BANANIUM] = new /datum/material/bananium() + +/datum/material_container/Destroy() + owner = null + return ..() + +//For inserting an amount of material +/datum/material_container/proc/insert_amount(amt, material_type = null) + if(amt > 0 && has_space(amt)) + var/total_amount_saved = total_amount + if(material_type) + for(var/datum/material/M in materials) + if(M.material_type == material_type) + M.amount += amt + total_amount += amt + else + for(var/datum/material/M in materials) + M.amount += amt + total_amount += amt + return (total_amount - total_amount_saved) + return 0 + +/datum/material_container/proc/insert_stack(obj/item/stack/S, amt = 0) + if(!amt) + amt = S.amount + var/material_amt = get_item_material_amount(S) + amt = min(amt, round(((max_amount - total_amount) / material_amt))) + if(!amt) + return 0 + + insert_materials(S,amt) + S.use(amt) + return amt + +/datum/material_container/proc/insert_item(obj/item/I, multiplier = 1) + if(!I) + return 0 + if(istype(I,/obj/item/stack)) + return insert_stack(I) + + var/material_amount = get_item_material_amount(I) + if(!material_amount || !has_space(material_amount)) + return 0 + + insert_materials(I, multiplier) + return material_amount + +/datum/material_container/proc/insert_materials(obj/item/I, multiplier = 1) //for internal usage only + var/datum/material/M + for(var/MAT in materials) + M = materials[MAT] + M.amount += I.materials[MAT] * multiplier + total_amount += I.materials[MAT] * multiplier + +//For consuming material +//mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200) +/datum/material_container/proc/use_amount(list/mats) + if(!mats || !mats.len) + return 0 + + var/datum/material/M + for(var/MAT in materials) + M = materials[MAT] + if(M.amount < mats[MAT]) + return 0 + + var/total_amount_save = total_amount + for(var/MAT in materials) + M = materials[MAT] + M.amount -= mats[MAT] + total_amount -= mats[MAT] + + return total_amount_save - total_amount + + +/datum/material_container/proc/use_amount_type(amt, material_type) + var/datum/material/M + M = materials[material_type] + if(M) + if(M.amount >= amt) + M.amount -= amt + total_amount -= amt + return amt + return 0 + +//For spawning mineral sheets; internal use only +/datum/material_container/proc/retrieve(sheet_amt, datum/material/M) + if(sheet_amt > 0 && M.amount >= (sheet_amt * MINERAL_MATERIAL_AMOUNT)) + var/count = 0 + + while(sheet_amt > MAX_STACK_SIZE) + new M.sheet_type(get_turf(owner), MAX_STACK_SIZE) + count += MAX_STACK_SIZE + use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.material_type) + sheet_amt -= MAX_STACK_SIZE + + if(round(M.amount / MINERAL_MATERIAL_AMOUNT)) + new M.sheet_type(get_turf(owner), sheet_amt) + count += sheet_amt + use_amount_type(sheet_amt * MINERAL_MATERIAL_AMOUNT, M.material_type) + return count + return 0 + +/datum/material_container/proc/retrieve_sheets(sheet_amt, material_type) + if(materials[material_type]) + return retrieve(sheet_amt, materials[material_type]) + return 0 + +/datum/material_container/proc/retrieve_amount(amt, material_type) + return retrieve_sheets(amount2sheet(amt),material_type) + +/datum/material_container/proc/retrieve_all() + var/result = 0 + var/datum/material/M + for(var/MAT in materials) + M = materials[MAT] + result += retrieve_sheets(amount2sheet(M.amount), MAT) + return result + +/datum/material_container/proc/has_space(amt = 0) + return (total_amount + amt) <= max_amount + +/datum/material_container/proc/amount2sheet(amt) + if(amt >= MINERAL_MATERIAL_AMOUNT) + return round(amt / MINERAL_MATERIAL_AMOUNT) + return 0 + +/datum/material_container/proc/sheet2amount(sheet_amt) + if(sheet_amt > 0) + return sheet_amt * MINERAL_MATERIAL_AMOUNT + return 0 + +/datum/material_container/proc/amount(material_type) + var/datum/material/M = materials[material_type] + return M ? M.amount : 0 + +/datum/material_container/proc/can_insert(obj/item/I) + return get_item_material_amount(I) + +//returns the amount of material relevant to this container; +//if this container does not support glass, any glass in 'I' will not be taken into account +/datum/material_container/proc/get_item_material_amount(obj/item/I) + if(!istype(I)) + return 0 + var/material_amount = 0 + for(var/MAT in materials) + material_amount += I.materials[MAT] + return material_amount + + +/datum/material + var/amount = 0 + var/material_type = null + var/sheet_type = null + +/datum/material/metal + +/datum/material/metal/New() + ..() + material_type = MAT_METAL + sheet_type = /obj/item/stack/sheet/metal + +/datum/material/glass + +/datum/material/glass/New() + ..() + material_type = MAT_GLASS + sheet_type = /obj/item/stack/sheet/glass + +/datum/material/silver + +/datum/material/silver/New() + ..() + material_type = MAT_SILVER + sheet_type = /obj/item/stack/sheet/mineral/silver + +/datum/material/gold + +/datum/material/gold/New() + ..() + material_type = MAT_GOLD + sheet_type = /obj/item/stack/sheet/mineral/gold + +/datum/material/diamond + +/datum/material/diamond/New() + ..() + material_type = MAT_DIAMOND + sheet_type = /obj/item/stack/sheet/mineral/diamond + +/datum/material/uranium + +/datum/material/uranium/New() + ..() + material_type = MAT_URANIUM + sheet_type = /obj/item/stack/sheet/mineral/uranium + +/datum/material/plasma + +/datum/material/plasma/New() + ..() + material_type = MAT_PLASMA + sheet_type = /obj/item/stack/sheet/mineral/plasma + +/datum/material/bananium + +/datum/material/bananium/New() + ..() + material_type = MAT_BANANIUM + sheet_type = /obj/item/stack/sheet/mineral/bananium \ No newline at end of file diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 6228fe05ddd..69d6df5bb50 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -8,12 +8,6 @@ icon_state = "autolathe" density = 1 - var/m_amount = 0.0 - var/max_m_amount = 150000.0 - - var/g_amount = 0.0 - var/max_g_amount = 75000.0 - var/operating = 0.0 var/list/queue = list() var/queue_max_len = 12 @@ -40,6 +34,8 @@ var/selected_category var/screen = 1 + var/datum/material_container/materials + var/list/categories = list( "Communication", "Construction", @@ -59,6 +55,7 @@ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/manipulator(null) component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1)) RefreshParts() wires = new(src) @@ -115,12 +112,7 @@ if (panel_open) if(istype(O, /obj/item/weapon/crowbar)) - if(m_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) - G.amount = round(m_amount / MINERAL_MATERIAL_AMOUNT) - if(g_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) - G.amount = round(g_amount / MINERAL_MATERIAL_AMOUNT) + materials.retrieve_all() default_deconstruction_crowbar(O) return 1 else @@ -129,48 +121,37 @@ if (stat) return 1 - if (src.m_amount + O.m_amt > max_m_amount) - user << "The autolathe is full. Please remove metal from the autolathe in order to insert more." + var/material_amount = materials.can_insert(O) + if(!material_amount) + user << "This object does not contain sufficient amounts of metal or glass to be accepted by the autolathe." return 1 - if (src.g_amount + O.g_amt > max_g_amount) - user << "The autolathe is full. Please remove glass from the autolathe in order to insert more." + if(!materials.has_space(material_amount)) + user << "The autolathe is full. Please remove metal or glass from the autolathe in order to insert more." return 1 - if (O.m_amt == 0 && O.g_amt == 0) - user << "This object does not contain significant amounts of metal or glass, or cannot be accepted by the autolathe due to size or hazardous materials." + if(!user.unEquip(O)) + user << "\The [O] is stuck to you and cannot be placed into the autolathe." return 1 - var/amount = 1 - var/obj/item/stack/stack - var/m_amt = O.m_amt - var/g_amt = O.g_amt - if (istype(O, /obj/item/stack)) - stack = O - amount = stack.amount - if (m_amt) - amount = min(amount, round((max_m_amount-src.m_amount)/m_amt)) - flick("autolathe_o",src)//plays metal insertion animation - if (g_amt) - amount = min(amount, round((max_g_amount-src.g_amount)/g_amt)) - flick("autolathe_r",src)//plays glass insertion animation - stack.use(amount) - else - if(!user.unEquip(O)) - user << "/the [O] is stuck to your hand, you can't put it in \the [src]!" - O.loc = src - icon_state = "autolathe" busy = 1 - use_power(max(1000, (m_amt+g_amt)*amount/10)) - src.m_amount += m_amt * amount - src.g_amount += g_amt * amount - user << "You insert [amount] sheet[amount>1 ? "s" : ""] to the autolathe." - if (O && O.loc == src) - qdel(O) + var/inserted = materials.insert_item(O) + if(inserted) + if(istype(O,/obj/item/stack)) + if (O.materials[MAT_METAL]) + flick("autolathe_o",src)//plays metal insertion animation + if (O.materials[MAT_GLASS]) + flick("autolathe_r",src)//plays glass insertion animation + user << "You insert [inserted] sheet[inserted>1 ? "s" : ""] to the autolathe." + use_power(inserted*100) + else + user << "You insert a material total of [inserted] to the autolathe." + use_power(max(500,inserted/10)) + qdel(O) busy = 0 src.updateUsrDialog() -/obj/machinery/autolathe/attack_ghost(mob/user) +/obj/machinery/autolathe/attack_ghost(mob/user) interact(user) - + /obj/machinery/autolathe/attack_hand(mob/user) if(..(user, 0)) return @@ -179,7 +160,7 @@ /obj/machinery/autolathe/Topic(href, href_list) if(..()) return 1 - + if(href_list["menu"]) screen = text2num(href_list["menu"]) @@ -200,7 +181,7 @@ //multiplier checks : only stacks can have one and its value is 1, 10 ,25 or max_multiplier var/multiplier = text2num(href_list["multiplier"]) - var/max_multiplier = min(50, design_last_ordered.materials["$metal"] ?round(m_amount/design_last_ordered.materials["$metal"]):INFINITY,design_last_ordered.materials["$glass"]?round(g_amount/design_last_ordered.materials["$glass"]):INFINITY) + var/max_multiplier = min(50, design_last_ordered.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/design_last_ordered.materials[MAT_METAL]):INFINITY,design_last_ordered.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/design_last_ordered.materials[MAT_GLASS]):INFINITY) var/is_stack = ispath(design_last_ordered.build_path, /obj/item/stack) if(!is_stack && (multiplier > 1)) @@ -248,8 +229,7 @@ for(var/obj/item/weapon/stock_parts/matter_bin/MB in component_parts) tot_rating += MB.rating tot_rating *= 25000 - max_m_amount = tot_rating * 2 - max_g_amount = tot_rating + materials.max_amount = tot_rating * 3 for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) prod_coeff += M.rating - 1 @@ -261,8 +241,8 @@ desc = initial(desc)+"\nIt's building \a [initial(D.name)]." var/is_stack = ispath(D.build_path, /obj/item/stack) var/coeff = get_coeff(D) - var/metal_cost = D.materials["$metal"] - var/glass_cost = D.materials["$glass"] + var/metal_cost = D.materials[MAT_METAL] + var/glass_cost = D.materials[MAT_GLASS] var/power = max(2000, (metal_cost+glass_cost)*multiplier/5) if (can_build(D,multiplier)) being_built = list(D,multiplier) @@ -270,11 +250,11 @@ icon_state = "autolathe" flick("autolathe_n",src) if(is_stack) - m_amount -= metal_cost*multiplier - g_amount -= glass_cost*multiplier + var/list/materials_used = list(MAT_METAL=metal_cost*multiplier, MAT_GLASS=glass_cost*multiplier) + materials.use_amount(materials_used) else - m_amount -= metal_cost/coeff - g_amount -= glass_cost/coeff + var/list/materials_used = list(MAT_METAL=metal_cost/coeff, MAT_GLASS=glass_cost/coeff) + materials.use_amount(materials_used) updateUsrDialog() sleep(32/coeff) if(is_stack) @@ -282,38 +262,34 @@ S.amount = multiplier else var/obj/item/new_item = new D.build_path(BuildTurf) - new_item.m_amt /= coeff - new_item.g_amt /= coeff - if(m_amount < 0) - m_amount = 0 - if(g_amount < 0) - g_amount = 0 + new_item.materials[MAT_METAL] /= coeff + new_item.materials[MAT_GLASS] /= coeff updateUsrDialog() desc = initial(desc) /obj/machinery/autolathe/proc/can_build(var/datum/design/D,var/multiplier=1,var/custom_metal,var/custom_glass) var/coeff = get_coeff(D) - var/metal_amount = m_amount + var/metal_amount = materials.amount(MAT_METAL) if(custom_metal) metal_amount = custom_metal - var/glass_amount = g_amount + var/glass_amount = materials.amount(MAT_GLASS) if(custom_glass) glass_amount = custom_glass - if(D.materials["$metal"] && (metal_amount < (multiplier*D.materials["$metal"] / coeff))) + if(D.materials[MAT_METAL] && (metal_amount < (multiplier*D.materials[MAT_METAL] / coeff))) return 0 - if(D.materials["$glass"] && (glass_amount < (multiplier*D.materials["$glass"] / coeff))) + if(D.materials[MAT_GLASS] && (glass_amount < (multiplier*D.materials[MAT_GLASS] / coeff))) return 0 return 1 /obj/machinery/autolathe/proc/get_design_cost_as_list(var/datum/design/D,var/multiplier=1) var/list/OutputList = list(0,0) var/coeff = get_coeff(D) - if(D.materials["$metal"]) - OutputList[1] = (D.materials["$metal"] / coeff)*multiplier - if(D.materials["$glass"]) - OutputList[2] = (D.materials["$glass"] / coeff)*multiplier + if(D.materials[MAT_METAL]) + OutputList[1] = (D.materials[MAT_METAL] / coeff)*multiplier + if(D.materials[MAT_GLASS]) + OutputList[2] = (D.materials[MAT_GLASS] / coeff)*multiplier return OutputList /obj/machinery/autolathe/proc/get_processing_line() @@ -324,8 +300,8 @@ return output /obj/machinery/autolathe/proc/get_queue() - var/temp_metal = m_amount - var/temp_glass = g_amount + var/temp_metal = materials.amount(MAT_METAL) + var/temp_glass = materials.amount(MAT_GLASS) var/output = "" output += "

" output += "Queue contains:" @@ -402,8 +378,9 @@ var/dat = "" dat += "
" dat += "

Autolathe Menu:


" - dat += "Metal amount: [src.m_amount] / [max_m_amount] cm3
" - dat += "Glass amount: [src.g_amount] / [max_g_amount] cm3" + dat += "Total amount: [materials.total_amount] / [materials.max_amount] cm3
" + dat += "Metal amount: [materials.amount(MAT_METAL)] cm3
" + dat += "Glass amount: [materials.amount(MAT_GLASS)] cm3
" dat += "
\ \ @@ -435,8 +412,9 @@ dat += "
" dat += "Return to main menu" dat += "

Browsing [selected_category]:


" - dat += "Metal amount: [src.m_amount] / [max_m_amount] cm3
" - dat += "Glass amount: [src.g_amount] / [max_g_amount] cm3
" + dat += "Total amount: [materials.total_amount] / [materials.max_amount] cm3
" + dat += "Metal amount: [materials.amount(MAT_METAL)] cm3
" + dat += "Glass amount: [materials.amount(MAT_GLASS)] cm3
" for(var/datum/design/D in files.known_designs) if(!(selected_category in D.category)) @@ -448,7 +426,7 @@ dat += "[D.name]" if(ispath(D.build_path, /obj/item/stack)) - var/max_multiplier = min(50, D.materials["$metal"] ?round(m_amount/D.materials["$metal"]):INFINITY,D.materials["$glass"]?round(g_amount/D.materials["$glass"]):INFINITY) + var/max_multiplier = min(50, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY) if (max_multiplier>10 && !disabled) dat += " x10" if (max_multiplier>25 && !disabled) @@ -469,8 +447,9 @@ dat += "
" dat += "Return to main menu" dat += "

Search results:


" - dat += "Metal amount: [src.m_amount] / [max_m_amount] cm3
" - dat += "Glass amount: [src.g_amount] / [max_g_amount] cm3
" + dat += "Total amount: [materials.total_amount] / [materials.max_amount] cm3
" + dat += "Metal amount: [materials.amount(MAT_METAL)] cm3
" + dat += "Glass amount: [materials.amount(MAT_GLASS)] cm3
" for(var/datum/design/D in matching_designs) if(disabled || !can_build(D)) @@ -479,7 +458,7 @@ dat += "[D.name]" if(ispath(D.build_path, /obj/item/stack)) - var/max_multiplier = min(50, D.materials["$metal"] ?round(m_amount/D.materials["$metal"]):INFINITY,D.materials["$glass"]?round(g_amount/D.materials["$glass"]):INFINITY) + var/max_multiplier = min(50, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS]?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY) if (max_multiplier>10 && !disabled) dat += " x10" if (max_multiplier>25 && !disabled) @@ -498,10 +477,10 @@ /obj/machinery/autolathe/proc/get_design_cost(var/datum/design/D) var/coeff = get_coeff(D) var/dat - if(D.materials["$metal"]) - dat += "[D.materials["$metal"] / coeff] metal " - if(D.materials["$glass"]) - dat += "[D.materials["$glass"] / coeff] glass" + if(D.materials[MAT_METAL]) + dat += "[D.materials[MAT_METAL] / coeff] metal " + if(D.materials[MAT_GLASS]) + dat += "[D.materials[MAT_GLASS] / coeff] glass" return dat /obj/machinery/autolathe/proc/adjust_hacked(var/hack) diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 86e6dd5e700..be28fae21da 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -21,7 +21,7 @@ if(!O:amount) return while(metal_amount < 150000 && O:amount) - src.metal_amount += O:m_amt /*O:height * O:width * O:length * 100000.0*/ + src.metal_amount += O:materials[MAT_METAL] /*O:height * O:width * O:length * 100000.0*/ O:amount-- count++ diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 1d581405393..4637a47ced0 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -14,14 +14,14 @@ var/time_coeff_tech = 1 var/resource_coeff_tech = 1 var/list/resources = list( - "$metal"=0, - "$glass"=0, - "$bananium"=0, - "$diamond"=0, - "$gold"=0, - "$plasma"=0, - "$silver"=0, - "$uranium"=0 + MAT_METAL=0, + MAT_GLASS=0, + MAT_BANANIUM=0, + MAT_DIAMOND=0, + MAT_GOLD=0, + MAT_PLASMA=0, + MAT_SILVER=0, + MAT_URANIUM=0 ) var/res_max_amount = 200000 var/datum/research/files @@ -183,8 +183,8 @@ var/obj/item/I = new D.build_path I.loc = get_step(src,SOUTH) - I.m_amt = get_resource_cost_w_coeff(D,"$metal") - I.g_amt = get_resource_cost_w_coeff(D,"$glass") + I.materials[MAT_METAL] = get_resource_cost_w_coeff(D,MAT_METAL) + I.materials[MAT_GLASS] = get_resource_cost_w_coeff(D,MAT_GLASS) visible_message("\icon[src] \The [src] beeps, \"\The [I] is complete.\"") being_built = null @@ -309,9 +309,9 @@ /obj/machinery/mecha_part_fabricator/proc/get_construction_time_w_coeff(datum/design/D, roundto = 1) //aran return round(initial(D.construction_time)*time_coeff*time_coeff_tech, roundto) -/obj/machinery/mecha_part_fabricator/attack_ghost(mob/user) +/obj/machinery/mecha_part_fabricator/attack_ghost(mob/user) interact(user) - + /obj/machinery/mecha_part_fabricator/attack_hand(mob/user) if(!(..())) return interact(user) @@ -467,21 +467,21 @@ return -1 var/type switch(mat_string) - if("$metal") + if(MAT_METAL) type = /obj/item/stack/sheet/metal - if("$glass") + if(MAT_GLASS) type = /obj/item/stack/sheet/glass - if("$gold") + if(MAT_GOLD) type = /obj/item/stack/sheet/mineral/gold - if("$silver") + if(MAT_SILVER) type = /obj/item/stack/sheet/mineral/silver - if("$diamond") + if(MAT_DIAMOND) type = /obj/item/stack/sheet/mineral/diamond - if("$plasma") + if(MAT_PLASMA) type = /obj/item/stack/sheet/mineral/plasma - if("$uranium") + if(MAT_URANIUM) type = /obj/item/stack/sheet/mineral/uranium - if("$bananium") + if(MAT_BANANIUM) type = /obj/item/stack/sheet/mineral/bananium else return 0 @@ -523,21 +523,21 @@ var/material switch(W.type) if(/obj/item/stack/sheet/mineral/gold) - material = "$gold" + material = MAT_GOLD if(/obj/item/stack/sheet/mineral/silver) - material = "$silver" + material = MAT_SILVER if(/obj/item/stack/sheet/mineral/diamond) - material = "$diamond" + material = MAT_DIAMOND if(/obj/item/stack/sheet/mineral/plasma) - material = "$plasma" + material = MAT_PLASMA if(/obj/item/stack/sheet/metal) - material = "$metal" + material = MAT_METAL if(/obj/item/stack/sheet/glass) - material = "$glass" + material = MAT_GLASS if(/obj/item/stack/sheet/mineral/bananium) - material = "$bananium" + material = MAT_BANANIUM if(/obj/item/stack/sheet/mineral/uranium) - material = "$uranium" + material = MAT_URANIUM else return ..() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f26026b0754..00def7263cf 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -26,6 +26,7 @@ var/action_button_is_hands_free = 0 //If 1, bypass the restrained, lying, and stunned checks action buttons normally test for var/datum/action/item_action/action = null + var/list/materials = list() //Since any item can now be a piece of clothing, this has to be put here so all items share it. var/flags_inv //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. var/_color = null diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 97daff457ed..8de783ebc3a 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -92,8 +92,8 @@ var/global/list/datum/stack_recipe/bananium_recipes = list ( \ name = "diamond" icon_state = "sheet-diamond" origin_tech = "materials=6" - perunit = 2000 sheettype = "diamond" + materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT) /obj/item/stack/sheet/mineral/diamond/New() @@ -104,8 +104,8 @@ var/global/list/datum/stack_recipe/bananium_recipes = list ( \ name = "uranium" icon_state = "sheet-uranium" origin_tech = "materials=5" - perunit = 2000 sheettype = "uranium" + materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT) /obj/item/stack/sheet/mineral/uranium/New() ..() @@ -115,8 +115,8 @@ var/global/list/datum/stack_recipe/bananium_recipes = list ( \ name = "solid plasma" icon_state = "sheet-plasma" origin_tech = "plasmatech=2;materials=2" - perunit = 2000 sheettype = "plasma" + materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT) /obj/item/stack/sheet/mineral/plasma/New() ..() @@ -126,7 +126,6 @@ var/global/list/datum/stack_recipe/bananium_recipes = list ( \ name = "Plastic" icon_state = "sheet-plastic" origin_tech = "materials=3" - perunit = 2000 /obj/item/stack/sheet/mineral/plastic/New() ..() @@ -135,14 +134,13 @@ var/global/list/datum/stack_recipe/bananium_recipes = list ( \ /obj/item/stack/sheet/mineral/plastic/cyborg name = "plastic sheets" icon_state = "sheet-plastic" - perunit = 2000 /obj/item/stack/sheet/mineral/gold name = "gold" icon_state = "sheet-gold" origin_tech = "materials=4" - perunit = 2000 sheettype = "gold" + materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT) /obj/item/stack/sheet/mineral/gold/New() ..() @@ -152,8 +150,8 @@ var/global/list/datum/stack_recipe/bananium_recipes = list ( \ name = "silver" icon_state = "sheet-silver" origin_tech = "materials=3" - perunit = 2000 sheettype = "silver" + materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT) /obj/item/stack/sheet/mineral/silver/New() ..() @@ -163,8 +161,8 @@ var/global/list/datum/stack_recipe/bananium_recipes = list ( \ name = "bananium" icon_state = "sheet-clown" origin_tech = "materials=4" - perunit = 2000 sheettype = "clown" + materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT) /obj/item/stack/sheet/mineral/bananium/New(var/loc, var/amount=null) ..() @@ -174,4 +172,3 @@ var/global/list/datum/stack_recipe/bananium_recipes = list ( \ name = "enriched uranium" icon_state = "sheet-enruranium" origin_tech = "materials=5" - perunit = 1000 diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 467bceac1b8..dc560095e3d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,7 +1,5 @@ /obj //var/datum/module/mod //not used - var/m_amt = 0 // metal - var/g_amt = 0 // glass var/w_amt = 0 // waster amounts var/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/reliability = 100 //Used by SOME devices to determine how reliable they are. diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index a0997497d34..9e4b3661c0d 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -10,7 +10,6 @@ anchored = 0 density = 0 pressure_resistance = 5*ONE_ATMOSPHERE - m_amt = 1850 level = 2 var/ptype = 0 // 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=disposal bin, 7=outlet, 8=inlet diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index dd0bfb9d0e8..249b4956953 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -72,11 +72,11 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). /obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, var/M) switch(M) - if("$glass") + if(MAT_GLASS) return (g_amount - (being_built.materials[M]/efficiency_coeff) >= 0) - if("$gold") + if(MAT_GOLD) return (gold_amount - (being_built.materials[M]/efficiency_coeff) >= 0) - if("$diamond") + if(MAT_DIAMOND) return (diamond_amount - (being_built.materials[M]/efficiency_coeff) >= 0) else return (reagents.has_reagent(M, (being_built.materials[M]/efficiency_coeff)) != 0) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 87e413565a7..e458feb1fb5 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -9,15 +9,14 @@ For the materials datum, it assumes you need reagents unless specified otherwise you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum), they are simply references used as part of a "has materials?" type proc. They all start with a $ to denote that they aren't reagents. The currently supporting non-reagent materials: -- $metal (/obj/item/stack/metal). One sheet = 3750 units. -- $glass (/obj/item/stack/glass). One sheet = 3750 units. -- $plasma (/obj/item/stack/plasma). One sheet = 3750 units. -- $plasteel (/obj/item/stack/sheet/plasteel). One sheet = 3750 units. -- $silver (/obj/item/stack/silver). One sheet = 3750 units. -- $gold (/obj/item/stack/gold). One sheet = 3750 units. -- $uranium (/obj/item/stack/uranium). One sheet = 3750 units. -- $diamond (/obj/item/stack/diamond). One sheet = 3750 units. -- $clown (/obj/item/stack/clown). One sheet = 3750 units. ("Bananium") +- MAT_METAL (/obj/item/stack/metal). +- MAT_GLASS (/obj/item/stack/glass). +- MAT_PLASMA (/obj/item/stack/plasma). +- MAT_SILVER (/obj/item/stack/silver). +- MAT_GOLD (/obj/item/stack/gold). +- MAT_URANIUM (/obj/item/stack/uranium). +- MAT_DIAMOND (/obj/item/stack/diamond). +- MAT_BANANIUM (/obj/item/stack/bananium). (Insert new ones here) Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials. diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 37fc63ce552..4d07d25704d 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -52,7 +52,7 @@ Note: Must be placed west/left of and R&D console to function. RefreshParts() reagents.my_atom = src - + /obj/machinery/r_n_d/protolathe/upgraded/New() ..() component_parts = list() @@ -85,21 +85,21 @@ Note: Must be placed west/left of and R&D console to function. /obj/machinery/r_n_d/protolathe/proc/check_mat(datum/design/being_built, var/M) // now returns how many times the item can be built with the material var/A = 0 switch(M) - if("$metal") + if(MAT_METAL) A = m_amount - if("$glass") + if(MAT_GLASS) A = g_amount - if("$gold") + if(MAT_GOLD) A = gold_amount - if("$silver") + if(MAT_SILVER) A = silver_amount - if("$plasma") + if(MAT_PLASMA) A = plasma_amount - if("$uranium") + if(MAT_URANIUM) A = uranium_amount - if("$diamond") + if(MAT_DIAMOND) A = diamond_amount - if("$bananium") + if(MAT_BANANIUM) A = clown_amount else A = reagents.get_reagent_amount(M) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index dca34a6b9b6..b9c5487ca42 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -296,8 +296,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, else //Same design always gain quality screen = 2.3 //Crit fail gives the same design a lot of reliability, like really a lot if(linked_lathe) //Also sends salvaged materials to a linked protolathe, if any. - linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.m_amt*(linked_destroy.decon_mod/10))) - linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.g_amt*(linked_destroy.decon_mod/10))) + linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_METAL]*(linked_destroy.decon_mod/10))) + linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_GLASS]*(linked_destroy.decon_mod/10))) linked_destroy.loaded_item = null else screen = 1.0 @@ -405,21 +405,21 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(enough_materials) for(var/M in being_built.materials) switch(M) - if("$metal") + if(MAT_METAL) linked_lathe.m_amount = max(0, (linked_lathe.m_amount-(being_built.materials[M]/coeff * amount))) - if("$glass") + if(MAT_GLASS) linked_lathe.g_amount = max(0, (linked_lathe.g_amount-(being_built.materials[M]/coeff * amount))) - if("$gold") + if(MAT_GOLD) linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-(being_built.materials[M]/coeff * amount))) - if("$silver") + if(MAT_SILVER) linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-(being_built.materials[M]/coeff * amount))) - if("$plasma") + if(MAT_PLASMA) linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-(being_built.materials[M]/coeff * amount))) - if("$uranium") + if(MAT_URANIUM) linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-(being_built.materials[M]/coeff * amount))) - if("$diamond") + if(MAT_DIAMOND) linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-(being_built.materials[M]/coeff * amount))) - if("$bananium") + if(MAT_BANANIUM) linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-(being_built.materials[M]/coeff * amount))) else linked_lathe.reagents.remove_reagent(M, being_built.materials[M]/coeff * amount) @@ -434,8 +434,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, if( new_item.type == /obj/item/weapon/storage/backpack/holding ) new_item.investigate_log("built by [key]","singulo") new_item.reliability = R - new_item.m_amt /= coeff - new_item.g_amt /= coeff + new_item.materials[MAT_METAL] /= coeff + new_item.materials[MAT_GLASS] /= coeff if(linked_lathe.hacked) R = max((new_item.reliability/2), 0) if(O) @@ -482,11 +482,11 @@ won't update every console in existence) but it's more of a hassle to do. Also, g2g = 0 break switch(M) - if("$glass") + if(MAT_GLASS) linked_imprinter.g_amount = max(0, (linked_imprinter.g_amount-being_built.materials[M]/coeff)) - if("$gold") + if(MAT_GOLD) linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M]/coeff)) - if("$diamond") + if(MAT_DIAMOND) linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M]/coeff)) else linked_imprinter.reagents.remove_reagent(M, being_built.materials[M]/coeff) diff --git a/paradise.dme b/paradise.dme index 22ee01225f2..602035f443d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -179,6 +179,7 @@ #include "code\datums\datumvars.dm" #include "code\datums\gas_mixture.dm" #include "code\datums\martial.dm" +#include "code\datums\material_container.dm" #include "code\datums\mind.dm" #include "code\datums\mixed.dm" #include "code\datums\modules.dm" From a019934e9e4decbcf255775f42bdaa9399b782fd Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Sep 2015 05:18:48 -0400 Subject: [PATCH 09/25] Pass I --- code/game/gamemodes/nuclear/pinpointer.dm | 2 +- code/game/machinery/alarm.dm | 81 +++++++++---------- code/game/machinery/camera/camera_assembly.dm | 3 +- code/game/machinery/constructable_frame.dm | 2 +- code/game/machinery/doors/airlock.dm | 4 +- .../machinery/doors/airlock_electronics.dm | 3 +- code/game/machinery/firealarm.dm | 9 +-- code/game/objects/items/ashtray.dm | 7 +- code/game/objects/items/devices/debugger.dm | 3 +- code/game/objects/items/devices/flashlight.dm | 7 +- .../objects/items/devices/laserpointer.dm | 3 +- code/game/objects/items/devices/multitool.dm | 3 +- code/game/objects/items/devices/powersink.dm | 3 +- .../items/devices/radio/electropack.dm | 3 +- .../objects/items/devices/radio/headset.dm | 2 +- .../objects/items/devices/radio/intercom.dm | 5 +- .../game/objects/items/devices/radio/radio.dm | 4 +- code/game/objects/items/devices/scanners.dm | 16 ++-- .../objects/items/devices/taperecorder.dm | 6 +- .../objects/items/devices/traitordevices.dm | 2 +- .../items/mountable_frames/air_alarm.dm | 2 +- .../mountable_frames/newscaster_frame.dm | 3 +- code/game/objects/items/stacks/rods.dm | 2 +- .../game/objects/items/stacks/sheets/glass.dm | 15 ++-- .../items/stacks/sheets/sheet_types.dm | 6 +- .../objects/items/stacks/tiles/plasteel.dm | 2 +- code/game/objects/items/toys.dm | 6 +- code/game/objects/items/weapons/RCD.dm | 5 +- .../objects/items/weapons/extinguisher.dm | 4 +- .../objects/items/weapons/flamethrower.dm | 2 +- code/game/objects/items/weapons/handcuffs.dm | 2 +- code/game/objects/items/weapons/kitchen.dm | 3 +- code/game/objects/items/weapons/misc.dm | 2 +- code/game/objects/items/weapons/paint.dm | 3 +- .../game/objects/items/weapons/power_cells.dm | 25 +++--- code/game/objects/items/weapons/shards.dm | 2 +- code/game/objects/items/weapons/shields.dm | 3 +- .../game/objects/items/weapons/stock_parts.dm | 73 +++++++---------- .../objects/items/weapons/storage/bags.dm | 2 +- .../objects/items/weapons/storage/boxes.dm | 2 +- .../objects/items/weapons/syndie_uplink.dm | 4 +- .../objects/items/weapons/table_rack_parts.dm | 6 +- .../objects/items/weapons/teleportation.dm | 4 +- code/game/objects/items/weapons/tools.dm | 29 +++---- code/game/objects/items/weapons/weaponry.dm | 2 +- code/game/objects/items/weapons/wires.dm | 2 +- .../game/vehicles/spacepods/pod_fabricator.dm | 54 ++++++------- code/modules/assembly/assembly.dm | 3 +- code/modules/assembly/igniter.dm | 3 +- code/modules/assembly/infrared.dm | 3 +- code/modules/assembly/mousetrap.dm | 2 +- code/modules/assembly/proximity.dm | 3 +- code/modules/assembly/signaler.dm | 5 +- code/modules/assembly/timer.dm | 3 +- code/modules/assembly/voice.dm | 3 +- code/modules/clothing/head/misc_special.dm | 3 +- code/modules/clothing/masks/gasmask.dm | 3 +- code/modules/fish/fish_items.dm | 2 +- code/modules/hydroponics/trays/tray_tools.dm | 4 +- code/modules/mining/mine_items.dm | 4 +- code/modules/paperwork/pen.dm | 2 +- code/modules/paperwork/photography.dm | 2 +- code/modules/paperwork/stamps.dm | 4 +- code/modules/power/cable.dm | 3 +- code/modules/power/lighting.dm | 8 +- code/modules/projectiles/ammunition.dm | 2 +- .../projectiles/ammunition/ammo_casings.dm | 12 +-- code/modules/projectiles/ammunition/boxes.dm | 8 +- code/modules/projectiles/gun.dm | 2 +- code/modules/projectiles/guns/energy/laser.dm | 2 +- .../projectiles/guns/energy/special.dm | 6 +- code/modules/projectiles/guns/energy/stun.dm | 4 +- code/modules/projectiles/guns/projectile.dm | 2 +- code/modules/reagents/grenade_launcher.dm | 2 +- .../food/drinks/drinkingglass.dm | 2 +- .../reagent_containers/glass_containers.dm | 19 ++--- code/modules/reagents/syringe_gun.dm | 2 +- code/modules/research/research.dm | 6 +- .../research/xenoarchaeology/chemistry.dm | 3 +- code/modules/surgery/tools.dm | 18 ++--- 80 files changed, 254 insertions(+), 329 deletions(-) diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index bc29494d6ea..9505a0c48a1 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -8,7 +8,7 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - m_amt = 500 + materials = list(MAT_METAL=500) var/obj/item/weapon/disk/nuclear/the_disk = null var/active = 0 diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 83510cd8357..1bf7df22a64 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -105,7 +105,7 @@ var/area/alarm_area var/danger_level = 0 var/alarmActivated = 0 // Manually activated (independent from danger level) - + var/buildstage = 2 //2 is built, 1 is building, 0 is frame. var/target_temperature = T0C+20 @@ -114,21 +114,21 @@ var/datum/radio_frequency/radio_connection var/list/TLV = list() - + var/report_danger_level = 1 - + /obj/machinery/alarm/monitor report_danger_level = 0 - + /obj/machinery/alarm/server preset = AALARM_PRESET_SERVER - + /obj/machinery/alarm/vox preset = AALARM_PRESET_VOX - + /obj/machinery/alarm/kitchen_cold_room preset = AALARM_PRESET_COLDROOM - + /obj/machinery/alarm/proc/apply_preset(var/no_cycle_after=0) // Propogate settings. for (var/obj/machinery/alarm/AA in alarm_area) @@ -143,10 +143,10 @@ "plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa "other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20), /* kpa */ - "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K + "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K ) switch(preset) - if(AALARM_PRESET_VOX) + if(AALARM_PRESET_VOX) TLV = list( "oxygen" = new/datum/tlv(-1.0, -1.0, 1, 2), // Partial pressure, kpa "nitrogen" = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa @@ -154,9 +154,9 @@ "plasma" = new/datum/tlv(-1.0, -1.0, 0.2, 0.5), // Partial pressure, kpa "other" = new/datum/tlv(-1.0, -1.0, 0.5, 1.0), // Partial pressure, kpa "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20), /* kpa */ - "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K + "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), // K ) - if(AALARM_PRESET_SERVER) + if(AALARM_PRESET_SERVER) TLV = list( "oxygen" = new/datum/tlv(-1.0, -1.0,-1.0,-1.0), // Partial pressure, kpa "nitrogen" = new/datum/tlv(-1.0, -1.0, -1.0, -1.0), // Partial pressure, kpa @@ -166,7 +166,7 @@ "pressure" = new/datum/tlv(-1.0, -1.0,-1.0,-1.0), /* kpa */ "temperature" = new/datum/tlv(-1.0, -1.0,-1.0,-1.0), // K ) - if(AALARM_PRESET_COLDROOM) + if(AALARM_PRESET_COLDROOM) TLV = list( "oxygen" = new/datum/tlv(16, 19, 135, 140), // Partial pressure, kpa "nitrogen" = new/datum/tlv(-1.0, -1.0, -1.0, -1.0), // Partial pressure, kpa @@ -176,7 +176,7 @@ "pressure" = new/datum/tlv(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.50,ONE_ATMOSPHERE*1.60), /* kpa */ "temperature" = new/datum/tlv(200, 210, 273.15, 283.15), // K ) - + if(!no_cycle_after) mode = AALARM_MODE_REPLACEMENT apply_mode() @@ -185,7 +185,7 @@ ..() air_alarms += src air_alarms = sortAtom(air_alarms) - + wires = new(src) if(building) @@ -223,7 +223,7 @@ set_frequency(frequency) if (!master_is_operating()) elect_master() - + /obj/machinery/alarm/proc/master_is_operating() if (! alarm_area) alarm_area = areaMaster @@ -243,12 +243,12 @@ return var/turf/simulated/location = loc - if(!istype(location)) + if(!istype(location)) return 0 var/datum/gas_mixture/environment = location.return_air() var/datum/tlv/cur_tlv - + handle_heating_cooling(environment, cur_tlv, location) var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume @@ -256,13 +256,13 @@ cur_tlv = TLV["pressure"] var/environment_pressure = environment.return_pressure() var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure) - + cur_tlv = TLV["oxygen"] var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.oxygen*GET_PP) cur_tlv = TLV["nitrogen"] - var/nitrogen_dangerlevel = cur_tlv.get_danger_level(environment.nitrogen*GET_PP) - + var/nitrogen_dangerlevel = cur_tlv.get_danger_level(environment.nitrogen*GET_PP) + cur_tlv = TLV["carbon dioxide"] var/co2_dangerlevel = cur_tlv.get_danger_level(environment.carbon_dioxide*GET_PP) @@ -291,11 +291,11 @@ if (old_danger_level!=danger_level) apply_danger_level() - + if (mode == AALARM_MODE_REPLACEMENT && environment_pressure < ONE_ATMOSPHERE * 0.05) mode = AALARM_MODE_SCRUBBING apply_mode() - + /obj/machinery/alarm/proc/handle_heating_cooling(var/datum/gas_mixture/environment, var/datum/tlv/cur_tlv, var/turf/simulated/location) cur_tlv = TLV["temperature"] //Handle temperature adjustment here. @@ -603,7 +603,7 @@ /obj/machinery/alarm/attack_robot(mob/user) return attack_ai(user) - + /obj/machinery/alarm/attack_ghost(user as mob) if(stat & (BROKEN|MAINT)) return @@ -614,22 +614,22 @@ if (.) return return interact(user) - + /obj/machinery/alarm/interact(mob/user) if(buildstage != 2) return if(wiresexposed && !istype(user, /mob/living/silicon/ai)) wires.Interact(user) - + if(!shorted) ui_interact(user) /obj/machinery/alarm/proc/ui_air_status() var/turf/location = get_turf(src) - if(!istype(location)) + if(!istype(location)) return - + var/datum/gas_mixture/environment = location.return_air() var/total = environment.oxygen + environment.nitrogen + environment.carbon_dioxide + environment.toxins if(total==0) @@ -754,7 +754,7 @@ scrubbers+=list(scrubber_data) data["scrubbers"]=scrubbers return data - + /obj/machinery/alarm/proc/get_nano_data_console(mob/user) var/data[0] data["name"] = sanitize(name) @@ -766,7 +766,7 @@ data["y"] = pos.y data["z"] = pos.z return data - + /obj/machinery/alarm/proc/generate_thresholds_menu() var/datum/tlv/selected var/list/thresholds = list() @@ -800,9 +800,9 @@ thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max2", "selected" = selected.max2)) return thresholds - + /obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, var/master_ui = null, var/datum/topic_state/state = default_state) - var/list/href = state.href_list(user) + var/list/href = state.href_list(user) var/remote_connection = 0 var/remote_access = 0 if(href) @@ -812,8 +812,8 @@ var/list/data = get_nano_data(user, href) data["remote_connection"] = remote_connection - data["remote_access"] = remote_access - + data["remote_access"] = remote_access + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) ui = new(user, src, ui_key, "air_alarm.tmpl", name, 570, 410, state = state) @@ -828,7 +828,7 @@ return 1 else return !locked - + /obj/machinery/alarm/proc/is_locked(mob/user as mob, href_list) if(isobserver(user) && check_rights(R_ADMIN, 0, user)) return 0 @@ -838,13 +838,13 @@ return 0 else return locked - + /obj/machinery/alarm/proc/is_auth_rcon(href_list) if(href_list && href_list["remote_connection"] && href_list["remote_access"]) return 1 else return 0 - + /obj/machinery/alarm/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list = list()) if(buildstage != 2) return STATUS_CLOSE @@ -862,12 +862,12 @@ . = STATUS_UPDATE return min(..(), .) -/obj/machinery/alarm/Topic(href, href_list, var/nowindow = 0, var/datum/topic_state/state) +/obj/machinery/alarm/Topic(href, href_list, var/nowindow = 0, var/datum/topic_state/state) if(..(href, href_list, nowindow, state)) return 1 - + var/state_href = state.href_list(usr) - + if(href_list["rcon"]) var/attempted_rcon_setting = text2num(href_list["rcon"]) switch(attempted_rcon_setting) @@ -1101,5 +1101,4 @@ Just an object used in constructing air alarms icon_state = "door_electronics" desc = "Looks like a circuit. Probably is." w_class = 2.0 - m_amt = 50 - g_amt = 50 + materials = list(MAT_METAL=50, MAT_GLASS=50) \ No newline at end of file diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 5c45212406d..73ee5cdb2aa 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -5,8 +5,7 @@ icon_state = "cameracase" w_class = 2 anchored = 0 - m_amt = 400 - g_amt = 250 + materials = list(MAT_METAL=400, MAT_GLASS=250) // Motion, EMP-Proof, X-Ray var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/sheet/mineral/plasma, /obj/item/device/analyzer) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index a3802a72af6..c6b2b9a8908 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -179,7 +179,7 @@ //Machine Frame Circuit Boards /*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. -Note: Once everything is added to the public areas, will add m_amt and g_amt to circuit boards since autolathe won't be able +Note: Once everything is added to the public areas, will add MAT_METAL and MAT_GLASS to circuit boards since autolathe won't be able to destroy them and players will be able to make replacements. */ /obj/item/weapon/circuitboard/vendor diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ee3653d8623..e48f3a5aadf 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -596,7 +596,7 @@ About the new airlock wires panel: if (src.isElectrified()) if (istype(mover, /obj/item)) var/obj/item/i = mover - if (i.m_amt) + if (i.materials[MAT_METAL]) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() @@ -1049,4 +1049,4 @@ About the new airlock wires panel: src.unlock() src.open() src.lock() - return \ No newline at end of file + return \ No newline at end of file diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index f83be36a9e9..6113d1cf377 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -5,8 +5,7 @@ icon = 'icons/obj/doors/door_assembly.dmi' icon_state = "door_electronics" w_class = 2.0 //It should be tiny! -Agouri - m_amt = 50 - g_amt = 50 + materials = list(MAT_METAL=50, MAT_GLASS=50) req_access = list(access_engine) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 75acd99fb58..f560e3c81ce 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -53,8 +53,8 @@ FIRE ALARM if(src.detecting) if(temperature > T0C+200) src.alarm() // added check of detector status here - return - + return + /obj/machinery/firealarm/attack_ai(mob/user as mob) src.add_hiddenprint(user) return src.attack_hand(user) @@ -213,7 +213,7 @@ FIRE ALARM /obj/machinery/firealarm/Topic(href, href_list) if(..()) return 1 - + if (buildstage != 2) return 1 @@ -285,8 +285,7 @@ Just a object used in constructing fire alarms icon_state = "door_electronics" desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" w_class = 2.0 - m_amt = 50 - g_amt = 50 + materials = list(MAT_METAL=50, MAT_GLASS=50) /obj/machinery/partyalarm name = "\improper PARTY BUTTON" diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index d064bee3e4f..766b5d55163 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -81,8 +81,7 @@ icon_broken = "ashtray_bork_bl" max_butts = 14 health = 24.0 - g_amt = 30 - m_amt = 30 + materials = list(MAT_METAL=30, MAT_GLASS=30) empty_desc = "Cheap plastic ashtray." throwforce = 3.0 die() @@ -102,7 +101,7 @@ icon_broken = "ashtray_bork_br" max_butts = 10 health = 72.0 - m_amt = 80 + materials = list(MAT_METAL=80) empty_desc = "Massive bronze ashtray." throwforce = 10.0 @@ -123,7 +122,7 @@ icon_broken = "ashtray_bork_gl" max_butts = 12 health = 12.0 - g_amt = 60 + materials = list(MAT_GLASS=60) empty_desc = "Glass ashtray. Looks fragile." throwforce = 6.0 diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm index 1b9d5e13344..2b8eb60500f 100644 --- a/code/game/objects/items/devices/debugger.dm +++ b/code/game/objects/items/devices/debugger.dm @@ -16,8 +16,7 @@ throw_range = 15 throw_speed = 3 desc = "You can use this on airlocks or APCs to try to hack them without cutting wires." - m_amt = 50 - g_amt = 20 + materials = list(MAT_METAL=50, MAT_GLASS=20) origin_tech = "magnets=1;engineering=1" var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 22ea7441935..b3dbe66619e 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -7,8 +7,7 @@ w_class = 2 flags = CONDUCT slot_flags = SLOT_BELT - m_amt = 50 - g_amt = 20 + materials = list(MAT_METAL=50, MAT_GLASS=20) action_button_name = "Flashlight" var/on = 0 var/brightness_on = 4 //luminosity when on @@ -119,8 +118,7 @@ brightness_on = 5 w_class = 4 flags = CONDUCT - m_amt = 0 - g_amt = 0 + materials = list() on = 1 @@ -214,6 +212,7 @@ obj/item/device/flashlight/lamp/bananalamp w_class = 1 brightness_on = 6 light_color = "#FFBF00" + materials = list() on = 1 //Bio-luminesence has one setting, on. /obj/item/device/flashlight/slime/New() diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index d78c7b087fb..ec5f18283a8 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -7,8 +7,7 @@ var/pointer_icon_state flags = CONDUCT slot_flags = SLOT_BELT - m_amt = 500 - g_amt = 500 + materials = list(MAT_METAL=500, MAT_GLASS=500) w_class = 2 //Increased to 2, because diodes are w_class 2. Conservation of matter. origin_tech = "combat=1" origin_tech = "magnets=2" diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 32d5984f8b9..4b08503b317 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -15,8 +15,7 @@ throw_range = 15 throw_speed = 3 desc = "You can use this on airlocks or APCs to try to hack them without cutting wires." - m_amt = 50 - g_amt = 20 + materials = list(MAT_METAL=50, MAT_GLASS=20) origin_tech = "magnets=1;engineering=1" var/obj/machinery/buffer // simple machine buffer for device linkage diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index ab61e766c91..c08c79da86f 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -10,8 +10,7 @@ throwforce = 5 throw_speed = 1 throw_range = 2 - m_amt = 750 - w_amt = 750 + materials = list(MAT_METAL=750) origin_tech = "powerstorage=3;syndicate=5" var/drain_rate = 1500000 // amount of power to drain per tick var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts. diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 98130412312..56d6fbbdafd 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -7,8 +7,7 @@ flags = CONDUCT slot_flags = SLOT_BACK w_class = 5.0 - g_amt = 2500 - m_amt = 10000 + materials = list(MAT_METAL=10000, MAT_GLASS=2500) var/code = 2 /obj/item/device/radio/electropack/attack_hand(mob/user as mob) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index f4126d557cb..76bb6f74b12 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -4,7 +4,7 @@ var/radio_desc = "" icon_state = "headset" item_state = "headset" - m_amt = 75 + materials = list(MAT_METAL=75) subspace_transmission = 1 canhear_range = 0 // can't hear headsets from very far away diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 0255b0551bc..f80ba3a9142 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -39,7 +39,7 @@ add_fingerprint(user) spawn(0) attack_self(user) - + /obj/item/device/radio/intercom/attack_ghost(mob/user as mob) spawn(0) attack_self(user) @@ -160,5 +160,4 @@ icon_state = "door_electronics" desc = "Looks like a circuit. Probably is." w_class = 2.0 - m_amt = 50 - g_amt = 50 \ No newline at end of file + materials = list(MAT_METAL=50, MAT_GLASS=50) \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index db9897dd70a..af5f8be59bf 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -26,8 +26,8 @@ throw_range = 9 w_class = 2 - m_amt = 75 - g_amt = 25 + materials = list(MAT_METAL=75) + var/const/FREQ_LISTENING = 1 var/prison_radio = 0 var/atom/follow_target // Custom follow target for autosay-using bots diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 82402e273c9..c66d9c88cae 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -16,7 +16,7 @@ REAGENT SCANNER slot_flags = SLOT_BELT w_class = 2 item_state = "electronic" - m_amt = 150 + materials = list(MAT_METAL=150) origin_tech = "magnets=1;engineering=1" var/scan_range = 1 var/pulse_duration = 10 @@ -121,7 +121,7 @@ REAGENT SCANNER w_class = 1.0 throw_speed = 5 throw_range = 10 - m_amt = 200 + materials = list(MAT_METAL=200) origin_tech = "magnets=1;biotech=1" var/upgraded = 0 var/mode = 1; @@ -296,8 +296,7 @@ REAGENT SCANNER throwforce = 0 throw_speed = 3 throw_range = 7 - m_amt = 30 - g_amt = 20 + materials = list(MAT_METAL=30, MAT_GLASS=20) origin_tech = "magnets=1;engineering=1" /obj/item/device/analyzer/attack_self(mob/user as mob) @@ -363,8 +362,7 @@ REAGENT SCANNER throwforce = 5 throw_speed = 4 throw_range = 20 - m_amt = 30 - g_amt = 20 + materials = list(MAT_METAL=30, MAT_GLASS=20) origin_tech = "magnets=2;biotech=2" var/details = 0 var/recent_fail = 0 @@ -436,8 +434,7 @@ REAGENT SCANNER throwforce = 5 throw_speed = 4 throw_range = 20 - m_amt = 30 - g_amt = 20 + materials = list(MAT_METAL=30, MAT_GLASS=20) origin_tech = "magnets=2;biotech=2" var/details = 0 var/recent_fail = 0 @@ -493,8 +490,7 @@ REAGENT SCANNER throwforce = 0 throw_speed = 3 throw_range = 7 - m_amt = 30 - g_amt = 20 + materials = list(MAT_METAL=30, MAT_GLASS=20) /obj/item/device/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob) if (!isslime(M)) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index a480944e9c3..d0a58b571cf 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -5,8 +5,7 @@ item_state = "analyzer" w_class = 2 slot_flags = SLOT_BELT - m_amt = 60 - g_amt = 30 + materials = list(MAT_METAL=60, MAT_GLASS=30) force = 2 throwforce = 0 var/recording = 0 @@ -262,8 +261,7 @@ icon_state = "tape_white" item_state = "analyzer" w_class = 1 - m_amt = 20 - g_amt = 5 + materials = list(MAT_METAL=20, MAT_GLASS=5) force = 1 throwforce = 0 var/max_capacity = 600 diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 55349e88479..cb7dc52d743 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -85,7 +85,7 @@ effective or pretty fucking useless. w_class = 1.0 throw_speed = 5 throw_range = 10 - m_amt = 200 + materials = list(MAT_METAL=400) origin_tech = "magnets=3;biotech=5;syndicate=3" var/intensity = 5 // how much damage the radiation does var/wavelength = 10 // time it takes for the radiation to kick in, in seconds diff --git a/code/game/objects/items/mountable_frames/air_alarm.dm b/code/game/objects/items/mountable_frames/air_alarm.dm index 28fe58e567e..4b16db0b0f6 100644 --- a/code/game/objects/items/mountable_frames/air_alarm.dm +++ b/code/game/objects/items/mountable_frames/air_alarm.dm @@ -8,7 +8,7 @@ Code shamelessly copied from apc_frame desc = "Used for building Air Alarms" icon = 'icons/obj/monitors.dmi' icon_state = "alarm_bitem" - m_amt = 2000 + materials = list(MAT_METAL=2000) mount_reqs = list("simfloor", "nospace") /obj/item/mounted/frame/alarm_frame/do_build(turf/on_wall, mob/user) diff --git a/code/game/objects/items/mountable_frames/newscaster_frame.dm b/code/game/objects/items/mountable_frames/newscaster_frame.dm index f853bbadf66..dade4dcb61b 100644 --- a/code/game/objects/items/mountable_frames/newscaster_frame.dm +++ b/code/game/objects/items/mountable_frames/newscaster_frame.dm @@ -3,8 +3,7 @@ desc = "Used to build newscasters, just secure to the wall." icon_state = "newscaster" item_state = "syringe_kit" - m_amt = 14000 - g_amt = 8000 + materials = list(MAT_METAL=14000, MAT_GLASS=8000) mount_reqs = list("simfloor", "nospace") /obj/item/mounted/frame/newscaster_frame/try_build(turf/on_wall, mob/user) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 139745b0cae..4412bff1265 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -10,7 +10,7 @@ throwforce = 10.0 throw_speed = 3 throw_range = 7 - m_amt = 1000 + materials = list(MAT_METAL=1000) max_amount = 60 attack_verb = list("hit", "bludgeoned", "whacked") hitsound = 'sound/weapons/grenadelaunch.ogg' diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index b0cc8eb0ba0..17e35850d8c 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -18,7 +18,7 @@ desc = "HOLY SHEET! That is a lot of glass." singular_name = "glass sheet" icon_state = "sheet-glass" - g_amt = MINERAL_MATERIAL_AMOUNT + materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) origin_tech = "materials=1" var/created_window = /obj/structure/window/basic var/full_window = /obj/structure/window/full/basic @@ -28,7 +28,7 @@ desc = "HOLY SHEET! That is a lot of glass." singular_name = "glass sheet" icon_state = "sheet-glass" - g_amt = 0 + materials = list() created_window = /obj/structure/window/basic /obj/item/stack/sheet/glass/attack_self(mob/user as mob) @@ -153,8 +153,7 @@ desc = "Glass which seems to have rods or something stuck in them." singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" - g_amt = MINERAL_MATERIAL_AMOUNT - m_amt = MINERAL_MATERIAL_AMOUNT / 2 + materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) origin_tech = "materials=2" var/created_window = /obj/structure/window/reinforced var/full_window = /obj/structure/window/full/reinforced @@ -164,8 +163,7 @@ desc = "Glass which seems to have rods or something stuck in them." singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" - g_amt = 0 - m_amt = 0 + materials = list() /obj/item/stack/sheet/rglass/attack_self(mob/user as mob) construct_window(user) @@ -272,7 +270,7 @@ desc = "A very strong and very resistant sheet of a plasma-glass alloy." singular_name = "glass sheet" icon_state = "sheet-plasmaglass" - g_amt = MINERAL_MATERIAL_AMOUNT * 2 + materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT*2) origin_tech = "materials=3;plasma=2" var/created_window = /obj/structure/window/plasmabasic var/full_window = /obj/structure/window/full/plasmabasic @@ -361,8 +359,7 @@ desc = "Plasma glass which seems to have rods or something stuck in them." singular_name = "reinforced plasma glass sheet" icon_state = "sheet-plasmarglass" - g_amt = MINERAL_MATERIAL_AMOUNT * 2 - m_amt = MINERAL_MATERIAL_AMOUNT / 2 + materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT*2) origin_tech = "materials=3;plasma=2" var/created_window = /obj/structure/window/plasmareinforced var/full_window = /obj/structure/window/full/plasmareinforced diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 5c50910f303..46c3e1ff3d2 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -86,7 +86,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ desc = "Sheets made out off metal. It has been dubbed Metal Sheets." singular_name = "metal sheet" icon_state = "sheet-metal" - m_amt = 3750 + materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT) throwforce = 10.0 flags = CONDUCT origin_tech = "materials=1" @@ -96,7 +96,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ desc = "Sheets made out off metal. It has been dubbed Metal Sheets." singular_name = "metal sheet" icon_state = "sheet-metal" - m_amt = 0 + materials = list() throwforce = 10.0 flags = CONDUCT @@ -124,7 +124,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ desc = "This sheet is an alloy of iron and plasma." icon_state = "sheet-plasteel" item_state = "sheet-metal" - m_amt = 7500 + materials = list(MAT_METAL=6000, MAT_PLASMA=6000) throwforce = 10.0 flags = CONDUCT origin_tech = "materials=2" diff --git a/code/game/objects/items/stacks/tiles/plasteel.dm b/code/game/objects/items/stacks/tiles/plasteel.dm index 33e55268d6f..5565067505b 100644 --- a/code/game/objects/items/stacks/tiles/plasteel.dm +++ b/code/game/objects/items/stacks/tiles/plasteel.dm @@ -6,7 +6,7 @@ icon_state = "tile" w_class = 3.0 force = 6.0 - m_amt = 937.5 + materials = list(MAT_METAL=937.5) throwforce = 10.0 throw_speed = 3 throw_range = 7 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 4e4c953ae94..5a05aa0b9cc 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -134,8 +134,7 @@ flags = CONDUCT slot_flags = SLOT_BELT w_class = 3.0 - g_amt = 10 - m_amt = 10 + materials = list(MAT_METAL=10, MAT_GLASS=10) attack_verb = list("struck", "pistol whipped", "hit", "bashed") var/bullets = 7.0 @@ -190,8 +189,7 @@ icon_state = "357-7" flags = CONDUCT w_class = 1.0 - g_amt = 10 - m_amt = 10 + materials = list(MAT_METAL=10, MAT_GLASS=10) var/amount_left = 7.0 update_icon() diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 9ecfdf3a33e..f4bff0bb7a6 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -18,7 +18,7 @@ RCD throw_speed = 3 throw_range = 5 w_class = 3.0 - m_amt = 100000 + materials = list(MAT_METAL=100000) origin_tech = "engineering=4;materials=2" var/datum/effect/effect/system/spark_spread/spark_system var/max_matter = 100 @@ -206,8 +206,7 @@ RCD density = 0 anchored = 0.0 origin_tech = "materials=2" - m_amt = 16000 - g_amt = 8000 + materials = list(MAT_METAL=16000, MAT_GLASS=8000) var/ammoamt = 20 /obj/item/weapon/rcd_ammo/large diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 902ce1e052a..d36cf7c367c 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -11,7 +11,7 @@ throw_speed = 2 throw_range = 7 force = 10 - m_amt = 90 + materials = list(MAT_METAL=90) attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") var/max_water = 50 var/last_use = 1.0 @@ -31,7 +31,7 @@ throwforce = 2 w_class = 2.0 force = 3.0 - m_amt = 0 + materials = list() max_water = 30 sprite_name = "miniFE" diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 57aec40f09e..e148d6bc7ff 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -10,7 +10,7 @@ throw_speed = 1 throw_range = 5 w_class = 3.0 - m_amt = 500 + materials = list(MAT_METAL=500) origin_tech = "combat=1;plasmatech=1" var/status = 0 var/throw_amount = 100 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 49149671f56..1fc648e3e2c 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -10,7 +10,7 @@ w_class = 2.0 throw_speed = 2 throw_range = 5 - m_amt = 500 + materials = list(MAT_METAL=500) origin_tech = "materials=1" var/breakouttime = 600 //Deciseconds = 60s = 1 minutes var/cuffsound = 'sound/weapons/handcuffs.ogg' diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 8f1832b170b..2d835c7a71f 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -141,7 +141,7 @@ throwforce = 6.0 throw_speed = 3 throw_range = 6 - m_amt = 12000 + materials = list(MAT_METAL=12000) origin_tech = "materials=1" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") @@ -183,7 +183,6 @@ throwforce = 8.0 throw_speed = 3 throw_range = 6 - m_amt = 12000 origin_tech = "materials=1" attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharp = 1 diff --git a/code/game/objects/items/weapons/misc.dm b/code/game/objects/items/weapons/misc.dm index 01bac424342..90191efbf70 100644 --- a/code/game/objects/items/weapons/misc.dm +++ b/code/game/objects/items/weapons/misc.dm @@ -31,7 +31,7 @@ force = 5.0 throwforce = 7.0 w_class = 2.0 - m_amt = 50 + materials = list(MAT_METAL=50) attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") /obj/item/weapon/c_tube diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index d35714f2111..866efe8763c 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -8,8 +8,7 @@ var/global/list/cached_icons = list() icon = 'icons/obj/items.dmi' icon_state = "paint_neutral" item_state = "paintcan" - m_amt = 200 - g_amt = 0 + materials = list(MAT_METAL=200) w_class = 3.0 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(10,20,30,50,70) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 1bde9648905..0eb8fdfe3de 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -13,8 +13,7 @@ var/charge = 0 // note %age conveted to actual charge in New var/maxcharge = 10000 rating = 1 - m_amt = 700 - g_amt = 50 + materials = list(MAT_METAL=700, MAT_GLASS=50) var/rigged = 0 // true if rigged to explode var/minor_fault = 0 //If not 100% reliable, it will build up faults. var/construction_cost = list("metal"=750,"glass"=75) @@ -30,7 +29,7 @@ origin_tech = "powerstorage=0" maxcharge = 5000 rating = 2 - g_amt = 40 + materials = list(MAT_GLASS=40) /obj/item/weapon/stock_parts/cell/crap/empty/New() ..() @@ -41,7 +40,7 @@ origin_tech = "powerstorage=0" maxcharge = 6000 //6000 max charge / 1000 charge per shot = six shots rating = 2.5 - g_amt = 40 + materials = list(MAT_GLASS=40) /obj/item/weapon/stock_parts/cell/secborg/empty/New() ..() @@ -53,7 +52,7 @@ icon_state = "hcell" maxcharge = 15000 rating = 3 - g_amt = 60 + materials = list(MAT_GLASS=60) /obj/item/weapon/stock_parts/cell/high/empty/New() ..() @@ -64,7 +63,7 @@ origin_tech = "powerstorage=5" icon_state = "scell" maxcharge = 20000 - g_amt = 70 + materials = list(MAT_GLASS=70) rating = 4 construction_cost = list("metal"=750,"glass"=100) @@ -78,7 +77,7 @@ icon_state = "hpcell" maxcharge = 30000 rating = 5 - g_amt = 80 + materials = list(MAT_GLASS=80) construction_cost = list("metal"=500,"glass"=150,"gold"=200,"silver"=200) /obj/item/weapon/stock_parts/cell/hyper/empty/New() @@ -90,7 +89,7 @@ origin_tech = "powerstorage=7" icon_state = "bscell" maxcharge = 40000 - g_amt = 80 + materials = list(MAT_GLASS=80) rating = 6 construction_cost = list("metal"=800,"gold"=300,"silver"=300,"glass"=160,"diamond"=160) @@ -104,7 +103,7 @@ origin_tech = null maxcharge = 30000 rating = 6 - g_amt = 80 + materials = list(MAT_GLASS=80) use() return 1 @@ -117,8 +116,7 @@ charge = 100 maxcharge = 3000 rating = 1 - m_amt = 0 - g_amt = 0 + materials = list() minor_fault = 1 @@ -130,8 +128,7 @@ icon_state = "yellow slime extract" //"potato_battery" maxcharge = 10000 rating = 3 - m_amt = 0 - g_amt = 0 + materials = list() /obj/item/weapon/stock_parts/cell/pulse/carbine name = "pulse carbine power cell" @@ -146,7 +143,7 @@ desc = "A standard ninja-suit power cell." maxcharge = 10000 rating = 3 - g_amt = 60 + materials = list(MAT_GLASS=60) /obj/item/weapon/stock_parts/cell/emproof name = "\improper EMP-proof cell" diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index dab7a54de78..546d0df61b4 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -11,7 +11,7 @@ force = 5.0 throwforce = 10.0 item_state = "shard-glass" - g_amt = MINERAL_MATERIAL_AMOUNT + materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) attack_verb = list("stabbed", "slashed", "sliced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 760e0633f56..16ea25939d8 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -12,8 +12,7 @@ throw_speed = 2 throw_range = 3 w_class = 4 - g_amt = 7500 - m_amt = 1000 + materials = list(MAT_GLASS=7500, MAT_METAL=1000) origin_tech = "materials=2" attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time diff --git a/code/game/objects/items/weapons/stock_parts.dm b/code/game/objects/items/weapons/stock_parts.dm index 94c3fcc75f7..205f2c2e234 100644 --- a/code/game/objects/items/weapons/stock_parts.dm +++ b/code/game/objects/items/weapons/stock_parts.dm @@ -74,45 +74,42 @@ desc = "Used in the construction of computers and other devices with a interactive console." icon_state = "screen" origin_tech = "materials=1" - g_amt = 200 + materials = list(MAT_GLASS=200) /obj/item/weapon/stock_parts/capacitor name = "capacitor" desc = "A basic capacitor used in the construction of a variety of devices." icon_state = "capacitor" origin_tech = "powerstorage=1" - m_amt = 50 - g_amt = 50 + materials = list(MAT_METAL=50, MAT_GLASS=50) /obj/item/weapon/stock_parts/scanning_module name = "scanning module" desc = "A compact, high resolution scanning module used in the construction of certain devices." icon_state = "scan_module" origin_tech = "magnets=1" - m_amt = 50 - g_amt = 20 + materials = list(MAT_METAL=50, MAT_GLASS=20) /obj/item/weapon/stock_parts/manipulator name = "micro-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "micro_mani" origin_tech = "materials=1;programming=1" - m_amt = 30 + materials = list(MAT_METAL=30) /obj/item/weapon/stock_parts/micro_laser name = "micro-laser" desc = "A tiny laser used in certain devices." icon_state = "micro_laser" origin_tech = "magnets=1" - m_amt = 10 - g_amt = 20 + materials = list(MAT_METAL=10, MAT_GLASS=20) /obj/item/weapon/stock_parts/matter_bin name = "matter bin" desc = "A container for hold compressed matter awaiting re-construction." icon_state = "matter_bin" origin_tech = "materials=1" - m_amt = 80 + materials = list(MAT_METAL=80) //Rank 2 @@ -122,8 +119,7 @@ icon_state = "adv_capacitor" origin_tech = "powerstorage=3" rating = 2 - m_amt = 50 - g_amt = 50 + materials = list(MAT_METAL=50, MAT_GLASS=50) /obj/item/weapon/stock_parts/scanning_module/adv name = "advanced scanning module" @@ -131,8 +127,7 @@ icon_state = "adv_scan_module" origin_tech = "magnets=3" rating = 2 - m_amt = 50 - g_amt = 20 + materials = list(MAT_METAL=50, MAT_GLASS=20) /obj/item/weapon/stock_parts/manipulator/nano name = "nano-manipulator" @@ -140,7 +135,7 @@ icon_state = "nano_mani" origin_tech = "materials=3,programming=2" rating = 2 - m_amt = 30 + materials = list(MAT_METAL=30) /obj/item/weapon/stock_parts/micro_laser/high name = "high-power micro-laser" @@ -148,8 +143,7 @@ icon_state = "high_micro_laser" origin_tech = "magnets=3" rating = 2 - m_amt = 10 - g_amt = 20 + materials = list(MAT_METAL=10, MAT_GLASS=20) /obj/item/weapon/stock_parts/matter_bin/adv name = "advanced matter bin" @@ -157,7 +151,7 @@ icon_state = "advanced_matter_bin" origin_tech = "materials=3" rating = 2 - m_amt = 80 + materials = list(MAT_METAL=80) //Rating 3 @@ -167,8 +161,7 @@ icon_state = "super_capacitor" origin_tech = "powerstorage=5;materials=4" rating = 3 - m_amt = 50 - g_amt = 50 + materials = list(MAT_METAL=50, MAT_GLASS=50) /obj/item/weapon/stock_parts/scanning_module/phasic name = "phasic scanning module" @@ -176,8 +169,7 @@ icon_state = "super_scan_module" origin_tech = "magnets=5" rating = 3 - m_amt = 50 - g_amt = 20 + materials = list(MAT_METAL=50, MAT_GLASS=20) /obj/item/weapon/stock_parts/manipulator/pico name = "pico-manipulator" @@ -185,7 +177,7 @@ icon_state = "pico_mani" origin_tech = "materials=5,programming=2" rating = 3 - m_amt = 30 + materials = list(MAT_METAL=30) /obj/item/weapon/stock_parts/micro_laser/ultra name = "ultra-high-power micro-laser" @@ -193,8 +185,7 @@ desc = "A tiny laser used in certain devices." origin_tech = "magnets=5" rating = 3 - m_amt = 10 - g_amt = 20 + materials = list(MAT_METAL=10, MAT_GLASS=20) /obj/item/weapon/stock_parts/matter_bin/super name = "super matter bin" @@ -202,7 +193,7 @@ icon_state = "super_matter_bin" origin_tech = "materials=5" rating = 3 - m_amt = 80 + materials = list(MAT_METAL=80) //Rating 4 @@ -212,8 +203,7 @@ icon_state = "quadratic_capacitor" origin_tech = "powerstorage=6;materials=5" rating = 4 - m_amt = 50 - g_amt = 50 + materials = list(MAT_METAL=50, MAT_GLASS=50) /obj/item/weapon/stock_parts/scanning_module/triphasic name = "triphasic scanning module" @@ -221,8 +211,7 @@ icon_state = "triphasic_scan_module" origin_tech = "magnets=6" rating = 4 - m_amt = 50 - g_amt = 20 + materials = list(MAT_METAL=50, MAT_GLASS=20) /obj/item/weapon/stock_parts/manipulator/femto name = "femto-manipulator" @@ -230,7 +219,7 @@ icon_state = "femto_mani" origin_tech = "materials=6;programming=3" rating = 4 - m_amt = 30 + materials = list(MAT_METAL=30) /obj/item/weapon/stock_parts/micro_laser/quadultra name = "quad-ultra micro-laser" @@ -238,8 +227,7 @@ desc = "A tiny laser used in certain devices." origin_tech = "magnets=6" rating = 4 - m_amt = 10 - g_amt = 20 + materials = list(MAT_METAL=10, MAT_GLASS=20) /obj/item/weapon/stock_parts/matter_bin/bluespace name = "bluespace matter bin" @@ -247,7 +235,7 @@ icon_state = "bluespace_matter_bin" origin_tech = "materials=6" rating = 4 - m_amt = 80 + materials = list(MAT_METAL=80) // Subspace stock parts @@ -256,54 +244,49 @@ icon_state = "subspace_ansible" desc = "A compact module capable of sensing extradimensional activity." origin_tech = "programming=2;magnets=3;materials=2;bluespace=1" - m_amt = 30 - g_amt = 10 + materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/weapon/stock_parts/subspace/filter name = "hyperwave filter" icon_state = "hyperwave_filter" desc = "A tiny device capable of filtering and converting super-intense radiowaves." origin_tech = "programming=2;magnets=1" - m_amt = 30 - g_amt = 10 + materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/weapon/stock_parts/subspace/amplifier name = "subspace amplifier" icon_state = "subspace_amplifier" desc = "A compact micro-machine capable of amplifying weak subspace transmissions." origin_tech = "programming=2;magnets=2;materials=1;bluespace=1" - m_amt = 30 - g_amt = 10 + materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/weapon/stock_parts/subspace/treatment name = "subspace treatment disk" icon_state = "treatment_disk" desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." origin_tech = "programming=2;magnets=1;materials=3;bluespace=1" - m_amt = 30 - g_amt = 10 + materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/weapon/stock_parts/subspace/analyzer name = "subspace wavelength analyzer" icon_state = "wavelength_analyzer" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." origin_tech = "programming=2;magnets=2;materials=2;bluespace=1" - m_amt = 30 - g_amt = 10 + materials = list(MAT_METAL=30, MAT_GLASS=10) /obj/item/weapon/stock_parts/subspace/crystal name = "ansible crystal" icon_state = "ansible_crystal" desc = "A crystal made from pure glass used to transmit laser databursts to subspace." origin_tech = "magnets=2;materials=2;bluespace=1" - g_amt = 50 + materials = list(MAT_GLASS=50) /obj/item/weapon/stock_parts/subspace/transmitter name = "subspace transmitter" icon_state = "subspace_transmitter" desc = "A large piece of equipment used to open a window into the subspace dimension." origin_tech = "magnets=3;materials=3;bluespace=2" - m_amt = 50 + materials = list(MAT_METAL=50) /obj/item/weapon/research//Makes testing much less of a pain -Sieve name = "research" diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index bc69a54bc3d..e88e37afd6c 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -365,7 +365,7 @@ throw_range = 5 w_class = 4.0 flags = CONDUCT - m_amt = 3000 + materials = list(MAT_METAL=3000) /obj/item/weapon/storage/bag/tray/attack(mob/living/M as mob, mob/living/user as mob) ..() diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index aae00e3c793..d360ecf9bb7 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -133,7 +133,7 @@ /obj/item/weapon/storage/box/gauge name = "box of 12 gauge slugs" desc = "It has a picture of a gun and several warning symbols on the front." - m_amt = 50000 + materials = list(MAT_METAL=28000) New() ..() diff --git a/code/game/objects/items/weapons/syndie_uplink.dm b/code/game/objects/items/weapons/syndie_uplink.dm index 825a55865be..173c9ff2960 100644 --- a/code/game/objects/items/weapons/syndie_uplink.dm +++ b/code/game/objects/items/weapons/syndie_uplink.dm @@ -14,7 +14,7 @@ item_state = "radio" throw_speed = 4 throw_range = 20 - m_amt = 100 + materials = list(MAT_METAL=100) origin_tech = "magnets=2;syndicate=3"*/ /obj/item/weapon/SWF_uplink @@ -34,5 +34,5 @@ w_class = 2.0 throw_speed = 4 throw_range = 20 - m_amt = 100 + materials = list(MAT_METAL=100) origin_tech = "magnets=1" \ No newline at end of file diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 22a31ae1dc8..eed1f37ef55 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -12,7 +12,7 @@ gender = PLURAL icon = 'icons/obj/items.dmi' icon_state = "table_parts" - m_amt = 3750 + materials = list(MAT_METAL=3750) flags = CONDUCT attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") @@ -21,7 +21,7 @@ desc = "Hard table parts. Well...harder..." icon = 'icons/obj/items.dmi' icon_state = "reinf_tableparts" - m_amt = 7500 + materials = list(MAT_METAL=7500) flags = CONDUCT /obj/item/weapon/table_parts/wood @@ -42,7 +42,7 @@ icon = 'icons/obj/items.dmi' icon_state = "rack_parts" flags = CONDUCT - m_amt = 3750 + materials = list(MAT_METAL=3750) /* * Table Parts diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 3f1ff7cc85e..5b99f645368 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -21,7 +21,7 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - m_amt = 400 + materials = list(MAT_METAL=400) origin_tech = "magnets=1" /obj/item/weapon/locator/attack_self(mob/user as mob) @@ -132,7 +132,7 @@ Frequency: w_class = 2.0 throw_speed = 3 throw_range = 5 - m_amt = 10000 + materials = list(MAT_METAL=10000) origin_tech = "magnets=1;bluespace=3" var/active_portals = 0 diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 031ae5ccd9b..5755d94f7c8 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -25,7 +25,7 @@ force = 5.0 throwforce = 7.0 w_class = 2.0 - m_amt = 150 + materials = list(MAT_METAL=150) origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") @@ -35,7 +35,7 @@ */ /obj/item/weapon/screwdriver name = "screwdriver" - desc = "You can be totally screwwy with this." + desc = "You can be totally screwy with this." icon = 'icons/obj/items.dmi' icon_state = "screwdriver" flags = CONDUCT @@ -45,8 +45,7 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - g_amt = 0 - m_amt = 75 + materials = list(MAT_METAL=75) attack_verb = list("stabbed") hitsound = 'sound/weapons/bladeslice.ogg' @@ -84,7 +83,7 @@ return /obj/item/weapon/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M) || user.a_intent == "help") + if(!istype(M) || user.a_intent == "help") return ..() if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head") return ..() @@ -106,7 +105,7 @@ throw_speed = 3 throw_range = 7 w_class = 2.0 - m_amt = 80 + materials = list(MAT_METAL=80) origin_tech = "materials=1;engineering=1" attack_verb = list("pinched", "nipped") hitsound = "sound/items/Wirecutter.ogg" @@ -148,8 +147,7 @@ w_class = 2.0 //Cost to make in the autolathe - m_amt = 70 - g_amt = 20 + materials = list(MAT_METAL=70, MAT_GLASS=30) //R&D tech level origin_tech = "engineering=1" @@ -409,24 +407,21 @@ /obj/item/weapon/weldingtool/largetank name = "Industrial Welding Tool" max_fuel = 40 - m_amt = 70 - g_amt = 60 + materials = list(MAT_METAL=70, MAT_GLASS=60) origin_tech = "engineering=2" /obj/item/weapon/weldingtool/hugetank name = "Upgraded Welding Tool" max_fuel = 80 w_class = 3.0 - m_amt = 70 - g_amt = 120 + materials = list(MAT_METAL=70, MAT_GLASS=120) origin_tech = "engineering=3" /obj/item/weapon/weldingtool/experimental name = "Experimental Welding Tool" max_fuel = 40 w_class = 3.0 - m_amt = 70 - g_amt = 120 + materials = list(MAT_METAL=70, MAT_GLASS=120) origin_tech = "engineering=4;plasma=3" icon_state = "ewelder" var/last_gen = 0 @@ -454,7 +449,7 @@ throwforce = 7.0 item_state = "crowbar" w_class = 2.0 - m_amt = 50 + materials = list(MAT_METAL=50) origin_tech = "engineering=1" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") @@ -470,7 +465,7 @@ w_class = 3 throw_speed = 3 throw_range = 3 - m_amt = 66 + materials = list(MAT_METAL=70) icon_state = "crowbar_large" /obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob) @@ -478,7 +473,7 @@ var/mob/living/carbon/human/H = M var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting] - if (!S) + if (!S) return if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help" || S.open == 2) return ..() diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index ee6fb876f05..58ab384026f 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -158,7 +158,7 @@ obj/item/weapon/wirerod force = 9 throwforce = 10 w_class = 3 - m_amt = 1875 + materials = list(MAT_METAL=1875) attack_verb = list("hit", "bludgeoned", "whacked", "bonked") obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob, params) diff --git a/code/game/objects/items/weapons/wires.dm b/code/game/objects/items/weapons/wires.dm index 6ab0138391e..e1b943f7897 100644 --- a/code/game/objects/items/weapons/wires.dm +++ b/code/game/objects/items/weapons/wires.dm @@ -8,7 +8,7 @@ var/amount = 1.0 var/laying = 0.0 var/old_lay = null - m_amt = 40 + materials = list(MAT_METAL=40) attack_verb = list("whipped", "lashed", "disciplined", "tickled") suicide_act(mob/user) diff --git a/code/game/vehicles/spacepods/pod_fabricator.dm b/code/game/vehicles/spacepods/pod_fabricator.dm index 9a17b501636..fcc65870b1e 100644 --- a/code/game/vehicles/spacepods/pod_fabricator.dm +++ b/code/game/vehicles/spacepods/pod_fabricator.dm @@ -14,14 +14,14 @@ var/time_coeff_tech = 1 var/resource_coeff_tech = 1 var/list/resources = list( - "$metal"=0, - "$glass"=0, - "$bananium"=0, - "$diamond"=0, - "$gold"=0, - "$plasma"=0, - "$silver"=0, - "$uranium"=0 + MAT_METAL=0, + MAT_GLASS=0, + MAT_BANANIUM=0, + MAT_DIAMOND=0, + MAT_GOLD=0, + MAT_PLASMA=0, + MAT_SILVER=0, + MAT_URANIUM=0 ) var/res_max_amount = 200000 var/datum/research/files @@ -55,7 +55,7 @@ component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) component_parts += new /obj/item/weapon/stock_parts/console_screen(null) RefreshParts() - + files = new /datum/research(src) //Setup the research data holder. for(var/direction in cardinal) exit = get_step(src,direction) @@ -195,8 +195,8 @@ L.name += " ([I.name])" else I.loc = exit - I.m_amt = get_resource_cost_w_coeff(D,"$metal") - I.g_amt = get_resource_cost_w_coeff(D,"$glass") + I.materials[MAT_METAL] = get_resource_cost_w_coeff(D,MAT_METAL) + I.materials[MAT_GLASS] = get_resource_cost_w_coeff(D,MAT_GLASS) visible_message("\icon[src] \The [src] beeps, \"\The [I] is complete.\"") being_built = null @@ -475,21 +475,21 @@ return -1 var/type switch(mat_string) - if("$metal") + if(MAT_METAL) type = /obj/item/stack/sheet/metal - if("$glass") + if(MAT_GLASS) type = /obj/item/stack/sheet/glass - if("$gold") + if(MAT_GOLD) type = /obj/item/stack/sheet/mineral/gold - if("$silver") + if(MAT_SILVER) type = /obj/item/stack/sheet/mineral/silver - if("$diamond") + if(MAT_DIAMOND) type = /obj/item/stack/sheet/mineral/diamond - if("$plasma") + if(MAT_PLASMA) type = /obj/item/stack/sheet/mineral/plasma - if("$uranium") + if(MAT_URANIUM) type = /obj/item/stack/sheet/mineral/uranium - if("$bananium") + if(MAT_BANANIUM) type = /obj/item/stack/sheet/mineral/bananium else return 0 @@ -531,21 +531,21 @@ var/material switch(W.type) if(/obj/item/stack/sheet/mineral/gold) - material = "$gold" + material = MAT_GOLD if(/obj/item/stack/sheet/mineral/silver) - material = "$silver" + material = MAT_SILVER if(/obj/item/stack/sheet/mineral/diamond) - material = "$diamond" + material = MAT_DIAMOND if(/obj/item/stack/sheet/mineral/plasma) - material = "$plasma" + material = MAT_PLASMA if(/obj/item/stack/sheet/metal) - material = "$metal" + material = MAT_METAL if(/obj/item/stack/sheet/glass) - material = "$glass" + material = MAT_GLASS if(/obj/item/stack/sheet/mineral/bananium) - material = "$bananium" + material = MAT_BANANIUM if(/obj/item/stack/sheet/mineral/uranium) - material = "$uranium" + material = MAT_URANIUM else return ..() diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 71cdc55269e..9ada771bed2 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -5,8 +5,7 @@ icon_state = "" flags = CONDUCT w_class = 2.0 - m_amt = 100 - g_amt = 0 + materials = list(MAT_METAL=100) throwforce = 2 throw_speed = 3 throw_range = 10 diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index d91eac4a391..ceb621e2e18 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -2,8 +2,7 @@ name = "igniter" desc = "A small electronic device able to ignite combustable substances." icon_state = "igniter" - m_amt = 500 - g_amt = 50 + materials = list(MAT_METAL=500, MAT_GLASS=50) w_amt = 10 origin_tech = "magnets=1" diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 05f56f223f6..370f0270f58 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -2,8 +2,7 @@ name = "infrared emitter" desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." icon_state = "infrared" - m_amt = 1000 - g_amt = 500 + materials = list(MAT_METAL=1000, MAT_GLASS=500) origin_tech = "magnets=2" bomb_name = "tripwire mine" diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index d207130aeee..476b118187e 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -2,7 +2,7 @@ name = "mousetrap" desc = "A handy little spring-loaded trap for catching pesty rodents." icon_state = "mousetrap" - m_amt = 100 + materials = list(MAT_METAL=100) origin_tech = "combat=1" var/armed = 0 diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index ae1d3e22a99..880dc2d2218 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -2,8 +2,7 @@ name = "proximity sensor" desc = "Used for scanning and alerting when someone enters a certain proximity." icon_state = "prox" - m_amt = 800 - g_amt = 200 + materials = list(MAT_METAL=800, MAT_GLASS=200) origin_tech = "magnets=1" secured = 0 diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 57b23b30813..b25cd4230c2 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -3,8 +3,7 @@ desc = "Used to remotely activate devices." icon_state = "signaller" item_state = "signaler" - m_amt = 400 - g_amt = 120 + materials = list(MAT_METAL=400, MAT_GLASS=120) origin_tech = "magnets=1" wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE @@ -18,7 +17,7 @@ var/delay = 0 var/datum/radio_frequency/radio_connection var/airlock_wire = null - + New() ..() if(!radio_controller) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 2b0e72aaade..844e66cd68c 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -2,8 +2,7 @@ name = "timer" desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." icon_state = "timer" - m_amt = 500 - g_amt = 50 + materials = list(MAT_METAL=500, MAT_GLASS=50) origin_tech = "magnets=1" secured = 0 diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 169c2e6170e..1510c8791de 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -2,8 +2,7 @@ name = "voice analyzer" desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." icon_state = "voice" - m_amt = 500 - g_amt = 50 + materials = list(MAT_METAL=500, MAT_GLASS=50) origin_tech = "magnets=1" var/listening = 0 var/recorded = null //the activation message diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 6224f0d5f9e..f744b9fa26b 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -17,8 +17,7 @@ icon_state = "welding" flags = HEADCOVERSEYES | HEADCOVERSMOUTH item_state = "welding" - m_amt = 1750 - g_amt = 400 + materials = list(MAT_METAL=1750, MAT_GLASS=400) var/up = 0 flash_protect = 2 tint = 2 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 769f1644e8d..1ed9ffce30c 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -21,8 +21,7 @@ desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd." icon_state = "weldingmask" item_state = "weldingmask" - m_amt = 3000 - g_amt = 1000 + materials = list(MAT_METAL=4000, MAT_GLASS=2000) var/up = 0 flash_protect = 2 tint = 2 diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm index dcbff456b37..fd8f3d79c6b 100644 --- a/code/modules/fish/fish_items.dm +++ b/code/modules/fish/fish_items.dm @@ -153,7 +153,7 @@ var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfi icon_state = "teeth" force = 2.0 throwforce = 5.0 - g_amt = 0 + materials = list() /obj/item/weapon/shard/shark_teeth/New() src.pixel_x = rand(-5,5) diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index d3db34ec060..137d724f9cd 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -264,7 +264,7 @@ force = 5.0 throwforce = 7.0 w_class = 2.0 - m_amt = 50 + materials = list(MAT_METAL=50) attack_verb = list("slashed", "sliced", "cut", "clawed") //Hatchets and things to kill kudzu @@ -281,7 +281,7 @@ throwforce = 15.0 throw_speed = 4 throw_range = 4 - m_amt = 15000 + materials = list(MAT_METAL=15000) origin_tech = "materials=2;combat=1" attack_verb = list("chopped", "torn", "cut") hitsound = 'sound/weapons/bladeslice.ogg' diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index eaf2dfe384f..1c6aa5a4500 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -58,7 +58,7 @@ throwforce = 10.0 item_state = "pickaxe" w_class = 4.0 - m_amt = 3750 //one sheet, but where can you make them? + materials = list(MAT_METAL=3750) //one sheet, but where can you make them? var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO origin_tech = "materials=1;engineering=1" attack_verb = list("hit", "pierced", "sliced", "attacked") @@ -151,7 +151,7 @@ throwforce = 4.0 item_state = "shovel" w_class = 3.0 - m_amt = 50 + materials = list(MAT_METAL=50) origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 3ab57ea1437..fe721a77d6d 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -21,7 +21,7 @@ w_class = 1.0 throw_speed = 3 throw_range = 7 - m_amt = 10 + materials = list(MAT_METAL=10) var/colour = "black" //what colour the ink is! pressure_resistance = 2 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 2876c7ad89a..d11d6558cce 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -444,7 +444,7 @@ item_state = "videocam" w_class = 2.0 slot_flags = SLOT_BELT - m_amt = 2000 + materials = list(MAT_METAL=2000) var/on = 0 var/obj/machinery/camera/camera var/icon_on = "videocam_on" diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index f67021517a4..5a3df2ff47f 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -8,7 +8,7 @@ w_class = 1.0 throw_speed = 3 throw_range = 7 - m_amt = 60 + materials = list(MAT_METAL=60) _color = "cargo" pressure_resistance = 2 attack_verb = list("stamped") @@ -76,7 +76,7 @@ name = "Nanotrasen Representative's rubber stamp" icon_state = "stamp-cent" _color = "centcom" - + /obj/item/weapon/stamp/syndicate name = "suspicious rubber stamp" icon_state = "stamp-syndicate" diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ea9a92f3230..f35d0f6353b 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -470,8 +470,7 @@ obj/structure/cable/proc/cableColor(var/colorC) w_class = 2.0 throw_speed = 2 throw_range = 5 - m_amt = 50 - g_amt = 20 + materials = list(MAT_METAL=50, MAT_GLASS=20) flags = CONDUCT slot_flags = SLOT_BELT item_state = "coil" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 46242540f8f..709bd0cbaff 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -605,7 +605,7 @@ var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state var/switchcount = 0 // number of times switched - m_amt = 60 + materials = list(MAT_METAL=60) var/rigged = 0 // true if rigged to explode var/brightness_range = 2 //how much light it gives off var/brightness_power = 1 @@ -617,7 +617,7 @@ icon_state = "ltube" base_state = "ltube" item_state = "c_tube" - g_amt = 100 + materials = list(MAT_GLASS=100) brightness_range = 8 brightness_power = 3 @@ -633,7 +633,7 @@ icon_state = "lbulb" base_state = "lbulb" item_state = "contvapour" - g_amt = 100 + materials = list(MAT_GLASS=100) brightness_range = 5 brightness_power = 2 brightness_color = "#a0a080" @@ -648,7 +648,7 @@ icon_state = "fbulb" base_state = "fbulb" item_state = "egg4" - g_amt = 100 + materials = list(MAT_GLASS=100) brightness_range = 5 brightness_power = 2 diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 6b23a7dae2f..57ed66625ec 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -67,7 +67,7 @@ flags = CONDUCT slot_flags = SLOT_BELT item_state = "syringe_kit" - m_amt = 30000 + materials = list(MAT_METAL=30000) throwforce = 2 w_class = 1.0 throw_speed = 4 diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 5ceb6aa386b..18cd36a7fc9 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -38,7 +38,7 @@ icon_state = "blshell" caliber = "shotgun" projectile_type = "/obj/item/projectile/bullet" - m_amt = 4000 + materials = list(MAT_METAL=4000) /obj/item/ammo_casing/shotgun/buckshot @@ -55,7 +55,7 @@ desc = "A weak beanbag slug for riot control." icon_state = "bshell" projectile_type = "/obj/item/projectile/bullet/weakbullet/rubber" - m_amt = 250 + materials = list(MAT_METAL=250) /obj/item/ammo_casing/shotgun/improvised @@ -63,7 +63,7 @@ desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards." icon_state = "gshell" projectile_type = "/obj/item/projectile/bullet/pellet/weak" - m_amt = 250 + materials = list(MAT_METAL=250) pellets = 5 deviation = 30 @@ -73,7 +73,7 @@ propellant. It's like playing russian roulette, with a shotgun." icon_state = "improvshell" projectile_type = /obj/item/projectile/bullet/pellet/random - m_amt = 250 + materials = list(MAT_METAL=250) pellets = 5 deviation = 30 @@ -86,7 +86,7 @@ desc = "A stunning taser slug." icon_state = "stunshell" projectile_type = "/obj/item/projectile/bullet/stunshot" - m_amt = 200 + materials = list(MAT_METAL=250) /obj/item/ammo_casing/shotgun/meteorshot @@ -164,7 +164,7 @@ desc = "A tranquilizer round used to subdue individuals utilizing stimulants." icon_state = "cshell" projectile_type = "/obj/item/projectile/bullet/dart/syringe/tranquilizer" - m_amt = 250 + materials = list(MAT_METAL=250) /obj/item/ammo_casing/syringegun name = "syringe gun spring" diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 36bb1207542..36ebbce963b 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -54,7 +54,7 @@ origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/shotgun max_ammo = 8 - m_amt = 100000 + materials = list(MAT_METAL=32000) /obj/item/ammo_box/shotgun/buck name = "Ammunition Box (buckshot)" @@ -63,15 +63,15 @@ /obj/item/ammo_box/shotgun/stun name = "Ammunition Box (stun shells)" ammo_type = /obj/item/ammo_casing/shotgun/stunslug - m_amt = 20000 + materials = list(MAT_METAL=2000) /obj/item/ammo_box/shotgun/beanbag name = "Ammunition Box (beanbag shells)" ammo_type = /obj/item/ammo_casing/shotgun/beanbag - m_amt = 4000 + materials = list(MAT_METAL=2000) /obj/item/ammo_box/shotgun/tranquilizer name = "Ammunition Box (tranquilizer darts)" icon_state = "45box" ammo_type = /obj/item/ammo_casing/shotgun/tranquilizer - m_amt = 2000 \ No newline at end of file + materials = list(MAT_METAL=2000) \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 44d510b42f5..8e3fd960123 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -10,7 +10,7 @@ item_state = "gun" flags = CONDUCT slot_flags = SLOT_BELT - m_amt = 2000 + materials = list(MAT_METAL=2000) w_class = 3.0 throwforce = 5 throw_speed = 4 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 25a83332d9a..16141ac7da4 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -6,7 +6,7 @@ fire_sound = 'sound/weapons/Laser.ogg' charge_cost = 830 w_class = 3.0 - m_amt = 2000 + materials = list(MAT_METAL=2000) origin_tech = "combat=3;magnets=2" projectile_type = "/obj/item/projectile/beam" diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 0eee855c3da..d3e132d6210 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -272,7 +272,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. icon_state = "crossbow" item_state = "crossbow" w_class = 2 - m_amt = 2000 + materials = list(MAT_METAL=2000) origin_tech = "combat=2;magnets=2;syndicate=5" silenced = 1 projectile_type = "/obj/item/projectile/energy/bolt" @@ -285,7 +285,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. desc = "A reverse engineered weapon using syndicate technology." icon_state = "crossbowlarge" w_class = 3 - m_amt = 4000 + materials = list(MAT_METAL=4000) origin_tech = "combat=2;magnets=2;syndicate=3" //can be further researched for more syndie tech silenced = 0 projectile_type = "/obj/item/projectile/energy/bolt/large" @@ -294,7 +294,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. desc = "One and done!" icon_state = "crossbowlarge" origin_tech = null - m_amt = 0 + materials = list() /obj/item/weapon/gun/energy/plasmacutter name = "plasma cutter" diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 22704b55079..d1f0e244d6a 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -63,7 +63,7 @@ icon_state = "crossbow" w_class = 2.0 item_state = "crossbow" - m_amt = 2000 + materials = list(MAT_METAL=2000) origin_tech = "combat=2;magnets=2;syndicate=5" silenced = 1 fire_sound = 'sound/weapons/Genhit.ogg' @@ -98,7 +98,7 @@ silenced = 0 w_class = 3.0 force = 10 - m_amt = 4000 + materials = list(MAT_METAL=4000) projectile_type = "/obj/item/projectile/energy/bolt/large" diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 81e47aaceed..4853c5e474f 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -8,7 +8,7 @@ icon_state = "pistol" origin_tech = "combat=2;materials=2" w_class = 3.0 - m_amt = 1000 + materials = list(MAT_METAL=1000) // recoil = 1 var/mag_type = "/obj/item/ammo_box/magazine/m10mm" //Removes the need for max_ammo and caliber info var/obj/item/ammo_box/magazine/magazine diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index e7e1e0e2a7e..3107faaae69 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -15,7 +15,7 @@ var/ammo_type = /obj/item/weapon/grenade var/unloaded - m_amt = 2000 + materials = list(MAT_METAL=2000) examine() set src in view() diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index ce50606d7c5..0338cc9ff89 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -6,7 +6,7 @@ icon_state = "glass_empty" amount_per_transfer_from_this = 10 volume = 50 - g_amt = 500 + materials = list(MAT_GLASS=500) proc/smash(mob/living/target as mob, mob/living/user as mob) diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 608fbc405be..617255f133f 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -181,8 +181,7 @@ icon = 'icons/obj/chemical.dmi' icon_state = "beaker" item_state = "beaker" - m_amt = 0 - g_amt = 500 + materials = list(MAT_GLASS=500) var/obj/item/device/assembly_holder/assembly = null on_reagent_change() @@ -276,7 +275,7 @@ name = "large beaker" desc = "A large beaker. Can hold up to 100 units." icon_state = "beakerlarge" - g_amt = 2500 + materials = list(MAT_GLASS=2500) volume = 100 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25,30,50,100) @@ -286,7 +285,7 @@ name = "vial" desc = "A small glass vial. Can hold up to 25 units." icon_state = "vial" - g_amt = 250 + materials = list(MAT_GLASS=250) volume = 25 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25) @@ -296,7 +295,7 @@ name = "cryostasis beaker" desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." icon_state = "beakernoreact" - g_amt = 500 + materials = list(MAT_GLASS=500) volume = 50 amount_per_transfer_from_this = 10 flags = OPENCONTAINER | NOREACT @@ -305,7 +304,7 @@ name = "bluespace beaker" desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." icon_state = "beakerbluespace" - g_amt = 5000 + materials = list(MAT_GLASS=5000) volume = 300 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25,30,50,100,300) @@ -335,8 +334,7 @@ icon = 'icons/obj/janitor.dmi' icon_state = "bucket" item_state = "bucket" - m_amt = 200 - g_amt = 0 + materials = list(MAT_METAL=200) w_class = 3.0 amount_per_transfer_from_this = 20 possible_transfer_amounts = list(5,10,15,25,30,50,80,100,120) @@ -357,7 +355,7 @@ name = "vial" desc = "Small glass vial. Looks fragile." icon_state = "vial" - g_amt = 500 + materials = list(MAT_GLASS=500) volume = 15 amount_per_transfer_from_this = 5 possible_transfer_amounts = list(1,5,15) @@ -386,8 +384,7 @@ icon = 'icons/obj/tank.dmi' icon_state = "canister" item_state = "canister" - m_amt = 300 - g_amt = 0 + materials = list(MAT_METAL=300) w_class = 4.0 amount_per_transfer_from_this = 20 diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm index ac70be0f387..18630fdbfff 100644 --- a/code/modules/reagents/syringe_gun.dm +++ b/code/modules/reagents/syringe_gun.dm @@ -7,7 +7,7 @@ throw_speed = 2 throw_range = 10 force = 4 - m_amt = 2000 + materials = list(MAT_METAL=2000) clumsy_check = 0 fire_sound = 'sound/items/syringeproj.ogg' var/list/syringes = list() diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 5d33c5982f2..bf27e538294 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -271,8 +271,7 @@ datum/tech/robotics icon_state = "datadisk2" item_state = "card-id" w_class = 1.0 - m_amt = 30 - g_amt = 10 + materials = list(MAT_METAL=30, MAT_GLASS=10) var/datum/tech/stored /obj/item/weapon/disk/tech_disk/New() @@ -286,8 +285,7 @@ datum/tech/robotics icon_state = "datadisk2" item_state = "card-id" w_class = 1.0 - m_amt = 30 - g_amt = 10 + materials = list(MAT_METAL=30, MAT_GLASS=10) var/datum/design/blueprint /obj/item/weapon/disk/design_disk/New() diff --git a/code/modules/research/xenoarchaeology/chemistry.dm b/code/modules/research/xenoarchaeology/chemistry.dm index b9ab6fc0b60..a91ed35ca55 100644 --- a/code/modules/research/xenoarchaeology/chemistry.dm +++ b/code/modules/research/xenoarchaeology/chemistry.dm @@ -81,8 +81,7 @@ datum desc = "A small, open-topped glass container for delicate research samples. It sports a re-useable strip for labelling with a pen." icon = 'icons/obj/device.dmi' icon_state = "solution_tray" - m_amt = 0 - g_amt = 5 + materials = list(MAT_GLASS=5) w_class = 1.0 amount_per_transfer_from_this = 1 possible_transfer_amounts = list(1, 2) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 0b91cbd4e9e..da41f1298b4 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -3,8 +3,7 @@ desc = "Retracts stuff." icon = 'icons/obj/surgery.dmi' icon_state = "retractor" - m_amt = 6000 - g_amt = 3000 + materials = list(MAT_METAL=6000, MAT_GLASS=3000) flags = CONDUCT w_class = 2.0 origin_tech = "materials=1;biotech=1" @@ -15,8 +14,7 @@ desc = "You think you have seen this before." icon = 'icons/obj/surgery.dmi' icon_state = "hemostat" - m_amt = 5000 - g_amt = 2500 + materials = list(MAT_METAL=5000, MAT_GLASS=2500) flags = CONDUCT w_class = 1.0 origin_tech = "materials=1;biotech=1" @@ -28,8 +26,7 @@ desc = "This stops bleeding." icon = 'icons/obj/surgery.dmi' icon_state = "cautery" - m_amt = 2500 - g_amt = 750 + materials = list(MAT_METAL=2500, MAT_GLASS=750) flags = CONDUCT w_class = 1.0 origin_tech = "materials=1;biotech=1" @@ -42,8 +39,7 @@ icon = 'icons/obj/surgery.dmi' icon_state = "drill" hitsound = 'sound/weapons/drill.ogg' - m_amt = 10000 - g_amt = 6000 + materials = list(MAT_METAL=10000, MAT_GLASS=6000) flags = CONDUCT force = 15.0 sharp = 1 @@ -71,8 +67,7 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - m_amt = 4000 - g_amt = 1000 + materials = list(MAT_METAL=4000, MAT_GLASS=1000) origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' @@ -136,8 +131,7 @@ throwforce = 9.0 throw_speed = 3 throw_range = 5 - m_amt = 10000 - g_amt = 6000 + materials = list(MAT_METAL=10000, MAT_GLASS=6000) origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "sawed", "cut") From 5bb851b771b6859fd85b40d64724282717ddc027 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Sep 2015 16:32:18 -0400 Subject: [PATCH 10/25] Pass II --- .../research/designs/AI_module_designs.dm | 54 ++--- .../research/designs/autolathe_designs.dm | 136 +++++------ .../research/designs/bluespace_designs.dm | 26 +-- .../research/designs/comp_board_designs.dm | 72 +++--- .../research/designs/equipment_designs.dm | 22 +- .../research/designs/janitorial_designs.dm | 8 +- .../research/designs/machine_designs.dm | 86 +++---- .../modules/research/designs/mecha_designs.dm | 32 +-- .../designs/mechfabricator_designs.dm | 214 +++++++++--------- .../research/designs/medical_designs.dm | 38 ++-- .../research/designs/mining_designs.dm | 12 +- code/modules/research/designs/misc_designs.dm | 14 +- .../modules/research/designs/power_designs.dm | 16 +- .../research/designs/spacepod_designs.dm | 22 +- .../research/designs/stock_parts_designs.dm | 44 ++-- .../research/designs/telecomms_designs.dm | 46 ++-- .../research/designs/weapon_designs.dm | 38 ++-- .../modules/shieldgen/circuits_and_designs.dm | 6 +- 18 files changed, 443 insertions(+), 443 deletions(-) diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index f58f8075893..01de6f63848 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -8,27 +8,27 @@ id = "freeform_module" req_tech = list("programming" = 4, "materials" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) build_path = /obj/item/weapon/aiModule/freeform category = list("AI Modules") - + /datum/design/onecrewmember_module name = "AI Module (oneCrewMember)" desc = "Allows for the construction of a oneCrewMember AI Module." id = "onecrewmember_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/oneCrewMember category = list("AI Modules") - + /datum/design/oxygen_module name = "AI Module (OxygenIsToxicToHumans)" desc = "Allows for the construction of a Safeguard AI Module." id = "oxygen_module" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) build_path = /obj/item/weapon/aiModule/oxygen category = list("AI Modules") @@ -38,9 +38,9 @@ id = "protectstation_module" req_tech = list("programming" = 3, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) build_path = /obj/item/weapon/aiModule/protectStation - category = list("AI Modules") + category = list("AI Modules") /datum/design/purge_module name = "AI Module (Purge)" @@ -48,7 +48,7 @@ id = "purge_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/purge category = list("AI Modules") @@ -58,27 +58,27 @@ id = "quarantine_module" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) build_path = /obj/item/weapon/aiModule/quarantine category = list("AI Modules") - + /datum/design/reset_module name = "AI Module (Reset)" desc = "Allows for the construction of a Reset AI Module." id = "reset_module" req_tech = list("programming" = 3, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) build_path = /obj/item/weapon/aiModule/reset category = list("AI Modules") - + /datum/design/safeguard_module name = "AI Module (Safeguard)" desc = "Allows for the construction of a Safeguard AI Module." id = "safeguard_module" req_tech = list("programming" = 3, "materials" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$gold" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) build_path = /obj/item/weapon/aiModule/safeguard category = list("AI Modules") @@ -88,47 +88,47 @@ id = "antimov_module" req_tech = list("programming" = 4, "materials" = 6, "syndicate" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/antimov - category = list("AI Modules") - + category = list("AI Modules") + /datum/design/asimov name = "Core AI Module (Asimov)" desc = "Allows for the construction of a Asimov AI Core Module." id = "asimov_module" req_tech = list("programming" = 3, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/asimov - category = list("AI Modules") - + category = list("AI Modules") + /datum/design/corporate_module name = "Core AI Module (Corporate)" desc = "Allows for the construction of a Corporate AI Core Module." id = "corporate_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/corp category = list("AI Modules") - + /datum/design/crewsimov name = "Core AI Module (Crewsimov)" desc = "Allows for the construction of a Crewsimov AI Core Module." id = "crewsimov_module" req_tech = list("programming" = 3, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/crewsimov - category = list("AI Modules") - + category = list("AI Modules") + /datum/design/freeformcore_module name = "Core AI Module (Freeform)" desc = "Allows for the construction of a Freeform AI Core Module." id = "freeformcore_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/freeformcore category = list("AI Modules") @@ -138,7 +138,7 @@ id = "paladin_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/paladin category = list("AI Modules") @@ -148,6 +148,6 @@ id = "tyrant_module" req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20, "$diamond" = 100) + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) build_path = /obj/item/weapon/aiModule/tyrant category = list("AI Modules") diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index d58d23f09cf..e68cf4df4c4 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -6,7 +6,7 @@ name = "Analyzer" id = "analyzer" build_type = AUTOLATHE - materials = list("$metal" = 30, "$glass" = 20) + materials = list(MAT_METAL = 30, MAT_GLASS = 20) build_path = /obj/item/device/analyzer category = list("initial","Tools") @@ -14,7 +14,7 @@ name = "Bucket" id = "bucket" build_type = AUTOLATHE - materials = list("$metal" = 200) + materials = list(MAT_METAL = 200) build_path = /obj/item/weapon/reagent_containers/glass/bucket category = list("initial","Tools") @@ -22,7 +22,7 @@ name = "Pocket Crowbar" id = "crowbar" build_type = AUTOLATHE - materials = list("$metal" = 50) + materials = list(MAT_METAL = 50) build_path = /obj/item/weapon/crowbar category = list("initial","Tools") @@ -30,7 +30,7 @@ name = "Fire Extinguisher" id = "extinguisher" build_type = AUTOLATHE - materials = list("$metal" = 90) + materials = list(MAT_METAL = 90) build_path = /obj/item/weapon/extinguisher category = list("initial","Tools") @@ -38,7 +38,7 @@ name = "Flashlight" id = "flashlight" build_type = AUTOLATHE - materials = list("$metal" = 50, "$glass" = 20) + materials = list(MAT_METAL = 50, MAT_GLASS = 20) build_path = /obj/item/device/flashlight category = list("initial","Tools") @@ -46,7 +46,7 @@ name = "Multitool" id = "multitool" build_type = AUTOLATHE - materials = list("$metal" = 50, "$glass" = 20) + materials = list(MAT_METAL = 50, MAT_GLASS = 20) build_path = /obj/item/device/multitool category = list("initial","Tools") @@ -54,7 +54,7 @@ name = "Screwdriver" id = "screwdriver" build_type = AUTOLATHE - materials = list("$metal" = 75) + materials = list(MAT_METAL = 75) build_path = /obj/item/weapon/screwdriver category = list("initial","Tools") @@ -62,7 +62,7 @@ name = "T-ray Scanner" id = "tscanner" build_type = AUTOLATHE - materials = list("$metal" = 150) + materials = list(MAT_METAL = 150) build_path = /obj/item/device/t_scanner category = list("initial","Tools") @@ -70,7 +70,7 @@ name = "Welding Helmet" id = "welding_helmet" build_type = AUTOLATHE - materials = list("$metal" = 1750, "$glass" = 400) + materials = list(MAT_METAL = 1750, MAT_GLASS = 400) build_path = /obj/item/clothing/head/welding category = list("initial","Tools") @@ -78,7 +78,7 @@ name = "Welding Tool" id = "welding_tool" build_type = AUTOLATHE - materials = list("$metal" = 70, "$glass" = 20) + materials = list(MAT_METAL = 70, MAT_GLASS = 20) build_path = /obj/item/weapon/weldingtool category = list("initial","Tools") @@ -86,7 +86,7 @@ name = "Wirecutters" id = "wirecutters" build_type = AUTOLATHE - materials = list("$metal" = 80) + materials = list(MAT_METAL = 80) build_path = /obj/item/weapon/wirecutters category = list("initial","Tools") @@ -94,7 +94,7 @@ name = "Wrench" id = "wrench" build_type = AUTOLATHE - materials = list("$metal" = 150) + materials = list(MAT_METAL = 150) build_path = /obj/item/weapon/wrench category = list("initial","Tools") @@ -102,7 +102,7 @@ name = "Spraycan" id = "spraycan" build_type = AUTOLATHE - materials = list("$metal" = 100, "$glass" = 100) + materials = list(MAT_METAL = 100, MAT_GLASS = 100) build_path = /obj/item/toy/crayon/spraycan category = list("initial", "Tools") @@ -110,7 +110,7 @@ name = "Air Alarm Electronics" id = "airalarm_electronics" build_type = AUTOLATHE - materials = list("$metal" = 50, "$glass" = 50) + materials = list(MAT_METAL = 50, MAT_GLASS = 50) build_path = /obj/item/weapon/airalarm_electronics category = list("initial", "Electronics") @@ -118,7 +118,7 @@ name = "Airlock Electronics" id = "airlock_board" build_type = AUTOLATHE - materials = list("$metal" = 50, "$glass" = 50) + materials = list(MAT_METAL = 50, MAT_GLASS = 50) build_path = /obj/item/weapon/airlock_electronics category = list("initial", "Electronics") @@ -126,7 +126,7 @@ name = "Intercom Electronics" id = "intercom_electronics" build_type = AUTOLATHE - materials = list("$metal" = 50, "$glass" = 50) + materials = list(MAT_METAL = 50, MAT_GLASS = 50) build_path = /obj/item/weapon/intercom_electronics category = list("initial", "Electronics") @@ -134,7 +134,7 @@ name = "Console Screen" id = "console_screen" build_type = AUTOLATHE - materials = list("$glass" = 200) + materials = list(MAT_GLASS = 200) build_path = /obj/item/weapon/stock_parts/console_screen category = list("initial", "Electronics") @@ -142,7 +142,7 @@ name = "Fire Alarm Electronics" id = "firealarm_electronics" build_type = AUTOLATHE - materials = list("$metal" = 50, "$glass" = 50) + materials = list(MAT_METAL = 50, MAT_GLASS = 50) build_path = /obj/item/weapon/firealarm_electronics category = list("initial", "Electronics") @@ -150,7 +150,7 @@ name = "Igniter" id = "igniter" build_type = AUTOLATHE - materials = list("$metal" = 500, "$glass" = 50) + materials = list(MAT_METAL = 500, MAT_GLASS = 50) build_path = /obj/item/device/assembly/igniter category = list("initial", "Miscellaneous") @@ -158,7 +158,7 @@ name = "Infrared Emitter" id = "infrared_emitter" build_type = AUTOLATHE - materials = list("$metal" = 1000, "$glass" = 500) + materials = list(MAT_METAL = 1000, MAT_GLASS = 500) build_path = /obj/item/device/assembly/infra category = list("initial", "Miscellaneous") @@ -166,7 +166,7 @@ name = "Kitchen knife" id = "kitchen_knife" build_type = AUTOLATHE - materials = list("$metal" = 12000) + materials = list(MAT_METAL = 12000) build_path = /obj/item/weapon/kitchenknife category = list("initial","Miscellaneous") @@ -174,7 +174,7 @@ name = "Pipe Painter" id = "pipe_painter" build_type = AUTOLATHE - materials = list("$metal" = 5000, "$glass" = 2000) + materials = list(MAT_METAL = 5000, MAT_GLASS = 2000) build_path = /obj/item/device/pipe_painter category = list("initial", "Miscellaneous") @@ -182,7 +182,7 @@ name = "Proximity Sensor" id = "prox_sensor" build_type = AUTOLATHE - materials = list("$metal" = 800, "$glass" = 200) + materials = list(MAT_METAL = 800, MAT_GLASS = 200) build_path = /obj/item/device/assembly/prox_sensor category = list("initial", "Miscellaneous") @@ -190,7 +190,7 @@ name = "Mousetrap" id = "mousetrap" build_type = AUTOLATHE - materials = list("$metal" = 800, "$glass" = 200) + materials = list(MAT_METAL = 800, MAT_GLASS = 200) build_path = /obj/item/device/assembly/mousetrap category = list("initial", "Miscellaneous") @@ -198,7 +198,7 @@ name = "Timer" id = "timer" build_type = AUTOLATHE - materials = list("$metal" = 500, "$glass" = 50) + materials = list(MAT_METAL = 500, MAT_GLASS = 50) build_path = /obj/item/device/assembly/timer category = list("initial", "Miscellaneous") @@ -206,7 +206,7 @@ name = "Universal Recorder" id = "recorder" build_type = AUTOLATHE - materials = list("$metal" = 60, "$glass" = 30) + materials = list(MAT_METAL = 60, MAT_GLASS = 30) build_path = /obj/item/device/taperecorder/empty category = list("initial", "Miscellaneous") @@ -214,7 +214,7 @@ name = "Tape" id = "tape" build_type = AUTOLATHE - materials = list("$metal" = 20, "$glass" = 5) + materials = list(MAT_METAL = 20, MAT_GLASS = 5) build_path = /obj/item/device/tape/random category = list("initial", "Miscellaneous") @@ -222,7 +222,7 @@ name = "Voice Analyser" id = "voice_analyser" build_type = AUTOLATHE - materials = list("$metal" = 500, "$glass" = 50) + materials = list(MAT_METAL = 500, MAT_GLASS = 50) build_path = /obj/item/device/assembly/voice category = list("initial", "Miscellaneous") @@ -230,7 +230,7 @@ name = "11px by 11px Canvas" id = "canvas" build_type = AUTOLATHE - materials = list("$metal" = 50) + materials = list(MAT_METAL = 50) build_path = /obj/item/weapon/canvas category = list("initial", "Miscellaneous") @@ -238,7 +238,7 @@ name = "19px by 19px Canvas" id = "canvas19x19" build_type = AUTOLATHE - materials = list("$metal" = 50) + materials = list(MAT_METAL = 50) build_path = /obj/item/weapon/canvas/nineteenXnineteen category = list("initial", "Miscellaneous") @@ -246,7 +246,7 @@ name = "23px by 19px Canvas" id = "canvas23x19" build_type = AUTOLATHE - materials = list("$metal" = 70) + materials = list(MAT_METAL = 70) build_path = /obj/item/weapon/canvas/twentythreeXnineteen category = list("initial", "Miscellaneous") @@ -254,7 +254,7 @@ name = "23px by 23px Canvas" id = "canvas23x23" build_type = AUTOLATHE - materials = list("$metal" = 100) + materials = list(MAT_METAL = 100) build_path = /obj/item/weapon/canvas/twentythreeXtwentythree category = list("initial", "Miscellaneous") @@ -262,7 +262,7 @@ name = "Camera Assembly" id = "camera_assembly" build_type = AUTOLATHE - materials = list("$metal" = 400, "$glass" = 250) + materials = list(MAT_METAL = 400, MAT_GLASS = 250) build_path = /obj/item/weapon/camera_assembly category = list("initial", "Construction") @@ -270,7 +270,7 @@ name = "Glass" id = "glass" build_type = AUTOLATHE - materials = list("$glass" = MINERAL_MATERIAL_AMOUNT) + materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/glass category = list("initial","Construction") @@ -278,7 +278,7 @@ name = "Light Bulb" id = "light_bulb" build_type = AUTOLATHE - materials = list("$metal" = 60, "$glass" = 100) + materials = list(MAT_METAL = 60, MAT_GLASS = 100) build_path = /obj/item/weapon/light/bulb category = list("initial", "Construction") @@ -286,7 +286,7 @@ name = "Light Tube" id = "light_tube" build_type = AUTOLATHE - materials = list("$metal" = 60, "$glass" = 100) + materials = list(MAT_METAL = 60, MAT_GLASS = 100) build_path = /obj/item/weapon/light/tube category = list("initial", "Construction") @@ -294,7 +294,7 @@ name = "Metal" id = "metal" build_type = AUTOLATHE - materials = list("$metal" = 3750) + materials = list(MAT_METAL = 3750) build_path = /obj/item/stack/sheet/metal category = list("initial","Construction") @@ -302,7 +302,7 @@ name = "Newscaster Frame" id = "newscaster_frame" build_type = AUTOLATHE - materials = list("$metal" = 14000, "$glass" = 8000) + materials = list(MAT_METAL = 14000, MAT_GLASS = 8000) build_path = /obj/item/mounted/frame/newscaster_frame category = list("initial", "Construction") @@ -310,7 +310,7 @@ name = "Compressed Matter Cardridge" id = "rcd_ammo" build_type = AUTOLATHE - materials = list("$metal" = 16000, "$glass"=8000) + materials = list(MAT_METAL = 16000, MAT_GLASS=8000) build_path = /obj/item/weapon/rcd_ammo category = list("initial","Construction") @@ -318,7 +318,7 @@ name = "Reinforced Glass" id = "rglass" build_type = AUTOLATHE - materials = list("$metal" = 1875, "$glass" = MINERAL_MATERIAL_AMOUNT) + materials = list(MAT_METAL = 1875, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/rglass category = list("initial","Construction") @@ -326,7 +326,7 @@ name = "Metal Rod" id = "rods" build_type = AUTOLATHE - materials = list("$metal" = 1875) + materials = list(MAT_METAL = 1875) build_path = /obj/item/stack/rods category = list("initial","Construction") @@ -334,7 +334,7 @@ name = "Beaker" id = "beaker" build_type = AUTOLATHE - materials = list("$glass" = 500) + materials = list(MAT_GLASS = 500) build_path = /obj/item/weapon/reagent_containers/glass/beaker category = list("initial", "Medical") @@ -342,7 +342,7 @@ name = "Cautery" id = "cautery" build_type = AUTOLATHE - materials = list("$metal" = 2500, "$glass" = 750) + materials = list(MAT_METAL = 2500, MAT_GLASS = 750) build_path = /obj/item/weapon/cautery category = list("initial", "Medical") @@ -350,7 +350,7 @@ name = "Circular Saw" id = "circular_saw" build_type = AUTOLATHE - materials = list("$metal" = 10000, "$glass" = 6000) + materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) build_path = /obj/item/weapon/circular_saw category = list("initial", "Medical") @@ -358,7 +358,7 @@ name = "Hemostat" id = "hemostat" build_type = AUTOLATHE - materials = list("$metal" = 5000, "$glass" = 2500) + materials = list(MAT_METAL = 5000, MAT_GLASS = 2500) build_path = /obj/item/weapon/hemostat category = list("initial", "Medical") @@ -366,7 +366,7 @@ name = "Large Beaker" id = "large_beaker" build_type = AUTOLATHE - materials = list("$glass" = 2500) + materials = list(MAT_GLASS = 2500) build_path = /obj/item/weapon/reagent_containers/glass/beaker/large category = list("initial", "Medical") @@ -374,7 +374,7 @@ name = "Retractor" id = "retractor" build_type = AUTOLATHE - materials = list("$metal" = 6000, "$glass" = 3000) + materials = list(MAT_METAL = 6000, MAT_GLASS = 3000) build_path = /obj/item/weapon/retractor category = list("initial", "Medical") @@ -382,7 +382,7 @@ name = "Scalpel" id = "scalpel" build_type = AUTOLATHE - materials = list("$metal" = 4000, "$glass" = 1000) + materials = list(MAT_METAL = 4000, MAT_GLASS = 1000) build_path = /obj/item/weapon/scalpel category = list("initial", "Medical") @@ -390,7 +390,7 @@ name = "Surgical Drill" id = "surgicaldrill" build_type = AUTOLATHE - materials = list("$metal" = 10000, "$glass" = 6000) + materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) build_path = /obj/item/weapon/surgicaldrill category = list("initial", "Medical") @@ -398,7 +398,7 @@ name = "Syringe" id = "syringe" build_type = AUTOLATHE - materials = list("$metal" = 10, "$glass" = 20) + materials = list(MAT_METAL = 10, MAT_GLASS = 20) build_path = /obj/item/weapon/reagent_containers/syringe category = list("initial", "Medical") @@ -406,7 +406,7 @@ name = "Beanbag Slug" id = "beanbag_slug" build_type = AUTOLATHE - materials = list("$metal" = 250) + materials = list(MAT_METAL = 250) build_path = /obj/item/ammo_casing/shotgun/beanbag category = list("initial", "Security") @@ -414,7 +414,7 @@ name = "Speed Loader (.38)" id = "c38" build_type = AUTOLATHE - materials = list("$metal" = 30000) + materials = list(MAT_METAL = 30000) build_path = /obj/item/ammo_box/c38 category = list("initial", "Security") @@ -422,7 +422,7 @@ name = "Radio Headset" id = "radio_headset" build_type = AUTOLATHE - materials = list("$metal" = 75) + materials = list(MAT_METAL = 75) build_path = /obj/item/device/radio/headset category = list("initial", "Communication") @@ -430,7 +430,7 @@ name = "Remote Signaling Device" id = "signaler" build_type = AUTOLATHE - materials = list("$metal" = 400, "$glass" = 120) + materials = list(MAT_METAL = 400, MAT_GLASS = 120) build_path = /obj/item/device/assembly/signaler category = list("initial", "Communication") @@ -438,7 +438,7 @@ name = "Station Bounced Radio" id = "bounced_radio" build_type = AUTOLATHE - materials = list("$metal" = 75, "$glass" = 25) + materials = list(MAT_METAL = 75, MAT_GLASS = 25) build_path = /obj/item/device/radio/off category = list("initial", "Communication") @@ -447,7 +447,7 @@ name = "Ammo Box (.45)" id = "c45" build_type = AUTOLATHE - materials = list("$metal" = 30000) + materials = list(MAT_METAL = 30000) build_path = /obj/item/ammo_box/c45 category = list("hacked", "Security") @@ -455,7 +455,7 @@ name = "Ammo Box (.357)" id = "a357" build_type = AUTOLATHE - materials = list("$metal" = 30000) + materials = list(MAT_METAL = 30000) build_path = /obj/item/ammo_box/a357 category = list("hacked", "Security") @@ -463,7 +463,7 @@ name = "Ammo Box (9mm)" id = "c9mm" build_type = AUTOLATHE - materials = list("$metal" = 30000) + materials = list(MAT_METAL = 30000) build_path = /obj/item/ammo_box/c9mm category = list("hacked", "Security") @@ -471,7 +471,7 @@ name = "Ammo Box (10mm)" id = "c10mm" build_type = AUTOLATHE - materials = list("$metal" = 30000) + materials = list(MAT_METAL = 30000) build_path = /obj/item/ammo_box/c10mm category = list("hacked", "Security") @@ -479,7 +479,7 @@ name = "Buckshot Shell" id = "buckshot_shell" build_type = AUTOLATHE - materials = list("$metal" = 4000) + materials = list(MAT_METAL = 4000) build_path = /obj/item/ammo_casing/shotgun/buckshot category = list("hacked", "Security") @@ -487,7 +487,7 @@ name = "Electropack" id = "electropack" build_type = AUTOLATHE - materials = list("$metal" = 10000, "$glass" = 2500) + materials = list(MAT_METAL = 10000, MAT_GLASS = 2500) build_path = /obj/item/device/radio/electropack category = list("hacked", "Tools") @@ -495,7 +495,7 @@ name = "Flamethrower" id = "flamethrower" build_type = AUTOLATHE - materials = list("$metal" = 500) + materials = list(MAT_METAL = 500) build_path = /obj/item/weapon/flamethrower/full category = list("hacked", "Security") @@ -503,7 +503,7 @@ name = "Handcuffs" id = "handcuffs" build_type = AUTOLATHE - materials = list("$metal" = 500) + materials = list(MAT_METAL = 500) build_path = /obj/item/weapon/restraints/handcuffs category = list("hacked", "Security") @@ -511,7 +511,7 @@ name = "Incendiary Slug" id = "incendiary_slug" build_type = AUTOLATHE - materials = list("$metal" = 4000) + materials = list(MAT_METAL = 4000) build_path = /obj/item/ammo_casing/shotgun/incendiary category = list("hacked", "Security") @@ -519,7 +519,7 @@ name = "Industrial Welding Tool" id = "large_welding_tool" build_type = AUTOLATHE - materials = list("$metal" = 70, "$glass" = 60) + materials = list(MAT_METAL = 70, MAT_GLASS = 60) build_path = /obj/item/weapon/weldingtool/largetank category = list("hacked", "Tools") @@ -527,7 +527,7 @@ name = "Rapid Construction Device (RCD)" id = "rcd" build_type = AUTOLATHE - materials = list("$metal" = 30000) + materials = list(MAT_METAL = 30000) build_path = /obj/item/weapon/rcd category = list("hacked", "Construction") @@ -535,7 +535,7 @@ name = "Shotgun Dart" id = "shotgun_dart" build_type = AUTOLATHE - materials = list("$metal" = 4000) + materials = list(MAT_METAL = 4000) build_path = /obj/item/ammo_casing/shotgun/dart category = list("hacked", "Security") @@ -543,6 +543,6 @@ name = "Shotgun Slug" id = "shotgun_slug" build_type = AUTOLATHE - materials = list("$metal" = 4000) + materials = list(MAT_METAL = 4000) build_path = /obj/item/ammo_casing/shotgun category = list("hacked", "Security") diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index 13b3dcadf7c..13a1923c76f 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -7,40 +7,40 @@ id = "bluespace_crystal" req_tech = list("bluespace" = 4, "materials" = 6) build_type = PROTOLATHE - materials = list("$diamond" = 1500, "$plasma" = 1500) + materials = list(MAT_DIAMOND = 1500, MAT_PLASMA = 1500) reliability_base = 100 build_path = /obj/item/bluespace_crystal/artificial - category = list("Bluespace") - + category = list("Bluespace") + /datum/design/bag_holding name = "Bag of Holding" desc = "A backpack that opens into a localized pocket of Blue Space." id = "bag_holding" req_tech = list("bluespace" = 4, "materials" = 6) build_type = PROTOLATHE - materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250) + materials = list(MAT_GOLD = 3000, MAT_DIAMOND = 1500, MAT_URANIUM = 250) reliability_base = 80 build_path = /obj/item/weapon/storage/backpack/holding category = list("Bluespace") - + /datum/design/bluespace_belt name = "Belt of Holding" desc = "An astonishingly complex belt popularized by a rich blue-space technology magnate." id = "bluespace_belt" req_tech = list("bluespace" = 4, "materials" = 6) build_type = PROTOLATHE - materials = list("$gold" = 1500, "$diamond" = 3000, "$uranium" = 1000) + materials = list(MAT_GOLD = 1500, MAT_DIAMOND = 3000, MAT_URANIUM = 1000) reliability_base = 80 build_path = /obj/item/weapon/storage/belt/bluespace category = list("Bluespace") - + /datum/design/bluespacebeaker name = "Bluespace Beaker" desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." id = "bluespacebeaker" req_tech = list("bluespace" = 2, "materials" = 6) build_type = PROTOLATHE - materials = list("$metal" = 3000, "$plasma" = 3000, "$diamond" = 500) + materials = list(MAT_METAL = 3000, MAT_PLASMA = 3000, MAT_DIAMOND = 500) reliability_base = 76 build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace category = list("Medical") @@ -51,17 +51,17 @@ id = "telesci_Gps" req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3) build_type = PROTOLATHE - materials = list("$metal" = 500, "$glass" = 1000) + materials = list(MAT_METAL = 500, MAT_GLASS = 1000) build_path = /obj/item/device/gps category = list("Bluespace") - + /datum/design/miningsatchel_holding name = "Mining Satchel of Holding" desc = "A mining satchel that can hold an infinite amount of ores." id = "minerbag_holding" req_tech = list("bluespace" = 3, "materials" = 4) build_type = PROTOLATHE - materials = list("$gold" = 250, "$uranium" = 500) //quite cheap, for more convenience + materials = list(MAT_GOLD = 250, MAT_URANIUM = 500) //quite cheap, for more convenience reliability = 100 build_path = /obj/item/weapon/storage/bag/ore/holding category = list("Bluespace") @@ -72,7 +72,7 @@ id = "telepad_beacon" req_tech = list("bluespace" = 3, "materials" = 4) build_type = PROTOLATHE - materials = list ("$metal" = 2000, "$glass" = 1750, "$silver" = 500) + materials = list (MAT_METAL = 2000, MAT_GLASS = 1750, MAT_SILVER = 500) build_path = /obj/item/device/telepad_beacon category = list("Bluespace") @@ -82,6 +82,6 @@ id = "beacon" req_tech = list("bluespace" = 1) build_type = PROTOLATHE - materials = list ("$metal" = 20, "$glass" = 10) + materials = list (MAT_METAL = 20, MAT_GLASS = 10) build_path = /obj/item/device/radio/beacon category = list("Bluespace") \ No newline at end of file diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 7318429f7e7..416f901c455 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -8,7 +8,7 @@ id = "aicore" req_tech = list("programming" = 4, "biotech" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/aicore category = list("Computer Boards") @@ -18,7 +18,7 @@ id = "aifixer" req_tech = list("programming" = 3, "biotech" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/aifixer category = list("Computer Boards") @@ -28,7 +28,7 @@ id = "aiupload" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/aiupload category = list("Computer Boards") @@ -38,7 +38,7 @@ id = "atmosalerts" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/atmos_alert category = list("Computer Boards") @@ -48,7 +48,7 @@ id = "air_management" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/air_management category = list("Computer Boards") @@ -58,7 +58,7 @@ id = "seccamera" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/camera category = list("Computer Boards") @@ -68,7 +68,7 @@ id = "clonecontrol" req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/cloning category = list("Computer Boards") @@ -78,7 +78,7 @@ id = "comconsole" req_tech = list("programming" = 2, "magnets" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/communications category = list("Computer Boards") @@ -88,7 +88,7 @@ id = "crewconsole" req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/crew category = list("Computer Boards") @@ -98,7 +98,7 @@ id = "borgupload" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/borgupload category = list("Computer Boards") @@ -108,7 +108,7 @@ id = "scan_console" req_tech = list("programming" = 2, "biotech" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/scan_consolenew category = list("Computer Boards") @@ -118,7 +118,7 @@ id = "dronecontrol" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/drone_control category = list("Computer Boards") @@ -128,7 +128,7 @@ id = "mechacontrol" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha_control category = list("Computer Boards") @@ -138,7 +138,7 @@ id = "idcardconsole" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/card category = list("Computer Boards") @@ -148,7 +148,7 @@ id = "mechapower" req_tech = list("programming" = 2, "powerstorage" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mech_bay_power_console category = list("Computer Boards") @@ -158,7 +158,7 @@ id = "med_data" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/med_data category = list("Computer Boards") @@ -168,7 +168,7 @@ id = "message_monitor" req_tech = list("programming" = 5) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/message_monitor category = list("Computer Boards") @@ -178,7 +178,7 @@ id = "operating" req_tech = list("programming" = 2, "biotech" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/operating category = list("Computer Boards") @@ -188,7 +188,7 @@ id = "powermonitor" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/powermonitor category = list("Computer Boards") @@ -198,7 +198,7 @@ id = "prisonmanage" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/prisoner category = list("Computer Boards") @@ -208,7 +208,7 @@ id = "rdconsole" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/rdconsole category = list("Computer Boards") @@ -218,7 +218,7 @@ id = "rdservercontrol" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/rdservercontrol category = list("Computer Boards") @@ -228,7 +228,7 @@ id = "robocontrol" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/robotics category = list("Computer Boards") @@ -238,7 +238,7 @@ id = "secdata" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/secure_data category = list("Computer Boards") @@ -248,7 +248,7 @@ id = "solarcontrol" req_tech = list("programming" = 2, "powerstorage" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/solar_control category = list("Computer Boards") @@ -258,7 +258,7 @@ id = "spacepodc" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pod_locater category = list("Computer Boards") @@ -268,7 +268,7 @@ id = "ordercomp" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/ordercomp category = list("Computer Boards") @@ -278,7 +278,7 @@ id = "supplycomp" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/supplycomp category = list("Computer Boards") @@ -288,7 +288,7 @@ id = "comm_monitor" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/comm_monitor category = list("Computer Boards") @@ -298,7 +298,7 @@ id = "comm_server" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/comm_server category = list("Computer Boards") @@ -308,7 +308,7 @@ id = "comm_traffic" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/comm_traffic category = list("Computer Boards") @@ -318,7 +318,7 @@ id = "telesci_console" req_tech = list("programming" = 3, "bluespace" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telesci_console category = list("Computer Boards") @@ -328,7 +328,7 @@ id = "teleconsole" req_tech = list("programming" = 3, "bluespace" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/teleporter category = list("Computer Boards") @@ -338,7 +338,7 @@ datum/design/GAC id = "GAC" req_tech = list("programming" = 3, "magnets" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/air_management datum/design/tank_control @@ -347,7 +347,7 @@ datum/design/tank_control id = "tankcontrol" req_tech = list("programming" = 3, "magnets" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/large_tank_control datum/design/AAC @@ -356,5 +356,5 @@ datum/design/AAC id = "AAC" req_tech = list("programming" = 4, "magnets" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/atmos_automation diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index ab78834a877..9cdefac2cb6 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -7,7 +7,7 @@ id = "health_hud" req_tech = list("biotech" = 2, "magnets" = 3) build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) + materials = list(MAT_METAL = 50, MAT_GLASS = 50) build_path = /obj/item/clothing/glasses/hud/health category = list("Equipment") @@ -17,7 +17,7 @@ id = "magboots" req_tech = list("materials" = 4, "magnets" = 4, "engineering" = 5) build_type = PROTOLATHE - materials = list("$metal" = 4500, "$silver" = 1500, "$gold" = 2500) + materials = list(MAT_METAL = 4500, MAT_SILVER = 1500, MAT_GOLD = 2500) build_path = /obj/item/clothing/shoes/magboots category = list("Equipment") @@ -27,7 +27,7 @@ id = "night_vision_goggles" req_tech = list("magnets" = 4) build_type = PROTOLATHE - materials = list("$metal" = 100, "$glass" = 100, "$uranium" = 1000) + materials = list(MAT_METAL = 100, MAT_GLASS = 100, MAT_URANIUM = 1000) build_path = /obj/item/clothing/glasses/night category = list("Equipment") @@ -37,7 +37,7 @@ id = "health_hud_night" req_tech = list("biotech" = 4, "magnets" = 5) build_type = PROTOLATHE - materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$silver" = 250) + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 1000, MAT_SILVER = 250) build_path = /obj/item/clothing/glasses/hud/health/night category = list("Equipment") @@ -47,7 +47,7 @@ id = "security_hud_night" req_tech = list("magnets" = 5, "combat" = 4) build_type = PROTOLATHE - materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$gold" = 350) + materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 1000, MAT_GOLD = 350) build_path = /obj/item/clothing/glasses/hud/security/night category = list("Equipment") @@ -57,7 +57,7 @@ id = "nvgmesons" req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4) build_type = PROTOLATHE - materials = list("$metal" = 300, "$glass" = 400, "$plasma" = 250, "$uranium" = 1000) + materials = list(MAT_METAL = 300, MAT_GLASS = 400, MAT_PLASMA = 250, MAT_URANIUM = 1000) build_path = /obj/item/clothing/glasses/meson/night category = list("Equipment") @@ -67,7 +67,7 @@ id = "mesons" req_tech = list("materials" = 3, "magnets" = 3, "engineering" = 3) build_type = PROTOLATHE - materials = list("$metal" = 200, "$glass" = 300, "$plasma" = 100) + materials = list(MAT_METAL = 200, MAT_GLASS = 300, MAT_PLASMA = 100) build_path = /obj/item/clothing/glasses/meson category = list("Equipment") @@ -77,7 +77,7 @@ id = "security_hud" req_tech = list("magnets" = 3, "combat" = 2) build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) + materials = list(MAT_METAL = 50, MAT_GLASS = 50) build_path = /obj/item/clothing/glasses/hud/security category = list("Equipment") @@ -87,7 +87,7 @@ id = "air_horn" req_tech = list("materials" = 2, "engineering" = 2) build_type = PROTOLATHE - materials = list("$metal" = 4000, "$bananium" = 1000) + materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000) build_path = /obj/item/weapon/bikehorn/airhorn category = list("Equipment") @@ -97,7 +97,7 @@ id = "weldingmask" req_tech = list("materials" = 2, "engineering" = 2) build_type = PROTOLATHE - materials = list("$metal" = 4000, "$glass" = 1000) + materials = list(MAT_METAL = 4000, MAT_GLASS = 1000) build_path = /obj/item/clothing/mask/gas/welding category = list("Equipment") @@ -107,7 +107,7 @@ id = "detectivescanner" req_tech = list("biotech" = 2, "magnets" = 4) build_type = PROTOLATHE - materials = list("$metal" = 6000, "$glass" = 2000) + materials = list(MAT_METAL = 6000, MAT_GLASS = 2000) build_path = /obj/item/device/detective_scanner locked = 1 //no validhunting scientists. category = list("Equipment") \ No newline at end of file diff --git a/code/modules/research/designs/janitorial_designs.dm b/code/modules/research/designs/janitorial_designs.dm index 3d81f8614ef..76a469d04e6 100644 --- a/code/modules/research/designs/janitorial_designs.dm +++ b/code/modules/research/designs/janitorial_designs.dm @@ -7,7 +7,7 @@ id = "advmop" req_tech = list("materials" = 4, "engineering" = 3) build_type = PROTOLATHE - materials = list("$metal" = 2500, "$glass" = 200) + materials = list(MAT_METAL = 2500, MAT_GLASS = 200) build_path = /obj/item/weapon/mop/advanced category = list("Janitorial") @@ -17,16 +17,16 @@ id = "holosign" req_tech = list("magnets" = 3, "powerstorage" = 2) build_type = PROTOLATHE - materials = list("$metal" = 2000, "$glass" = 1000) + materials = list(MAT_METAL = 2000, MAT_GLASS = 1000) build_path = /obj/item/weapon/holosign_creator category = list("Janitorial") - + /datum/design/light_replacer name = "Light Replacer" desc = "A device to automatically replace lights. Refill with working lightbulbs." id = "light_replacer" req_tech = list("magnets" = 3, "materials" = 4) build_type = PROTOLATHE - materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000) + materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000) build_path = /obj/item/device/lightreplacer category = list("Janitorial") \ No newline at end of file diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index f7c2252dbd9..7a2e7046de1 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -8,7 +8,7 @@ id = "thermomachine" req_tech = list("programming" = 3, "plasmatech" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/thermomachine category = list ("Engineering Machinery") @@ -18,7 +18,7 @@ id = "smes" req_tech = list("programming" = 4, "power" = 5, "engineering" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/smes category = list ("Engineering Machinery") @@ -28,7 +28,7 @@ id = "emitter" req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 5) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/emitter category = list ("Engineering Machinery") @@ -38,7 +38,7 @@ id = "telepad" req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telesci_pad category = list ("Teleportation Machinery") @@ -48,7 +48,7 @@ id = "tele_hub" req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/teleporter_hub category = list ("Teleportation Machinery") @@ -58,7 +58,7 @@ id = "tele_station" req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/teleporter_station category = list ("Teleportation Machinery") @@ -68,7 +68,7 @@ id = "bodyscanner" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/bodyscanner category = list("Medical Machinery") @@ -78,7 +78,7 @@ id = "bodyscanner_console" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/bodyscanner_console category = list("Medical Machinery") @@ -88,7 +88,7 @@ id = "clonepod" req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/clonepod category = list("Medical Machinery") @@ -98,7 +98,7 @@ id = "clonescanner" req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/clonescanner category = list("Medical Machinery") @@ -108,7 +108,7 @@ id = "cryotube" req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/cryo_tube category = list("Medical Machinery") @@ -118,7 +118,7 @@ id = "chem_dispenser" req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/chem_dispenser category = list("Medical Machinery") @@ -128,7 +128,7 @@ id = "chem_heater" req_tech = list("engineering" = 2, "materials" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/chem_heater category = list ("Medical Machinery") @@ -138,7 +138,7 @@ id = "sleeper" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/sleeper category = list("Medical Machinery") @@ -148,7 +148,7 @@ id = "sleeper_console" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/sleep_console category = list("Medical Machinery") @@ -158,7 +158,7 @@ id = "biogenerator" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/biogenerator category = list ("Hydroponics Machinery") @@ -168,7 +168,7 @@ id = "hydro_tray" req_tech = list("programming" = 1, "biotech" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/hydroponics category = list ("Hydroponics Machinery") @@ -178,7 +178,7 @@ id = "autolathe" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/autolathe category = list("Research Machinery") @@ -188,7 +188,7 @@ id = "circuit_imprinter" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/circuit_imprinter category = list("Research Machinery") @@ -198,7 +198,7 @@ id = "cyborgrecharger" req_tech = list("powerstorage" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/cyborgrecharger category = list("Research Machinery") @@ -208,7 +208,7 @@ id = "destructive_analyzer" req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/destructive_analyzer category = list("Research Machinery") @@ -218,7 +218,7 @@ id = "mechfab" req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mechfab category = list("Research Machinery") @@ -228,7 +228,7 @@ id = "mech_recharger" req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mech_recharger category = list("Research Machinery") @@ -238,7 +238,7 @@ id = "protolathe" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/protolathe category = list("Research Machinery") @@ -248,7 +248,7 @@ id = "rdserver" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/rdserver category = list("Research Machinery") @@ -258,7 +258,7 @@ id = "gibber" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/gibber category = list ("Misc. Machinery") @@ -268,7 +268,7 @@ id = "smartfridge" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/smartfridge category = list ("Misc. Machinery") @@ -278,7 +278,7 @@ id = "monkey_recycler" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/monkey_recycler category = list ("Misc. Machinery") @@ -288,7 +288,7 @@ id = "seed_extractor" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/seed_extractor category = list ("Misc. Machinery") @@ -298,7 +298,7 @@ id = "processor" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/processor category = list ("Misc. Machinery") @@ -308,7 +308,7 @@ id = "recycler" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/recycler category = list ("Misc. Machinery") @@ -318,7 +318,7 @@ id = "holopad" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/holopad category = list ("Misc. Machinery") @@ -328,7 +328,7 @@ id = "arcademachinebattle" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/arcade/battle category = list("Misc. Machinery") @@ -338,7 +338,7 @@ id = "microwave" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/microwave category = list("Misc. Machinery") @@ -348,7 +348,7 @@ id = "oven" req_tech = list("programming" = 1, "plasmatech" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/oven category = list("Misc. Machinery") @@ -358,7 +358,7 @@ id = "grill" req_tech = list("programming" = 1, "plasmatech" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/grill category = list("Misc. Machinery") @@ -368,7 +368,7 @@ id = "candymaker" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/candy_maker category = list("Misc. Machinery") @@ -378,7 +378,7 @@ id = "arcademachineonion" req_tech = list("programming" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/arcade/orion_trail category = list("Misc. Machinery") @@ -388,7 +388,7 @@ id = "selunload" req_tech = list("programming" = 5) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) + materials = list(MAT_GLASS = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/programmable category = list("Misc. Machinery") @@ -398,7 +398,7 @@ id = "vendor" req_tech = list("programming" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/vendor category = list("Misc. Machinery") @@ -408,7 +408,7 @@ id = "pod" req_tech = list("programming" = 2,"engineering" = 4) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20) + materials = list(MAT_GLASS = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pod category = list("Misc. Machinery") @@ -418,7 +418,7 @@ id = "ore_redemption" req_tech = list("programming" = 1, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass"=1000, "sacid"=20) + materials = list(MAT_GLASS=1000, "sacid"=20) build_path = /obj/item/weapon/circuitboard/ore_redemption category = list ("Misc. Machinery") @@ -428,6 +428,6 @@ id = "mining_equipment_vendor" req_tech = list("programming" = 1, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass"=1000, "sacid"=20) + materials = list(MAT_GLASS=1000, "sacid"=20) build_path = /obj/item/weapon/circuitboard/mining_equipment_vendor category = list ("Misc. Machinery") \ No newline at end of file diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index f1f58a0ca0e..842fde52857 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -8,7 +8,7 @@ id = "ripley_main" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/ripley/main category = list("Exosuit Modules") @@ -18,7 +18,7 @@ id = "ripley_peri" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals category = list("Exosuit Modules") @@ -29,7 +29,7 @@ id = "odysseus_main" req_tech = list("programming" = 3,"biotech" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main category = list("Exosuit Modules") @@ -39,7 +39,7 @@ id = "odysseus_peri" req_tech = list("programming" = 3,"biotech" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals category = list("Exosuit Modules") @@ -50,7 +50,7 @@ id = "gygax_main" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/gygax/main category = list("Exosuit Modules") @@ -60,7 +60,7 @@ id = "gygax_peri" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals category = list("Exosuit Modules") @@ -70,7 +70,7 @@ id = "gygax_targ" req_tech = list("programming" = 4, "combat" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting category = list("Exosuit Modules") @@ -81,7 +81,7 @@ id = "durand_main" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/durand/main category = list("Exosuit Modules") @@ -91,7 +91,7 @@ id = "durand_peri" req_tech = list("programming" = 4) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals category = list("Exosuit Modules") @@ -101,7 +101,7 @@ id = "durand_targ" req_tech = list("programming" = 4, "combat" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting category = list("Exosuit Modules") @@ -112,7 +112,7 @@ id = "phazon_main" req_tech = list("programming" = 5, "materials" = 7, "powerstorage" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/phazon/main category = list("Exosuit Modules") @@ -122,7 +122,7 @@ id = "phazon_peri" req_tech = list("programming" = 5, "bluespace" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/phazon/peripherals category = list("Exosuit Modules") @@ -132,7 +132,7 @@ id = "phazon_targ" req_tech = list("programming" = 5, "magnets" = 6) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/phazon/targeting category = list("Exosuit Modules") @@ -143,7 +143,7 @@ id = "honker_main" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/honker/main category = list("Exosuit Modules") @@ -153,7 +153,7 @@ id = "honker_peri" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/honker/peripherals category = list("Exosuit Modules") @@ -163,6 +163,6 @@ id = "honker_targ" req_tech = list("programming" = 3) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting category = list("Exosuit Modules") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 2ae7d1216d3..62acc4f884b 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -7,7 +7,7 @@ id = "borg_suit" build_type = MECHFAB build_path = /obj/item/robot_parts/robot_suit - materials = list("$metal"=15000) + materials = list(MAT_METAL=15000) construction_time = 500 category = list("Cyborg") @@ -16,7 +16,7 @@ id = "borg_chest" build_type = MECHFAB build_path = /obj/item/robot_parts/chest - materials = list("$metal"=40000) + materials = list(MAT_METAL=40000) construction_time = 350 category = list("Cyborg") @@ -25,7 +25,7 @@ id = "borg_head" build_type = MECHFAB build_path = /obj/item/robot_parts/head - materials = list("$metal"=5000) + materials = list(MAT_METAL=5000) construction_time = 350 category = list("Cyborg") @@ -34,7 +34,7 @@ id = "borg_l_arm" build_type = MECHFAB build_path = /obj/item/robot_parts/l_arm - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 200 category = list("Cyborg") @@ -43,7 +43,7 @@ id = "borg_r_arm" build_type = MECHFAB build_path = /obj/item/robot_parts/r_arm - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 200 category = list("Cyborg") @@ -52,7 +52,7 @@ id = "borg_l_leg" build_type = MECHFAB build_path = /obj/item/robot_parts/l_leg - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 200 category = list("Cyborg") @@ -61,7 +61,7 @@ id = "borg_r_leg" build_type = MECHFAB build_path = /obj/item/robot_parts/r_leg - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 200 category = list("Cyborg") @@ -71,7 +71,7 @@ id = "borg_binary_communication" build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/binary_communication_device - materials = list("$metal"=2500, "$glass"=1000) + materials = list(MAT_METAL=2500, MAT_GLASS=1000) construction_time = 200 category = list("Cyborg Repair") @@ -80,7 +80,7 @@ id = "borg_radio" build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/radio - materials = list("$metal"=2500, "$glass"=1000) + materials = list(MAT_METAL=2500, MAT_GLASS=1000) construction_time = 200 category = list("Cyborg Repair") @@ -89,7 +89,7 @@ id = "borg_actuator" build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/actuator - materials = list("$metal"=3500) + materials = list(MAT_METAL=3500) construction_time = 200 category = list("Cyborg Repair") @@ -98,7 +98,7 @@ id = "borg_diagnosis_unit" build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/diagnosis_unit - materials = list("$metal"=3500) + materials = list(MAT_METAL=3500) construction_time = 200 category = list("Cyborg Repair") @@ -107,7 +107,7 @@ id = "borg_camera" build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/camera - materials = list("$metal"=2500, "$glass"=1000) + materials = list(MAT_METAL=2500, MAT_GLASS=1000) construction_time = 200 category = list("Cyborg Repair") @@ -116,7 +116,7 @@ id = "borg_armor" build_type = MECHFAB build_path = /obj/item/robot_parts/robot_component/armour - materials = list("$metal"=5000) + materials = list(MAT_METAL=5000) construction_time = 200 category = list("Cyborg Repair") @@ -126,7 +126,7 @@ id = "ripley_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/ripley - materials = list("$metal"=20000) + materials = list(MAT_METAL=20000) construction_time = 100 category = list("Ripley") @@ -136,7 +136,7 @@ id = "firefighter_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/firefighter - materials = list("$metal"=20000) + materials = list(MAT_METAL=20000) construction_time = 100 category = list("Firefighter") @@ -145,7 +145,7 @@ id = "ripley_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_torso - materials = list("$metal"=20000, "$glass"=7500) + materials = list(MAT_METAL=20000, MAT_GLASS=7500) construction_time = 200 category = list("Ripley","Firefighter") @@ -154,7 +154,7 @@ id = "ripley_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_left_arm - materials = list("$metal"=15000) + materials = list(MAT_METAL=15000) construction_time = 150 category = list("Ripley","Firefighter") @@ -163,7 +163,7 @@ id = "ripley_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_right_arm - materials = list("$metal"=15000) + materials = list(MAT_METAL=15000) construction_time = 150 category = list("Ripley","Firefighter") @@ -172,7 +172,7 @@ id = "ripley_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_left_leg - materials = list("$metal"=15000) + materials = list(MAT_METAL=15000) construction_time = 150 category = list("Ripley","Firefighter") @@ -181,7 +181,7 @@ id = "ripley_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_right_leg - materials = list("$metal"=15000) + materials = list(MAT_METAL=15000) construction_time = 150 category = list("Ripley","Firefighter") @@ -191,7 +191,7 @@ id = "odysseus_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/odysseus - materials = list("$metal"=20000) + materials = list(MAT_METAL=20000) construction_time = 100 category = list("Odysseus") @@ -200,7 +200,7 @@ id = "odysseus_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_torso - materials = list("$metal"=12000) + materials = list(MAT_METAL=12000) construction_time = 180 category = list("Odysseus") @@ -209,7 +209,7 @@ id = "odysseus_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_head - materials = list("$metal"=6000,"$glass"=10000) + materials = list(MAT_METAL=6000,MAT_GLASS=10000) construction_time = 100 category = list("Odysseus") @@ -218,7 +218,7 @@ id = "odysseus_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_left_arm - materials = list("$metal"=6000) + materials = list(MAT_METAL=6000) construction_time = 120 category = list("Odysseus") @@ -227,7 +227,7 @@ id = "odysseus_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_right_arm - materials = list("$metal"=6000) + materials = list(MAT_METAL=6000) construction_time = 120 category = list("Odysseus") @@ -236,7 +236,7 @@ id = "odysseus_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_left_leg - materials = list("$metal"=7000) + materials = list(MAT_METAL=7000) construction_time = 130 category = list("Odysseus") @@ -245,7 +245,7 @@ id = "odysseus_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_right_leg - materials = list("$metal"=7000) + materials = list(MAT_METAL=7000) construction_time = 130 category = list("Odysseus") @@ -255,7 +255,7 @@ id = "gygax_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/gygax - materials = list("$metal"=20000) + materials = list(MAT_METAL=20000) construction_time = 100 category = list("Gygax") @@ -264,7 +264,7 @@ id = "gygax_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_torso - materials = list("$metal"=20000,"$glass"=10000,"$diamond"=2000) + materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_DIAMOND=2000) construction_time = 300 category = list("Gygax") @@ -273,7 +273,7 @@ id = "gygax_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_head - materials = list("$metal"=10000,"$glass"=5000, "$diamond"=2000) + materials = list(MAT_METAL=10000,MAT_GLASS=5000, MAT_DIAMOND=2000) construction_time = 200 category = list("Gygax") @@ -282,7 +282,7 @@ id = "gygax_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_left_arm - materials = list("$metal"=15000, "$diamond"=1000) + materials = list(MAT_METAL=15000, MAT_DIAMOND=1000) construction_time = 200 category = list("Gygax") @@ -291,7 +291,7 @@ id = "gygax_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_right_arm - materials = list("$metal"=15000, "$diamond"=1000) + materials = list(MAT_METAL=15000, MAT_DIAMOND=1000) construction_time = 200 category = list("Gygax") @@ -300,7 +300,7 @@ id = "gygax_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_left_leg - materials = list("$metal"=15000, "$diamond"=2000) + materials = list(MAT_METAL=15000, MAT_DIAMOND=2000) construction_time = 200 category = list("Gygax") @@ -309,7 +309,7 @@ id = "gygax_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_right_leg - materials = list("$metal"=15000, "$diamond"=2000) + materials = list(MAT_METAL=15000, MAT_DIAMOND=2000) construction_time = 200 category = list("Gygax") @@ -318,7 +318,7 @@ id = "gygax_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/gygax_armour - materials = list("$metal"=25000,"$diamond"=10000) + materials = list(MAT_METAL=25000,MAT_DIAMOND=10000) construction_time = 600 category = list("Gygax") @@ -328,7 +328,7 @@ id = "durand_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/durand - materials = list("$metal"=25000) + materials = list(MAT_METAL=25000) construction_time = 100 category = list("Durand") @@ -337,7 +337,7 @@ id = "durand_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_torso - materials = list("$metal"=25000,"$glass"=10000,"$silver"=10000) + materials = list(MAT_METAL=25000,MAT_GLASS=10000,MAT_SILVER=10000) construction_time = 300 category = list("Durand") @@ -346,7 +346,7 @@ id = "durand_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_head - materials = list("$metal"=10000,"$glass"=15000,"$silver"=2000) + materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_SILVER=2000) construction_time = 200 category = list("Durand") @@ -355,7 +355,7 @@ id = "durand_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_left_arm - materials = list("$metal"=10000,"$silver"=4000) + materials = list(MAT_METAL=10000,MAT_SILVER=4000) construction_time = 200 category = list("Durand") @@ -364,7 +364,7 @@ id = "durand_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_right_arm - materials = list("$metal"=10000,"$silver"=4000) + materials = list(MAT_METAL=10000,MAT_SILVER=4000) construction_time = 200 category = list("Durand") @@ -373,7 +373,7 @@ id = "durand_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_left_leg - materials = list("$metal"=15000,"$silver"=4000) + materials = list(MAT_METAL=15000,MAT_SILVER=4000) construction_time = 200 category = list("Durand") @@ -382,7 +382,7 @@ id = "durand_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_right_leg - materials = list("$metal"=15000,"$silver"=4000) + materials = list(MAT_METAL=15000,MAT_SILVER=4000) construction_time = 200 category = list("Durand") @@ -391,7 +391,7 @@ id = "durand_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/durand_armor - materials = list("$metal"=50000,"$uranium"=30000) + materials = list(MAT_METAL=50000,MAT_URANIUM=30000) construction_time = 600 category = list("Durand") @@ -401,7 +401,7 @@ id = "honk_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/honker - materials = list("$metal"=20000) + materials = list(MAT_METAL=20000) construction_time = 100 category = list("H.O.N.K") @@ -410,7 +410,7 @@ id = "honk_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_torso - materials = list("$metal"=20000,"$glass"=10000,"$bananium"=10000) + materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_BANANIUM=10000) construction_time = 300 category = list("H.O.N.K") @@ -419,7 +419,7 @@ id = "honk_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_head - materials = list("$metal"=10000,"$glass"=5000,"$bananium"=5000) + materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_BANANIUM=5000) construction_time = 200 category = list("H.O.N.K") @@ -428,7 +428,7 @@ id = "honk_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_left_arm - materials = list("$metal"=15000,"$bananium"=5000) + materials = list(MAT_METAL=15000,MAT_BANANIUM=5000) construction_time = 200 category = list("H.O.N.K") @@ -437,7 +437,7 @@ id = "honk_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_arm - materials = list("$metal"=15000,"$bananium"=5000) + materials = list(MAT_METAL=15000,MAT_BANANIUM=5000) construction_time = 200 category = list("H.O.N.K") @@ -446,7 +446,7 @@ id = "honk_left_leg" build_type = MECHFAB build_path =/obj/item/mecha_parts/part/honker_left_leg - materials = list("$metal"=20000,"$bananium"=5000) + materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) construction_time = 200 category = list("H.O.N.K") @@ -455,7 +455,7 @@ id = "honk_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_leg - materials = list("$metal"=20000,"$bananium"=5000) + materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) construction_time = 200 category = list("H.O.N.K") @@ -465,7 +465,7 @@ id = "phazon_chassis" build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/phazon - materials = list("$metal"=20000) + materials = list(MAT_METAL=20000) construction_time = 100 category = list("Phazon") @@ -474,7 +474,7 @@ id = "phazon_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_torso - materials = list("$metal"=35000,"$glass"=10000,"$plasma"=20000) + materials = list(MAT_METAL=35000,MAT_GLASS=10000,MAT_PLASMA=20000) construction_time = 300 category = list("Phazon") @@ -483,7 +483,7 @@ id = "phazon_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_head - materials = list("$metal"=15000,"$glass"=5000,"$plasma"=10000) + materials = list(MAT_METAL=15000,MAT_GLASS=5000,MAT_PLASMA=10000) construction_time = 200 category = list("Phazon") @@ -492,7 +492,7 @@ id = "phazon_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_left_arm - materials = list("$metal"=20000,"$plasma"=10000) + materials = list(MAT_METAL=20000,MAT_PLASMA=10000) construction_time = 200 category = list("Phazon") @@ -501,7 +501,7 @@ id = "phazon_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_right_arm - materials = list("$metal"=20000,"$plasma"=10000) + materials = list(MAT_METAL=20000,MAT_PLASMA=10000) construction_time = 200 category = list("Phazon") @@ -510,7 +510,7 @@ id = "phazon_left_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_left_leg - materials = list("$metal"=20000,"$plasma"=10000) + materials = list(MAT_METAL=20000,MAT_PLASMA=10000) construction_time = 200 category = list("Phazon") @@ -519,7 +519,7 @@ id = "phazon_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_right_leg - materials = list("$metal"=20000,"$plasma"=10000) + materials = list(MAT_METAL=20000,MAT_PLASMA=10000) construction_time = 200 category = list("Phazon") @@ -528,7 +528,7 @@ id = "phazon_armor" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/phazon_armor - materials = list("$metal"=45000,"$plasma"=30000) + materials = list(MAT_METAL=45000,MAT_PLASMA=30000) construction_time = 300 category = list("Phazon") @@ -538,7 +538,7 @@ id = "mech_cable_layer" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/tool/cable_layer - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -547,7 +547,7 @@ id = "mech_drill" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -556,7 +556,7 @@ id = "mech_extinguisher" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/tool/extinguisher - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -565,7 +565,7 @@ id = "mech_hydraulic_clamp" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -574,7 +574,7 @@ id = "mech_sleeper" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper - materials = list("$metal"=5000,"$glass"=10000) + materials = list(MAT_METAL=5000,MAT_GLASS=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -583,7 +583,7 @@ id = "mech_syringe_gun" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun - materials = list("$metal"=3000,"$glass"=2000) + materials = list(MAT_METAL=3000,MAT_GLASS=2000) construction_time = 200 category = list("Exosuit Equipment") @@ -592,7 +592,7 @@ id = "mech_generator" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/generator - materials = list("$metal"=10000,"$glass"=1000,"$silver"=500) + materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=500) construction_time = 100 category = list("Exosuit Equipment") @@ -601,7 +601,7 @@ id = "mech_taser" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -610,7 +610,7 @@ id = "mech_lmg" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -619,7 +619,7 @@ id = "mech_banana_mortar" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar - materials = list("$metal"=20000,"$bananium"=5000) + materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) construction_time = 300 category = list("Exosuit Equipment") @@ -628,7 +628,7 @@ id = "mech_honker" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker - materials = list("$metal"=20000,"$bananium"=10000) + materials = list(MAT_METAL=20000,MAT_BANANIUM=10000) construction_time = 500 category = list("Exosuit Equipment") @@ -637,7 +637,7 @@ id = "mech_mousetrap_mortar" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar - materials = list("$metal"=20000,"$bananium"=5000) + materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) construction_time = 300 category = list("Exosuit Equipment") @@ -649,7 +649,7 @@ build_type = MECHFAB req_tech = list("materials" = 4, "engineering" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill - materials = list("$metal"=10000,"$diamond"=6500) + materials = list(MAT_METAL=10000,MAT_DIAMOND=6500) construction_time = 100 category = list("Exosuit Equipment") @@ -658,7 +658,7 @@ id = "mech_mscanner" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/tool/mining_scanner - materials = list("$metal"=5000,"$glass"=2500) + materials = list(MAT_METAL=5000,MAT_GLASS=2500) construction_time = 50 category = list("Exosuit Equipment") @@ -669,7 +669,7 @@ build_type = MECHFAB req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear - materials = list("$metal"=10000,"$glass"=1000,"$silver"=500) + materials = list(MAT_METAL=10000,MAT_GLASS=1000,MAT_SILVER=500) construction_time = 100 category = list("Exosuit Equipment") @@ -680,7 +680,7 @@ build_type = MECHFAB req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -691,7 +691,7 @@ build_type = MECHFAB req_tech = list("bluespace" = 3, "magnets" = 2) build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -702,7 +702,7 @@ build_type = MECHFAB req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd - materials = list("$metal"=30000,"$gold"=20000,"$plasma"=25000,"$silver"=20000) + materials = list(MAT_METAL=30000,MAT_GOLD=20000,MAT_PLASMA=25000,MAT_SILVER=20000) construction_time = 1200 category = list("Exosuit Equipment") @@ -713,7 +713,7 @@ build_type = MECHFAB req_tech = list("materials" = 5, "combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster - materials = list("$metal"=20000,"$silver"=5000) + materials = list(MAT_METAL=20000,MAT_SILVER=5000) construction_time = 100 category = list("Exosuit Equipment") @@ -724,7 +724,7 @@ build_type = MECHFAB req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - materials = list("$metal"=20000,"$gold"=5000) + materials = list(MAT_METAL=20000,MAT_GOLD=5000) construction_time = 100 category = list("Exosuit Equipment") @@ -735,7 +735,7 @@ build_type = MECHFAB req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid - materials = list("$metal"=10000,"$glass"=5000,"$gold"=1000,"$silver"=2000) + materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000) construction_time = 100 category = list("Exosuit Equipment") @@ -746,7 +746,7 @@ build_type = MECHFAB req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang - materials = list("$metal"=20000,"$gold"=10000,"$uranium"=10000) + materials = list(MAT_METAL=20000,MAT_GOLD=10000,MAT_URANIUM=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -757,7 +757,7 @@ build_type = MECHFAB req_tech = list("combat" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -768,7 +768,7 @@ build_type = MECHFAB req_tech = list("bluespace" = 10, "magnets" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/teleporter - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -779,7 +779,7 @@ build_type = MECHFAB req_tech = list("magnets" = 4, "powerstorage" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - materials = list("$metal"=10000,"$glass"=2000,"$gold"=2000,"$silver"=3000) + materials = list(MAT_METAL=10000,MAT_GLASS=2000,MAT_GOLD=2000,MAT_SILVER=3000) construction_time = 100 category = list("Exosuit Equipment") @@ -791,7 +791,7 @@ build_type = MECHFAB req_tech = list("combat" = 4, "magnets" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -802,7 +802,7 @@ build_type = MECHFAB req_tech = list("combat" = 3, "magnets" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -813,7 +813,7 @@ build_type = MECHFAB req_tech = list("combat" = 5, "materials" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -824,7 +824,7 @@ build_type = MECHFAB req_tech = list("combat" = 4) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -835,7 +835,7 @@ build_type = MECHFAB req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion - materials = list("$metal"=20000,"$silver"=6000,"$uranium"=2000) + materials = list(MAT_METAL=20000,MAT_SILVER=6000,MAT_URANIUM=2000) construction_time = 100 category = list("Exosuit Equipment") @@ -846,7 +846,7 @@ build_type = MECHFAB req_tech = list("combat" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang - materials = list("$metal"=22000,"$gold"=6000,"$silver"=8000) + materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) construction_time = 100 category = list("Exosuit Equipment") @@ -857,7 +857,7 @@ build_type = MECHFAB req_tech = list("combat" = 6, "materials" = 6) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack - materials = list("$metal"=22000,"$gold"=6000,"$silver"=8000) + materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) construction_time = 100 category = list("Exosuit Equipment") @@ -868,7 +868,7 @@ build_type = MECHFAB req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3, "combat" = 1, "plasma" = 2) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma - materials = list("$metal"=1500, "$glass"=500, "$plasma"=200) + materials = list(MAT_METAL=1500, MAT_GLASS=500, MAT_PLASMA=200) construction_time = 100 category = list("Exosuit Equipment") @@ -880,7 +880,7 @@ build_type = MECHFAB req_tech = list("combat" = 4, "syndicate" = 3) build_path = /obj/item/borg/upgrade/syndicate - materials = list("$metal"=10000,"$glass"=15000,"$diamond" = 10000) + materials = list(MAT_METAL=10000,MAT_GLASS=15000,MAT_DIAMOND = 10000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -890,7 +890,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/jetpack req_tech = list("engineering" = 4, "power" = 4) - materials = list("$metal"=10000, "$plasma"=5000, "$uranium" = 6000) + materials = list(MAT_METAL=10000, MAT_PLASMA=5000, MAT_URANIUM = 6000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -900,7 +900,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/disablercooler req_tech = list("combat" = 5, "power" = 4) - materials = list("$metal"=80000 , "$glass"=6000 , "$gold"= 2000, "$diamond" = 500) + materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_GOLD= 2000, MAT_DIAMOND = 500) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -909,7 +909,7 @@ id = "borg_upgrade_rename" build_type = MECHFAB build_path = /obj/item/borg/upgrade/rename - materials = list("$metal"=35000) + materials = list(MAT_METAL=35000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -918,7 +918,7 @@ id = "borg_upgrade_reset" build_type = MECHFAB build_path = /obj/item/borg/upgrade/reset - materials = list("$metal"=10000) + materials = list(MAT_METAL=10000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -927,7 +927,7 @@ id = "borg_upgrade_restart" build_type = MECHFAB build_path = /obj/item/borg/upgrade/restart - materials = list("$metal"=60000 , "$glass"=5000) + materials = list(MAT_METAL=60000 , MAT_GLASS=5000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -937,7 +937,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/vtec req_tech = list("engineering" = 4, "materials" = 5) - materials = list("$metal"=80000 , "$glass"=6000 , "$uranium"= 5000) + materials = list(MAT_METAL=80000 , MAT_GLASS=6000 , MAT_URANIUM= 5000) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -947,7 +947,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/ddrill req_tech = list("engineering" = 5, "materials" = 5) - materials = list("$metal"=10000, "$diamond"=3750) + materials = list(MAT_METAL=10000, MAT_DIAMOND=3750) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -957,7 +957,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/soh req_tech = list("engineering" = 5, "materials" = 5, "bluespace" = 3) - materials = list("$metal" = 10000, "$gold" = 250, "$uranium" = 500) + materials = list(MAT_METAL = 10000, MAT_GOLD = 250, MAT_URANIUM = 500) construction_time = 120 category = list("Cyborg Upgrade Modules") @@ -967,33 +967,33 @@ id = "mecha_tracking" build_type = MECHFAB build_path =/obj/item/mecha_parts/mecha_tracking - materials = list("$metal"=500) + materials = list(MAT_METAL=500) construction_time = 50 category = list("Misc") - + /datum/design/ipc_head name = "IPC Head" id = "ipc_head" build_type = MECHFAB build_path = /obj/item/organ/external/head/ipc - materials = list("$metal"=15000, "$glass"=5000) + materials = list(MAT_METAL=15000, MAT_GLASS=5000) construction_time = 350 category = list("Misc") - + /datum/design/ipc_cell name = "IPC Microbattery" id = "ipc_cell" build_type = MECHFAB build_path = /obj/item/organ/cell - materials = list("$metal"=2000, "$glass"=750) + materials = list(MAT_METAL=2000, MAT_GLASS=750) construction_time = 200 category = list("Misc") - + /datum/design/ipc_optics name = "IPC Optical Sensor" id = "ipc_optics" build_type = MECHFAB build_path = /obj/item/organ/optical_sensor - materials = list("$metal"=1000, "$glass"=2500) + materials = list(MAT_METAL=1000, MAT_GLASS=2500) construction_time = 200 category = list("Misc") \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index f38479d0c93..cf945134663 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -7,7 +7,7 @@ id = "adv_mass_spectrometer" req_tech = list("biotech" = 2, "magnets" = 4) build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) + materials = list(MAT_METAL = 30, MAT_GLASS = 20) reliability_base = 74 build_path = "/obj/item/device/mass_spectrometer/adv" category = list("Medical") @@ -18,7 +18,7 @@ id = "adv_reagent_scanner" req_tech = list("biotech" = 2, "magnets" = 4) build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) + materials = list(MAT_METAL = 30, MAT_GLASS = 20) reliability_base = 74 build_path = /obj/item/device/reagent_scanner/adv category = list("Medical") @@ -29,7 +29,7 @@ id = "splitbeaker" req_tech = list("materials" = 2) build_type = PROTOLATHE - materials = list("$metal" = 3000) + materials = list(MAT_METAL = 3000) reliability_base = 76 build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact category = list("Medical") @@ -40,7 +40,7 @@ id = "cyborg_analyzer" req_tech = list("programming" = 2, "biotech" = 2, "magnets" = 2) build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) + materials = list(MAT_METAL = 30, MAT_GLASS = 20) reliability_base = 76 build_path = /obj/item/device/robotanalyzer category = list("Medical") @@ -51,7 +51,7 @@ id = "healthanalyzer" req_tech = list("biotech" = 2, "magnets" = 2) build_type = PROTOLATHE - materials = list("$metal" = 20, "$glass" = 20) + materials = list(MAT_METAL = 20, MAT_GLASS = 20) build_path = /obj/item/device/healthanalyzer category = list("Medical") @@ -61,7 +61,7 @@ id = "healthanalyzer_upgrade" req_tech = list("biotech" = 2, "magnets" = 3) build_type = PROTOLATHE - materials = list("$metal" = 20, "$glass" = 20) + materials = list(MAT_METAL = 20, MAT_GLASS = 20) build_path = /obj/item/device/healthupgrade category = list("Medical") @@ -71,7 +71,7 @@ id = "defib" req_tech = list("materials" = 7, "biotech" = 5, "powerstorage" = 5) build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 2000, "$silver" = 1000) + materials = list(MAT_METAL = 5000, MAT_GLASS = 2000, MAT_SILVER = 1000) reliability = 76 build_path = /obj/item/weapon/defibrillator category = list("Medical") @@ -83,7 +83,7 @@ id = "sensor_device" req_tech = list("biotech" = 4, "magnets" = 3, "materials" = 3) build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) + materials = list(MAT_METAL = 30, MAT_GLASS = 20) reliability_base = 76 build_path = /obj/item/device/sensor_device category = list("Medical") @@ -94,7 +94,7 @@ id = "mmi" req_tech = list("programming" = 2, "biotech" = 3) build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 1000, "$glass" = 500) + materials = list(MAT_METAL = 1000, MAT_GLASS = 500) construction_time = 75 reliability_base = 76 build_path = /obj/item/device/mmi @@ -106,7 +106,7 @@ id = "mass_spectrometer" req_tech = list("biotech" = 2, "magnets" = 2) build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) + materials = list(MAT_METAL = 30, MAT_GLASS = 20) reliability_base = 76 build_path = /obj/item/device/mass_spectrometer category = list("Medical") @@ -117,7 +117,7 @@ id = "posibrain" req_tech = list("engineering" = 4, "materials" = 6, "bluespace" = 2, "programming" = 4) build_type = PROTOLATHE - materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$plasma" = 500, "$diamond" = 100) + materials = list(MAT_METAL = 2000, MAT_GLASS = 1000, MAT_SILVER = 1000, MAT_GOLD = 500, MAT_PLASMA = 500, MAT_DIAMOND = 100) build_path = /obj/item/device/mmi/posibrain category = list("Misc","Medical") @@ -127,7 +127,7 @@ id = "mmi_radio" req_tech = list("programming" = 2, "biotech" = 4) build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 1200, "$glass" = 500) + materials = list(MAT_METAL = 1200, MAT_GLASS = 500) construction_time = 75 reliability_base = 74 build_path = /obj/item/device/mmi/radio_enabled @@ -139,7 +139,7 @@ id = "nanopaste" req_tech = list("materials" = 4, "engineering" = 3) build_type = PROTOLATHE - materials = list("$metal" = 7000, "$glass" = 7000) + materials = list(MAT_METAL = 7000, MAT_GLASS = 7000) build_path = /obj/item/stack/nanopaste category = list("Medical") @@ -149,7 +149,7 @@ id = "reagent_scanner" req_tech = list("biotech" = 2, "magnets" = 2) build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) + materials = list(MAT_METAL = 30, MAT_GLASS = 20) reliability_base = 76 build_path = /obj/item/device/reagent_scanner category = list("Medical") @@ -160,7 +160,7 @@ id = "sflash" req_tech = list("magnets" = 3, "combat" = 2) build_type = MECHFAB - materials = list("$metal" = 750, "$glass" = 750) + materials = list(MAT_METAL = 750, MAT_GLASS = 750) construction_time = 100 reliability_base = 76 build_path = /obj/item/device/flash/synthetic @@ -172,7 +172,7 @@ id = "scalpel_laser1" req_tech = list("biotech" = 2, "materials" = 2, "magnets" = 2) build_type = PROTOLATHE - materials = list("$metal" = 12500, "$glass" = 7500) + materials = list(MAT_METAL = 12500, MAT_GLASS = 7500) build_path = /obj/item/weapon/scalpel/laser1 category = list("Medical") @@ -182,7 +182,7 @@ id = "scalpel_laser2" req_tech = list("biotech" = 3, "materials" = 4, "magnets" = 4) build_type = PROTOLATHE - materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2500) + materials = list(MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 2500) build_path = /obj/item/weapon/scalpel/laser2 category = list("Medical") @@ -192,7 +192,7 @@ id = "scalpel_laser3" req_tech = list("biotech" = 4, "materials" = 6, "magnets" = 5) build_type = PROTOLATHE - materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2000, "$gold" = 1500) + materials = list(MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 2000, MAT_GOLD = 1500) build_path = /obj/item/weapon/scalpel/laser3 category = list("Medical") @@ -202,6 +202,6 @@ id = "scalpel_manager" req_tech = list("biotech" = 4, "materials" = 7, "magnets" = 5, "programming" = 4) build_type = PROTOLATHE - materials = list ("$metal" = 12500, "$glass" = 7500, "$silver" = 1500, "$gold" = 1500, "$diamond" = 750) + materials = list (MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 1500, MAT_GOLD = 1500, MAT_DIAMOND = 750) build_path = /obj/item/weapon/scalpel/manager category = list("Medical") \ No newline at end of file diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index c78e79ca50f..32a4012926f 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -7,7 +7,7 @@ id = "drill_diamond" req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4) build_type = PROTOLATHE - materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed. + materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 3750) //Yes, a whole diamond is needed. reliability_base = 79 build_path = /obj/item/weapon/pickaxe/drill/diamonddrill category = list("Mining") @@ -18,7 +18,7 @@ id = "pick_diamond" req_tech = list("materials" = 6) build_type = PROTOLATHE - materials = list("$diamond" = 3000) + materials = list(MAT_DIAMOND = 3000) build_path = /obj/item/weapon/pickaxe/diamond category = list("Mining") @@ -28,7 +28,7 @@ id = "drill" req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2) build_type = PROTOLATHE - materials = list("$metal" = 6000, "$glass" = 1000) + materials = list(MAT_METAL = 6000, MAT_GLASS = 1000) build_path = /obj/item/weapon/pickaxe/drill category = list("Mining") @@ -38,7 +38,7 @@ id = "plasmacutter" req_tech = list("materials" = 2, "plasmatech" = 2, "engineering" = 2, "combat" = 1, "magnets" = 2) build_type = PROTOLATHE - materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500) + materials = list(MAT_METAL = 1500, MAT_GLASS = 500, MAT_GOLD = 500, MAT_PLASMA = 500) reliability_base = 79 build_path = /obj/item/weapon/gun/energy/plasmacutter category = list("Mining") @@ -49,7 +49,7 @@ id = "plasmacutter_adv" req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3, "combat" = 3, "magnets" = 3) build_type = PROTOLATHE - materials = list("$metal" = 3000, "$glass" = 1000, "$plasma" = 2000, "$gold" = 500) + materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_PLASMA = 2000, MAT_GOLD = 500) reliability_base = 79 build_path = /obj/item/weapon/gun/energy/plasmacutter/adv category = list("Mining") @@ -60,6 +60,6 @@ id = "jackhammer" req_tech = list("materials" = 6, "powerstorage" = 6, "engineering" = 5, "magnets" = 6) build_type = PROTOLATHE - materials = list("$metal" = 8000, "$glass" = 1500, "$silver" = 2000, "$diamond" = 6000) + materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_DIAMOND = 6000) build_path = /obj/item/weapon/pickaxe/drill/jackhammer category = list("Mining") diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 403e5745ca8..44aff0048d5 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -7,27 +7,27 @@ id = "design_disk" req_tech = list("programming" = 1) build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 30, "$glass" = 10) + materials = list(MAT_METAL = 30, MAT_GLASS = 10) build_path = /obj/item/weapon/disk/design_disk category = list("Miscellaneous") - + /datum/design/intellicard name = "Intellicard" desc = "Allows for the construction of an intellicard." id = "intellicard" req_tech = list("programming" = 4, "materials" = 4) build_type = PROTOLATHE - materials = list("$glass" = 1000, "$gold" = 200) + materials = list(MAT_GLASS = 1000, MAT_GOLD = 200) build_path = /obj/item/device/aicard category = list("Miscellaneous") - + /datum/design/paicard name = "Personal Artificial Intelligence Card" desc = "Allows for the construction of a pAI Card" id = "paicard" req_tech = list("programming" = 2) build_type = PROTOLATHE - materials = list("$glass" = 500, "$metal" = 500) + materials = list(MAT_GLASS = 500, MAT_METAL = 500) build_path = /obj/item/device/paicard category = list("Miscellaneous") @@ -37,7 +37,7 @@ id = "tech_disk" req_tech = list("programming" = 1) build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 30, "$glass" = 10) + materials = list(MAT_METAL = 30, MAT_GLASS = 10) build_path = /obj/item/weapon/disk/tech_disk category = list("Miscellaneous") @@ -47,6 +47,6 @@ id = "digitalcamera" req_tech = list("programming" = 2, "materials" = 2) build_type = PROTOLATHE - materials = list("$metal" = 500, "$glass" = 300) + materials = list(MAT_METAL = 500, MAT_GLASS = 300) build_path = /obj/item/device/camera/digital category = list("Miscellaneous") \ No newline at end of file diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 70be59438fa..9fb7000bf52 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -8,7 +8,7 @@ id = "basic_cell" req_tech = list("powerstorage" = 1) build_type = PROTOLATHE | AUTOLATHE | MECHFAB | PODFAB - materials = list("$metal" = 700, "$glass" = 50) + materials = list(MAT_METAL = 700, MAT_GLASS = 50) construction_time=100 build_path = /obj/item/weapon/stock_parts/cell category = list("Misc","Power") @@ -19,7 +19,7 @@ id = "high_cell" req_tech = list("powerstorage" = 2) build_type = PROTOLATHE | AUTOLATHE | MECHFAB | PODFAB - materials = list("$metal" = 700, "$glass" = 60) + materials = list(MAT_METAL = 700, MAT_GLASS = 60) construction_time=100 build_path = /obj/item/weapon/stock_parts/cell/high category = list("Misc","Power") @@ -31,7 +31,7 @@ req_tech = list("powerstorage" = 5, "materials" = 4) reliability_base = 70 build_type = PROTOLATHE | MECHFAB | PODFAB - materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) + materials = list(MAT_METAL = 400, MAT_GOLD = 150, MAT_SILVER = 150, MAT_GLASS = 70) construction_time=100 build_path = /obj/item/weapon/stock_parts/cell/hyper category = list("Misc","Power") @@ -43,7 +43,7 @@ req_tech = list("powerstorage" = 3, "materials" = 2) reliability_base = 75 build_type = PROTOLATHE | MECHFAB | PODFAB - materials = list("$metal" = 700, "$glass" = 70) + materials = list(MAT_METAL = 700, MAT_GLASS = 70) construction_time=100 build_path = /obj/item/weapon/stock_parts/cell/super category = list("Misc","Power") @@ -55,7 +55,7 @@ req_tech = list("powerstorage" = 6, "materials" = 5) reliability_base = 70 build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 800, "$gold" = 300, "$silver" = 300, "$glass" = 160, "$diamond" = 160) + materials = list(MAT_METAL = 800, MAT_GOLD = 300, MAT_SILVER = 300, MAT_GLASS = 160, MAT_DIAMOND = 160) construction_time=100 build_path = /obj/item/weapon/stock_parts/cell/bluespace category = list("Misc","Power") @@ -67,7 +67,7 @@ req_tech = list("programming" = 3, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3) build_type = IMPRINTER reliability_base = 79 - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pacman category = list("Engineering Machinery") @@ -78,7 +78,7 @@ req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5) build_type = IMPRINTER reliability_base = 74 - materials = list("$glass" = 2000, "sacid" = 20) + materials = list(MAT_GLASS = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pacman/mrs category = list("Engineering Machinery") @@ -89,6 +89,6 @@ req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) build_type = IMPRINTER reliability_base = 76 - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pacman/super category = list("Engineering Machinery") diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm index 3f7b5182d09..57f8490be5e 100644 --- a/code/modules/research/designs/spacepod_designs.dm +++ b/code/modules/research/designs/spacepod_designs.dm @@ -5,7 +5,7 @@ id = "spacepod_main" req_tech = list("materials" = 1) //All parts required to build a basic pod have materials 1, so the mechanic can do his damn job. build_type = PODFAB - materials = list("$metal"=5000) + materials = list(MAT_METAL=5000) build_path = /obj/item/weapon/circuitboard/mecha/pod category = list("Pod_Parts") @@ -21,7 +21,7 @@ req_tech = list("materials" = 1) build_path = /obj/item/pod_parts/pod_frame/fore_port category = list("Pod_Frame") - materials = list("$metal"=15000,"$glass"=5000) + materials = list(MAT_METAL=15000,MAT_GLASS=5000) /datum/design/podframe_ap construction_time = 200 @@ -32,7 +32,7 @@ req_tech = list("materials" = 1) build_path = /obj/item/pod_parts/pod_frame/aft_port category = list("Pod_Frame") - materials = list("$metal"=15000,"$glass"=5000) + materials = list(MAT_METAL=15000,MAT_GLASS=5000) /datum/design/podframe_fs construction_time = 200 @@ -43,7 +43,7 @@ req_tech = list("materials" = 1) build_path = /obj/item/pod_parts/pod_frame/fore_starboard category = list("Pod_Frame") - materials = list("$metal"=15000,"$glass"=5000) + materials = list(MAT_METAL=15000,MAT_GLASS=5000) /datum/design/podframe_as construction_time = 200 @@ -54,7 +54,7 @@ req_tech = list("materials" = 1) build_path = /obj/item/pod_parts/pod_frame/aft_starboard category = list("Pod_Frame") - materials = list("$metal"=15000,"$glass"=5000) + materials = list(MAT_METAL=15000,MAT_GLASS=5000) ////////////////////////// ////////POD CORE//////// @@ -69,7 +69,7 @@ req_tech = list("materials" = 1) build_path = /obj/item/pod_parts/core category = list("Pod_Parts") - materials = list("$metal"=5000,"$uranium"=1000,"$plasma"=5000) + materials = list(MAT_METAL=5000,MAT_URANIUM=1000,MAT_PLASMA=5000) ////////////////////////////////////////// ////////SPACEPOD ARMOR//////////////////// @@ -84,7 +84,7 @@ req_tech = list("materials" = 1) build_path = /obj/item/pod_parts/armor category = list("Pod_Armor") - materials = list("$metal"=15000,"$glass"=5000,"$plasma"=10000) + materials = list(MAT_METAL=15000,MAT_GLASS=5000,MAT_PLASMA=10000) ////////////////////////////////////////// //////SPACEPOD GUNS/////////////////////// @@ -98,7 +98,7 @@ req_tech = list("materials" = 2, "combat" = 2) build_path = /obj/item/device/spacepod_equipment/weaponry/taser category = list("Pod_Weaponry") - materials = list("$metal" = 15000) + materials = list(MAT_METAL = 15000) locked = 1 /datum/design/pod_gun_btaser @@ -110,7 +110,7 @@ req_tech = list("materials" = 3, "combat" = 3) build_path = /obj/item/device/spacepod_equipment/weaponry/burst_taser category = list("Pod_Weaponry") - materials = list("$metal" = 15000,"$plasma"=2000) + materials = list(MAT_METAL = 15000,MAT_PLASMA=2000) locked = 1 /datum/design/pod_gun_laser @@ -122,7 +122,7 @@ req_tech = list("materials" = 3, "combat" = 3, "plasma" = 2) build_path = /obj/item/device/spacepod_equipment/weaponry/laser category = list("Pod_Weaponry") - materials = list("$metal"=10000,"$glass"=5000,"$gold"=1000,"$silver"=2000) + materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000) locked = 1 ////////////////////////////////////////// //////SPACEPOD MISC. ITEMS//////////////// @@ -135,6 +135,6 @@ id = "podmisc_tracker" req_tech = list("materials" = 2) //Materials 2: easy to get, no trackers with 0 science progress build_type = PODFAB - materials = list("$metal"=5000) + materials = list(MAT_METAL=5000) build_path = /obj/item/device/spacepod_equipment/misc/tracker category = list("Pod_Parts") \ No newline at end of file diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm index 6f8ff421069..fcfc62012ea 100644 --- a/code/modules/research/designs/stock_parts_designs.dm +++ b/code/modules/research/designs/stock_parts_designs.dm @@ -8,7 +8,7 @@ id = "basic_capacitor" req_tech = list("powerstorage" = 1) build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 50, "$glass" = 50) + materials = list(MAT_METAL = 50, MAT_GLASS = 50) build_path = /obj/item/weapon/stock_parts/capacitor category = list("Stock Parts") @@ -18,7 +18,7 @@ id = "basic_sensor" req_tech = list("magnets" = 1) build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 50, "$glass" = 20) + materials = list(MAT_METAL = 50, MAT_GLASS = 20) build_path = /obj/item/weapon/stock_parts/scanning_module category = list("Stock Parts") @@ -28,7 +28,7 @@ id = "micro_mani" req_tech = list("materials" = 1, "programming" = 1) build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 30) + materials = list(MAT_METAL = 30) build_path = /obj/item/weapon/stock_parts/manipulator category = list("Stock Parts") @@ -38,7 +38,7 @@ id = "basic_micro_laser" req_tech = list("magnets" = 1) build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 10, "$glass" = 20) + materials = list(MAT_METAL = 10, MAT_GLASS = 20) build_path = /obj/item/weapon/stock_parts/micro_laser category = list("Stock Parts") @@ -48,7 +48,7 @@ id = "basic_matter_bin" req_tech = list("materials" = 1) build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 80) + materials = list(MAT_METAL = 80) build_path = /obj/item/weapon/stock_parts/matter_bin category = list("Stock Parts") @@ -58,7 +58,7 @@ id = "adv_capacitor" req_tech = list("powerstorage" = 3) build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) + materials = list(MAT_METAL = 50, MAT_GLASS = 50) build_path = /obj/item/weapon/stock_parts/capacitor/adv category = list("Stock Parts") @@ -68,7 +68,7 @@ id = "adv_sensor" req_tech = list("magnets" = 3) build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 20) + materials = list(MAT_METAL = 50, MAT_GLASS = 20) build_path = /obj/item/weapon/stock_parts/scanning_module/adv category = list("Stock Parts") @@ -78,7 +78,7 @@ id = "nano_mani" req_tech = list("materials" = 3, "programming" = 2) build_type = PROTOLATHE - materials = list("$metal" = 30) + materials = list(MAT_METAL = 30) build_path = /obj/item/weapon/stock_parts/manipulator/nano category = list("Stock Parts") @@ -88,7 +88,7 @@ id = "high_micro_laser" req_tech = list("magnets" = 3) build_type = PROTOLATHE - materials = list("$metal" = 10, "$glass" = 20) + materials = list(MAT_METAL = 10, MAT_GLASS = 20) build_path = /obj/item/weapon/stock_parts/micro_laser/high category = list("Stock Parts") @@ -98,7 +98,7 @@ id = "adv_matter_bin" req_tech = list("materials" = 3) build_type = PROTOLATHE - materials = list("$metal" = 80) + materials = list(MAT_METAL = 80) build_path = /obj/item/weapon/stock_parts/matter_bin/adv category = list("Stock Parts") @@ -109,7 +109,7 @@ req_tech = list("powerstorage" = 5, "materials" = 4) build_type = PROTOLATHE reliability_base = 71 - materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20) + materials = list(MAT_METAL = 50, MAT_GLASS = 50, MAT_GOLD = 20) build_path = /obj/item/weapon/stock_parts/capacitor/super category = list("Stock Parts") @@ -119,7 +119,7 @@ id = "phasic_sensor" req_tech = list("magnets" = 5, "materials" = 3) build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10) + materials = list(MAT_METAL = 50, MAT_GLASS = 20, MAT_SILVER = 10) reliability_base = 72 build_path = /obj/item/weapon/stock_parts/scanning_module/phasic category = list("Stock Parts") @@ -130,7 +130,7 @@ id = "pico_mani" req_tech = list("materials" = 5, "programming" = 2) build_type = PROTOLATHE - materials = list("$metal" = 30) + materials = list(MAT_METAL = 30) reliability_base = 73 build_path = /obj/item/weapon/stock_parts/manipulator/pico category = list("Stock Parts") @@ -141,7 +141,7 @@ id = "ultra_micro_laser" req_tech = list("magnets" = 5, "materials" = 5) build_type = PROTOLATHE - materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10) + materials = list(MAT_METAL = 10, MAT_GLASS = 20, MAT_URANIUM = 10) reliability_base = 70 build_path = /obj/item/weapon/stock_parts/micro_laser/ultra category = list("Stock Parts") @@ -152,7 +152,7 @@ id = "super_matter_bin" req_tech = list("materials" = 5) build_type = PROTOLATHE - materials = list("$metal" = 80) + materials = list(MAT_METAL = 80) reliability_base = 75 build_path = /obj/item/weapon/stock_parts/matter_bin/super category = list("Stock Parts") @@ -164,7 +164,7 @@ req_tech = list("powerstorage" = 6, "materials" = 5) build_type = PROTOLATHE reliability_base = 71 - materials = list("$metal" = 100, "$glass" = 100, "$diamond" = 40) + materials = list(MAT_METAL = 100, MAT_GLASS = 100, MAT_DIAMOND = 40) build_path = /obj/item/weapon/stock_parts/capacitor/quadratic category = list("Stock Parts") @@ -174,7 +174,7 @@ id = "triphasic_scanning" req_tech = list("magnets" = 6, "materials" = 4) build_type = PROTOLATHE - materials = list("$metal" = 100, "$glass" = 40, "$diamond" = 20) + materials = list(MAT_METAL = 100, MAT_GLASS = 40, MAT_DIAMOND = 20) reliability_base = 72 build_path = /obj/item/weapon/stock_parts/scanning_module/triphasic category = list("Stock Parts") @@ -185,7 +185,7 @@ id = "femto_mani" req_tech = list("materials" = 6, "programming" = 3) build_type = PROTOLATHE - materials = list("$metal" = 60, "$diamond" = 30) + materials = list(MAT_METAL = 60, MAT_DIAMOND = 30) reliability_base = 73 build_path = /obj/item/weapon/stock_parts/manipulator/femto category = list("Stock Parts") @@ -196,7 +196,7 @@ id = "quadultra_micro_laser" req_tech = list("magnets" = 6, "materials" = 6) build_type = PROTOLATHE - materials = list("$metal" = 20, "$glass" = 40, "$uranium" = 20, "$diamond" = 20) + materials = list(MAT_METAL = 20, MAT_GLASS = 40, MAT_URANIUM = 20, MAT_DIAMOND = 20) reliability_base = 70 build_path = /obj/item/weapon/stock_parts/micro_laser/quadultra category = list("Stock Parts") @@ -207,7 +207,7 @@ id = "bluespace_matter_bin" req_tech = list("materials" = 6) build_type = PROTOLATHE - materials = list("$metal" = 160, "$diamond" = 200) + materials = list(MAT_METAL = 160, MAT_DIAMOND = 200) reliability_base = 75 build_path = /obj/item/weapon/stock_parts/matter_bin/bluespace category = list("Stock Parts") @@ -218,7 +218,7 @@ id = "rped" req_tech = list("engineering" = 3, "materials" = 3) build_type = PROTOLATHE - materials = list("$metal" = 10000, "$glass" = 5000) //hardcore + materials = list(MAT_METAL = 10000, MAT_GLASS = 5000) //hardcore build_path = /obj/item/weapon/storage/part_replacer category = list("Stock Parts") @@ -228,6 +228,6 @@ id = "bs_rped" req_tech = list("engineering" = 3, "materials" = 5, "programming" = 3, "bluespace" = 3) build_type = PROTOLATHE - materials = list("$metal" = 15000, "$glass" = 5000, "$silver" = 2500) //hardcore + materials = list(MAT_METAL = 15000, MAT_GLASS = 5000, MAT_SILVER = 2500) //hardcore build_path = /obj/item/weapon/storage/part_replacer/bluespace category = list("Stock Parts") \ No newline at end of file diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm index 2f60fc78311..4c6d72c0120 100644 --- a/code/modules/research/designs/telecomms_designs.dm +++ b/code/modules/research/designs/telecomms_designs.dm @@ -7,17 +7,17 @@ id = "s-bus" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/bus category = list("Subspace Telecomms") - + /datum/design/telecomms_hub name = "Machine Board (Hub Mainframe)" desc = "Allows for the construction of Telecommunications Hub Mainframes." id = "s-hub" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/hub category = list("Subspace Telecomms") @@ -28,17 +28,17 @@ id = "s-processor" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/processor category = list("Subspace Telecomms") - + /datum/design/telecomms_relay name = "Machine Board (Relay Mainframe)" desc = "Allows for the construction of Telecommunications Relay Mainframes." id = "s-relay" req_tech = list("programming" = 1, "engineering" = 2, "bluespace" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/relay category = list("Subspace Telecomms") @@ -48,7 +48,7 @@ id = "s-server" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/server category = list("Subspace Telecomms") @@ -58,27 +58,27 @@ id = "s-broadcaster" req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster category = list("Subspace Telecomms") - + /datum/design/subspace_receiver name = "Machine Board (Subspace Receiver)" desc = "Allows for the construction of Subspace Receiver equipment." id = "s-receiver" req_tech = list("programming" = 2, "engineering" = 1, "bluespace" = 1) build_type = IMPRINTER - materials = list("$glass" = 1000, "sacid" = 20) + materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/receiver category = list("Subspace Telecomms") - + /datum/design/subspace_crystal name = "Ansible Crystal" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." id = "s-crystal" req_tech = list("magnets" = 2, "materials" = 2, "bluespace" = 1) build_type = PROTOLATHE - materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20) + materials = list(MAT_GLASS = 1000, MAT_SILVER = 20, MAT_GOLD = 20) build_path = /obj/item/weapon/stock_parts/subspace/crystal category = list("Stock Parts") @@ -88,9 +88,9 @@ id = "s-filter" req_tech = list("programming" = 2, "magnets" = 2) build_type = PROTOLATHE - materials = list("$metal" = 40, "$silver" = 10) + materials = list(MAT_METAL = 40, MAT_SILVER = 10) build_path = /obj/item/weapon/stock_parts/subspace/filter - category = list("Stock Parts") + category = list("Stock Parts") /datum/design/subspace_amplifier name = "Subspace Amplifier" @@ -98,7 +98,7 @@ id = "s-amplifier" req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) build_type = PROTOLATHE - materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15) + materials = list(MAT_METAL = 10, MAT_GOLD = 30, MAT_URANIUM = 15) build_path = /obj/item/weapon/stock_parts/subspace/amplifier category = list("Stock Parts") @@ -108,17 +108,17 @@ id = "s-analyzer" req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) build_type = PROTOLATHE - materials = list("$metal" = 10, "$gold" = 15) + materials = list(MAT_METAL = 10, MAT_GOLD = 15) build_path = /obj/item/weapon/stock_parts/subspace/analyzer - category = list("Stock Parts") - + category = list("Stock Parts") + /datum/design/subspace_ansible name = "Subspace Ansible" desc = "A compact module capable of sensing extradimensional activity." id = "s-ansible" req_tech = list("programming" = 2, "magnets" = 2, "materials" = 2, "bluespace" = 1) build_type = PROTOLATHE - materials = list("$metal" = 80, "$silver" = 20) + materials = list(MAT_METAL = 80, MAT_SILVER = 20) build_path = /obj/item/weapon/stock_parts/subspace/ansible category = list("Stock Parts") @@ -128,16 +128,16 @@ id = "s-transmitter" req_tech = list("magnets" = 3, "materials" = 3, "bluespace" = 2) build_type = PROTOLATHE - materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15) + materials = list(MAT_GLASS = 100, MAT_SILVER = 10, MAT_URANIUM = 15) build_path = /obj/item/weapon/stock_parts/subspace/transmitter - category = list("Stock Parts") - + category = list("Stock Parts") + /datum/design/subspace_treatment name = "Subspace Treatment Disk" desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." id = "s-treatment" req_tech = list("programming" = 2, "magnets" = 1, "materials" = 2, "bluespace" = 1) build_type = PROTOLATHE - materials = list("$metal" = 10, "$silver" = 20) + materials = list(MAT_METAL = 10, MAT_SILVER = 20) build_path = /obj/item/weapon/stock_parts/subspace/treatment category = list("Stock Parts") diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index f27eb81f01e..e750275ef4e 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -8,7 +8,7 @@ id = "nuclear_gun" req_tech = list("combat" = 4, "materials" = 5, "powerstorage" = 3) build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 2000) + materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 2000) reliability_base = 76 build_path = /obj/item/weapon/gun/energy/gun/nuclear locked = 1 @@ -20,7 +20,7 @@ id = "decloner" req_tech = list("combat" = 6, "materials" = 7, "biotech" = 5, "powerstorage" = 6) build_type = PROTOLATHE - materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40) + materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000, "mutagen" = 40) build_path = /obj/item/weapon/gun/energy/decloner locked = 1 category = list("Weapons") @@ -31,7 +31,7 @@ id = "largecrossbow" req_tech = list("combat" = 5, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3) build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1500, "$uranium" = 1500, "$silver" = 1500) + materials = list(MAT_METAL = 5000, MAT_GLASS = 1500, MAT_URANIUM = 1500, MAT_SILVER = 1500) build_path = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large locked = 1 category = list("Weapons") @@ -42,7 +42,7 @@ id = "flora_gun" req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3) build_type = PROTOLATHE - materials = list("$metal" = 2000, "$glass" = 500, "radium" = 20) + materials = list(MAT_METAL = 2000, MAT_GLASS = 500, "radium" = 20) build_path = /obj/item/weapon/gun/energy/floragun category = list("Weapons") @@ -52,7 +52,7 @@ id = "ioncarbine" req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4) build_type = PROTOLATHE - materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000) + materials = list(MAT_SILVER = 4000, MAT_METAL = 6000, MAT_URANIUM = 1000) build_path = /obj/item/weapon/gun/energy/ionrifle/carbine locked = 1 category = list("Weapons") @@ -63,7 +63,7 @@ id = "large_Grenade" req_tech = list("combat" = 3, "materials" = 2) build_type = PROTOLATHE - materials = list("$metal" = 3000) + materials = list(MAT_METAL = 3000) reliability_base = 79 build_path = /obj/item/weapon/grenade/chem_grenade/large category = list("Weapons") @@ -74,7 +74,7 @@ id = "tele_shield" req_tech = list("combat" = 4, "materials" = 3, "engineering" = 3) build_type = PROTOLATHE - materials = list("$metal" = 4000, "$glass" = 5000, "$silver" = 300) + materials = list(MAT_METAL = 4000, MAT_GLASS = 5000, MAT_SILVER = 300) build_path = /obj/item/weapon/shield/riot/tele category = list("Weapons") @@ -84,7 +84,7 @@ id = "lasercannon" req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3) build_type = PROTOLATHE - materials = list("$metal" = 10000, "$glass" = 2000, "$diamond" = 2000) + materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_DIAMOND = 2000) build_path = /obj/item/weapon/gun/energy/lasercannon locked = 1 category = list("Weapons") @@ -95,7 +95,7 @@ id = "receiver" req_tech = list("combat" = 5, "materials" = 4) build_type = PROTOLATHE - materials = list("$metal" = 6500, "$silver" = 500) + materials = list(MAT_METAL = 6500, MAT_SILVER = 500) build_path = /obj/item/weaponcrafting/receiver category = list("Weapons") @@ -105,7 +105,7 @@ id = "ppistol" req_tech = list("combat" = 5, "plasmatech" = 4) build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000, "$plasma" = 3000) + materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_PLASMA = 3000) build_path = /obj/item/weapon/gun/energy/toxgun locked = 1 category = list("Weapons") @@ -116,7 +116,7 @@ id = "smg" req_tech = list("combat" = 4, "materials" = 3) build_type = PROTOLATHE - materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000) + materials = list(MAT_METAL = 8000, MAT_SILVER = 2000, MAT_DIAMOND = 1000) build_path = /obj/item/weapon/gun/projectile/automatic locked = 1 category = list("Weapons") @@ -127,7 +127,7 @@ id = "mag_smg" req_tech = list("combat" = 4, "materials" = 3) build_type = PROTOLATHE - materials = list("$metal" = 2000) + materials = list(MAT_METAL = 2000) build_path = /obj/item/ammo_box/magazine/smgm9mm category = list("Weapons") @@ -137,7 +137,7 @@ id = "rapidsyringe" req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000) + materials = list(MAT_METAL = 5000, MAT_GLASS = 1000) build_path = /obj/item/weapon/gun/syringe/rapidsyringe category = list("Weapons") @@ -147,7 +147,7 @@ id = "stunshell" req_tech = list("combat" = 3, "materials" = 3) build_type = PROTOLATHE - materials = list("$metal" = 200) + materials = list(MAT_METAL = 200) build_path = /obj/item/ammo_casing/shotgun/stunslug category = list("Weapons") @@ -157,7 +157,7 @@ id = "stunrevolver" req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) build_type = PROTOLATHE - materials = list("$metal" = 4000, "$glass" = 1000) + materials = list(MAT_METAL = 4000, MAT_GLASS = 1000) build_path = /obj/item/weapon/gun/energy/stunrevolver locked = 1 category = list("Weapons") @@ -168,7 +168,7 @@ id = "temp_gun" req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2) build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000) + materials = list(MAT_METAL = 5000, MAT_GLASS = 500, MAT_SILVER = 3000) build_path = /obj/item/weapon/gun/energy/temperature locked = 1 category = list("Weapons") @@ -179,7 +179,7 @@ id = "suppressor" req_tech = list("combat" = 6, "engineering" = 5, "syndicate" = 3) build_type = PROTOLATHE - materials = list("$metal" = 2000, "$silver" = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 500) build_path = /obj/item/weapon/suppressor category = list("Weapons") @@ -189,7 +189,7 @@ id = "techshotshell" req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 4, "magnets" = 3) build_type = PROTOLATHE - materials = list("$metal" = 1000, "$glass" = 200, "$silver" = 300) + materials = list(MAT_METAL = 1000, MAT_GLASS = 200, MAT_SILVER = 300) build_path = /obj/item/ammo_casing/shotgun/techshell category = list("Weapons") @@ -199,7 +199,7 @@ id = "xray" req_tech = list("combat" = 6, "materials" = 5, "biotech" = 5, "powerstorage" = 4) build_type = PROTOLATHE - materials = list("$gold" = 5000,"$uranium" = 10000, "$metal" = 4000) + materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000, MAT_METAL = 4000) build_path = /obj/item/weapon/gun/energy/xray locked = 1 category = list("Weapons") \ No newline at end of file diff --git a/code/modules/shieldgen/circuits_and_designs.dm b/code/modules/shieldgen/circuits_and_designs.dm index 1ff3f01dea7..b13a5751822 100644 --- a/code/modules/shieldgen/circuits_and_designs.dm +++ b/code/modules/shieldgen/circuits_and_designs.dm @@ -22,7 +22,7 @@ datum/design/shield_gen_ex id = "shield_gen" req_tech = list("bluespace" = 4, "plasmatech" = 3) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000) + materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_PLASMA = 10000, MAT_DIAMOND = 5000, MAT_GOLD = 10000) build_path = "/obj/machinery/shield_gen/external" //////////////////////////////////////// @@ -48,7 +48,7 @@ datum/design/shield_gen id = "shield_gen" req_tech = list("bluespace" = 4, "plasmatech" = 3) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$gold" = 10000) + materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_PLASMA = 10000, MAT_DIAMOND = 5000, MAT_GOLD = 10000) build_path = "/obj/machinery/shield_gen/external" //////////////////////////////////////// @@ -74,5 +74,5 @@ datum/design/shield_cap id = "shield_cap" req_tech = list("magnets" = 3, "powerstorage" = 4) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$plasma" = 10000, "$diamond" = 5000, "$silver" = 10000) + materials = list(MAT_GLASS = 2000, "sacid" = 20, MAT_PLASMA = 10000, MAT_DIAMOND = 5000, MAT_SILVER = 10000) build_path = "/obj/machinery/shield_gen/external" From fd8b4ca578deb8713c09b725f0a439aa587ac4e6 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Sep 2015 17:32:22 -0400 Subject: [PATCH 11/25] numbers fixes --- code/modules/research/designs/autolathe_designs.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index e68cf4df4c4..247bfdf25d8 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -294,7 +294,7 @@ name = "Metal" id = "metal" build_type = AUTOLATHE - materials = list(MAT_METAL = 3750) + materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/metal category = list("initial","Construction") @@ -318,7 +318,7 @@ name = "Reinforced Glass" id = "rglass" build_type = AUTOLATHE - materials = list(MAT_METAL = 1875, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) + materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/rglass category = list("initial","Construction") @@ -326,7 +326,7 @@ name = "Metal Rod" id = "rods" build_type = AUTOLATHE - materials = list(MAT_METAL = 1875) + materials = list(MAT_METAL = 1000) build_path = /obj/item/stack/rods category = list("initial","Construction") From 46ce41fbc8b127c4a33dd678435834c7017b4cd4 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Sep 2015 18:04:34 -0400 Subject: [PATCH 12/25] unused var axing --- code/game/mecha/equipment/mecha_equipment.dm | 2 - .../mecha/equipment/tools/medical_tools.dm | 3 - code/game/mecha/equipment/tools/tools.dm | 13 +-- code/game/mecha/equipment/weapons/weapons.dm | 9 -- code/game/mecha/mecha_control_console.dm | 18 ++-- code/game/mecha/mecha_parts.dm | 85 +------------------ code/game/objects/items/robot/robot_parts.dm | 16 ---- .../objects/items/robot/robot_upgrades.dm | 8 -- .../game/objects/items/weapons/power_cells.dm | 5 -- code/game/vehicles/spacepods/parts.dm | 1 - code/modules/mob/living/carbon/brain/MMI.dm | 4 - .../mob/living/carbon/brain/posibrain.dm | 2 - .../mob/living/silicon/robot/component.dm | 6 +- 13 files changed, 13 insertions(+), 159 deletions(-) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 33bbb110766..4f53bd5a796 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -8,8 +8,6 @@ icon_state = "mecha_equip" force = 5 origin_tech = "materials=2" - construction_time = 100 - construction_cost = list("metal"=10000) var/equip_cooldown = 0 var/equip_ready = 1 var/energy_drain = 0 diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index bc7100347c5..a32e32c1075 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -6,7 +6,6 @@ origin_tech = "programming=2;biotech=3" energy_drain = 20 range = MELEE - construction_cost = list("metal"=5000,"glass"=10000) reliability = 1000 equip_cooldown = 20 var/mob/living/carbon/occupant = null @@ -396,8 +395,6 @@ range = MELEE|RANGED equip_cooldown = 10 origin_tech = "materials=3;biotech=4;magnets=4;programming=3" - construction_time = 200 - construction_cost = list("metal"=3000,"glass"=2000) New() ..() diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index d9a7b7a2044..783513c62ac 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -138,7 +138,6 @@ desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)" icon_state = "mecha_diamond_drill" origin_tech = "materials=4;engineering=3" - construction_cost = list("metal"=10000,"diamond"=6500) equip_cooldown = 20 force = 15 @@ -279,11 +278,9 @@ equip_cooldown = 10 energy_drain = 250 range = MELEE|RANGED - construction_time = 1200 - construction_cost = list("metal"=30000,"plasma"=25000,"silver"=20000,"gold"=20000) var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. var/canRwall = 0 - + New() rcd_list += src ..() @@ -524,7 +521,6 @@ equip_cooldown = 10 energy_drain = 50 range = 0 - construction_cost = list("metal"=20000,"silver"=5000) var/deflect_coeff = 1.15 var/damage_coeff = 0.8 @@ -575,7 +571,6 @@ equip_cooldown = 10 energy_drain = 50 range = 0 - construction_cost = list("metal"=20000,"gold"=5000) var/deflect_coeff = 1.15 var/damage_coeff = 0.8 @@ -647,7 +642,6 @@ equip_cooldown = 20 energy_drain = 100 range = 0 - construction_cost = list("metal"=10000,"gold"=1000,"silver"=2000,"glass"=5000) var/health_boost = 2 var/datum/global_iterator/pr_repair_droid var/icon/droid_overlay @@ -736,7 +730,6 @@ equip_cooldown = 10 energy_drain = 0 range = 0 - construction_cost = list("metal"=10000,"gold"=2000,"silver"=3000,"glass"=2000) var/datum/global_iterator/pr_energy_relay var/coeff = 100 var/list/use_channels = list(EQUIP,ENVIRON,LIGHT) @@ -848,7 +841,6 @@ equip_cooldown = 10 energy_drain = 0 range = MELEE - construction_cost = list("metal"=10000,"silver"=500,"glass"=1000) var/datum/global_iterator/pr_mech_generator var/coeff = 100 var/obj/item/stack/sheet/fuel @@ -985,7 +977,6 @@ desc = "Generates power using uranium. Pollutes the environment." icon_state = "tesla" origin_tech = "powerstorage=3;engineering=3" - construction_cost = list("metal"=10000,"silver"=500,"glass"=1000) max_fuel = 50000 fuel_per_cycle_idle = 10 fuel_per_cycle_active = 30 @@ -1108,4 +1099,4 @@ scanning = 1 mineral_scan_pulse(occupant,get_turf(loc)) spawn(equip_cooldown) - scanning = 0 + scanning = 0 diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 18d5a433990..2e3b0d4fba8 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -66,7 +66,6 @@ energy_drain = 120 projectile = /obj/item/projectile/ion fire_sound = 'sound/weapons/Laser.ogg' - construction_cost = list("silver" = 6000, "metal" = 20000, "uranium" = 2000) /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse equip_cooldown = 30 @@ -119,8 +118,6 @@ energy_drain = 200 equip_cooldown = 150 range = MELEE|RANGED - construction_time = 500 - construction_cost = list("metal"=20000,"bananium"=10000) can_attach(obj/mecha/combat/honker/M as obj) if(..()) @@ -346,7 +343,6 @@ equip_cooldown = 60 var/missile_speed = 2 var/missile_range = 30 - construction_cost = list("silver" = 8000, "metal" = 22000, "gold" = 6000) action(target) if(!action_checks(target)) return @@ -409,7 +405,6 @@ projectile = /obj/item/weapon/grenade/flashbang/clusterbang projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher. equip_cooldown = 90 - construction_cost = list("metal"=20000,"gold"=10000,"uranium"=10000) //now as expensive as a Honkblast. size=1 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/get_equip_info()//Limited version of the clusterbang launcher that can't reload @@ -427,8 +422,6 @@ missile_speed = 1.5 projectile_energy_cost = 100 equip_cooldown = 20 - construction_time = 300 - construction_cost = list("metal"=20000,"bananium"=5000) can_attach(obj/mecha/combat/honker/M as obj) if(..()) @@ -457,8 +450,6 @@ missile_speed = 1.5 projectile_energy_cost = 100 equip_cooldown = 10 - construction_time = 300 - construction_cost = list("metal"=20000,"bananium"=5000) can_attach(obj/mecha/combat/honker/M as obj) if(..()) diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index ce44f2e59b1..f85a1586d26 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -15,7 +15,7 @@ /obj/machinery/computer/mecha/attack_hand(var/mob/user as mob) ui_interact(user) - + /obj/machinery/computer/mecha/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] data["screen"] = screen @@ -40,7 +40,7 @@ /obj/machinery/computer/mecha/Topic(href, href_list) if(..()) return 1 - + var/datum/topic_input/filter = new /datum/topic_input(href,href_list) if(href_list["send_message"]) var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("send_message") @@ -50,19 +50,19 @@ var/obj/mecha/M = MT.in_mecha() if(M) M.occupant_message(message) - + if(href_list["shock"]) var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("shock") MT.shock() - + if(href_list["get_log"]) var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("get_log") stored_data = MT.get_mecha_log() screen = 1 - + if(href_list["return"]) screen = 0 - + nanomanager.update_uis(src) return @@ -72,8 +72,6 @@ icon = 'icons/obj/device.dmi' icon_state = "motion2" origin_tech = "programming=2;magnets=2" - construction_time = 50 - construction_cost = list("metal"=500) /obj/item/mecha_parts/mecha_tracking/proc/get_mecha_info() if(!in_mecha()) @@ -91,7 +89,7 @@ answer["cell"] = 0 answer["integrity"] = M.health/initial(M.health)*100 answer["airtank"] = M.return_pressure() - answer["pilot"] = "[M.occupant||"None"]" + answer["pilot"] = "[M.occupant||"None"]" var/area/area = get_area(M) answer["location"] = "[sanitize(area.name)||"Unknown"]" answer["equipment"] = "[M.selected||"None"]" @@ -99,7 +97,7 @@ var/obj/mecha/working/ripley/RM = M answer["hascargo"] = 1 answer["cargo"] = RM.cargo.len/RM.cargo_capacity*100 - + return answer /obj/item/mecha_parts/mecha_tracking/emp_act() diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 6237bcfd523..17876058ab9 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -9,15 +9,12 @@ w_class = 6 flags = CONDUCT origin_tech = "programming=2;materials=2" - var/construction_time = 100 - var/list/construction_cost = list("metal"=20000,"glass"=5000) /obj/item/mecha_parts/chassis name="Mecha Chassis" icon_state = "backbone" var/datum/construction/construct - construction_cost = list("metal"=20000) flags = CONDUCT attackby(obj/item/W as obj, mob/user as mob, params) @@ -42,46 +39,35 @@ desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems." icon_state = "ripley_harness" origin_tech = "programming=2;materials=2;biotech=2;engineering=2" - construction_time = 200 - construction_cost = list("metal"=20000,"glass"=7500) /obj/item/mecha_parts/part/ripley_left_arm name="Ripley Left Arm" desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools." icon_state = "ripley_l_arm" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 150 - construction_cost = list("metal"=15000) /obj/item/mecha_parts/part/ripley_right_arm name="Ripley Right Arm" desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools." icon_state = "ripley_r_arm" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 150 - construction_cost = list("metal"=15000) /obj/item/mecha_parts/part/ripley_left_leg name="Ripley Left Leg" desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "ripley_l_leg" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 150 - construction_cost = list("metal"=15000) /obj/item/mecha_parts/part/ripley_right_leg name="Ripley Right Leg" desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "ripley_r_leg" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 150 - construction_cost = list("metal"=15000) ///////// Gygax /obj/item/mecha_parts/chassis/gygax name = "Gygax Chassis" - construction_cost = list("metal"=20000) New() ..() @@ -92,60 +78,45 @@ desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot." icon_state = "gygax_harness" origin_tech = "programming=2;materials=2;biotech=3;engineering=3" - construction_time = 300 - construction_cost = list("metal"=20000,"glass"=10000,"diamond"=2000) /obj/item/mecha_parts/part/gygax_head name="Gygax Head" desc="A Gygax head. Houses advanced surveilance and targeting sensors." icon_state = "gygax_head" origin_tech = "programming=2;materials=2;magnets=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=10000,"glass"=5000, "diamond"=2000) /obj/item/mecha_parts/part/gygax_left_arm name="Gygax Left Arm" desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." icon_state = "gygax_l_arm" origin_tech = "programming=2;materials=2;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000, "diamond"=1000) /obj/item/mecha_parts/part/gygax_right_arm name="Gygax Right Arm" desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." icon_state = "gygax_r_arm" origin_tech = "programming=2;materials=2;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000, "diamond"=1000) /obj/item/mecha_parts/part/gygax_left_leg name="Gygax Left Leg" icon_state = "gygax_l_leg" origin_tech = "programming=2;materials=2;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000, "diamond"=2000) /obj/item/mecha_parts/part/gygax_right_leg name="Gygax Right Leg" icon_state = "gygax_r_leg" origin_tech = "programming=2;materials=2;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000, "diamond"=2000) /obj/item/mecha_parts/part/gygax_armour name="Gygax Armour Plates" icon_state = "gygax_armour" origin_tech = "materials=6;combat=4;engineering=5" - construction_time = 600 - construction_cost = list("metal"=25000,"diamond"=10000) //////////// Durand /obj/item/mecha_parts/chassis/durand name = "Durand Chassis" - construction_cost = list("metal"=25000) New() ..() @@ -155,50 +126,36 @@ name="Durand Torso" icon_state = "durand_harness" origin_tech = "programming=2;materials=3;biotech=3;engineering=3" - construction_time = 300 - construction_cost = list("metal"=25000,"glass"=10000,"silver"=10000) /obj/item/mecha_parts/part/durand_head name="Durand Head" icon_state = "durand_head" origin_tech = "programming=2;materials=3;magnets=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=10000,"glass"=15000,"silver"=2000) /obj/item/mecha_parts/part/durand_left_arm name="Durand Left Arm" icon_state = "durand_l_arm" origin_tech = "programming=2;materials=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=10000,"silver"=4000) /obj/item/mecha_parts/part/durand_right_arm name="Durand Right Arm" icon_state = "durand_r_arm" origin_tech = "programming=2;materials=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=10000,"silver"=4000) /obj/item/mecha_parts/part/durand_left_leg name="Durand Left Leg" icon_state = "durand_l_leg" origin_tech = "programming=2;materials=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000,"silver"=4000) /obj/item/mecha_parts/part/durand_right_leg name="Durand Right Leg" icon_state = "durand_r_leg" origin_tech = "programming=2;materials=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000,"silver"=4000) /obj/item/mecha_parts/part/durand_armor name="Durand Armour Plates" icon_state = "durand_armor" origin_tech = "materials=5;combat=4;engineering=5" - construction_time = 600 - construction_cost = list("metal"=50000,"uranium"=30000) @@ -244,38 +201,26 @@ /obj/item/mecha_parts/part/honker_torso name="H.O.N.K Torso" icon_state = "honker_harness" - construction_time = 300 - construction_cost = list("metal"=20000,"glass"=10000,"bananium"=10000) /obj/item/mecha_parts/part/honker_head name="H.O.N.K Head" icon_state = "honker_head" - construction_time = 200 - construction_cost = list("metal"=10000,"glass"=5000,"bananium"=5000) /obj/item/mecha_parts/part/honker_left_arm name="H.O.N.K Left Arm" icon_state = "honker_l_arm" - construction_time = 200 - construction_cost = list("metal"=15000,"bananium"=5000) /obj/item/mecha_parts/part/honker_right_arm name="H.O.N.K Right Arm" icon_state = "honker_r_arm" - construction_time = 200 - construction_cost = list("metal"=15000,"bananium"=5000) /obj/item/mecha_parts/part/honker_left_leg name="H.O.N.K Left Leg" icon_state = "honker_l_leg" - construction_time = 200 - construction_cost = list("metal"=20000,"bananium"=5000) /obj/item/mecha_parts/part/honker_right_leg name="H.O.N.K Right Leg" icon_state = "honker_r_leg" - construction_time = 200 - construction_cost = list("metal"=20000,"bananium"=5000) ////////// Phazon @@ -291,51 +236,37 @@ /obj/item/mecha_parts/part/phazon_torso name="Phazon Torso" icon_state = "phazon_harness" - construction_time = 300 - construction_cost = list("metal"=35000,"glass"=10000,"plasma"=20000) origin_tech = "programming=5;materials=6;bluespace=5;powerstorage=5" /obj/item/mecha_parts/part/phazon_head name="Phazon Head" icon_state = "phazon_head" - construction_time = 200 - construction_cost = list("metal"=15000,"glass"=5000,"plasma"=10000) origin_tech = "programming=4;materials=5;magnets=5" /obj/item/mecha_parts/part/phazon_left_arm name="Phazon Left Arm" icon_state = "phazon_l_arm" - construction_time = 200 - construction_cost = list("metal"=20000,"plasma"=10000) origin_tech = "materials=5;bluespace=2;magnets=2" /obj/item/mecha_parts/part/phazon_right_arm name="Phazon Right Arm" icon_state = "phazon_r_arm" - construction_time = 200 - construction_cost = list("metal"=20000,"plasma"=10000) origin_tech = "materials=5;bluespace=2;magnets=2" /obj/item/mecha_parts/part/phazon_left_leg name="Phazon Left Leg" icon_state = "phazon_l_leg" - construction_time = 200 - construction_cost = list("metal"=20000,"plasma"=10000) origin_tech = "materials=5;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_right_leg name="Phazon Right Leg" icon_state = "phazon_r_leg" - construction_time = 200 - construction_cost = list("metal"=20000,"plasma"=10000) origin_tech = "materials=5;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_armor name="Phazon armor" desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties." icon_state = "phazon_armor" - construction_time = 300 - construction_cost = list("metal"=45000,"plasma"=30000) origin_tech = "materials=6;bluespace=5;magnets=5" ///////// Odysseus @@ -349,8 +280,6 @@ /obj/item/mecha_parts/part/odysseus_head name="Odysseus Head" icon_state = "odysseus_head" - construction_time = 100 - construction_cost = list("metal"=6000,"glass"=10000) origin_tech = "programming=3;materials=2" /obj/item/mecha_parts/part/odysseus_torso @@ -358,47 +287,35 @@ desc="A torso part of Odysseus. Contains power unit, processing core and life support systems." icon_state = "odysseus_torso" origin_tech = "programming=2;materials=2;biotech=2;engineering=2" - construction_time = 180 - construction_cost = list("metal"=12000) /obj/item/mecha_parts/part/odysseus_left_arm name="Odysseus Left Arm" desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools." icon_state = "odysseus_l_arm" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 120 - construction_cost = list("metal"=6000) /obj/item/mecha_parts/part/odysseus_right_arm name="Odysseus Right Arm" desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools." icon_state = "odysseus_r_arm" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 120 - construction_cost = list("metal"=6000) /obj/item/mecha_parts/part/odysseus_left_leg name="Odysseus Left Leg" desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "odysseus_l_leg" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 130 - construction_cost = list("metal"=7000) /obj/item/mecha_parts/part/odysseus_right_leg name="Odysseus Right Leg" desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "odysseus_r_leg" origin_tech = "programming=2;materials=2;engineering=2" - construction_time = 130 - construction_cost = list("metal"=7000) /*/obj/item/mecha_parts/part/odysseus_armour name="Odysseus Carapace" icon_state = "odysseus_armour" - origin_tech = "materials=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000)*/ + origin_tech = "materials=3;engineering=3")*/ ///////// Circuitboards diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 79cbe026503..01a087f959c 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -5,8 +5,6 @@ icon_state = "blank" flags = CONDUCT slot_flags = SLOT_BELT - var/construction_time = 100 - var/list/construction_cost = list("metal"=20000,"glass"=5000) var/list/part = null var/sabotaged = 0 //Emagging limbs can have repercussions when installed as prosthetics. var/model_info @@ -30,8 +28,6 @@ name = "left arm" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." icon_state = "l_arm" - construction_time = 200 - construction_cost = list("metal"=10000) part = list("l_arm","l_hand") model_info = 1 @@ -39,8 +35,6 @@ name = "right arm" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." icon_state = "r_arm" - construction_time = 200 - construction_cost = list("metal"=10000) part = list("r_arm","r_hand") model_info = 1 @@ -48,8 +42,6 @@ name = "left leg" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." icon_state = "l_leg" - construction_time = 200 - construction_cost = list("metal"=10000) part = list("l_leg","l_foot") model_info = 1 @@ -57,8 +49,6 @@ name = "right leg" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." icon_state = "r_leg" - construction_time = 200 - construction_cost = list("metal"=10000) part = list("r_leg","r_foot") model_info = 1 @@ -67,8 +57,6 @@ desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell." icon_state = "chest" part = list("groin","chest") - construction_time = 350 - construction_cost = list("metal"=40000) var/wires = 0.0 var/obj/item/weapon/stock_parts/cell/cell = null @@ -77,8 +65,6 @@ desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals." icon_state = "head" part = list("head") - construction_time = 350 - construction_cost = list("metal"=5000) var/obj/item/device/flash/flash1 = null var/obj/item/device/flash/flash2 = null @@ -86,8 +72,6 @@ name = "endoskeleton" desc = "A complex metal backbone with standard limb sockets and pseudomuscle anchors." icon_state = "robo_suit" - construction_time = 500 - construction_cost = list("metal"=15000) var/obj/item/robot_parts/l_arm/l_arm = null var/obj/item/robot_parts/r_arm/r_arm = null var/obj/item/robot_parts/l_leg/l_leg = null diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 048d85e5495..a97ee46ea63 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -6,8 +6,6 @@ desc = "Protected by FRM." icon = 'icons/obj/module.dmi' icon_state = "cyborg_upgrade" - var/construction_time = 120 - var/construction_cost = list("metal"=10000) var/locked = 0 var/require_module = 0 var/installed = 0 @@ -50,7 +48,6 @@ name = "robot reclassification board" desc = "Used to rename a cyborg." icon_state = "cyborg_upgrade1" - construction_cost = list("metal"=35000) var/heldname = "default name" /obj/item/borg/upgrade/rename/attack_self(mob/user as mob) @@ -68,7 +65,6 @@ /obj/item/borg/upgrade/restart name = "robot emergency restart module" desc = "Used to force a restart of a disabled-but-repaired robot, bringing it back online." - construction_cost = list("metal"=60000 , "glass"=5000) icon_state = "cyborg_upgrade1" @@ -92,7 +88,6 @@ /obj/item/borg/upgrade/vtec name = "robotic VTEC Module" desc = "Used to kick in a robot's VTEC systems, increasing their speed." - construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 5000) icon_state = "cyborg_upgrade2" require_module = 1 @@ -109,7 +104,6 @@ /obj/item/borg/upgrade/disablercooler name = "robotic Rapid Disabler Cooling Module" desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate." - construction_cost = list("metal"=80000 , "glass"=6000 , "gold"= 2000, "diamond" = 500) icon_state = "cyborg_upgrade3" require_module = 1 @@ -144,7 +138,6 @@ /obj/item/borg/upgrade/jetpack name = "mining robot jetpack" desc = "A carbon dioxide jetpack suitable for low-gravity mining operations." - construction_cost = list("metal"=10000,"plasma"=15000,"uranium" = 20000) icon_state = "cyborg_upgrade3" require_module = 1 @@ -211,7 +204,6 @@ /obj/item/borg/upgrade/syndicate/ name = "Illegal Equipment Module" desc = "Unlocks the hidden, deadlier functions of a robot" - construction_cost = list("metal"=10000,"glass"=15000,"diamond" = 10000) icon_state = "cyborg_upgrade3" require_module = 1 diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 0eb8fdfe3de..e60b78df8d0 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -16,8 +16,6 @@ materials = list(MAT_METAL=700, MAT_GLASS=50) var/rigged = 0 // true if rigged to explode var/minor_fault = 0 //If not 100% reliable, it will build up faults. - var/construction_cost = list("metal"=750,"glass"=75) - var/construction_time=100 suicide_act(mob/user) viewers(user) << "[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide." @@ -65,7 +63,6 @@ maxcharge = 20000 materials = list(MAT_GLASS=70) rating = 4 - construction_cost = list("metal"=750,"glass"=100) /obj/item/weapon/stock_parts/cell/super/empty/New() ..() @@ -78,7 +75,6 @@ maxcharge = 30000 rating = 5 materials = list(MAT_GLASS=80) - construction_cost = list("metal"=500,"glass"=150,"gold"=200,"silver"=200) /obj/item/weapon/stock_parts/cell/hyper/empty/New() ..() @@ -91,7 +87,6 @@ maxcharge = 40000 materials = list(MAT_GLASS=80) rating = 6 - construction_cost = list("metal"=800,"gold"=300,"silver"=300,"glass"=160,"diamond"=160) /obj/item/weapon/stock_parts/cell/bluespace/empty/New() ..() diff --git a/code/game/vehicles/spacepods/parts.dm b/code/game/vehicles/spacepods/parts.dm index 19210fc2b9a..1ab02b84654 100644 --- a/code/game/vehicles/spacepods/parts.dm +++ b/code/game/vehicles/spacepods/parts.dm @@ -5,7 +5,6 @@ /obj/item/pod_parts/core name="Space Pod Core" icon_state = "core" - construction_cost = list("iron"=5000,"uranium"=1000,"plasma"=5000) flags = CONDUCT origin_tech = "programming=2;materials=3;bluespace=2;engineering=3" diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 5e6a471834d..d354671f565 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -8,10 +8,6 @@ w_class = 3 origin_tech = "biotech=3" - var/list/construction_cost = list("metal"=1000,"glass"=500) - var/construction_time = 75 - //these vars are so the mecha fabricator doesn't shit itself anymore. --NEO - req_access = list(access_robotics) //Revised. Brainmob is now contained directly within object of transfer. MMI in this case. diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 15e71c98abc..92a2ebcd053 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -6,8 +6,6 @@ w_class = 3 origin_tech = "engineering=4;materials=4;bluespace=2;programming=4" - construction_cost = list("metal"=500,"glass"=500,"silver"=200,"gold"=200,"plasma"=100,"diamond"=10) - construction_time = 75 var/searching = 0 var/askDelay = 10 * 60 * 1 //var/mob/living/carbon/brain/brainmob = null diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index ae09c2287a8..d0469bc42dc 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -135,8 +135,6 @@ /obj/item/robot_parts/robot_component icon = 'icons/obj/robot_component.dmi' icon_state = "working" - construction_time = 200 - construction_cost = list("metal"=5000) var/brute = 0 var/burn = 0 @@ -190,7 +188,7 @@ user << "Key: Suffocation/Toxin/Burns/Brute" user << "Body Temperature: ???" return - + var/scan_type if(istype(M, /mob/living/silicon/robot)) scan_type = "robot" @@ -253,5 +251,5 @@ user << "[capitalize(O.name)]: [O.damage]" if(!organ_found) user << "No prosthetics located." - + src.add_fingerprint(user) From 71493c9d3f5e829b1fba29f84d0973d3490247d1 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Sep 2015 18:37:47 -0400 Subject: [PATCH 13/25] butchers knife oops --- code/game/objects/items/weapons/kitchen.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 2d835c7a71f..db1f078e034 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -183,6 +183,7 @@ throwforce = 8.0 throw_speed = 3 throw_range = 6 + materials = list(MAT_METAL=12000) origin_tech = "materials=1" attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharp = 1 From ea6bfdf75856ccdc14d9636f59d68f7f39374f8c Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Sep 2015 19:41:42 -0400 Subject: [PATCH 14/25] upgradeable recycler --- .../game/machinery/computer/buildandrepair.dm | 3 +- code/game/machinery/recycler.dm | 46 ++++++++++++------- code/game/objects/items/devices/flash.dm | 1 + code/game/objects/items/weapons/AI_modules.dm | 15 +++--- .../objects/items/weapons/storage/belt.dm | 1 + .../objects/items/weapons/storage/toolbox.dm | 1 + code/modules/clothing/clothing.dm | 1 + .../clothing/under/accessories/accessory.dm | 5 +- code/modules/mining/coins.dm | 7 +++ .../reagent_containers/food/drinks.dm | 3 ++ 10 files changed, 57 insertions(+), 26 deletions(-) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index c4c73f7c5bb..9adcde3aa00 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -19,6 +19,7 @@ icon_state = "id_mod" item_state = "electronic" origin_tech = "programming=2" + materials = list(MAT_GLASS=200) var/id = null var/frequency = null var/build_path = null @@ -82,7 +83,7 @@ build_path = /obj/machinery/computer/station_alert /obj/item/weapon/circuitboard/stationalert_security name = "Circuit Board (Station Alert Console (Security))" - build_path = /obj/machinery/computer/station_alert + build_path = /obj/machinery/computer/station_alert /obj/item/weapon/circuitboard/stationalert_all name = "Circuit Board (Station Alert Console (All))" build_path = /obj/machinery/computer/station_alert/all diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index eaa87fbea28..72f4d0bc0d7 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -1,7 +1,7 @@ var/const/SAFETY_COOLDOWN = 100 /obj/machinery/recycler - name = "crusher" + name = "recycler" desc = "A large crushing machine which is used to recycle small items ineffeciently; there are lights on the side of it." icon = 'icons/obj/recycling.dmi' icon_state = "grinder-o0" @@ -13,6 +13,8 @@ var/const/SAFETY_COOLDOWN = 100 var/icon_name = "grinder-o" var/blood = 0 var/eat_dir = WEST + var/amount_produced = 1 + var/datum/material_container/materials /obj/machinery/recycler/New() // On us @@ -21,11 +23,20 @@ var/const/SAFETY_COOLDOWN = 100 component_parts += new /obj/item/weapon/circuitboard/recycler(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_URANIUM=1, MAT_BANANIUM=1)) RefreshParts() update_icon() -/obj/machinery/recycler/RefreshParts() //If you want to make the machine upgradable, this is where you would change any vars basd on its stock parts. - return +/obj/machinery/recycler/RefreshParts() + var/amt_made = 0 + var/mat_mod = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) + mat_mod = 2 * B.rating + mat_mod *= 50000 + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + amt_made = 25 * M.rating //% of materials salvaged + materials.max_amount = mat_mod + amount_produced = min(100, amt_made) /obj/machinery/recycler/examine() set src in view() @@ -39,7 +50,7 @@ var/const/SAFETY_COOLDOWN = 100 update_icon() -/obj/machinery/recycler/attackby(var/obj/item/I, var/mob/user, params) +/obj/machinery/recycler/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I)) if(!panel_open) update_icon() @@ -56,13 +67,14 @@ var/const/SAFETY_COOLDOWN = 100 add_fingerprint(user) return -/obj/machinery/recycler/emag_act(user as mob) +/obj/machinery/recycler/emag_act(mob/user) if(!emagged) emagged = 1 if(safety_mode) safety_mode = 0 update_icon() playsound(src.loc, "sparks", 75, 1, -1) + user << "You use the cryptographic sequencer on the [src.name]." /obj/machinery/recycler/update_icon() ..() @@ -107,20 +119,20 @@ var/const/SAFETY_COOLDOWN = 100 playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) AM.loc = src.loc -/obj/machinery/recycler/proc/recycle(var/obj/item/I, var/sound = 1) +/obj/machinery/recycler/proc/recycle(obj/item/I, sound = 1) I.loc = src.loc - if(!istype(I,/obj/item/flag/nation)) + if(!istype(I)) + return + + if(sound) + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + var/material_amount = materials.can_insert(I) + if(!material_amount) qdel(I) - if(prob(15)) - new /obj/item/stack/sheet/metal(loc) - if(prob(10)) - new /obj/item/stack/sheet/glass(loc) - if(prob(2)) - new /obj/item/stack/sheet/plasteel(loc) - if(prob(1)) - new /obj/item/stack/sheet/rglass(loc) - if(sound) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + return + materials.insert_item(I, multiplier = (amount_produced / 100)) + qdel(I) + materials.retrieve_all() /obj/machinery/recycler/proc/stop(var/mob/living/L) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 9f0e2a91523..f78f420d8d8 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -9,6 +9,7 @@ throw_speed = 3 throw_range = 7 flags = CONDUCT + materials = list(MAT_METAL = 300, MAT_GLASS = 300) origin_tech = "magnets=2;combat=1" var/times_used = 0 //Number of times it's been used. diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 5e840ee77e5..0fc641d8039 100755 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -19,6 +19,7 @@ AI MODULES throw_speed = 3 throw_range = 15 origin_tech = "programming=3" + materials = list(MAT_GOLD=50) var/datum/ai_laws/laws = null /obj/item/weapon/aiModule/proc/install(var/obj/machinery/computer/C) @@ -88,7 +89,7 @@ AI MODULES /obj/item/weapon/aiModule/proc/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) - + /******************** Safeguard ********************/ /obj/item/weapon/aiModule/safeguard name = "\improper 'Safeguard' AI module" @@ -175,7 +176,7 @@ AI MODULES var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, anyone from leaving. It is impossible to harm anyone while preventing them from leaving." target << law target.add_supplied_law(8, law) - + /******************** OxygenIsToxicToHumans ********************/ /obj/item/weapon/aiModule/oxygen name = "\improper 'OxygenIsToxicToHumans' AI module" @@ -263,7 +264,7 @@ AI MODULES desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=4" laws = new/datum/ai_laws/asimov - + /******************** Crewsimov ********************/ /obj/item/weapon/aiModule/crewsimov // -- TLE name = "\improper 'Crewsimov' core AI module" @@ -291,7 +292,7 @@ AI MODULES desc = "A 'Drone' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=4" laws = new/datum/ai_laws/drone - + /******************** Robocop ********************/ /obj/item/weapon/aiModule/robocop // -- TLE name = "\improper 'Robocop' core AI module" @@ -305,7 +306,7 @@ AI MODULES desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=6" laws = new/datum/ai_laws/paladin - + /****************** T.Y.R.A.N.T. *****************/ /obj/item/weapon/aiModule/tyrant // -- Darem name = "\improper 'T.Y.R.A.N.T.' core AI module" @@ -344,7 +345,7 @@ AI MODULES if(!newFreeFormLaw) usr << "No law detected on module, please create one." return 0 - ..() + ..() /******************** Hacked AI Module ******************/ /obj/item/weapon/aiModule/syndicate // Slightly more dynamic freeform module -- TLE @@ -374,7 +375,7 @@ AI MODULES if(!newFreeFormLaw) usr << "No law detected on module, please create one." return 0 - ..() + ..() /******************* Ion Module *******************/ /obj/item/weapon/aiModule/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 456a518f75e..8fc0a74cf9c 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -201,6 +201,7 @@ desc = "Proves to the world that you are the strongest!" icon_state = "championbelt" item_state = "champion" + materials = list(MAT_GOLD=400) storage_slots = 1 can_hold = list( "/obj/item/clothing/mask/luchador" diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index fb10938e6f4..de1e1522a6b 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -10,6 +10,7 @@ throw_speed = 2 throw_range = 7 w_class = 4.0 + materials = list(MAT_METAL = 500) origin_tech = "combat=1" attack_verb = list("robusted") hitsound = "sound/weapons/smash.ogg" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 6b66b5fb244..993ec11e7c1 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -130,6 +130,7 @@ w_class = 2.0 flags = GLASSESCOVERSEYES slot_flags = SLOT_EYES + materials = list(MAT_GLASS = 250) var/vision_flags = 0 var/darkness_view = 0//Base human is 2 var/invisa_view = 0 diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index e43b72a499c..ba2e2f7f723 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -118,10 +118,11 @@ desc = "A bronze medal." icon_state = "bronze" _color = "bronze" + materials = list(MAT_METAL=1000) /obj/item/clothing/accessory/medal/conduct name = "distinguished conduct medal" - desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." + desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." /obj/item/clothing/accessory/medal/bronze_heart name = "bronze heart medal" @@ -137,6 +138,7 @@ desc = "A silver medal." icon_state = "silver" _color = "silver" + materials = list(MAT_SILVER=1000) /obj/item/clothing/accessory/medal/silver/valor name = "medal of valor" @@ -151,6 +153,7 @@ desc = "A prestigious golden medal." icon_state = "gold" _color = "gold" + materials = list(MAT_GOLD=1000) /obj/item/clothing/accessory/medal/gold/captain name = "medal of captaincy" diff --git a/code/modules/mining/coins.dm b/code/modules/mining/coins.dm index 9516af4268f..16643f8842a 100644 --- a/code/modules/mining/coins.dm +++ b/code/modules/mining/coins.dm @@ -25,36 +25,43 @@ /obj/item/weapon/coin/gold cmineral = "gold" icon_state = "coin_gold_heads" + materials = list(MAT_GOLD = 200) credits = 160 /obj/item/weapon/coin/silver cmineral = "silver" icon_state = "coin_silver_heads" + materials = list(MAT_SILVER = 200) credits = 40 /obj/item/weapon/coin/diamond cmineral = "diamond" icon_state = "coin_diamond_heads" + materials = list(MAT_DIAMOND = 200) credits = 120 /obj/item/weapon/coin/iron cmineral = "iron" icon_state = "coin_iron_heads" + materials = list(MAT_METAL = 200) credits = 20 /obj/item/weapon/coin/plasma cmineral = "plasma" icon_state = "coin_plasma_heads" + materials = list(MAT_PLASMA = 200) credits = 80 /obj/item/weapon/coin/uranium cmineral = "uranium" icon_state = "coin_uranium_heads" + materials = list(MAT_URANIUM = 200) credits = 160 /obj/item/weapon/coin/clown cmineral = "bananium" icon_state = "coin_bananium_heads" + materials = list(MAT_BANANIUM = 200) credits = 600 //makes the clown cri /obj/item/weapon/coin/adamantine diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 374f9cf603a..97c2693e439 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -175,6 +175,7 @@ force = 14 throwforce = 10 amount_per_transfer_from_this = 20 + materials = list(MAT_GOLD=800) possible_transfer_amounts = null volume = 150 flags = CONDUCT | OPENCONTAINER @@ -357,12 +358,14 @@ name = "Captain's Flask" desc = "A metal flask belonging to the captain" icon_state = "flask" + materials = list(MAT_SILVER=300) volume = 60 /obj/item/weapon/reagent_containers/food/drinks/flask/detflask name = "Detective's Flask" desc = "A metal flask with a leather band and golden badge belonging to the detective." icon_state = "detflask" + materials = list(MAT_METAL=200) volume = 60 /obj/item/weapon/reagent_containers/food/drinks/flask/barflask From 95cea497029970bd762e67274d310fb322efb9fe Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Fri, 4 Sep 2015 22:56:52 -0400 Subject: [PATCH 15/25] oops --- code/game/objects/items/devices/radio/intercom.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 21853ae3760..987d2475245 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -112,10 +112,6 @@ spawn(0) attack_self(user) -/obj/item/device/radio/intercom/attack_ghost(mob/user as mob) - spawn(0) - attack_self(user) - /obj/item/device/radio/intercom/attack_hand(mob/user as mob) add_fingerprint(user) spawn(0) From 53516dfc4b4bad4d874993a2adc2d0df4eff409a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 5 Sep 2015 02:18:42 -0400 Subject: [PATCH 16/25] Space Cleaner Feature: Color Removal --- code/modules/reagents/Chemistry-Reagents.dm | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 615eefbcf5a..a2e6dd57498 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1118,13 +1118,18 @@ datum color = "#61C2C2" reaction_obj(var/obj/O, var/volume) + if(O) + O.color = initial(O.color) if(istype(O,/obj/effect/decal/cleanable)) qdel(O) else if(O) O.clean_blood() + reaction_turf(var/turf/T, var/volume) if(volume >= 1) + if(T) + T.color = initial(T.color) T.overlays.Cut() T.clean_blood() for(var/obj/effect/decal/cleanable/C in src) @@ -1132,9 +1137,10 @@ datum for(var/mob/living/carbon/slime/M in T) M.adjustToxLoss(rand(5,10)) - reaction_turf(var/turf/simulated/S, var/volume) - if(volume >= 1) - S.dirt = 0 + if(istype(T,/turf/simulated)) + var/turf/simulated/S = T + S.dirt = 0 + reaction_mob(var/mob/M, var/method=TOUCH, var/volume) if(iscarbon(M)) var/mob/living/carbon/C = M @@ -2242,11 +2248,11 @@ datum M.AdjustWeakened(-1) ..() return - + overdose_process(var/mob/living/M as mob) if(volume > 45) M.Jitter(5) - + ..() return From 54d2fa8c843e49eabad7db5b2fc960ff18f5fc73 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sat, 5 Sep 2015 08:34:08 -0700 Subject: [PATCH 17/25] Misc. -tg- xeno tweaks This commit does the following: - Allows xenomorphs to mine through mineral turfs (the asteroid) - Changes weed spreading to use atmos procs; It will spread like gas, not just checking "oh, dense object, no pass for me!" - No, this doesn't mean it will spread infinitely or quicker, just changes where it can spread. --- code/game/objects/effects/aliens.dm | 19 ++++++------------- code/modules/mining/mine_turfs.dm | 7 +++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index e895e2f3ad2..69753a3252c 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -191,21 +191,14 @@ qdel(src) return - direction_loop: - for(var/dirn in cardinal) - var/turf/T = get_step(src, dirn) + if(!linked_node || get_dist(linked_node, src) > linked_node.node_range) + return - if (!istype(T) || T.density || locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space)) - continue + for(var/turf/T in U.GetAtmosAdjacentTurfs()) + if(locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space)) + continue - if(!linked_node || get_dist(linked_node, src) > linked_node.node_range) - return - - for(var/obj/O in T) - if(O.density) - continue direction_loop - - new /obj/structure/alien/weeds(T, linked_node) + new /obj/structure/alien/weeds(T, linked_node) /obj/structure/alien/weeds/ex_act(severity) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index a6dff1764df..a2a7cbc706a 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -393,6 +393,13 @@ var/global/list/rockTurfEdgeCache gets_drilled() ..() +/turf/simulated/mineral/attack_alien(var/mob/living/carbon/alien/M) + M << "You start digging into the rock..." + playsound(src, 'sound/effects/break_stone.ogg', 50, 1) + if(do_after(M, 40, target = src)) + M << "You tunnel into the rock." + gets_drilled() + /turf/simulated/mineral/Bumped(AM as mob|obj) . = ..() if(istype(AM,/mob/living/carbon/human)) From 2214a8b455f3944dd09a97eb089ca3127b065d9d Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sat, 5 Sep 2015 23:57:22 -0400 Subject: [PATCH 18/25] R&D Update: Implants and Autolathes --- .../objects/items/weapons/implants/implant.dm | 12 ++++- .../items/weapons/implants/implantcase.dm | 20 ++++++++ .../items/weapons/implants/implanter.dm | 7 +++ .../items/weapons/implants/implantfreedom.dm | 4 +- .../items/weapons/implants/implantuplink.dm | 1 + code/modules/reagents/newchem/medicine.dm | 29 ++++++++++++ .../modules/reagents/newchem/newchem_procs.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 2 +- .../research/designs/autolathe_designs.dm | 16 +++++++ .../research/designs/medical_designs.dm | 44 ++++++++++++++++++ icons/obj/device.dmi | Bin 32014 -> 31998 bytes 11 files changed, 131 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index c964dd1e0b4..820a3311cff 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -4,6 +4,7 @@ name = "implant" icon = 'icons/obj/device.dmi' icon_state = "implant" + origin_tech = "materials=2;biotech=3;programming=2" var/implanted = null var/mob/living/imp_in = null var/obj/item/organ/external/part = null @@ -52,6 +53,7 @@ /obj/item/weapon/implant/tracking name = "tracking" desc = "Track with this." + origin_tech = "materials=2;magnets=2;programming=2;biotech=2" var/id = 1.0 @@ -92,6 +94,7 @@ Implant Specifics:
"} /obj/item/weapon/implant/dexplosive name = "explosive" desc = "And boom goes the weasel." + origin_tech = "materials=2;combat=3;biotech=4;syndicate=4" icon_state = "implant_evil" get_data() @@ -127,6 +130,7 @@ Implant Specifics:
"} /obj/item/weapon/implant/explosive name = "explosive implant" desc = "A military grade micro bio-explosive. Highly dangerous." + origin_tech = "materials=2;combat=3;biotech=4;syndicate=4" var/elevel = "Localized Limb" var/phrase = "supercalifragilisticexpialidocious" icon_state = "implant_evil" @@ -252,6 +256,7 @@ Implant Specifics:
"} /obj/item/weapon/implant/chem name = "chem" desc = "Injects things." + origin_tech = "materials=3;biotech=4" allow_reagents = 1 get_data() @@ -316,6 +321,7 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/loyalty name = "loyalty" desc = "Makes you loyal or such." + origin_tech = "materials=2;biotech=4;programming=4" get_data() var/dat = {" @@ -406,6 +412,7 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/adrenalin name = "adrenalin" desc = "Removes all stuns and knockdowns." + origin_tech = "materials=2;biotech=4;combat=3;syndicate=4" var/uses = 3 get_data() @@ -436,7 +443,7 @@ the implant may become unstable and either pre-maturely inject the subject or si source.reagents.add_reagent("synaptizine", 10) source.reagents.add_reagent("omnizine", 10) - source.reagents.add_reagent("methamphetamine", 10) + source.reagents.add_reagent("stimulative_agent", 10) return @@ -523,6 +530,7 @@ the implant may become unstable and either pre-maturely inject the subject or si name = "compressed matter implant" desc = "Based on compressed matter technology, can store a single item." icon_state = "implant_evil" + origin_tech = "materials=2;magnets=4;bluespace=4;syndicate=4" var/activation_emote = "sigh" var/obj/item/scanned = null @@ -574,7 +582,7 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/emp name = "emp implant" desc = "Triggers an EMP." - + origin_tech = "materials=2;biotech=3;magnets=4;syndicate=4" var/activation_emote = "chuckle" var/uses = 2 diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index f4f9f3d2400..f32764ae410 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -8,7 +8,14 @@ throw_speed = 1 throw_range = 5 w_class = 1.0 + origin_tech = "materials=1;biotech=2" + materials = list(MAT_GLASS=500) var/obj/item/weapon/implant/imp = null + + New() + ..() + update() + proc update() @@ -16,8 +23,10 @@ update() if (src.imp) src.icon_state = text("implantcase-[]", src.imp._color) + src.origin_tech = src.imp.origin_tech else src.icon_state = "implantcase-0" + src.origin_tech = initial(src.origin_tech) return @@ -148,4 +157,15 @@ New() src.imp = new /obj/item/weapon/implant/freedom( src ) ..() + return + +/obj/item/weapon/implantcase/adrenaline + name = "Glass Case- 'Adrenaline'" + desc = "A glass case containing an adrenaline implant." + icon = 'icons/obj/items.dmi' + icon_state = "implantcase-b" + + New() + src.imp = new /obj/item/weapon/implant/adrenalin( src ) + ..() return \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 423ab379253..f0cad339826 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -6,16 +6,23 @@ throw_speed = 1 throw_range = 5 w_class = 2.0 + origin_tech = "materials=1;biotech=3;programming=2" var/obj/item/weapon/implant/imp = null +/obj/item/weapon/implanter/New() + ..() + update() + /obj/item/weapon/implanter/proc/update() /obj/item/weapon/implanter/update() if (src.imp) src.icon_state = "implanter1" + src.origin_tech = src.imp.origin_tech else src.icon_state = "implanter0" + src.origin_tech = initial(src.origin_tech) return diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm index 9b225ac70fc..68497e500b7 100644 --- a/code/game/objects/items/weapons/implants/implantfreedom.dm +++ b/code/game/objects/items/weapons/implants/implantfreedom.dm @@ -5,12 +5,12 @@ desc = "Use this to escape from those evil Red Shirts." _color = "r" var/activation_emote = "chuckle" - var/uses = 1.0 + origin_tech = "materials=2;magnets=3;biotech=3;syndicate=4" + var/uses = 4 New() src.activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") - src.uses = rand(1, 5) ..() return diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm index 05b50b49b03..6e7fac76a6c 100644 --- a/code/game/objects/items/weapons/implants/implantuplink.dm +++ b/code/game/objects/items/weapons/implants/implantuplink.dm @@ -1,6 +1,7 @@ /obj/item/weapon/implant/uplink name = "uplink" desc = "Summon things." + origin_tech = "materials=2;magnets=4;programming=4;biotech=4;syndicate=8;bluespace=5" var/activation_emote = "chuckle" /obj/item/weapon/implant/uplink/New() diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index ea2675034e7..add5d264d4f 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -825,6 +825,35 @@ datum/reagent/stimulants/reagent_deleted(var/mob/living/M as mob) ..() return +/datum/reagent/medicine/stimulative_agent + name = "Stimulative Agent" + id = "stimulative_agent" + description = "An illegal compound that darmatically enhances the body's performance and healing capabilities." + color = "#C8A5DC" + metabolization_rate = 0.5 * REAGENTS_METABOLISM + overdose_threshold = 60 + +/datum/reagent/medicine/stimulative_agent/on_mob_life(mob/living/M) + M.status_flags |= GOTTAGOFAST + if(M.health < 50 && M.health > 0) + M.adjustOxyLoss(-1*REM) + M.adjustToxLoss(-1*REM) + M.adjustBruteLoss(-1*REM) + M.adjustFireLoss(-1*REM) + M.AdjustParalysis(-3) + M.AdjustStunned(-3) + M.AdjustWeakened(-3) + M.adjustStaminaLoss(-5*REM) + ..() + +/datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M) + if(prob(33)) + M.adjustStaminaLoss(2.5*REM) + M.adjustToxLoss(1*REM) + M.losebreath++ + ..() + return + datum/reagent/insulin name = "Insulin" id = "insulin" diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm index 5c87c0f0044..b2d6edc0995 100644 --- a/code/modules/reagents/newchem/newchem_procs.dm +++ b/code/modules/reagents/newchem/newchem_procs.dm @@ -96,7 +96,7 @@ datum/reagents/proc/check_ignoreslow(var/mob/M) datum/reagents/proc/check_gofast(var/mob/M) if(istype(M, /mob)) - if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")) + if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")||M.reagents.has_reagent("stimulative_agent")) return 1 else M.status_flags &= ~GOTTAGOFAST diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 07c245d889d..11ca778f6c0 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -190,7 +190,7 @@ /obj/item/device/destTagger name = "destination tagger" desc = "Used to set the destination of properly wrapped packages." - icon_state = "dest_tagger" + icon_state = "cargotagger" var/currTag = 0 //The whole system for the sorttype var is determined based on the order of this list, //disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 247bfdf25d8..bfaf774c42f 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -546,3 +546,19 @@ materials = list(MAT_METAL = 4000) build_path = /obj/item/ammo_casing/shotgun category = list("hacked", "Security") + +/datum/design/desttagger + name = "Destination tagger" + id = "desttagger" + build_type = AUTOLATHE + materials = list(MAT_METAL = 250, MAT_GLASS = 125) + build_path = /obj/item/device/destTagger + category = list("initial", "Electronics") + +/datum/design/handlabeler + name = "Hand labeler" + id = "handlabel" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150, MAT_GLASS = 125) + build_path = /obj/item/weapon/hand_labeler + category = list("initial", "Electronics") \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index cf945134663..1cfd36c2bd6 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -204,4 +204,48 @@ build_type = PROTOLATHE materials = list (MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 1500, MAT_GOLD = 1500, MAT_DIAMOND = 750) build_path = /obj/item/weapon/scalpel/manager + category = list("Medical") + +///////////////////////////////////////// +////////////Regular Implants///////////// +///////////////////////////////////////// + +/datum/design/implanter + name = "Implanter" + desc = "A sterile automatic implant injector." + id = "implanter" + req_tech = list("materials" = 1, "programming" = 2, "biotech" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 600, MAT_GLASS = 200) + build_path = /obj/item/weapon/implanter + category = list("Medical") + +/datum/design/implantcase + name = "Implant Case" + desc = "A glass case containing an implant." + id = "implantcase" + req_tech = list("materials" = 1, "biotech" = 2) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/weapon/implantcase + category = list("Medical") + +/datum/design/implant_freedom + name = "Freedom Implant Case" + desc = "A glass case containing an implant." + id = "implant_freedom" + req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "syndicate" = 5) + build_type = PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 500, MAT_GOLD = 250) + build_path = /obj/item/weapon/implantcase/freedom + category = list("Medical") + +/datum/design/implant_adrenalin + name = "Adrenalin Implant Case" + desc = "A glass case containing an implant." + id = "implant_adrenalin" + req_tech = list("materials" = 2, "biotech" = 5, "combat" = 3, "syndicate" = 6) + build_type = PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 500, MAT_GOLD = 500, MAT_URANIUM = 100, MAT_DIAMOND = 200) + build_path = /obj/item/weapon/implantcase/adrenaline category = list("Medical") \ No newline at end of file diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 64e1b4941be17ca1ab0d7b6dcbef393a2d51543f..471cad514e521e68f9b7156e4b38d776bb878843 100644 GIT binary patch literal 31998 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

HRVW&V&W7_?C?o7Vn`ssHSdTsmEugy;J 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 literal 32014 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 sj~>1xb?4GF0m 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 From 3250621552627f8c133ae487f34c942768a90561 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 6 Sep 2015 02:19:44 -0400 Subject: [PATCH 19/25] Health Assembly --- code/game/machinery/vending.dm | 3 +- code/modules/assembly/health.dm | 104 ++++++++++++++++++ code/modules/mob/living/carbon/human/human.dm | 30 ++--- .../research/designs/autolathe_designs.dm | 8 ++ icons/obj/assemblies/new_assemblies.dmi | Bin 11088 -> 11591 bytes paradise.dme | 1 + 6 files changed, 131 insertions(+), 15 deletions(-) create mode 100644 code/modules/assembly/health.dm diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 4cfdc0a6c29..1b3f89af28a 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -729,7 +729,7 @@ /obj/machinery/vending/assist products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4, /obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4) - contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2) + contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2, /obj/item/device/assembly/health = 2) product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" /obj/machinery/vending/boozeomat/New() @@ -887,6 +887,7 @@ products = list(/obj/item/clothing/under/rank/scientist = 6,/obj/item/clothing/suit/bio_suit = 6,/obj/item/clothing/head/bio_hood = 6, /obj/item/device/transfer_valve = 6,/obj/item/device/assembly/timer = 6,/obj/item/device/assembly/signaler = 6, /obj/item/device/assembly/prox_sensor = 6,/obj/item/device/assembly/igniter = 6) + contraband = list(/obj/item/device/assembly/health = 3) /obj/machinery/vending/wallmed1 name = "NanoMed" diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm new file mode 100644 index 00000000000..f1a3f402336 --- /dev/null +++ b/code/modules/assembly/health.dm @@ -0,0 +1,104 @@ +/obj/item/device/assembly/health + name = "health sensor" + desc = "Used for scanning and monitoring health." + icon_state = "health" + materials = list(MAT_METAL=800, MAT_GLASS=200) + origin_tech = "magnets=1;biotech=1" + secured = 0 + + var/scanning = 0 + var/health_scan + var/alarm_health = 0 + + + +/obj/item/device/assembly/health/activate() + if(!..()) return 0//Cooldown check + toggle_scan() + return 0 + +/obj/item/device/assembly/health/toggle_secure() + secured = !secured + if(secured && scanning) + processing_objects.Add(src) + else + scanning = 0 + processing_objects.Remove(src) + update_icon() + return secured + +/obj/item/device/assembly/health/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/multitool)) + if(alarm_health == 0) + alarm_health = -90 + user.show_message("You toggle [src] to \"detect death\" mode.") + else + alarm_health = 0 + user.show_message("You toggle [src] to \"detect critical state\" mode.") + return + else + return ..() + +/obj/item/device/assembly/health/process() + if(!scanning || !secured) + return + + var/atom/A = src + if(connected && connected.holder) + A = connected.holder + + for(A, A && !ismob(A), A=A.loc); + // like get_turf(), but for mobs. + var/mob/living/M = A + + if(M) + health_scan = M.health + if(health_scan <= alarm_health) + pulse() + audible_message("\icon[src] *beep* *beep*", "*beep* *beep*") + toggle_scan() + return + return + +/obj/item/device/assembly/health/proc/toggle_scan() + if(!secured) return 0 + scanning = !scanning + if(scanning) + processing_objects.Add(src) + else + processing_objects.Remove(src) + return + +/obj/item/device/assembly/health/interact(mob/user as mob)//TODO: Change this to the wires thingy + if(!secured) + user.show_message("The [name] is unsecured!") + return 0 + var/dat = text("Health Sensor [scanning?"On":"Off"]") + if(scanning && health_scan) + dat += "
Health: [health_scan]" + user << browse(dat, "window=hscan") + onclose(user, "hscan") + return + + +/obj/item/device/assembly/health/Topic(href, href_list) + ..() + if(!ismob(usr)) + return + + var/mob/user = usr + + if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + usr << browse(null, "window=hscan") + onclose(usr, "hscan") + return + + if(href_list["scanning"]) + toggle_scan() + + if(href_list["close"]) + usr << browse(null, "window=hscan") + return + + attack_self(user) + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a63f487aec7..b5e637fa546 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -244,6 +244,8 @@ stat(null, eta_status) if (client.statpanel == "Status") + if(locate(/obj/item/device/assembly/health) in src) + stat(null, "Health: [health]") if (internal) if (!internal.air_contents) qdel(internal) @@ -431,7 +433,7 @@ var/armor_block = run_armor_check(affecting, "melee") apply_damage(damage, BRUTE, affecting, armor_block) -/mob/living/carbon/human/proc/is_loyalty_implanted() +/mob/living/carbon/human/proc/is_loyalty_implanted() for(var/L in contents) if(istype(L, /obj/item/weapon/implant/loyalty)) for(var/obj/item/organ/external/O in organs) @@ -694,7 +696,7 @@ // if looting pockets with gloves, do it quietly if(href_list["pockets"]) - if(isanimal(usr)) + if(isanimal(usr)) return //animals cannot strip people if(frozen) @@ -726,19 +728,19 @@ // Update strip window if(usr.machine == src && in_range(src, usr)) show_inv(usr) - + else if(!pickpocket) // Display a warning if the user mocks up src << "You feel your [pocket_side] pocket being fumbled with!" // if looting id with gloves, do it quietly - this allows pickpocket gloves to take/place id stealthily - Bone White if(href_list["item"]) - if(isanimal(usr)) + if(isanimal(usr)) return //animals cannot strip people - + if(frozen) usr << "\red Do not attempt to strip frozen people." - return + return var/itemTarget = href_list["item"] if(itemTarget == "id") if(pickpocket) @@ -1158,7 +1160,7 @@ if(!fail_msg) fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into." user << "[fail_msg]" - + /mob/living/carbon/human/proc/check_has_mouth() // Todo, check stomach organ when implemented. var/obj/item/organ/external/head/H = get_organ("head") @@ -1170,7 +1172,7 @@ if(stat==DEAD)return if(!check_has_mouth()) - return + return if(!lastpuke) lastpuke = 1 @@ -1517,16 +1519,16 @@ W.add_fingerprint(src) -// Allows IPC's to change their monitor display +// Allows IPC's to change their monitor display /mob/living/carbon/human/proc/change_monitor() - set category = "IC" + set category = "IC" set name = "Change Monitor Display" set desc = "Change the display on your monitor." - + if(stat || paralysis || stunned || weakened) src << "You cannot change your monitor display in your current state." - return - + return + var/list/hair = list() for(var/i in hair_styles_list) var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i] @@ -1540,7 +1542,7 @@ h_style = new_style update_hair() - + //Putting a couple of procs here that I don't know where else to dump. //Mostly going to be used for Vox and Vox Armalis, but other human mobs might like them (for adminbuse). /mob/living/carbon/human/proc/leap() diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 247bfdf25d8..5b324c2736a 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -162,6 +162,14 @@ build_path = /obj/item/device/assembly/infra category = list("initial", "Miscellaneous") +/datum/design/health_sensor + name = "Health sensor" + id = "health_sensor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/device/assembly/health + category = list("initial", "Medical") + /datum/design/kitchen_knife name = "Kitchen knife" id = "kitchen_knife" diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi index 0f9dc4608250148b2c0809fb17bc14789cb0f7c2..b50ef0e13e393b83900afb893b12b07d6ecbc205 100644 GIT binary patch literal 11591 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 diff --git a/paradise.dme b/paradise.dme index b8184ad6713..238cea3415c 100644 --- a/paradise.dme +++ b/paradise.dme @@ -959,6 +959,7 @@ #include "code\modules\alarm\power_alarm.dm" #include "code\modules\assembly\assembly.dm" #include "code\modules\assembly\bomb.dm" +#include "code\modules\assembly\health.dm" #include "code\modules\assembly\helpers.dm" #include "code\modules\assembly\holder.dm" #include "code\modules\assembly\igniter.dm" From 8abdc809879d64a611d4b52dde8ac3ea33e80aa8 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 7 Sep 2015 04:49:55 +0200 Subject: [PATCH 20/25] Fix invincible spiderbots and cryo bags --- code/modules/mob/living/carbon/human/life.dm | 1 + code/modules/mob/living/simple_animal/friendly/spiderbot.dm | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 82f09f0f489..875a3a85260 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -64,6 +64,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc life_tick++ var/datum/gas_mixture/environment = loc.return_air() + in_stasis = 0 if(istype(loc, /obj/structure/closet/body_bag/cryobag)) var/obj/structure/closet/body_bag/cryobag/loc_as_cryobag = loc if(!loc_as_cryobag.opened) diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index a09f843b118..80e715dc7d3 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -212,8 +212,9 @@ if(camera) camera.status = 0 - held_item.loc = src.loc - held_item = null + if(held_item) + held_item.forceMove(src.loc) + held_item = null robogibs(src.loc, viruses) qdel(src) From 156bdb64c23009a30867ae617961503e00a74d52 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 6 Sep 2015 20:41:37 -0700 Subject: [PATCH 21/25] Split giant chemistry files into oldchem folder This commit does the following: - Removes relative pathing from: - Chemistry-Holder.dm - grenade_launcher.dm - reagent_dispenser.dm - Splits Chemistry-Reagents.dm into oldchem/reagents/ - Splits Chemistry-Recipies.dm into oldchem/chemical_reaction/ Another couple of huge relative-pathed files resolved. --- code/modules/reagents/Chemistry-Holder.dm | 1087 +++--- code/modules/reagents/Chemistry-Reagents.dm | 3283 ----------------- code/modules/reagents/Chemistry-Recipes.dm | 1576 -------- code/modules/reagents/grenade_launcher.dm | 94 +- .../_chemical_reaction_base.dm | 23 + .../chemical_reaction_drink.dm | 590 +++ .../chemical_reaction_food.dm | 108 + .../chemical_reaction_harm.dm | 76 + .../chemical_reaction_med.dm | 98 + .../chemical_reaction_misc.dm | 199 + .../chemical_reaction_slime.dm | 487 +++ .../oldchem/reagents/__oldchem_defines.dm | 5 + .../oldchem/reagents/_reagent_base.dm | 82 + .../reagents/drink/reagents_alcohol.dm | 748 ++++ .../oldchem/reagents/drink/reagents_drink.dm | 279 ++ .../reagents/drink/reagents_drink_base.dm | 26 + .../reagents/drink/reagents_drink_cold.dm | 141 + .../oldchem/reagents/reagents_admin.dm | 54 + .../oldchem/reagents/reagents_drugs.dm | 95 + .../oldchem/reagents/reagents_flammable.dm | 136 + .../oldchem/reagents/reagents_food.dm | 425 +++ .../reagents/oldchem/reagents/reagents_med.dm | 152 + .../oldchem/reagents/reagents_misc.dm | 222 ++ .../oldchem/reagents/reagents_toxin.dm | 597 +++ .../oldchem/reagents/reagents_water.dm | 348 ++ code/modules/reagents/reagent_dispenser.dm | 166 +- paradise.dme | 23 +- 27 files changed, 5588 insertions(+), 5532 deletions(-) delete mode 100644 code/modules/reagents/Chemistry-Reagents.dm delete mode 100644 code/modules/reagents/Chemistry-Recipes.dm create mode 100644 code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm create mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm create mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm create mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm create mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm create mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm create mode 100644 code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm create mode 100644 code/modules/reagents/oldchem/reagents/__oldchem_defines.dm create mode 100644 code/modules/reagents/oldchem/reagents/_reagent_base.dm create mode 100644 code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm create mode 100644 code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm create mode 100644 code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm create mode 100644 code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm create mode 100644 code/modules/reagents/oldchem/reagents/reagents_admin.dm create mode 100644 code/modules/reagents/oldchem/reagents/reagents_drugs.dm create mode 100644 code/modules/reagents/oldchem/reagents/reagents_flammable.dm create mode 100644 code/modules/reagents/oldchem/reagents/reagents_food.dm create mode 100644 code/modules/reagents/oldchem/reagents/reagents_med.dm create mode 100644 code/modules/reagents/oldchem/reagents/reagents_misc.dm create mode 100644 code/modules/reagents/oldchem/reagents/reagents_toxin.dm create mode 100644 code/modules/reagents/oldchem/reagents/reagents_water.dm diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index f8661d168e8..29a67ffe492 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -5,621 +5,618 @@ var/const/INGEST = 2 /////////////////////////////////////////////////////////////////////////////////// -datum - reagents - var/list/datum/reagent/reagent_list = new/list() - var/total_volume = 0 - var/maximum_volume = 100 - var/atom/my_atom = null +/datum/reagents + var/list/datum/reagent/reagent_list = new/list() + var/total_volume = 0 + var/maximum_volume = 100 + var/atom/my_atom = null - New(maximum=100) - maximum_volume = maximum +/datum/reagents/New(maximum=100) + maximum_volume = maximum - //I dislike having these here but map-objects are initialised before world/New() is called. >_> - if(!chemical_reagents_list) - //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id - var/paths = subtypesof(/datum/reagent) - chemical_reagents_list = list() - for(var/path in paths) - var/datum/reagent/D = new path() - chemical_reagents_list[D.id] = D - if(!chemical_reactions_list) - //Chemical Reactions - Initialises all /datum/chemical_reaction into a list - // It is filtered into multiple lists within a list. - // For example: - // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma + //I dislike having these here but map-objects are initialised before world/New() is called. >_> + if(!chemical_reagents_list) + //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id + var/paths = subtypesof(/datum/reagent) + chemical_reagents_list = list() + for(var/path in paths) + var/datum/reagent/D = new path() + chemical_reagents_list[D.id] = D + if(!chemical_reactions_list) + //Chemical Reactions - Initialises all /datum/chemical_reaction into a list + // It is filtered into multiple lists within a list. + // For example: + // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma - var/paths = subtypesof(/datum/chemical_reaction) - chemical_reactions_list = list() + var/paths = subtypesof(/datum/chemical_reaction) + chemical_reactions_list = list() - for(var/path in paths) + for(var/path in paths) - var/datum/chemical_reaction/D = new path() - var/list/reaction_ids = list() + var/datum/chemical_reaction/D = new path() + var/list/reaction_ids = list() - if(D && D.required_reagents && D.required_reagents.len) - for(var/reaction in D.required_reagents) - reaction_ids += reaction + if(D && D.required_reagents && D.required_reagents.len) + for(var/reaction in D.required_reagents) + reaction_ids += reaction - // Create filters based on each reagent id in the required reagents list - for(var/id in reaction_ids) - if(!chemical_reactions_list[id]) - chemical_reactions_list[id] = list() - chemical_reactions_list[id] += D - break // Don't bother adding ourselves to other reagent ids, it is redundant. + // Create filters based on each reagent id in the required reagents list + for(var/id in reaction_ids) + if(!chemical_reactions_list[id]) + chemical_reactions_list[id] = list() + chemical_reactions_list[id] += D + break // Don't bother adding ourselves to other reagent ids, it is redundant. - proc +/datum/reagents/proc/remove_any(var/amount=1) + var/total_transfered = 0 + var/current_list_element = 1 - remove_any(var/amount=1) - var/total_transfered = 0 - var/current_list_element = 1 + current_list_element = rand(1,reagent_list.len) - current_list_element = rand(1,reagent_list.len) + while(total_transfered != amount) + if(total_transfered >= amount) break + if(total_volume <= 0 || !reagent_list.len) break - while(total_transfered != amount) - if(total_transfered >= amount) break - if(total_volume <= 0 || !reagent_list.len) break + if(current_list_element > reagent_list.len) current_list_element = 1 + var/datum/reagent/current_reagent = reagent_list[current_list_element] - if(current_list_element > reagent_list.len) current_list_element = 1 - var/datum/reagent/current_reagent = reagent_list[current_list_element] + src.remove_reagent(current_reagent.id, min(1, amount - total_transfered)) - src.remove_reagent(current_reagent.id, min(1, amount - total_transfered)) + current_list_element++ + total_transfered++ + src.update_total() - current_list_element++ - total_transfered++ - src.update_total() + handle_reactions() + return total_transfered - handle_reactions() - return total_transfered +/datum/reagents/proc/get_master_reagent_name() + var/the_name = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_name = A.name - get_master_reagent_name() - var/the_name = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_name = A.name + return the_name - return the_name +/datum/reagents/proc/get_master_reagent_id() + var/the_id = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_id = A.id - get_master_reagent_id() - var/the_id = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_id = A.id + return the_id - return the_id +/datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. + if (!target ) + return + if (!target.reagents || src.total_volume<=0) + return + var/datum/reagents/R = target.reagents + amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) + var/part = amount / src.total_volume + var/trans_data = null + for (var/datum/reagent/current_reagent in src.reagent_list) + if (!current_reagent) + continue + if (current_reagent.id == "blood" && ishuman(target)) + var/mob/living/carbon/human/H = target + H.inject_blood(my_atom, amount) + continue + var/current_reagent_transfer = current_reagent.volume * part + if(preserve_data) + trans_data = copy_data(current_reagent) - trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. - if (!target ) - return - if (!target.reagents || src.total_volume<=0) - return - var/datum/reagents/R = target.reagents - amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) - var/part = amount / src.total_volume - var/trans_data = null - for (var/datum/reagent/current_reagent in src.reagent_list) - if (!current_reagent) - continue - if (current_reagent.id == "blood" && ishuman(target)) - var/mob/living/carbon/human/H = target - H.inject_blood(my_atom, amount) - continue - var/current_reagent_transfer = current_reagent.volume * part - if(preserve_data) - trans_data = copy_data(current_reagent) + R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, src.chem_temp) + src.remove_reagent(current_reagent.id, current_reagent_transfer) - R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, src.chem_temp) - src.remove_reagent(current_reagent.id, current_reagent_transfer) + src.update_total() + R.update_total() + R.handle_reactions() + src.handle_reactions() + return amount - src.update_total() - R.update_total() - R.handle_reactions() - src.handle_reactions() - return amount +/datum/reagents/proc/trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents + if (!target ) + return + if (!target.reagents || src.total_volume<=0) + return - trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents - if (!target ) - return - if (!target.reagents || src.total_volume<=0) - return + var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder + B.volume = 1000 - var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder - B.volume = 1000 + var/datum/reagents/BR = B.reagents + var/datum/reagents/R = target.reagents - var/datum/reagents/BR = B.reagents - var/datum/reagents/R = target.reagents + amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) - amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) + src.trans_to(B, amount) - src.trans_to(B, amount) + spawn(-1) + src = null // Survive through deletion of the reagent holder + sleep(100) + if(!target) + return + BR.trans_to(target, BR.total_volume) + qdel(B) - spawn(-1) - src = null // Survive through deletion of the reagent holder - sleep(100) - if(!target) - return - BR.trans_to(target, BR.total_volume) - qdel(B) + return amount - return amount +/datum/reagents/proc/copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0) + if(!target) + return + if(!target.reagents || src.total_volume<=0) + return + var/datum/reagents/R = target.reagents + amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) + var/part = amount / src.total_volume + var/trans_data = null + for (var/datum/reagent/current_reagent in src.reagent_list) + var/current_reagent_transfer = current_reagent.volume * part + if(preserve_data) + trans_data = copy_data(current_reagent) + R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data) - copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0) - if(!target) - return - if(!target.reagents || src.total_volume<=0) - return - var/datum/reagents/R = target.reagents - amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) - var/part = amount / src.total_volume - var/trans_data = null - for (var/datum/reagent/current_reagent in src.reagent_list) - var/current_reagent_transfer = current_reagent.volume * part - if(preserve_data) - trans_data = copy_data(current_reagent) - R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data) + src.update_total() + R.update_total() + R.handle_reactions() + src.handle_reactions() + return amount - src.update_total() - R.update_total() - R.handle_reactions() - src.handle_reactions() - return amount +/datum/reagents/proc/trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N + if (!target) + return + if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent)) + return - trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N - if (!target) - return - if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent)) - return + var/datum/reagents/R = target.reagents + if(src.get_reagent_amount(reagent) R.maximum_volume) return 0 + if (!target) return + var/total_transfered = 0 + var/current_list_element = 1 + var/datum/reagents/R = target.reagents + var/trans_data = null + //if(R.total_volume + amount > R.maximum_volume) return 0 - current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix. + current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix. - while(total_transfered != amount) - if(total_transfered >= amount) break //Better safe than sorry. - if(total_volume <= 0 || !reagent_list.len) break - if(R.total_volume >= R.maximum_volume) break + while(total_transfered != amount) + if(total_transfered >= amount) break //Better safe than sorry. + if(total_volume <= 0 || !reagent_list.len) break + if(R.total_volume >= R.maximum_volume) break - if(current_list_element > reagent_list.len) current_list_element = 1 - var/datum/reagent/current_reagent = reagent_list[current_list_element] - if(preserve_data) - trans_data = current_reagent.data - R.add_reagent(current_reagent.id, (1 * multiplier), trans_data) - src.remove_reagent(current_reagent.id, 1) + if(current_list_element > reagent_list.len) current_list_element = 1 + var/datum/reagent/current_reagent = reagent_list[current_list_element] + if(preserve_data) + trans_data = current_reagent.data + R.add_reagent(current_reagent.id, (1 * multiplier), trans_data) + src.remove_reagent(current_reagent.id, 1) - current_list_element++ - total_transfered++ - src.update_total() - R.update_total() - R.handle_reactions() - handle_reactions() + current_list_element++ + total_transfered++ + src.update_total() + R.update_total() + R.handle_reactions() + handle_reactions() - return total_transfered + return total_transfered */ - conditional_update_move(var/atom/A, var/Running = 0) - for(var/datum/reagent/R in reagent_list) - R.on_move (A, Running) - update_total() +/datum/reagents/proc/conditional_update_move(var/atom/A, var/Running = 0) + for(var/datum/reagent/R in reagent_list) + R.on_move (A, Running) + update_total() - conditional_update(var/atom/A, ) - for(var/datum/reagent/R in reagent_list) - R.on_update (A) - update_total() +/datum/reagents/proc/conditional_update(var/atom/A, ) + for(var/datum/reagent/R in reagent_list) + R.on_update (A) + update_total() + +/datum/reagents/proc/handle_reactions() + if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree. + + var/reaction_occured = 0 + do + reaction_occured = 0 + for(var/datum/reagent/R in reagent_list) // Usually a small list + for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id + + if(!reaction) + continue + + var/datum/chemical_reaction/C = reaction + + var/total_required_reagents = C.required_reagents.len + var/total_matching_reagents = 0 + var/total_required_catalysts = C.required_catalysts.len + var/total_matching_catalysts= 0 + var/matching_container = 0 + var/matching_other = 0 + var/list/multipliers = new/list() + var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this) + var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this) + for(var/B in C.required_reagents) + if(!has_reagent(B, C.required_reagents[B])) break + total_matching_reagents++ + multipliers += round(get_reagent_amount(B) / C.required_reagents[B]) + for(var/B in C.required_catalysts) + if(!has_reagent(B, C.required_catalysts[B])) break + total_matching_catalysts++ + + if(!C.required_container) + matching_container = 1 + + else + if(my_atom.type == C.required_container) + matching_container = 1 + + if(!C.required_other) + matching_other = 1 + + else + /*if(istype(my_atom, /obj/item/slime_core)) + var/obj/item/slime_core/M = my_atom + + if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this + matching_other = 1*/ + if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/M = my_atom + + if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this + matching_other = 1 + + if(min_temp == 0) + min_temp = chem_temp + + if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp) + var/multiplier = min(multipliers) + var/preserved_data = null + for(var/B in C.required_reagents) + if(!preserved_data) + preserved_data = get_data(B) + remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) + + var/created_volume = C.result_amount*multiplier + if(C.result) + feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]") + multiplier = max(multiplier, 1) //this shouldnt happen ... + add_reagent(C.result, C.result_amount*multiplier) + set_data(C.result, preserved_data) + + //add secondary products + for(var/S in C.secondary_results) + add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier) + + var/list/seen = viewers(4, get_turf(my_atom)) + for(var/mob/M in seen) + if(!C.no_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 + ME.Uses-- + if(ME.Uses <= 0) // give the notification that the slime core is dead + for(var/mob/M in viewers(4, get_turf(my_atom)) ) + M << "\blue \icon[my_atom] The innards begin to boil!" + */ + if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/ME2 = my_atom + ME2.Uses-- + if(ME2.Uses <= 0) // give the notification that the slime core is dead + for(var/mob/M in seen) + M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction." + ME2.name = "used slime extract" + ME2.desc = "This extract has been used up." + + playsound(get_turf(my_atom), C.mix_sound, 80, 1) + + C.on_reaction(src, created_volume) + reaction_occured = 1 + break + + while(reaction_occured) + update_total() + return 0 + +/datum/reagents/proc/isolate_reagent(var/reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id != reagent) + del_reagent(R.id) + update_total() + +/datum/reagents/proc/del_reagent(var/reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id == reagent) + if(istype(my_atom, /mob/living)) + var/mob/living/M = my_atom + R.reagent_deleted(M) + reagent_list -= A + qdel(A) + update_total() + my_atom.on_reagent_change() + check_ignoreslow(my_atom) + check_gofast(my_atom) + check_goreallyfast(my_atom) + return 0 + + + return 1 + +/datum/reagents/proc/update_total() + total_volume = 0 + for(var/datum/reagent/R in reagent_list) + if(R.volume < 0.1) + del_reagent(R.id) + else + total_volume += R.volume + + return 0 + +/datum/reagents/proc/clear_reagents() + for(var/datum/reagent/R in reagent_list) + del_reagent(R.id) + return 0 + +/datum/reagents/proc/reaction_check(var/mob/M, var/datum/reagent/R) + var/can_process = 0 + if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check) + return can_process + if(ishuman(M)) + var/mob/living/carbon/human/H = M + //Check if this mob's species is set and can process this type of reagent + if(H.species && H.species.reagent_tag) + if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN + can_process = 1 + if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG + can_process = 1 + //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater + if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) + can_process = 1 + //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) + else + if(R.process_flags != SYNTHETIC) + can_process = 1 + return can_process + +/datum/reagents/proc/reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0) + + switch(method) + if(TOUCH) + for(var/datum/reagent/R in reagent_list) + if(ismob(A)) + spawn(0) + if(!R) return + var/check = reaction_check(A, R) + if(!check) + continue + else + R.reaction_mob(A, TOUCH, R.volume+volume_modifier) + if(isturf(A)) + spawn(0) + if(!R) return + else R.reaction_turf(A, R.volume+volume_modifier) + if(isobj(A)) + spawn(0) + if(!R) return + else R.reaction_obj(A, R.volume+volume_modifier) + if(INGEST) + for(var/datum/reagent/R in reagent_list) + if(ismob(A) && R) + spawn(0) + if(!R) return + var/check = reaction_check(A, R) + if(!check) + continue + else + R.reaction_mob(A, INGEST, R.volume+volume_modifier) + if(isturf(A) && R) + spawn(0) + if(!R) return + else R.reaction_turf(A, R.volume+volume_modifier) + if(isobj(A) && R) + spawn(0) + if(!R) return + else R.reaction_obj(A, R.volume+volume_modifier) + return + +/datum/reagents/proc/add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300) + if(!isnum(amount)) return 1 + update_total() + if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. + if(amount <= 0) return 0 + chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems + + for(var/A in reagent_list) + + var/datum/reagent/R = A + if (R.id == reagent) + R.volume += amount + update_total() + my_atom.on_reagent_change() +/* + // mix dem viruses + if(R.id == "blood" && reagent == "blood") + if(R.data && data) + + if(R.data["viruses"] || data["viruses"]) + + var/list/mix1 = R.data["viruses"] + var/list/mix2 = data["viruses"] + + // Stop issues with the list changing during mixing. + var/list/to_mix = list() + + for(var/datum/disease/advance/AD in mix1) + to_mix += AD + for(var/datum/disease/advance/AD in mix2) + to_mix += AD + + var/datum/disease/advance/AD = Advance_Mix(to_mix) + if(AD) + var/list/preserve = list(AD) + for(var/D in R.data["viruses"]) + if(!istype(D, /datum/disease/advance)) + preserve += D + R.data["viruses"] = preserve +*/ handle_reactions() - if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree. + return 0 - var/reaction_occured = 0 - do - reaction_occured = 0 - for(var/datum/reagent/R in reagent_list) // Usually a small list - for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id + var/datum/reagent/D = chemical_reagents_list[reagent] + if(D) - if(!reaction) - continue - - var/datum/chemical_reaction/C = reaction - - var/total_required_reagents = C.required_reagents.len - var/total_matching_reagents = 0 - var/total_required_catalysts = C.required_catalysts.len - var/total_matching_catalysts= 0 - var/matching_container = 0 - var/matching_other = 0 - var/list/multipliers = new/list() - var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this) - var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this) - for(var/B in C.required_reagents) - if(!has_reagent(B, C.required_reagents[B])) break - total_matching_reagents++ - multipliers += round(get_reagent_amount(B) / C.required_reagents[B]) - for(var/B in C.required_catalysts) - if(!has_reagent(B, C.required_catalysts[B])) break - total_matching_catalysts++ - - if(!C.required_container) - matching_container = 1 - - else - if(my_atom.type == C.required_container) - matching_container = 1 - - if(!C.required_other) - matching_other = 1 - - else - /*if(istype(my_atom, /obj/item/slime_core)) - var/obj/item/slime_core/M = my_atom - - if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this - matching_other = 1*/ - if(istype(my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/M = my_atom - - if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this - matching_other = 1 - - if(min_temp == 0) - min_temp = chem_temp - - if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp) - var/multiplier = min(multipliers) - var/preserved_data = null - for(var/B in C.required_reagents) - if(!preserved_data) - preserved_data = get_data(B) - remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) - - var/created_volume = C.result_amount*multiplier - if(C.result) - feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]") - multiplier = max(multiplier, 1) //this shouldnt happen ... - add_reagent(C.result, C.result_amount*multiplier) - set_data(C.result, preserved_data) - - //add secondary products - for(var/S in C.secondary_results) - add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier) - - var/list/seen = viewers(4, get_turf(my_atom)) - for(var/mob/M in seen) - if(!C.no_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 - ME.Uses-- - if(ME.Uses <= 0) // give the notification that the slime core is dead - for(var/mob/M in viewers(4, get_turf(my_atom)) ) - M << "\blue \icon[my_atom] The innards begin to boil!" - */ - if(istype(my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/ME2 = my_atom - ME2.Uses-- - if(ME2.Uses <= 0) // give the notification that the slime core is dead - for(var/mob/M in seen) - M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction." - ME2.name = "used slime extract" - ME2.desc = "This extract has been used up." - - playsound(get_turf(my_atom), C.mix_sound, 80, 1) - - C.on_reaction(src, created_volume) - reaction_occured = 1 - break - - while(reaction_occured) - update_total() - return 0 - - isolate_reagent(var/reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id != reagent) - del_reagent(R.id) - update_total() - - del_reagent(var/reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id == reagent) - if(istype(my_atom, /mob/living)) - var/mob/living/M = my_atom - R.reagent_deleted(M) - reagent_list -= A - qdel(A) - update_total() - my_atom.on_reagent_change() - check_ignoreslow(my_atom) - check_gofast(my_atom) - check_goreallyfast(my_atom) - return 0 - - - return 1 - - update_total() - total_volume = 0 - for(var/datum/reagent/R in reagent_list) - if(R.volume < 0.1) - del_reagent(R.id) - else - total_volume += R.volume - - return 0 - - clear_reagents() - for(var/datum/reagent/R in reagent_list) - del_reagent(R.id) - return 0 - - reaction_check(var/mob/M, var/datum/reagent/R) - var/can_process = 0 - if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check) - return can_process - if(ishuman(M)) - var/mob/living/carbon/human/H = M - //Check if this mob's species is set and can process this type of reagent - if(H.species && H.species.reagent_tag) - if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN - can_process = 1 - if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG - can_process = 1 - //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater - if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) - can_process = 1 - //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) - else - if(R.process_flags != SYNTHETIC) - can_process = 1 - return can_process - - reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0) - - switch(method) - if(TOUCH) - for(var/datum/reagent/R in reagent_list) - if(ismob(A)) - spawn(0) - if(!R) return - var/check = reaction_check(A, R) - if(!check) - continue - else - R.reaction_mob(A, TOUCH, R.volume+volume_modifier) - if(isturf(A)) - spawn(0) - if(!R) return - else R.reaction_turf(A, R.volume+volume_modifier) - if(isobj(A)) - spawn(0) - if(!R) return - else R.reaction_obj(A, R.volume+volume_modifier) - if(INGEST) - for(var/datum/reagent/R in reagent_list) - if(ismob(A) && R) - spawn(0) - if(!R) return - var/check = reaction_check(A, R) - if(!check) - continue - else - R.reaction_mob(A, INGEST, R.volume+volume_modifier) - if(isturf(A) && R) - spawn(0) - if(!R) return - else R.reaction_turf(A, R.volume+volume_modifier) - if(isobj(A) && R) - spawn(0) - if(!R) return - else R.reaction_obj(A, R.volume+volume_modifier) - return - - add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300) - if(!isnum(amount)) return 1 - update_total() - if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. - if(amount <= 0) return 0 - chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems - - for(var/A in reagent_list) - - var/datum/reagent/R = A - if (R.id == reagent) - R.volume += amount - update_total() - my_atom.on_reagent_change() -/* - // mix dem viruses - if(R.id == "blood" && reagent == "blood") - if(R.data && data) - - if(R.data["viruses"] || data["viruses"]) - - var/list/mix1 = R.data["viruses"] - var/list/mix2 = data["viruses"] - - // Stop issues with the list changing during mixing. - var/list/to_mix = list() - - for(var/datum/disease/advance/AD in mix1) - to_mix += AD - for(var/datum/disease/advance/AD in mix2) - to_mix += AD - - var/datum/disease/advance/AD = Advance_Mix(to_mix) - if(AD) - var/list/preserve = list(AD) - for(var/D in R.data["viruses"]) - if(!istype(D, /datum/disease/advance)) - preserve += D - R.data["viruses"] = preserve -*/ - - handle_reactions() - return 0 - - var/datum/reagent/D = chemical_reagents_list[reagent] - if(D) - - var/datum/reagent/R = new D.type() - reagent_list += R - R.holder = src - R.volume = amount + var/datum/reagent/R = new D.type() + reagent_list += R + R.holder = src + R.volume = amount // SetViruses(R, data) // Includes setting data - if(data) R.data = data - //debug - //world << "Adding data" - //for(var/D in R.data) - // world << "Container data: [D] = [R.data[D]]" - //debug - update_total() - my_atom.on_reagent_change() - handle_reactions() - return 0 - else - warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") + if(data) R.data = data + //debug + //world << "Adding data" + //for(var/D in R.data) + // world << "Container data: [D] = [R.data[D]]" + //debug + update_total() + my_atom.on_reagent_change() + handle_reactions() + return 0 + else + warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") + handle_reactions() + + return 1 + +/datum/reagents/proc/remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to + + if(!isnum(amount)) return 1 + + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id == reagent) + R.volume -= amount + update_total() + if(!safety)//So it does not handle reactions when it need not to handle_reactions() + my_atom.on_reagent_change() + return 0 - return 1 + return 1 - remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to +/datum/reagents/proc/has_reagent(var/reagent, var/amount = -1) - if(!isnum(amount)) return 1 + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id == reagent) + if(!amount) return R + else + if(R.volume >= amount) return R + else return 0 - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id == reagent) - R.volume -= amount - update_total() - if(!safety)//So it does not handle reactions when it need not to - handle_reactions() - my_atom.on_reagent_change() - return 0 + return 0 - return 1 +/datum/reagents/proc/get_reagent_amount(var/reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id == reagent) + return R.volume - has_reagent(var/reagent, var/amount = -1) + return 0 - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id == reagent) - if(!amount) return R - else - if(R.volume >= amount) return R - else return 0 +/datum/reagents/proc/get_reagents() + var/res = "" + for(var/datum/reagent/A in reagent_list) + if (res != "") res += "," + res += A.name - return 0 + return res - get_reagent_amount(var/reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id == reagent) - return R.volume +/datum/reagents/proc/remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included. + if(!isnum(amount)) return 1 - return 0 + var/has_removed_reagent = 0 - get_reagents() - var/res = "" - for(var/datum/reagent/A in reagent_list) - if (res != "") res += "," - res += A.name + for(var/datum/reagent/R in reagent_list) + var/matches = 0 + // Switch between how we check the reagent type + if(strict) + if(R.type == reagent_type) + matches = 1 + else + if(istype(R, reagent_type)) + matches = 1 + // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type. + if(matches) + // Have our other proc handle removement + has_removed_reagent = remove_reagent(R.id, amount, safety) - return res + return has_removed_reagent - remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included. - if(!isnum(amount)) return 1 +// Admin logging. +/datum/reagents/proc/get_reagent_ids(var/and_amount=0) + var/list/stuff = list() + for(var/datum/reagent/A in reagent_list) + if(and_amount) + stuff += "[get_reagent_amount(A.id)]U of [A.id]" + else + stuff += A.id + return english_list(stuff) - var/has_removed_reagent = 0 +//two helper functions to preserve data across reactions (needed for xenoarch) +/datum/reagents/proc/get_data(var/reagent_id) + for(var/datum/reagent/D in reagent_list) + if(D.id == reagent_id) + //world << "proffering a data-carrying reagent ([reagent_id])" + return D.data - for(var/datum/reagent/R in reagent_list) - var/matches = 0 - // Switch between how we check the reagent type - if(strict) - if(R.type == reagent_type) - matches = 1 - else - if(istype(R, reagent_type)) - matches = 1 - // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type. - if(matches) - // Have our other proc handle removement - has_removed_reagent = remove_reagent(R.id, amount, safety) +/datum/reagents/proc/set_data(var/reagent_id, var/new_data) + for(var/datum/reagent/D in reagent_list) + if(D.id == reagent_id) + //world << "reagent data set ([reagent_id])" + D.data = new_data - return has_removed_reagent +/datum/reagents/proc/copy_data(var/datum/reagent/current_reagent) + if (!current_reagent || !current_reagent.data) return null + if (!istype(current_reagent.data, /list)) return current_reagent.data - // Admin logging. - get_reagent_ids(var/and_amount=0) - var/list/stuff = list() - for(var/datum/reagent/A in reagent_list) - if(and_amount) - stuff += "[get_reagent_amount(A.id)]U of [A.id]" - else - stuff += A.id - return english_list(stuff) + var/list/trans_data = current_reagent.data.Copy() - //two helper functions to preserve data across reactions (needed for xenoarch) - get_data(var/reagent_id) - for(var/datum/reagent/D in reagent_list) - if(D.id == reagent_id) - //world << "proffering a data-carrying reagent ([reagent_id])" - return D.data + // We do this so that introducing a virus to a blood sample + // doesn't automagically infect all other blood samples from + // the same donor. + // + // Technically we should probably copy all data lists, but + // that could possibly eat up a lot of memory needlessly + // if most data lists are read-only. + if (trans_data["virus2"]) + var/list/v = trans_data["virus2"] + trans_data["virus2"] = v.Copy() - set_data(var/reagent_id, var/new_data) - for(var/datum/reagent/D in reagent_list) - if(D.id == reagent_id) - //world << "reagent data set ([reagent_id])" - D.data = new_data - - copy_data(var/datum/reagent/current_reagent) - if (!current_reagent || !current_reagent.data) return null - if (!istype(current_reagent.data, /list)) return current_reagent.data - - var/list/trans_data = current_reagent.data.Copy() - - // We do this so that introducing a virus to a blood sample - // doesn't automagically infect all other blood samples from - // the same donor. - // - // Technically we should probably copy all data lists, but - // that could possibly eat up a lot of memory needlessly - // if most data lists are read-only. - if (trans_data["virus2"]) - var/list/v = trans_data["virus2"] - trans_data["virus2"] = v.Copy() - - return trans_data + return trans_data /////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm deleted file mode 100644 index 238724c0b09..00000000000 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ /dev/null @@ -1,3283 +0,0 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 -#define FOOD_METABOLISM 0.4 -#define REM REAGENTS_EFFECT_MULTIPLIER - -//The reaction procs must ALWAYS set src = null, this detaches the proc from the object (the reagent) -//so that it can continue working when the reagent is deleted while the proc is still active. - -datum - reagent - var/name = "Reagent" - var/id = "reagent" - var/description = "" - var/datum/reagents/holder = null - var/reagent_state = SOLID - var/list/data = null - var/volume = 0 - var/nutriment_factor = 0 - var/metabolization_rate = REAGENTS_METABOLISM - //var/list/viruses = list() - var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) - var/shock_reduction = 0 - var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin - //Processing flags, defines the type of mobs the reagent will affect - //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths - var/process_flags = ORGANIC - proc - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not. - if(!istype(M, /mob/living)) return 0 - var/datum/reagent/self = src - src = null - - if(self.holder) //for catching rare runtimes - if(method == TOUCH && self.penetrates_skin) - var/block = 0 - for(var/obj/item/clothing/C in M.get_equipped_items()) - if(istype(C, /obj/item/clothing/suit/bio_suit)) - block += 1 - if(istype(C, /obj/item/clothing/head/bio_hood)) - block += 1 - if(block < 2) - if(M.reagents) - M.reagents.add_reagent(self.id,self.volume) - -/* - if(method == INGEST && istype(M, /mob/living/carbon)) - if(prob(1 * self.addictiveness)) - if(prob(5 * volume)) - var/datum/disease/addiction/A = new /datum/disease/addiction - A.addicted_to = self - A.name = "[self.name] Addiction" - A.addiction ="[self.name]" - A.cure = self.id - M.viruses += A - A.affected_mob = M - A.holder = M -*/ - return 1 - - reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object - src = null //if it can hold reagents. nope! - //if(O.reagents) - // O.reagents.add_reagent(id,volume/3) - return - - reaction_turf(var/turf/T, var/volume) - src = null - return - - on_mob_life(var/mob/living/M as mob, var/alien) - if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball - return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO - // Certain elements in too large amounts cause side-effects - holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears. - current_cycle++ - return - - // Called when two reagents of the same are mixing. - on_merge(var/data) - return - - on_move(var/mob/M) - return - - on_update(var/atom/A) - return - - slimejelly - name = "Slime Jelly" - id = "slimejelly" - description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." - reagent_state = LIQUID - color = "#801E28" // rgb: 128, 30, 40 - on_mob_life(var/mob/living/M as mob) - if(prob(10)) - M << "\red Your insides are burning!" - M.adjustToxLoss(rand(20,60)*REM) - else if(prob(40)) - M.heal_organ_damage(5*REM,0) - ..() - return - - - blood - data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = null) - name = "Blood" - id = "blood" - reagent_state = LIQUID - color = "#C80000" // rgb: 200, 0, 0 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - var/datum/reagent/blood/self = src - src = null - if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting... - var/list/vlist = self.data["virus2"] - if (vlist.len) - for (var/ID in vlist) - var/datum/disease2/disease/V = vlist[ID] - - if(method == TOUCH) - infect_virus2(M,V.getcopy()) - else - infect_virus2(M,V.getcopy(),1) //injected, force infection! - if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing - var/mob/living/carbon/C = M - C.antibodies |= self.data["antibodies"] - - on_merge(var/data) - if(data["blood_colour"]) - color = data["blood_colour"] - return ..() - - on_update(var/atom/A) - if(data["blood_colour"]) - color = data["blood_colour"] - return ..() - - - - reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place - if(!istype(T)) return - var/datum/reagent/blood/self = src - src = null - if(!(volume >= 3)) return - //var/datum/disease/D = self.data["virus"] - if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human)) - var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here - if(!blood_prop) //first blood! - blood_prop = new(T) - blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"] - - if(self.data["virus2"]) - blood_prop.virus2 = virus_copylist(self.data["virus2"]) - - else if(istype(self.data["donor"], /mob/living/carbon/alien)) - var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T - if(!blood_prop) - blood_prop = new(T) - blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*" - return - -/* Must check the transfering of reagents and their data first. They all can point to one disease datum. - - Destroy() - if(src.data["virus"]) - var/datum/disease/D = src.data["virus"] - D.cure(0) - return ..() -*/ - -/* - vaccine - //data must contain virus type - name = "Vaccine" - id = "vaccine" - reagent_state = LIQUID - color = "#C81040" // rgb: 200, 16, 64 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - var/datum/reagent/vaccine/self = src - src = null - if(self.data&&method == INGEST) - for(var/datum/disease/D in M.viruses) - if(istype(D, /datum/disease/advance)) - var/datum/disease/advance/A = D - if(A.GetDiseaseID() == self.data) - D.cure() - else - if(D.type == self.data) - D.cure() - - M.resistances += self.data - return -*/ - - // Ported from Bay as part of the Botany Update - // Allows you to make planks from any plant that has this reagent in it. - // Also vines with this reagent are considered dense. - woodpulp - name = "Wood Pulp" - id = "woodpulp" - description = "A mass of wood fibers." - reagent_state = LIQUID - color = "#B97A57" - - fishwater - name = "Fish Water" - id = "fishwater" - description = "Smelly water from a fish tank. Gross!" - reagent_state = LIQUID - color = "#757547" - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - if(!istype(M, /mob/living)) - return - if(method == INGEST) - M << "Oh god, why did you drink that?" - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version) - if(prob(50)) // 50/50 chance of green vomit vs normal vomit - M.fakevomit(1) - else - M.fakevomit(0) - ..() - return - - water - name = "Water" - id = "water" - description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." - reagent_state = LIQUID - color = "#0064C8" // rgb: 0, 100, 200 - var/cooling_temperature = 2 - process_flags = ORGANIC | SYNTHETIC - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - if(!istype(M, /mob/living)) - return - - // Put out fire - if(method == TOUCH) - M.adjust_fire_stacks(-(volume / 10)) - if(M.fire_stacks <= 0) - M.ExtinguishMob() - return - - reaction_turf(var/turf/simulated/T, var/volume) - if (!istype(T)) return - src = null - if(volume >= 3) - if(T.wet >= 1) return - T.wet = 1 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") - T.overlays += T.wet_overlay - - spawn(800) - if (!istype(T)) return - if(T.wet >= 2) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - - for(var/mob/living/carbon/slime/M in T) - M.apply_water() - - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) - lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - return - - reaction_obj(var/obj/O, var/volume) - src = null - var/turf/T = get_turf(O) - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) - lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube)) - var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O - if(!cube.wrapped) - cube.Expand() - // Dehydrated carp - if(istype(O,/obj/item/toy/carpplushie/dehy_carp)) - var/obj/item/toy/carpplushie/dehy_carp/dehy = O - dehy.Swell() // Makes a carp - return - - hellwater - name = "Hell Water" - id = "hell_water" - description = "YOUR FLESH! IT BURNS!" - process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. - - on_mob_life(var/mob/living/M as mob) - M.fire_stacks = min(5,M.fire_stacks + 3) - M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire - M.adjustToxLoss(1) - M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? - M.adjustBrainLoss(5) - holder.remove_reagent(src.id, 1) - - lube - name = "Space Lube" - id = "lube" - description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity." - reagent_state = LIQUID - color = "#1BB1AB" - - reaction_turf(var/turf/simulated/T, var/volume) - if (!istype(T)) return - src = null - if(volume >= 1) - if(T.wet >= 2) return - T.wet = 2 - spawn(800) - if (!istype(T)) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - return - - toxin - name = "Toxin" - id = "toxin" - description = "A Toxic chemical." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(2) - ..() - return - - spider_venom - name = "Spider venom" - id = "spidertoxin" - description = "A toxic venom injected by spacefaring arachnids." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1.5) - ..() - return - - plasticide - name = "Plasticide" - id = "plasticide" - description = "Liquid plastic, do not eat." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1.5) - ..() - return - - minttoxin - name = "Mint Toxin" - id = "minttoxin" - description = "Useful for dealing with undesirable customers." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if (FAT in M.mutations) - M.gib() - ..() - return - - slimetoxin - name = "Mutation Toxin" - id = "mutationtoxin" - description = "A corruptive toxin produced by slimes." - reagent_state = LIQUID - color = "#13BC5E" // rgb: 19, 188, 94 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(ishuman(M)) - var/mob/living/carbon/human/human = M - if(human.species.name != "Shadow") - M << "\red Your flesh rapidly mutates!" - M << "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids." - M << "\red Your body reacts violently to light. \green However, it naturally heals in darkness." - M << "Aside from your new traits, you are mentally unchanged and retain your prior obligations." - human.set_species("Shadow") - ..() - return - - - - aslimetoxin - name = "Advanced Mutation Toxin" - id = "amutationtoxin" - description = "An advanced corruptive toxin produced by slimes." - reagent_state = LIQUID - color = "#13BC5E" // rgb: 19, 188, 94 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(istype(M, /mob/living/carbon) && M.stat != DEAD) - M << "\red Your flesh rapidly mutates!" - if(M.notransform) return - M.notransform = 1 - M.canmove = 0 - M.icon = null - M.overlays.Cut() - M.invisibility = 101 - for(var/obj/item/W in M) - if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something - qdel(W) - continue - W.layer = initial(W.layer) - W.loc = M.loc - W.dropped(M) - var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc) - new_mob.a_intent = "harm" - new_mob.universal_speak = 1 - if(M.mind) - M.mind.transfer_to(new_mob) - else - new_mob.key = M.key - qdel(M) - ..() - return - - space_drugs - name = "Space drugs" - id = "space_drugs" - description = "An illegal chemical compound used as drug." - reagent_state = LIQUID - color = "#9087A2" - metabolization_rate = 0.2 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.druggy = max(M.druggy, 15) - if(isturf(M.loc) && !istype(M.loc, /turf/space)) - if(M.canmove && !M.restrained()) - if(prob(10)) step(M, pick(cardinal)) - if(prob(7)) M.emote(pick("twitch","drool","moan","giggle")) - ..() - return - - holywater - name = "Water" - id = "holywater" - description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." - reagent_state = LIQUID - color = "#0064C8" // rgb: 0, 100, 200 - process_flags = ORGANIC | SYNTHETIC - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.jitteriness = max(M.jitteriness-5,0) - if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec - if (!M.stuttering) M.stuttering = 1 - M.stuttering += 4 - M.Dizzy(5) - if(iscultist(M) && prob(5)) - M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu")) - if(data >= 75 && prob(33)) // 30 units, 150 seconds - if (!M.confused) M.confused = 1 - M.confused += 3 - if(iscultist(M)) - ticker.mode.remove_cultist(M.mind) - holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? - M.jitteriness = 0 - M.stuttering = 0 - M.confused = 0 - if(ishuman(M)) . - if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80)) - switch(data) - if(1 to 4) - M << "Something sizzles in your veins!" - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - if(5 to 12) - M << "You feel an intense burning inside of you!" - M.adjustFireLoss(1) - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - if(13 to INFINITY) - M << "You suddenly ignite in a holy fire!" - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] suddenly bursts into flames!", M), 1) - M.fire_stacks = min(5,M.fire_stacks + 3) - M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire - M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard? - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - ..() - return - - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - // Vampires have their powers weakened by holy water applied to the skin. - if(ishuman(M)) - if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers)) - var/mob/living/carbon/human/H=M - if(method == TOUCH) - if(H.wear_mask) - H << "\red Your mask protects you from the holy water!" - return - else if(H.head) - H << "\red Your helmet protects you from the holy water!" - return - else - M << "Something holy interferes with your powers!" - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - return - - - reaction_turf(var/turf/simulated/T, var/volume) - ..() - if(!istype(T)) return - if(volume>=10) - for(var/obj/effect/rune/R in T) - qdel(R) - T.Bless() - - serotrotium - name = "Serotrotium" - id = "serotrotium" - description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." - reagent_state = LIQUID - color = "#202040" // rgb: 20, 20, 40 - - on_mob_life(var/mob/living/M as mob) - if(ishuman(M)) - if(prob(7)) M.emote(pick("twitch","drool","moan","gasp")) - holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM) - return - -/* silicate - name = "Silicate" - id = "silicate" - description = "A compound that can be used to reinforce glass." - reagent_state = LIQUID - color = "#C7FFFF" // rgb: 199, 255, 255 - - reaction_obj(var/obj/O, var/volume) - src = null - if(istype(O,/obj/structure/window)) - if(O:silicate <= 200) - - O:silicate += volume - O:health += volume * 3 - - if(!O:silicateIcon) - var/icon/I = icon(O.icon,O.icon_state,O.dir) - - var/r = (volume / 100) + 1 - var/g = (volume / 70) + 1 - var/b = (volume / 50) + 1 - I.SetIntensity(r,g,b) - O.icon = I - O:silicateIcon = I - else - var/icon/I = O:silicateIcon - - var/r = (volume / 100) + 1 - var/g = (volume / 70) + 1 - var/b = (volume / 50) + 1 - I.SetIntensity(r,g,b) - O.icon = I - O:silicateIcon = I - - return*/ - - oxygen - name = "Oxygen" - id = "oxygen" - description = "A colorless, odorless gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - on_mob_life(var/mob/living/M as mob, var/alien) - if(M.stat == 2) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis")) - M.adjustToxLoss(REAGENTS_METABOLISM) - holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. - return - ..() - - copper - name = "Copper" - id = "copper" - description = "A highly ductile metal." - color = "#6E3B08" // rgb: 110, 59, 8 - - - nitrogen - name = "Nitrogen" - id = "nitrogen" - description = "A colorless, odorless, tasteless gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - - on_mob_life(var/mob/living/M as mob, var/alien) - if(M.stat == 2) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis")) - M.adjustOxyLoss(-2*REM) - holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. - return - ..() - - hydrogen - name = "Hydrogen" - id = "hydrogen" - description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - - potassium - name = "Potassium" - id = "potassium" - description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." - reagent_state = SOLID - color = "#A0A0A0" // rgb: 160, 160, 160 - - - mercury - name = "Mercury" - id = "mercury" - description = "A chemical element." - reagent_state = LIQUID - color = "#484848" // rgb: 72, 72, 72 - metabolization_rate = 0.2 - penetrates_skin = 1 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(prob(70)) - M.adjustBrainLoss(1) - ..() - return - - sulfur - name = "Sulfur" - id = "sulfur" - description = "A chemical element." - reagent_state = SOLID - color = "#BF8C00" // rgb: 191, 140, 0 - - carbon - name = "Carbon" - id = "carbon" - description = "A chemical element." - reagent_state = SOLID - color = "#1C1300" // rgb: 30, 20, 0 - - - reaction_turf(var/turf/T, var/volume) - src = null - // Only add one dirt per turf. Was causing people to crash. - if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T)) - new /obj/effect/decal/cleanable/dirt(T) - - chlorine - name = "Chlorine" - id = "chlorine" - description = "A chemical element." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - penetrates_skin = 1 - process_flags = ORGANIC | SYNTHETIC - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustFireLoss(1) - ..() - return - - fluorine - name = "Fluorine" - id = "fluorine" - description = "A highly-reactive chemical element." - reagent_state = GAS - color = "#6A6054" - penetrates_skin = 1 - process_flags = ORGANIC | SYNTHETIC - - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustFireLoss(1) - M.adjustToxLoss(1*REM) - ..() - return - - sodium - name = "Sodium" - id = "sodium" - description = "A chemical element." - reagent_state = SOLID - color = "#808080" // rgb: 128, 128, 128 - - - phosphorus - name = "Phosphorus" - id = "phosphorus" - description = "A chemical element." - reagent_state = SOLID - color = "#832828" // rgb: 131, 40, 40 - - - lithium - name = "Lithium" - id = "lithium" - description = "A chemical element." - reagent_state = SOLID - color = "#808080" // rgb: 128, 128, 128 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(M.canmove && !M.restrained() && istype(M.loc, /turf/space)) - step(M, pick(cardinal)) - if(prob(5)) M.emote(pick("twitch","drool","moan")) - ..() - return - - sugar - name = "Sugar" - id = "sugar" - description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." - reagent_state = SOLID - color = "#FFFFFF" // rgb: 255, 255, 255 - overdose_threshold = 200 // Hyperglycaemic shock - - on_mob_life(var/mob/living/M as mob) - if(prob(4)) - M.reagents.add_reagent("epinephrine", 1.2) - if(prob(50)) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - if(current_cycle >= 90) - M.jitteriness += 10 - ..() - return - - overdose_process(var/mob/living/M as mob) - if(volume > 200) - M << "You pass out from hyperglycemic shock!" - M.Paralyse(1) - if(prob(8)) - M.adjustToxLoss(rand(1,2)) - ..() - return - - sacid - name = "Sulphuric acid" - id = "sacid" - description = "A strong mineral acid with the molecular formula H2SO4." - reagent_state = LIQUID - color = "#00D72B" - process_flags = ORGANIC | SYNTHETIC - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustFireLoss(1) - ..() - return - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(volume > 25) - - if(H.wear_mask) - H << "\red Your mask protects you from the acid!" - return - - if(H.head) - H << "\red Your helmet protects you from the acid!" - return - - if(!M.unacidable) - if(prob(75)) - var/obj/item/organ/external/affecting = H.get_organ("head") - if(affecting) - affecting.take_damage(20, 0) - H.UpdateDamageIcon() - H.emote("scream") - else - M.take_organ_damage(15,0) - else - M.take_organ_damage(15,0) - - if(method == INGEST) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(volume < 10) - M << "The greenish acidic substance stings you, but isn't concentrated enough to harm you!" - - if(volume >=10 && volume <=25) - if(!H.unacidable) - M.take_organ_damage(min(max(volume-10,2)*2,20),0) - M.emote("scream") - - - if(volume > 25) - if(!M.unacidable) - if(prob(75)) - var/obj/item/organ/external/affecting = H.get_organ("head") - if(affecting) - affecting.take_damage(20, 0) - H.UpdateDamageIcon() - H.emote("scream") - else - M.take_organ_damage(15,0) - - reaction_obj(var/obj/O, var/volume) - if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40)) - if(!O.unacidable) - var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) - I.desc = "Looks like this was \an [O] some time ago." - for(var/mob/M in viewers(5, O)) - M << "\red \the [O] melts." - qdel(O) - - glycerol - name = "Glycerol" - id = "glycerol" - description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." - reagent_state = LIQUID - color = "#808080" // rgb: 128, 128, 128 - - - nitroglycerin - name = "Nitroglycerin" - id = "nitroglycerin" - description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol." - reagent_state = LIQUID - color = "#808080" // rgb: 128, 128, 128 - - radium - name = "Radium" - id = "radium" - description = "Radium is an alkaline earth metal. It is extremely radioactive." - reagent_state = SOLID - color = "#C7C7C7" // rgb: 199,199,199 - metabolization_rate = 0.4 - penetrates_skin = 1 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.apply_effect(4*REM,IRRADIATE,0) - // radium may increase your chances to cure a disease - if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs - var/mob/living/carbon/C = M - if(C.virus2.len) - for (var/ID in C.virus2) - var/datum/disease2/disease/V = C.virus2[ID] - if(prob(5)) - if(prob(50)) - M.apply_effect(50,IRRADIATE,0) // curing it that way may kill you instead - M.adjustToxLoss(100) - C.antibodies |= V.antigen - ..() - return - - reaction_turf(var/turf/T, var/volume) - src = null - if(volume >= 3) - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/greenglow(T) - return - - thermite - name = "Thermite" - id = "thermite" - description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls." - reagent_state = SOLID - color = "#673910" // rgb: 103, 57, 16 - process_flags = ORGANIC | SYNTHETIC - - reaction_turf(var/turf/T, var/volume) - src = null - if(volume >= 5) - if(istype(T, /turf/simulated/wall)) - T:thermite = 1 - T.overlays.Cut() - T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite") - return - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustFireLoss(1) - ..() - return - - mutagen - name = "Unstable mutagen" - id = "mutagen" - description = "Might cause unpredictable mutations. Keep away from children." - reagent_state = LIQUID - color = "#04DF27" - metabolization_rate = 0.3 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - if(!..()) return - if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. - src = null - if((method==TOUCH && prob(33)) || method==INGEST) - if(prob(98)) - randmutb(M) - else - randmutg(M) - domutcheck(M, null) - M.UpdateAppearance() - return - on_mob_life(var/mob/living/M as mob) - if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. - if(!M) M = holder.my_atom - M.apply_effect(2*REM,IRRADIATE,0) - if(prob(4)) - randmutb(M) - ..() - return - - hydrocodone - name = "Hydrocodone" - id = "hydrocodone" - description = "An extremely effective painkiller; may have long term abuse consequences." - reagent_state = LIQUID - color = "#C805DC" - metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units - shock_reduction = 200 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - ..() - return - - virus_food - name = "Virus Food" - id = "virusfood" - description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce." - reagent_state = LIQUID - nutriment_factor = 2 * REAGENTS_METABOLISM - color = "#899613" // rgb: 137, 150, 19 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.nutrition += nutriment_factor*REM - ..() - return - - sterilizine - name = "Sterilizine" - id = "sterilizine" - description = "Sterilizes wounds in preparation for surgery." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - - //makes you squeaky clean - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - if (method == TOUCH) - M.germ_level -= min(volume*20, M.germ_level) - - reaction_obj(var/obj/O, var/volume) - O.germ_level -= min(volume*20, O.germ_level) - - reaction_turf(var/turf/T, var/volume) - T.germ_level -= min(volume*20, T.germ_level) - - iron - name = "Iron" - id = "iron" - description = "Pure iron is a metal." - reagent_state = SOLID - color = "#C8A5DC" // rgb: 200, 165, 220 -/* - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if((M.virus) && (prob(8) && (M.virus.name=="Magnitis"))) - if(M.virus.spread == "Airborne") - M.virus.spread = "Remissive" - M.virus.stage-- - if(M.virus.stage <= 0) - M.resistances += M.virus.type - M.virus = null - holder.remove_reagent(src.id, 0.2) - return -*/ - - gold - name = "Gold" - id = "gold" - description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." - reagent_state = SOLID - color = "#F7C430" // rgb: 247, 196, 48 - - silver - name = "Silver" - id = "silver" - description = "A lustrous metallic element regarded as one of the precious metals." - reagent_state = SOLID - color = "#D0D0D0" // rgb: 208, 208, 208 - - uranium - name ="Uranium" - id = "uranium" - description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." - reagent_state = SOLID - color = "#B8B8C0" // rgb: 184, 184, 192 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.apply_effect(2,IRRADIATE,0) - ..() - return - - - reaction_turf(var/turf/T, var/volume) - src = null - if(volume >= 3) - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/greenglow(T) - - aluminum - name = "Aluminum" - id = "aluminum" - description = "A silvery white and ductile member of the boron group of chemical elements." - reagent_state = SOLID - color = "#A8A8A8" // rgb: 168, 168, 168 - - silicon - name = "Silicon" - id = "silicon" - description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." - reagent_state = SOLID - color = "#A8A8A8" // rgb: 168, 168, 168 - - fuel - name = "Welding fuel" - id = "fuel" - description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil." - reagent_state = LIQUID - color = "#060606" - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - M.adjust_fire_stacks(volume / 10) - return - ..() - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1) - ..() - return - - unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke - name = "Unholy Water" - id = "unholywater" - description = "Something that shouldn't exist on this plane of existance." - process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it. - - on_mob_life(mob/living/M) - M.adjustBrainLoss(3) - if(iscultist(M)) - M.status_flags |= GOTTAGOFAST - M.drowsyness = max(M.drowsyness-5, 0) - M.AdjustParalysis(-2) - M.AdjustStunned(-2) - M.AdjustWeakened(-2) - else - M.adjustToxLoss(2) - M.adjustFireLoss(2) - M.adjustOxyLoss(2) - M.adjustBruteLoss(2) - holder.remove_reagent(src.id, 1) - - incendiary_fuel //copy-pasta of welding fuel; allow incendiary grenades to function better without the headache of people spraying fuel everywhere with regular welding fuel. - name = "Incendiary fuel" - id = "incendiaryfuel" - description = "A highly flammable compound used in incendiary grenades." - reagent_state = LIQUID - color = "#660000" // rgb: 102, 0, 0 - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - M.adjust_fire_stacks(volume / 10) - return - - reaction_obj(var/obj/O, var/volume) - var/turf/the_turf = get_turf(O) - if(!the_turf) - return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO - new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume) - reaction_turf(var/turf/T, var/volume) - new /obj/effect/decal/cleanable/liquid_fuel(T, volume) - return - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1) - ..() - return - - space_cleaner - name = "Space cleaner" - id = "cleaner" - description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" - reagent_state = LIQUID - color = "#61C2C2" - - reaction_obj(var/obj/O, var/volume) - if(istype(O,/obj/effect/decal/cleanable)) - qdel(O) - else - if(O) - O.clean_blood() - reaction_turf(var/turf/T, var/volume) - if(volume >= 1) - T.overlays.Cut() - T.clean_blood() - for(var/obj/effect/decal/cleanable/C in src) - qdel(C) - - for(var/mob/living/carbon/slime/M in T) - M.adjustToxLoss(rand(5,10)) - reaction_turf(var/turf/simulated/S, var/volume) - if(volume >= 1) - S.dirt = 0 - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.lip_style) - H.lip_style = null - H.update_body() - if(C.r_hand) - C.r_hand.clean_blood() - if(C.l_hand) - C.l_hand.clean_blood() - if(C.wear_mask) - if(C.wear_mask.clean_blood()) - C.update_inv_wear_mask(0) - if(ishuman(M)) - var/mob/living/carbon/human/H = C - if(H.head) - if(H.head.clean_blood()) - H.update_inv_head(0,0) - if(H.wear_suit) - if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0,0) - else if(H.w_uniform) - if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0,0) - if(H.shoes) - if(H.shoes.clean_blood()) - H.update_inv_shoes(0,0) - M.clean_blood() - ..() - return - - plasma - name = "Plasma" - id = "plasma" - description = "The liquid phase of an unusual extraterrestrial compound." - reagent_state = LIQUID - color = "#7A2B94" - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1*REM) - if(holder.has_reagent("epinephrine")) - holder.remove_reagent("epinephrine", 2) - ..() - return - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel! - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - M.adjust_fire_stacks(volume / 5) - ..() - return - lexorin - name = "Lexorin" - id = "lexorin" - description = "Lexorin temporarily stops respiration. Causes tissue damage." - reagent_state = LIQUID - color = "#52685D" - metabolization_rate = 0.2 - - on_mob_life(var/mob/living/M as mob) - if(M.stat == 2.0) - return - if(!M) M = holder.my_atom - M.adjustToxLoss(1) - ..() - return - - adminordrazine //An OP chemical for admins - name = "Adminordrazine" - id = "adminordrazine" - description = "It's magic. We don't have to explain it." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds! - - on_mob_life(var/mob/living/carbon/M as mob) - if(!M) M = holder.my_atom ///This can even heal dead people. - for(var/datum/reagent/R in M.reagents.reagent_list) - if(R != src) - M.reagents.remove_reagent(R.id,5) - M.setCloneLoss(0) - M.setOxyLoss(0) - M.radiation = 0 - M.heal_organ_damage(5,5) - M.adjustToxLoss(-5) - M.hallucination = 0 - M.setBrainLoss(0) - M.disabilities = 0 - M.sdisabilities = 0 - M.eye_blurry = 0 - M.eye_blind = 0 - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] - if(istype(E)) - E.damage = max(E.damage-5 , 0) - M.SetWeakened(0) - M.SetStunned(0) - M.SetParalysis(0) - M.silent = 0 - M.dizziness = 0 - M.drowsyness = 0 - M.stuttering = 0 - M.slurring = 0 - M.confused = 0 - M.sleeping = 0 - M.jitteriness = 0 - if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs - var/mob/living/carbon/C = M - if(C.virus2.len) - for (var/ID in C.virus2) - var/datum/disease2/disease/V = C.virus2[ID] - C.antibodies |= V.antigen - ..() - return - - nanites - name = "Nanites" - id = "nanites" - description = "Nanomachines that aid in rapid cellular regeneration." - - - synaptizine - name = "Synaptizine" - id = "synaptizine" - description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis." - reagent_state = LIQUID - color = "#FA46FA" - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - if(prob(50)) - M.adjustBrainLoss(-1.0) - ..() - return - - audioline - name = "Audioline" - id = "audioline" - description = "Heals ear damage." - reagent_state = LIQUID - color = "#6600FF" // rgb: 100, 165, 255 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.ear_damage = 0 - M.ear_deaf = 0 - ..() - return - - mitocholide - name = "Mitocholide" - id = "mitocholide" - description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - //Mitocholide is hard enough to get, it's probably fair to make this all internal organs - for(var/name in H.internal_organs_by_name) - var/obj/item/organ/I = H.internal_organs_by_name[name] - if(I.damage > 0) - I.damage -= 0.20 - ..() - return - - cryoxadone - name = "Cryoxadone" - id = "cryoxadone" - description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly." - reagent_state = LIQUID - color = "#0000C8" // rgb: 200, 165, 220 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(M.bodytemperature < 265) - M.adjustCloneLoss(-4) - M.adjustOxyLoss(-10) - M.heal_organ_damage(12,12) - M.adjustToxLoss(-3) - M.status_flags &= ~DISFIGURED - ..() - return - - rezadone - name = "Rezadone" - id = "rezadone" - description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects." - reagent_state = SOLID - color = "#669900" // rgb: 102, 153, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!data) data = 1 - data++ - switch(data) - if(1 to 15) - M.adjustCloneLoss(-1) - M.heal_organ_damage(1,1) - if(15 to 35) - M.adjustCloneLoss(-2) - M.heal_organ_damage(2,1) - M.status_flags &= ~DISFIGURED - if(35 to INFINITY) - M.adjustToxLoss(1) - M.Dizzy(5) - M.Jitter(5) - - ..() - return - - spaceacillin - name = "Spaceacillin" - id = "spaceacillin" - description = "An all-purpose antibiotic agent extracted from space fungus." - reagent_state = LIQUID - color = "#0AB478" - - on_mob_life(var/mob/living/M as mob) - ..() - return - - carpotoxin - name = "Carpotoxin" - id = "carpotoxin" - description = "A deadly neurotoxin produced by the dreaded spess carp." - reagent_state = LIQUID - color = "#003333" // rgb: 0, 51, 51 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(2*REM) - ..() - return - - staminatoxin - name = "Tirizene" - id = "tirizene" - description = "A toxin that affects the stamina of a person when injected into the bloodstream." - reagent_state = LIQUID - color = "#6E2828" - data = 13 - - on_mob_life(var/mob/living/M) - M.adjustStaminaLoss(REM * data) - data = max(data - 1, 3) - ..() - - lsd - name = "Lysergic acid diethylamide" - id = "lsd" - description = "A highly potent hallucinogenic substance. Far out, maaaan." - reagent_state = LIQUID - color = "#0000D8" - - on_mob_life(var/mob/living/M) - if(!M) M = holder.my_atom - M.hallucination += 10 - ..() - return - - - spores - name = "Spore Toxin" - id = "spores" - description = "A toxic spore cloud which blocks vision when ingested." - color = "#9ACD32" - - on_mob_life(var/mob/living/M as mob) - M.adjustToxLoss(0.5) - M.damageoverlaytemp = 60 - M.eye_blurry = max(M.eye_blurry, 3) - ..() - return - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/* - nanomachines - name = "Nanomachines" - id = "nanomachines" - description = "Microscopic construction robots." - reagent_state = LIQUID - color = "#535E66" // rgb: 83, 94, 102 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - src = null - if( (prob(10) && method==TOUCH) || method==INGEST) - M.contract_disease(new /datum/disease/robotic_transformation(0),1) - - xenomicrobes - name = "Xenomicrobes" - id = "xenomicrobes" - description = "Microbes with an entirely alien cellular structure." - reagent_state = LIQUID - color = "#535E66" // rgb: 83, 94, 102 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - src = null - if( (prob(10) && method==TOUCH) || method==INGEST) - M.contract_disease(new /datum/disease/xeno_transformation(0),1) -*/ - - spore - name = "Blob Spores" - id = "spore" - description = "Spores of some blob creature thingy." - reagent_state = LIQUID - color = "#CE760A" // rgb: 206, 118, 10 - var/client/blob_client = null - var/blob_point_rate = 3 - - on_mob_life(var/mob/living/M) - if(!M) M = holder.my_atom - if (holder.has_reagent("atrazine",45)) - holder.del_reagent("spore") - if (prob(1)) - M << "\red Your mouth tastes funny." - if (prob(1) && prob(25)) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(directory[ckey(C.key)]) - blob_client = directory[ckey(C.key)] - C.gib() - if(blob_client) - var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate) - if(core.overmind && core.overmind.mind) - core.overmind.mind.name = C.name - - return - -//foam - - fluorosurfactant - name = "Fluorosurfactant" - id = "fluorosurfactant" - description = "A perfluoronated sulfonic acid that forms a foam when mixed with water." - reagent_state = LIQUID - color = "#9E6B38" // rgb: 158, 107, 56 - -// metal foaming agent -// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually - - ammonia - name = "Ammonia" - id = "ammonia" - description = "A caustic substance commonly used in fertilizer or household cleaners." - reagent_state = GAS - color = "#404030" // rgb: 64, 64, 48 - - - diethylamine - name = "Diethylamine" - id = "diethylamine" - description = "A secondary amine, useful as a plant nutrient and as building block for other compounds." - reagent_state = LIQUID - color = "#322D00" - - beer2 //disguised as normal beer for use by emagged brobots - name = "Beer" - id = "beer2" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water." - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) - data = 1 - switch(data) - if(1 to 50) - M.sleeping += 1 - if(51 to INFINITY) - M.sleeping += 1 - M.adjustToxLoss((data - 50)*REM) - data++ - holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM) - ..() - return - -/////////////////////////Food Reagents//////////////////////////// -// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food -// condiments, additives, and such go. - nutriment // Pure nutriment, universally digestable and thus slightly less effective - name = "Nutriment" - id = "nutriment" - description = "A questionable mixture of various pure nutrients commonly found in processed foods." - reagent_state = SOLID - nutriment_factor = 12 * REAGENTS_METABOLISM - color = "#664330" // rgb: 102, 67, 48 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!(M.mind in ticker.mode.vampires)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients - H.nutrition += nutriment_factor // For hunger and fatness - if(prob(50)) M.heal_organ_damage(1,0) - if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals - if(prob(50)) M.heal_organ_damage(1,0) - ..() - return - - protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores - name = "Protein" - id = "protein" - description = "Various essential proteins and fats commonly found in animal flesh and blood." - reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM - color = "#664330" // rgb: 102, 67, 48 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!(M.mind in ticker.mode.vampires)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore - H.nutrition += nutriment_factor // For hunger and fatness - if(prob(50)) M.heal_organ_damage(1,0) - if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals - if(prob(50)) M.heal_organ_damage(1,0) - ..() - return - - plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores - name = "Plant-matter" - id = "plantmatter" - description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce." - reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM - color = "#664330" // rgb: 102, 67, 48 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!(M.mind in ticker.mode.vampires)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore - H.nutrition += nutriment_factor // For hunger and fatness - if(prob(50)) M.heal_organ_damage(1,0) - if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals - if(prob(50)) M.heal_organ_damage(1,0) - ..() - return - - soysauce - name = "Soysauce" - id = "soysauce" - description = "A salty sauce made from the soy plant." - reagent_state = LIQUID - nutriment_factor = 2 * REAGENTS_METABOLISM - color = "#792300" // rgb: 121, 35, 0 - - ketchup - name = "Ketchup" - id = "ketchup" - description = "Ketchup, catsup, whatever. It's tomato paste." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#731008" // rgb: 115, 16, 8 - - - capsaicin - name = "Capsaicin Oil" - id = "capsaicin" - description = "This is what makes chilis hot." - reagent_state = LIQUID - color = "#B31008" // rgb: 179, 16, 8 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!data) data = 1 - switch(data) - if(1 to 15) - M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT - if(holder.has_reagent("frostoil")) - holder.remove_reagent("frostoil", 5) - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature += rand(5,20) - if(15 to 25) - M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature += rand(10,20) - if(25 to INFINITY) - M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature += rand(15,20) - holder.remove_reagent(src.id, FOOD_METABOLISM) - data++ - ..() - return - - condensedcapsaicin - name = "Condensed Capsaicin" - id = "condensedcapsaicin" - description = "This shit goes in pepperspray." - reagent_state = LIQUID - color = "#B31008" // rgb: 179, 16, 8 - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/victim = M - var/mouth_covered = 0 - var/eyes_covered = 0 - var/obj/item/safe_thing = null - if( victim.wear_mask ) - if ( victim.wear_mask.flags & MASKCOVERSEYES ) - eyes_covered = 1 - safe_thing = victim.wear_mask - if ( victim.wear_mask.flags & MASKCOVERSMOUTH ) - mouth_covered = 1 - safe_thing = victim.wear_mask - if( victim.head ) - if ( victim.head.flags & MASKCOVERSEYES ) - eyes_covered = 1 - safe_thing = victim.head - if ( victim.head.flags & MASKCOVERSMOUTH ) - mouth_covered = 1 - safe_thing = victim.head - if(victim.glasses) - eyes_covered = 1 - if ( !safe_thing ) - safe_thing = victim.glasses - if ( eyes_covered && mouth_covered ) - victim << "\red Your [safe_thing] protects you from the pepperspray!" - return - else if ( mouth_covered ) // Reduced effects if partially protected - victim << "\red Your [safe_thing] protect you from most of the pepperspray!" - if(prob(5)) - victim.emote("scream") - victim.eye_blurry = max(M.eye_blurry, 3) - victim.eye_blind = max(M.eye_blind, 1) - victim.confused = max(M.confused, 3) - victim.damageoverlaytemp = 60 - victim.Weaken(3) - victim.drop_item() - return - else if ( eyes_covered ) // Eye cover is better than mouth cover - victim << "\red Your [safe_thing] protects your eyes from the pepperspray!" - victim.eye_blurry = max(M.eye_blurry, 3) - victim.damageoverlaytemp = 30 - return - else // Oh dear :D - if(prob(5)) - victim.emote("scream") - victim << "\red You're sprayed directly in the eyes with pepperspray!" - victim.eye_blurry = max(M.eye_blurry, 5) - victim.eye_blind = max(M.eye_blind, 2) - victim.confused = max(M.confused, 6) - victim.damageoverlaytemp = 75 - victim.Weaken(5) - victim.drop_item() - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(prob(5)) - M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") - ..() - return - - frostoil - name = "Frost Oil" - id = "frostoil" - description = "A special oil that noticably chills the body. Extraced from Icepeppers." - reagent_state = LIQUID - color = "#B31008" // rgb: 139, 166, 233 - process_flags = ORGANIC | SYNTHETIC - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!data) data = 1 - switch(data) - if(1 to 15) - M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(holder.has_reagent("capsaicin")) - holder.remove_reagent("capsaicin", 5) - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(5,20) - if(15 to 25) - M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(10,20) - if(25 to INFINITY) - M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(1)) - M.emote("shiver") - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(15,20) - data++ - holder.remove_reagent(src.id, FOOD_METABOLISM) - ..() - return - - reaction_turf(var/turf/simulated/T, var/volume) - for(var/mob/living/carbon/slime/M in T) - M.adjustToxLoss(rand(15,30)) - - sodiumchloride - name = "Salt" - id = "sodiumchloride" - description = "Sodium chloride, common table salt." - reagent_state = SOLID - color = "#B1B0B0" - - overdose_process(var/mob/living/M as mob) - if(volume > 100) - if(prob(70)) - M.adjustBrainLoss(1) - if(prob(8)) - M.adjustToxLoss(rand(1,2)) - ..() - return - - blackpepper - name = "Black Pepper" - id = "blackpepper" - description = "A powder ground from peppercorns. *AAAACHOOO*" - reagent_state = SOLID - // no color (ie, black) - - coco - name = "Coco Powder" - id = "coco" - description = "A fatty, bitter paste made from coco beans." - reagent_state = SOLID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - hot_coco - name = "Hot Chocolate" - id = "hot_coco" - description = "Made with love! And coco beans." - reagent_state = LIQUID - nutriment_factor = 2 * REAGENTS_METABOLISM - color = "#403010" // rgb: 64, 48, 16 - - on_mob_life(var/mob/living/M as mob) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.nutrition += nutriment_factor - ..() - return - - psilocybin - name = "Psilocybin" - id = "psilocybin" - description = "A strong psycotropic derived from certain species of mushroom." - color = "#E700E7" // rgb: 231, 0, 231 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.druggy = max(M.druggy, 30) - if(!data) data = 1 - switch(data) - if(1 to 5) - if (!M.stuttering) M.stuttering = 1 - M.Dizzy(5) - if(prob(10)) M.emote(pick("twitch","giggle")) - if(5 to 10) - if (!M.stuttering) M.stuttering = 1 - M.Jitter(10) - M.Dizzy(10) - M.druggy = max(M.druggy, 35) - if(prob(20)) M.emote(pick("twitch","giggle")) - if (10 to INFINITY) - if (!M.stuttering) M.stuttering = 1 - M.Jitter(20) - M.Dizzy(20) - M.druggy = max(M.druggy, 40) - if(prob(30)) M.emote(pick("twitch","giggle")) - data++ - ..() - return - - sprinkles - name = "Sprinkles" - id = "sprinkles" - description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FF00FF" // rgb: 255, 0, 255 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - cornoil - name = "Corn Oil" - id = "cornoil" - description = "An oil derived from various types of corn." - reagent_state = LIQUID - nutriment_factor = 20 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - reaction_turf(var/turf/simulated/T, var/volume) - if (!istype(T)) return - src = null - if(volume >= 3) - if(T.wet >= 1) return - T.wet = 1 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") - T.overlays += T.wet_overlay - - spawn(800) - if (!istype(T)) return - if(T.wet >= 2) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot) - var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) - lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - - enzyme - name = "Denatured Enzyme" - id = "enzyme" - description = "Heated beyond usefulness, this enzyme is now worthless." - reagent_state = LIQUID - color = "#282314" // rgb: 54, 94, 48 - - dry_ramen - name = "Dry Ramen" - id = "dry_ramen" - description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - hot_ramen - name = "Hot Ramen" - id = "hot_ramen" - description = "The noodles are boiled, the flavors are artificial, just like being back in school." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) - ..() - return - - hell_ramen - name = "Hell Ramen" - id = "hell_ramen" - description = "The noodles are boiled, the flavors are artificial, just like being back in school." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - ..() - return - - - flour - name = "flour" - id = "flour" - description = "This is what you rub all over yourself to pretend to be a ghost." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FFFFFF" // rgb: 0, 0, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - reaction_turf(var/turf/T, var/volume) - src = null - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/flour(T) - - rice - name = "Rice" - id = "rice" - description = "Enjoy the great taste of nothing." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FFFFFF" // rgb: 0, 0, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - cherryjelly - name = "Cherry Jelly" - id = "cherryjelly" - description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." - reagent_state = LIQUID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#801E28" // rgb: 128, 30, 40 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - toxin/coffeepowder - name = "Coffee Grounds" - id = "coffeepowder" - description = "Finely ground Coffee beans, used to make coffee." - reagent_state = SOLID - color = "#5B2E0D" // rgb: 91, 46, 13 - - toxin/teapowder - name = "Ground Tea Leaves" - id = "teapowder" - description = "Finely shredded Tea leaves, used for making tea." - reagent_state = SOLID - color = "#7F8400" // rgb: 127, 132, 0 - - //Reagents used for plant fertilizers. - toxin/fertilizer - name = "fertilizer" - id = "fertilizer" - description = "A chemical mix good for growing plants with." - reagent_state = LIQUID -// toxpwr = 0.2 //It's not THAT poisonous. - color = "#664330" // rgb: 102, 67, 48 - - - toxin/fertilizer/eznutrient - name = "EZ Nutrient" - id = "eznutrient" - - toxin/fertilizer/left4zed - name = "Left-4-Zed" - id = "left4zed" - - toxin/fertilizer/robustharvest - name = "Robust Harvest" - id = "robustharvest" - - -///////////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////// DRINKS BELOW, Beer is up there though, along with cola. Cap'n Pete's Cuban Spiced Rum//////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////////////// - - drink - name = "Drink" - id = "drink" - description = "Uh, some kind of drink." - reagent_state = LIQUID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#E78108" // rgb: 231, 129, 8 - var/adj_dizzy = 0 - var/adj_drowsy = 0 - var/adj_sleepy = 0 - var/adj_temp = 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.nutrition += nutriment_factor - holder.remove_reagent(src.id, FOOD_METABOLISM) - if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy) - if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy) - if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy) - if (adj_temp) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT)) - // Drinks should be used up faster than other reagents. - holder.remove_reagent(src.id, FOOD_METABOLISM) - ..() - return - - orangejuice - name = "Orange juice" - id = "orangejuice" - description = "Both delicious AND rich in Vitamin C, what more do you need?" - color = "#E78108" // rgb: 231, 129, 8 - - on_mob_life(var/mob/living/M as mob) - ..() - if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM) - return - - tomatojuice - name = "Tomato Juice" - id = "tomatojuice" - description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" - color = "#731008" // rgb: 115, 16, 8 - - on_mob_life(var/mob/living/M as mob) - ..() - if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1) - return - - limejuice - name = "Lime Juice" - id = "limejuice" - description = "The sweet-sour juice of limes." - color = "#365E30" // rgb: 54, 94, 48 - on_mob_life(var/mob/living/M as mob) - ..() - if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) - return - - - carrotjuice - name = "Carrot juice" - id = "carrotjuice" - description = "It is just like a carrot but without crunching." - color = "#973800" // rgb: 151, 56, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - M.eye_blurry = max(M.eye_blurry-1 , 0) - M.eye_blind = max(M.eye_blind-1 , 0) - if(!data) data = 1 - switch(data) - if(1 to 20) - //nothing - if(21 to INFINITY) - if (prob(data-10)) - M.disabilities &= ~NEARSIGHTED - data++ - return - - doctor_delight - name = "The Doctor's Delight" - id = "doctorsdelight" - description = "A gulp a day keeps the MediBot away. That's probably for the best." - reagent_state = LIQUID - color = "#FF8CFF" // rgb: 255, 140, 255 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) - ..() - return - - berryjuice - name = "Berry Juice" - id = "berryjuice" - description = "A delicious blend of several different kinds of berries." - color = "#863333" // rgb: 134, 51, 51 - - poisonberryjuice - name = "Poison Berry Juice" - id = "poisonberryjuice" - description = "A tasty juice blended from various kinds of very deadly and toxic berries." - color = "#863353" // rgb: 134, 51, 83 - - on_mob_life(var/mob/living/M as mob) - ..() - M.adjustToxLoss(1) - return - - watermelonjuice - name = "Watermelon Juice" - id = "watermelonjuice" - description = "Delicious juice made from watermelon." - color = "#863333" // rgb: 134, 51, 51 - - lemonjuice - name = "Lemon Juice" - id = "lemonjuice" - description = "This juice is VERY sour." - color = "#863333" // rgb: 175, 175, 0 - - grapejuice - name = "Grape Juice" - id = "grapejuice" - description = "This juice is known to stain shirts." - color = "#993399" // rgb: 153, 51, 153 - - banana - name = "Banana Juice" - id = "banana" - description = "The raw essence of a banana." - color = "#863333" // rgb: 175, 175, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Clown")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - nothing - name = "Nothing" - id = "nothing" - description = "Absolutely nothing." - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Mime")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - potato_juice - name = "Potato Juice" - id = "potato" - description = "Juice of the potato. Bleh." - nutriment_factor = 2 * FOOD_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - milk - name = "Milk" - id = "milk" - description = "An opaque white liquid produced by the mammary glands of mammals." - color = "#DFDFDF" // rgb: 223, 223, 223 - - on_mob_life(var/mob/living/M as mob) - if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) - if(holder.has_reagent("capsaicin")) - holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM) - ..() - return - - soymilk - name = "Soy Milk" - id = "soymilk" - description = "An opaque white liquid made from soybeans." - color = "#DFDFC7" // rgb: 223, 223, 199 - - cream - name = "Cream" - id = "cream" - description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" - color = "#DFD7AF" // rgb: 223, 215, 175 - - chocolate_milk - name = "Chocolate milk" - id ="chocolate_milk" - description = "Chocolate-flavored milk, tastes like being a kid again." - color = "#85432C" - - hot_coco - name = "Hot Chocolate" - id = "hot_coco" - description = "Made with love! And coco beans." - nutriment_factor = 2 * FOOD_METABOLISM - color = "#403010" // rgb: 64, 48, 16 - adj_temp = 5 - - coffee - name = "Coffee" - id = "coffee" - description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant." - color = "#482000" // rgb: 72, 32, 0 - adj_dizzy = -5 - adj_drowsy = -3 - adj_sleepy = -2 - adj_temp = 25 - overdose_threshold = 45 - - on_mob_life(var/mob/living/M as mob) - if(adj_temp > 0 && holder.has_reagent("frostoil")) - holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM) - if(prob(50)) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - ..() - return - - overdose_process(var/mob/living/M as mob) - if(volume > 45) - M.Jitter(5) - - ..() - return - - icecoffee - name = "Iced Coffee" - id = "icecoffee" - description = "Coffee and ice, refreshing and cool." - color = "#102838" // rgb: 16, 40, 56 - adj_temp = -5 - - soy_latte - name = "Soy Latte" - id = "soy_latte" - description = "A nice and tasty beverage while you are reading your hippie books." - color = "#664300" // rgb: 102, 67, 0 - adj_sleepy = 0 - adj_temp = 5 - - on_mob_life(var/mob/living/M as mob) - ..() - M.sleeping = 0 - if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) - return - - cafe_latte - name = "Cafe Latte" - id = "cafe_latte" - description = "A nice, strong and tasty beverage while you are reading." - color = "#664300" // rgb: 102, 67, 0 - adj_sleepy = 0 - adj_temp = 5 - - on_mob_life(var/mob/living/M as mob) - ..() - M.sleeping = 0 - if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) - return - - tea - name = "Tea" - id = "tea" - description = "Tasty black tea: It has antioxidants. It's good for you!" - color = "#101000" // rgb: 16, 16, 0 - adj_dizzy = -2 - adj_drowsy = -1 - adj_sleepy = -3 - adj_temp = 20 - - on_mob_life(var/mob/living/M as mob) - ..() - if(M.getToxLoss() && prob(20)) - M.adjustToxLoss(-1) - return - - icetea - name = "Iced Tea" - id = "icetea" - description = "No relation to a certain rap artist/ actor." - color = "#104038" // rgb: 16, 64, 56 - adj_temp = -5 - - kahlua - name = "Kahlua" - id = "kahlua" - description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" - color = "#664300" // rgb: 102, 67, 0 - adj_dizzy = -5 - adj_drowsy = -3 - adj_sleepy = -2 - - on_mob_life(var/mob/living/M as mob) - ..() - M.Jitter(5) - return - - cold - name = "Cold drink" - adj_temp = -5 - - tonic - name = "Tonic Water" - id = "tonic" - description = "It tastes strange but at least the quinine keeps the Space Malaria at bay." - color = "#664300" // rgb: 102, 67, 0 - adj_dizzy = -5 - adj_drowsy = -3 - adj_sleepy = -2 - - sodawater - name = "Soda Water" - id = "sodawater" - description = "A can of club soda. Why not make a scotch and soda?" - color = "#619494" // rgb: 97, 148, 148 - adj_dizzy = -5 - adj_drowsy = -3 - - ice - name = "Ice" - id = "ice" - description = "Frozen water, your dentist wouldn't like you chewing this." - reagent_state = SOLID - color = "#619494" // rgb: 97, 148, 148 - - space_cola - name = "Cola" - id = "cola" - description = "A refreshing beverage." - reagent_state = LIQUID - color = "#100800" // rgb: 16, 8, 0 - adj_drowsy = -3 - - nuka_cola - name = "Nuka Cola" - id = "nuka_cola" - description = "Cola, cola never changes." - color = "#100800" // rgb: 16, 8, 0 - adj_sleepy = -2 - - on_mob_life(var/mob/living/M as mob) - M.Jitter(20) - M.druggy = max(M.druggy, 30) - M.dizziness +=5 - M.drowsyness = 0 - M.status_flags |= GOTTAGOFAST - ..() - return - - spacemountainwind - name = "Space Mountain Wind" - id = "spacemountainwind" - description = "Blows right through you like a space wind." - color = "#102000" // rgb: 16, 32, 0 - adj_drowsy = -7 - adj_sleepy = -1 - - dr_gibb - name = "Dr. Gibb" - id = "dr_gibb" - description = "A delicious blend of 42 different flavours" - color = "#102000" // rgb: 16, 32, 0 - adj_drowsy = -6 - - space_up - name = "Space-Up" - id = "space_up" - description = "Tastes like a hull breach in your mouth." - color = "#202800" // rgb: 32, 40, 0 - adj_temp = -8 - - lemon_lime - name = "Lemon Lime" - description = "A tangy substance made of 0.5% natural citrus!" - id = "lemon_lime" - color = "#878F00" // rgb: 135, 40, 0 - adj_temp = -8 - - lemonade - name = "Lemonade" - description = "Oh the nostalgia..." - id = "lemonade" - color = "#FFFF00" // rgb: 255, 255, 0 - - kiraspecial - name = "Kira Special" - description = "Long live the guy who everyone had mistaken for a girl. Baka!" - id = "kiraspecial" - color = "#CCCC99" // rgb: 204, 204, 153 - - brownstar - name = "Brown Star" - description = "Its not what it sounds like..." - id = "brownstar" - color = "#9F3400" // rgb: 159, 052, 000 - adj_temp = - 2 - - milkshake - name = "Milkshake" - description = "Glorious brainfreezing mixture." - id = "milkshake" - color = "#AEE5E4" // rgb" 174, 229, 228 - adj_temp = -9 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!data) data = 1 - switch(data) - if(1 to 15) - M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT - if(holder.has_reagent("capsaicin")) - holder.remove_reagent("capsaicin", 5) - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(5,20) - if(15 to 25) - M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(10,20) - if(25 to INFINITY) - M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(1)) M.emote("shiver") - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(15,20) - data++ - holder.remove_reagent(src.id, FOOD_METABOLISM) - ..() - return - - rewriter - name = "Rewriter" - description = "The secert of the sanctuary of the Libarian..." - id = "rewriter" - color = "#485000" // rgb:72, 080, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - M.Jitter(5) - return - - hippies_delight - name = "Hippie's Delight" - id = "hippiesdelight" - description = "You just don't get it maaaan." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.druggy = max(M.druggy, 50) - if(!data) data = 1 - switch(data) - if(1 to 5) - if (!M.stuttering) M.stuttering = 1 - M.Dizzy(10) - if(prob(10)) M.emote(pick("twitch","giggle")) - if(5 to 10) - if (!M.stuttering) M.stuttering = 1 - M.Jitter(20) - M.Dizzy(20) - M.druggy = max(M.druggy, 45) - if(prob(20)) M.emote(pick("twitch","giggle")) - if (10 to INFINITY) - if (!M.stuttering) M.stuttering = 1 - M.Jitter(40) - M.Dizzy(40) - M.druggy = max(M.druggy, 60) - if(prob(30)) M.emote(pick("twitch","giggle")) - holder.remove_reagent(src.id, 0.2) - data++ - ..() - return - -//ALCOHOL WOO - ethanol - name = "Ethanol" //Parent class for all alcoholic reagents. - id = "ethanol" - description = "A well-known alcohol with a variety of applications." - reagent_state = LIQUID - nutriment_factor = 0 //So alcohol can fill you up! If they want to. - color = "#404030" // rgb: 64, 64, 48 - var/datum/martial_art/drunk_brawling/F = new - var/dizzy_adj = 3 - var/slurr_adj = 3 - var/confused_adj = 2 - var/slur_start = 65 //amount absorbed after which mob starts slurring - var/brawl_start = 75 //amount absorbed after which mob switches to drunken brawling as a fighting style - var/confused_start = 130 //amount absorbed after which mob starts confusing directions - var/vomit_start = 180 //amount absorbed after which mob starts vomitting - var/blur_start = 260 //amount absorbed after which mob starts getting blurred vision - var/pass_out = 325 //amount absorbed after which mob starts passing out - - on_mob_life(var/mob/living/M as mob, var/alien) - // Sobering multiplier. - // Sober block makes it more difficult to get drunk - var/sober_str=!(SOBER in M.mutations)?1:2 - M:nutrition += nutriment_factor - holder.remove_reagent(src.id, FOOD_METABOLISM) - if(!src.data) data = 1 - src.data++ - - var/d = data - - // make all the beverages work together - for(var/datum/reagent/ethanol/A in holder.reagent_list) - if(isnum(A.data)) d += A.data - - d/=sober_str - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly. - d*=5 - - M.dizziness += dizzy_adj. - if(d >= slur_start && d < pass_out) - if (!M:slurring) M:slurring = 1 - M:slurring += slurr_adj/sober_str - if(d >= brawl_start && ishuman(M)) - var/mob/living/carbon/human/H = M - F.teach(H,1) - if(src.volume < 3) - if(H.martial_art == F) - F.remove(H) - if(d >= confused_start && prob(33)) - if (!M:confused) M:confused = 1 - M.confused = max(M:confused+(confused_adj/sober_str),0) - if(d >= blur_start) - M.eye_blurry = max(M.eye_blurry, 10/sober_str) - M:drowsyness = max(M:drowsyness, 0) - if(d >= vomit_start) - if(prob(8)) - M.fakevomit() - if(d >= pass_out) - M:paralysis = max(M:paralysis, 20/sober_str) - M:drowsyness = max(M:drowsyness, 30/sober_str) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"] - if (istype(L)) - L.take_damage(0.1, 1) - H.adjustToxLoss(0.1) - holder.remove_reagent(src.id, 0.4) - ..() - return - - reaction_obj(var/obj/O, var/volume) - if(istype(O,/obj/item/weapon/paper)) - var/obj/item/weapon/paper/paperaffected = O - paperaffected.clearpaper() - usr << "The solution melts away the ink on the paper." - if(istype(O,/obj/item/weapon/book)) - if(volume >= 5) - var/obj/item/weapon/book/affectedbook = O - affectedbook.dat = null - usr << "The solution melts away the ink on the book." - else - usr << "It wasn't enough..." - return - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel. - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - M.adjust_fire_stacks(volume / 15) - return - - beer //It's really much more stronger than other drinks. - name = "Beer" - id = "beer" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water." - nutriment_factor = 2 * FOOD_METABOLISM - color = "#664300" // rgb: 102, 67, 0 - on_mob_life(var/mob/living/M as mob) - ..() - 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" - description = "A superb and well-aged single-malt whiskey. Damn." - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 4 - - specialwhiskey - name = "Special Blend Whiskey" - id = "specialwhiskey" - description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." - color = "#664300" // rgb: 102, 67, 0 - slur_start = 30 //amount absorbed after which mob starts slurring - brawl_start = 40 - - gin - name = "Gin" - id = "gin" - description = "It's gin. In space. I say, good sir." - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 3 - - absinthe - name = "Absinthe" - id = "absinthe" - description = "Watch out that the Green Fairy doesn't come for you!" - color = "#33EE00" // rgb: lots, ??, ?? - overdose_threshold = 30 - dizzy_adj = 5 - slur_start = 25 - brawl_start = 40 - confused_start = 100 - - //copy paste from LSD... shoot me - on_mob_life(var/mob/M) - if(!M) M = holder.my_atom - if(!data) data = 1 - data++ - M:hallucination += 5 - if(volume > overdose_threshold) - M:adjustToxLoss(1) - ..() - return - - rum - name = "Rum" - id = "rum" - description = "Popular with the sailors. Not very popular with everyone else." - color = "#664300" // rgb: 102, 67, 0 - overdose_threshold = 30 - - on_mob_life(var/mob/living/M as mob) - ..() - M.dizziness +=5 - if(volume > overdose_threshold) - M:adjustToxLoss(1) - return - - mojito - name = "Mojito" - id = "mojito" - description = "If it's good enough for Spesscuba, it's good enough for you." - color = "#664300" // rgb: 102, 67, 0 - - vodka - name = "Vodka" - id = "vodka" - description = "Number one drink AND fueling choice for Russians worldwide." - color = "#664300" // rgb: 102, 67, 0 - - sake - name = "Sake" - id = "sake" - description = "Anime's favorite drink." - color = "#664300" // rgb: 102, 67, 0 - - tequilla - name = "Tequila" - id = "tequilla" - description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?" - color = "#A8B0B7" // rgb: 168, 176, 183 - - vermouth - name = "Vermouth" - id = "vermouth" - description = "You suddenly feel a craving for a martini..." - color = "#664300" // rgb: 102, 67, 0 - - wine - name = "Wine" - id = "wine" - description = "An premium alchoholic beverage made from distilled grape juice." - color = "#7E4043" // rgb: 126, 64, 67 - dizzy_adj = 2 - slur_start = 65 //amount absorbed after which mob starts slurring - confused_start = 145 //amount absorbed after which mob starts confusing directions - - cognac - name = "Cognac" - id = "cognac" - description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication." - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 4 - confused_start = 115 //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 - brawl_start = 25 - confused_start = 40 - blur_start = 60 - pass_out = 80 - - ale - name = "Ale" - id = "ale" - description = "A dark alchoholic beverage made by malted barley and yeast." - color = "#664300" // rgb: 102, 67, 0 - - thirteenloko - name = "Thirteen Loko" - id = "thirteenloko" - description = "A potent mixture of caffeine and alcohol." - reagent_state = LIQUID - color = "#102000" // rgb: 16, 32, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - M:nutrition += nutriment_factor - holder.remove_reagent(src.id, FOOD_METABOLISM) - M:drowsyness = max(0,M:drowsyness-7) - //if(!M:sleeping_willingly) - // M:sleeping = max(0,M.sleeping-2) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature-5) - M.Jitter(1) - return - - -/////////////////////////////////////////////////////////////////cocktail entities////////////////////////////////////////////// - - bilk - name = "Bilk" - id = "bilk" - description = "This appears to be beer mixed with milk. Disgusting." - reagent_state = LIQUID - color = "#895C4C" // rgb: 137, 92, 76 - - atomicbomb - name = "Atomic Bomb" - id = "atomicbomb" - description = "Nuclear proliferation never tasted so good." - reagent_state = LIQUID - color = "#666300" // rgb: 102, 99, 0 - - threemileisland - name = "THree Mile Island Iced Tea" - id = "threemileisland" - description = "Made for a woman, strong enough for a man." - reagent_state = LIQUID - color = "#666340" // rgb: 102, 99, 64 - - goldschlager - name = "Goldschlager" - id = "goldschlager" - description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - patron - name = "Patron" - id = "patron" - description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." - reagent_state = LIQUID - color = "#585840" // rgb: 88, 88, 64 - - gintonic - name = "Gin and Tonic" - id = "gintonic" - description = "An all time classic, mild cocktail." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - cuba_libre - name = "Cuba Libre" - id = "cubalibre" - description = "Rum, mixed with cola. Viva la revolution." - reagent_state = LIQUID - color = "#3E1B00" // rgb: 62, 27, 0 - - whiskey_cola - name = "Whiskey Cola" - id = "whiskeycola" - description = "Whiskey, mixed with cola. Surprisingly refreshing." - reagent_state = LIQUID - color = "#3E1B00" // rgb: 62, 27, 0 - - martini - name = "Classic Martini" - id = "martini" - description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - vodkamartini - name = "Vodka Martini" - id = "vodkamartini" - description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - white_russian - name = "White Russian" - id = "whiterussian" - description = "That's just, like, your opinion, man..." - reagent_state = LIQUID - color = "#A68340" // rgb: 166, 131, 64 - - screwdrivercocktail - name = "Screwdriver" - id = "screwdrivercocktail" - description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." - reagent_state = LIQUID - color = "#A68310" // rgb: 166, 131, 16 - - booger - name = "Booger" - id = "booger" - description = "Ewww..." - reagent_state = LIQUID - color = "#A68310" // rgb: 166, 131, 16 - - bloody_mary - name = "Bloody Mary" - id = "bloodymary" - description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - gargle_blaster - name = "Pan-Galactic Gargle Blaster" - id = "gargleblaster" - description = "Whoah, this stuff looks volatile!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - brave_bull - name = "Brave Bull" - id = "bravebull" - description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - tequilla_sunrise - name = "Tequila Sunrise" - id = "tequillasunrise" - description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - toxins_special - name = "Toxins Special" - id = "toxinsspecial" - description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - beepsky_smash - name = "Beepsky Smash" - id = "beepskysmash" - description = "Deny drinking this and prepare for THE LAW." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - changelingsting - name = "Changeling Sting" - id = "changelingsting" - description = "You take a tiny sip and feel a burning sensation..." - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - irish_cream - name = "Irish Cream" - id = "irishcream" - description = "Whiskey-imbued cream, what else would you expect from the Irish." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - manly_dorf - name = "The Manly Dorf" - id = "manlydorf" - description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - longislandicedtea - name = "Long Island Iced Tea" - id = "longislandicedtea" - description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - moonshine - name = "Moonshine" - id = "moonshine" - description = "You've really hit rock bottom now... your liver packed its bags and left last night." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - b52 - name = "B-52" - id = "b52" - description = "Coffee, Irish Cream, and congac. You will get bombed." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - irishcoffee - name = "Irish Coffee" - id = "irishcoffee" - description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - margarita - name = "Margarita" - id = "margarita" - description = "On the rocks with salt on the rim. Arriba~!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - black_russian - name = "Black Russian" - id = "blackrussian" - description = "For the lactose-intolerant. Still as classy as a White Russian." - reagent_state = LIQUID - color = "#360000" // rgb: 54, 0, 0 - - manhattan - name = "Manhattan" - id = "manhattan" - description = "The Detective's undercover drink of choice. He never could stomach gin..." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - manhattan_proj - name = "Manhattan Project" - id = "manhattan_proj" - description = "A scienitst's drink of choice, for pondering ways to blow up the station." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - whiskeysoda - name = "Whiskey Soda" - id = "whiskeysoda" - description = "Ultimate refreshment." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - antifreeze - name = "Anti-freeze" - id = "antifreeze" - description = "Ultimate refreshment." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - barefoot - name = "Barefoot" - id = "barefoot" - description = "Barefoot and pregnant" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - snowwhite - name = "Snow White" - id = "snowwhite" - description = "A cold refreshment" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - demonsblood - name = "Demons Blood" - id = "demonsblood" - description = "AHHHH!!!!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 10 - slurr_adj = 10 - - vodkatonic - name = "Vodka and Tonic" - id = "vodkatonic" - description = "For when a gin and tonic isn't russian enough." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 4 - slurr_adj = 3 - - ginfizz - name = "Gin Fizz" - id = "ginfizz" - description = "Refreshingly lemony, deliciously dry." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 4 - slurr_adj = 3 - - bahama_mama - name = "Bahama mama" - id = "bahama_mama" - description = "Tropic cocktail." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - singulo - name = "Singulo" - id = "singulo" - description = "A blue-space beverage!" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - dizzy_adj = 15 - slurr_adj = 15 - - sbiten - name = "Sbiten" - id = "sbiten" - description = "A spicy Vodka! Might be a little hot for the little guys!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - if (M.bodytemperature < 360) - M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055 - return - - devilskiss - name = "Devils Kiss" - id = "devilskiss" - description = "Creepy time!" - reagent_state = LIQUID - color = "#A68310" // rgb: 166, 131, 16 - - red_mead - name = "Red Mead" - id = "red_mead" - description = "The true Viking drink! Even though it has a strange red color." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - mead - name = "Mead" - id = "mead" - description = "A Vikings drink, though a cheap one." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - iced_beer - name = "Iced Beer" - id = "iced_beer" - description = "A beer which is so cold the air around it freezes." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - if (M.bodytemperature < 270) - M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055 - return - - grog - name = "Grog" - id = "grog" - description = "Watered down rum, Nanotrasen approves!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - aloe - name = "Aloe" - id = "aloe" - description = "So very, very, very good." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - andalusia - name = "Andalusia" - id = "andalusia" - description = "A nice, strange named drink." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - alliescocktail - name = "Allies Cocktail" - id = "alliescocktail" - description = "A drink made from your allies." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - acid_spit - name = "Acid Spit" - id = "acidspit" - description = "A drink by Nanotrasen. Made from live aliens." - reagent_state = LIQUID - color = "#365000" // rgb: 54, 80, 0 - - amasec - name = "Amasec" - id = "amasec" - description = "Official drink of the Imperium." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - - neurotoxin - name = "Neurotoxin" - id = "neurotoxin" - description = "A strong neurotoxin that puts the subject into a death-like state." - reagent_state = LIQUID - color = "#2E2E61" // rgb: 46, 46, 97 - - on_mob_life(var/mob/living/M as mob) - M.weakened = max(M.weakened, 3) - if(!data) - data = 1 - data++ - M.dizziness +=6 - if(data >= 15 && data <45) - if (!M.slurring) - M.slurring = 1 - M.slurring += 3 - else if(data >= 45 && prob(50) && data <55) - M.confused = max(M.confused+3,0) - else if(data >=55) - M.druggy = max(M.druggy, 55) - else if(data >=200) - M.adjustToxLoss(2) - ..() - return - - bananahonk - name = "Banana Mama" - id = "bananahonk" - description = "A drink from Clown Heaven." - nutriment_factor = 1 * FOOD_METABOLISM - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Clown")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - silencer - name = "Silencer" - id = "silencer" - description = "A drink from Mime Heaven." - nutriment_factor = 1 * FOOD_METABOLISM - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Mime")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - changelingsting - name = "Changeling Sting" - id = "changelingsting" - description = "A stingy drink." - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - on_mob_life(var/mob/living/M as mob) - ..() - M.dizziness +=5 - return - - erikasurprise - name = "Erika Surprise" - id = "erikasurprise" - description = "The surprise is, it's green!" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - irishcarbomb - name = "Irish Car Bomb" - id = "irishcarbomb" - description = "Mmm, tastes like chocolate cake..." - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - on_mob_life(var/mob/living/M as mob) - ..() - M.dizziness +=5 - return - - syndicatebomb - name = "Syndicate Bomb" - id = "syndicatebomb" - description = "A Syndicate bomb" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - erikasurprise - name = "Erika Surprise" - id = "erikasurprise" - description = "The surprise is, it's green!" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - driestmartini - name = "Driest Martini" - id = "driestmartini" - description = "Only for the experienced. You think you see sand floating in the glass." - nutriment_factor = 1 * FOOD_METABOLISM - color = "#2E6671" // rgb: 46, 102, 113 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=10 - if(data >= 55 && data <115) - if (!M.stuttering) M.stuttering = 1 - M.stuttering += 10 - else if(data >= 115 && prob(33)) - M.confused = max(M.confused+15,15) - ..() - - return - -// Undefine the alias for REAGENTS_EFFECT_MULTIPLER -#undef REM - - -/datum/reagent/Destroy() - holder = null - return ..() diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm deleted file mode 100644 index 8fcd9e8117b..00000000000 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ /dev/null @@ -1,1576 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -datum - chemical_reaction - var/name = null - var/id = null - var/result = null - var/list/required_reagents = list() - var/list/required_catalysts = list() - - // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things - var/atom/required_container = null // the container required for the reaction to happen - var/required_other = 0 // an integer required for the reaction to happen - - var/result_amount = 0 - var/secondary = 0 // set to nonzero if secondary reaction - var/list/secondary_results = list() //additional reagents produced by the reaction - var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement - var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this). - var/mix_message = "The solution begins to bubble." - var/mix_sound = 'sound/effects/bubbles.ogg' - var/no_message = 0 - - - proc - on_reaction(var/datum/reagents/holder, var/created_volume) - return - - //I recommend you set the result amount to the total volume of all components. - - explosion_potassium - name = "Explosion" - id = "explosion_potassium" - result = null - required_reagents = list("water" = 1, "potassium" = 1) - result_amount = 2 - mix_message = "The mixture explodes!" - - on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) - e.start() - holder.clear_reagents() - return - - emp_pulse - name = "EMP Pulse" - id = "emp_pulse" - result = null - required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense - result_amount = 2 - - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. - // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades. - empulse(location, round(created_volume / 24), round(created_volume / 14), 1) - holder.clear_reagents() - return -/* - silicate - name = "Silicate" - id = "silicate" - result = "silicate" - required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1) - result_amount = 3 -*/ - - ice - name = "Ice" - id = "ice" - result = "ice" - required_reagents = list("water" = 1) - result_amount = 1 - max_temp = 273 - mix_message = "Ice forms as the water freezes." - mix_sound = null - - sterilizine - name = "Sterilizine" - id = "sterilizine" - result = "sterilizine" - required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1) - result_amount = 3 - - mutagen - name = "Unstable mutagen" - id = "mutagen" - result = "mutagen" - required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1) - result_amount = 3 - mix_message = "The substance turns neon green and bubbles unnervingly." - - hydrocodone - name = "Hydrocodone" - id = "hydrocodone" - result = "hydrocodone" - required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1) - result_amount = 2 - - thermite - name = "Thermite" - id = "thermite" - result = "thermite" - required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1) - result_amount = 3 - - space_drugs - name = "Space Drugs" - id = "space_drugs" - result = "space_drugs" - required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1) - result_amount = 3 - mix_message = "Slightly dizzying fumes drift from the solution." - - lube - name = "Space Lube" - id = "lube" - result = "lube" - required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1) - result_amount = 3 - mix_message = "The substance turns a striking cyan and becomes oily." - - mitocholide - name = "mitocholide" - id = "mitocholide" - result = "mitocholide" - required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1) - result_amount = 3 - - holy_water - name = "Holy Water" - id = "holywater" - result = "holywater" - required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1) - result_amount = 3 - mix_message = "The water somehow seems purified. Or maybe defiled." - - cryoxadone - name = "Cryoxadone" - id = "cryoxadone" - result = "cryoxadone" - required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1) - result_amount = 4 - mix_message = "The solution bubbles softly." - - spaceacillin - name = "Spaceacillin" - id = "spaceacillin" - result = "spaceacillin" - required_reagents = list("fungus" = 1, "ethanol" = 1) - result_amount = 2 - mix_message = "The solvent extracts an antibiotic compound from the fungus." - - Audioline - name = "Audioline" - id = "audioline" - result = "audioline" - required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1) - result_amount = 3 - - glycerol - name = "Glycerol" - id = "glycerol" - result = "glycerol" - required_reagents = list("cornoil" = 3, "sacid" = 1) - result_amount = 1 - - nitroglycerin - name = "Nitroglycerin" - id = "nitroglycerin" - result = "nitroglycerin" - required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1) - result_amount = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0) - e.start() - - holder.clear_reagents() - return - - sodiumchloride - name = "Sodium Chloride" - id = "sodiumchloride" - result = "sodiumchloride" - required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1) - result_amount = 3 - mix_message = "The solution crystallizes with a brief flare of light." - - rezadone - name = "Rezadone" - id = "rezadone" - result = "rezadone" - required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1) - result_amount = 3 - - lsd - name = "Lysergic acid diethylamide" - id = "lsd" - result = "lsd" - required_reagents = list("diethylamine" = 1, "fungus" = 1) - result_amount = 3 - mix_message = "The mixture turns a rather unassuming color and settles." - - plastication - name = "Plastic" - id = "solidplastic" - result = null - required_reagents = list("facid" = 10, "plasticide" = 20) - result_amount = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic - M.amount = 10 - M.loc = get_turf(holder.my_atom) - return - - virus_food - name = "Virus Food" - id = "virusfood" - result = "virusfood" - required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1) - result_amount = 3 -/* - mix_virus - name = "Mix Virus" - id = "mixvirus" - result = "blood" - required_reagents = list("virusfood" = 5) - required_catalysts = list("blood") - var/level = 2 - - on_reaction(var/datum/reagents/holder, var/created_volume) - - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - if(B && B.data) - var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] - if(D) - D.Evolve(level - rand(0, 1)) - - - mix_virus_2 - - name = "Mix Virus 2" - id = "mixvirus2" - required_reagents = list("mutagen" = 5) - level = 4 - - rem_virus - - name = "Devolve Virus" - id = "remvirus" - required_reagents = list("synaptizine" = 5) - - on_reaction(var/datum/reagents/holder, var/created_volume) - - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - if(B && B.data) - var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] - if(D) - D.Devolve() -*/ - condensedcapsaicin - name = "Condensed Capsaicin" - id = "condensedcapsaicin" - result = "condensedcapsaicin" - required_reagents = list("capsaicin" = 2) - required_catalysts = list("plasma" = 5) - result_amount = 1 -/////////////////////////////////////////////////////////////////////////////////// - -// foam and foam precursor - - surfactant - name = "Foam surfactant" - id = "foam surfactant" - result = "fluorosurfactant" - required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1) - result_amount = 5 - mix_message = "A head of foam results from the mixture's constant fizzing." - - - foam - name = "Foam" - id = "foam" - result = null - required_reagents = list("fluorosurfactant" = 1, "water" = 1) - result_amount = 2 - - on_reaction(var/datum/reagents/holder, var/created_volume) - - - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution violently bubbles!" - - location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out foam!" - - //world << "Holder volume is [holder.total_volume]" - //for(var/datum/reagent/R in holder.reagent_list) - // world << "[R.name] = [R.volume]" - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) - s.start() - holder.clear_reagents() - return - - metalfoam - name = "Metal Foam" - id = "metalfoam" - result = null - required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1) - result_amount = 5 - - on_reaction(var/datum/reagents/holder, var/created_volume) - - - var/location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out a metalic foam!" - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 1) - s.start() - return - - ironfoam - name = "Iron Foam" - id = "ironlfoam" - result = null - required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1) - result_amount = 5 - - on_reaction(var/datum/reagents/holder, var/created_volume) - - - var/location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out a metalic foam!" - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 2) - s.start() - return - - // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game! - ammonia - name = "Ammonia" - id = "ammonia" - result = "ammonia" - required_reagents = list("hydrogen" = 3, "nitrogen" = 1) - result_amount = 3 - mix_message = "The mixture bubbles, emitting an acrid reek." - - diethylamine - name = "Diethylamine" - id = "diethylamine" - result = "diethylamine" - required_reagents = list ("ammonia" = 1, "ethanol" = 1) - result_amount = 2 - min_temp = 374 - mix_message = "A horrible smell pours forth from the mixture." - - space_cleaner - name = "Space cleaner" - id = "cleaner" - result = "cleaner" - required_reagents = list("ammonia" = 1, "water" = 1, "ethanol" = 1) - result_amount = 3 - mix_message = "Ick, this stuff really stinks. Sure does make the container sparkle though!" - - sulfuric_acid - name = "Sulfuric Acid" - id = "sacid" - result = "sacid" - required_reagents = list("sulfur" = 1, "oxygen" = 1, "hydrogen" = 1) - result_amount = 2 - mix_message = "The mixture gives off a sharp acidic tang." - -///////Changeling Blood Test///////////// -/* - changeling_test - name = "Changeling blood test" - id = "changelingblood" - result = "blood" - required_reagents = list("blood" = 5) - required_catalysts = list("fuel") - result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred. - on_reaction(var/datum/reagents/holder, var/created_volume) - if(!holder.reagent_list) //reagent_list is not null - return - var/datum/reagent/blood/B = locate() in holder.reagent_list - if(!B) //B is not null - return - var/mob/living/carbon/human/H = B.data["donor"] - if(!H) //H is not null. - return - if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling. - for(var/mob/M in viewers(get_turf(holder.my_atom), null)) - M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2) - else - for(var/mob/M in viewers(get_turf(holder.my_atom), null)) - M.show_message( "The blood seems to break apart in the fuel.", 1) - holder.del_reagent("blood") - return -*/ - -/////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// - -//Grey - slimespawn - name = "Slime Spawn" - id = "m_spawn" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/grey - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1) - var/mob/living/carbon/slime/S = new /mob/living/carbon/slime - S.loc = get_turf(holder.my_atom) - - - slimeinaprov - name = "Slime Epinephrine" - id = "m_epinephrine" - result = "epinephrine" - required_reagents = list("water" = 5) - result_amount = 3 - required_other = 1 - required_container = /obj/item/slime_extract/grey - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - - - slimemonkey - name = "Slime Monkey" - id = "m_monkey" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/grey - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/i = 1, i <= 3, i++) - var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube - M.loc = get_turf(holder.my_atom) - -//Green - slimemutate - name = "Mutation Toxin" - id = "mutationtoxin" - result = "mutationtoxin" - required_reagents = list("plasma" = 5) - result_amount = 1 - required_other = 1 - required_container = /obj/item/slime_extract/green - -//Metal - slimemetal - name = "Slime Metal" - id = "m_metal" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/metal - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal - M.amount = 15 - M.loc = get_turf(holder.my_atom) - var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel - P.amount = 5 - P.loc = get_turf(holder.my_atom) - -//Gold - slimecrit - name = "Slime Crit" - id = "m_tele" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/gold - required_other = 1 - on_reaction(var/datum/reagents/holder) - - var/blocked = blocked_mobs //global variable of blocked mobs - - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= 5, i++) - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.faction |= "slimesummon" - C.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) -// for(var/mob/O in viewers(get_turf(holder.my_atom), null)) -// O.show_message(text("\red The slime core fizzles disappointingly,"), 1) - - - slimecritlesser - name = "Slime Crit Lesser" - id = "m_tele3" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/gold - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently!"), 1) - spawn(50) - - if(holder && holder.my_atom) - - var/blocked = blocked_mobs - - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.faction |= "neutral" - C.loc = get_turf(holder.my_atom) - -//Silver - slimebork - name = "Slime Bork" - id = "m_tele2" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/silver - required_other = 1 - on_reaction(var/datum/reagents/holder) - - var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks) - // BORK BORK BORK - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) - slimedrinks - name = "Slime Drinks" - id = "m_tele3" - result = null - required_reagents = list("water" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/silver - required_other = 1 - on_reaction(var/datum/reagents/holder) - - var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks) - // BORK BORK BORK - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) - - -//Blue - slimefrost - name = "Slime Frost Oil" - id = "m_frostoil" - result = "frostoil" - required_reagents = list("plasma" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/blue - required_other = 1 -//Dark Blue - slimefreeze - name = "Slime Freeze" - id = "m_freeze" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/darkblue - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/M in range (get_turf(holder.my_atom), 7)) - M.bodytemperature -= 140 - M << "\blue You feel a chill!" - -//Orange - slimecasp - name = "Slime Capsaicin Oil" - id = "m_capsaicinoil" - result = "capsaicin" - required_reagents = list("blood" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/orange - required_other = 1 - - slimefire - name = "Slime fire" - id = "m_fire" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/orange - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - var/turf/simulated/T = get_turf(holder.my_atom) - if(istype(T)) - T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50) - -//Yellow - slimeoverload - name = "Slime EMP" - id = "m_emp" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - empulse(get_turf(holder.my_atom), 3, 7) - - - slimecell - name = "Slime Powercell" - id = "m_cell" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime - P.loc = get_turf(holder.my_atom) - - slimeglow - name = "Slime Glow" - id = "m_glow" - result = null - required_reagents = list("water" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1) - var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime - F.loc = get_turf(holder.my_atom) - -//Purple - - slimepsteroid - name = "Slime Steroid" - id = "m_steroid" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/purple - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid - P.loc = get_turf(holder.my_atom) - - - - slimejam - name = "Slime Jam" - id = "m_jam" - result = "slimejelly" - required_reagents = list("sugar" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/purple - required_other = 1 - - -//Dark Purple - slimeplasma - name = "Slime Plasma" - id = "m_plasma" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/darkpurple - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma - P.amount = 10 - P.loc = get_turf(holder.my_atom) - -//Red - slimeglycerol - name = "Slime Glycerol" - id = "m_glycerol" - result = "glycerol" - required_reagents = list("plasma" = 5) - result_amount = 8 - required_container = /obj/item/slime_extract/red - required_other = 1 - - - slimebloodlust - name = "Bloodlust" - id = "m_bloodlust" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/red - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) - slime.rabid = 1 - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The [slime] is driven into a frenzy!."), 1) - -//Pink - slimeppotion - name = "Slime Potion" - id = "m_potion" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/pink - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion - P.loc = get_turf(holder.my_atom) - - -//Black - slimemutate2 - name = "Advanced Mutation Toxin" - id = "mutationtoxin2" - result = "amutationtoxin" - required_reagents = list("plasma" = 5) - result_amount = 1 - required_other = 1 - required_container = /obj/item/slime_extract/black - -//Oil - slimeexplosion - name = "Slime Explosion" - id = "m_explosion" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/oil - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - explosion(get_turf(holder.my_atom), 1 ,3, 6) -//Light Pink - slimepotion2 - name = "Slime Potion 2" - id = "m_potion2" - result = null - result_amount = 1 - required_container = /obj/item/slime_extract/lightpink - required_reagents = list("plasma" = 5) - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2 - P.loc = get_turf(holder.my_atom) -//Adamantine - slimegolem - name = "Slime Golem" - id = "m_golem" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/adamantine - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe - Z.loc = get_turf(holder.my_atom) - Z.announce_to_ghosts() -//Bluespace - slimecrystal - name = "Slime Crystal" - id = "m_crystal" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/bluespace - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - if(holder.my_atom) - var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom)) - BC.visible_message("The [BC.name] appears out of thin air!") -//Cerulean - slimepsteroid2 - name = "Slime Steroid 2" - id = "m_steroid2" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/cerulean - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2 - P.loc = get_turf(holder.my_atom) -//Sepia - slimecamera - name = "Slime Camera" - id = "m_camera" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/sepia - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/device/camera/P = new /obj/item/device/camera - P.loc = get_turf(holder.my_atom) - - - slimefilm - name = "Slime Film" - id = "m_film" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/sepia - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/device/camera_film/P = new /obj/item/device/camera_film - P.loc = get_turf(holder.my_atom) -//Pyrite - slimepaint - name = "Slime Paint" - id = "s_paint" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/pyrite - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint) - var/chosen = pick(paints) - var/obj/P = new chosen - if(P) - P.loc = get_turf(holder.my_atom) - - -//////////////////////////////////////////FOOD MIXTURES//////////////////////////////////// - - tofu - name = "Tofu" - id = "tofu" - result = null - required_reagents = list("soymilk" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/tofu(location) - return - - chocolate_bar - name = "Chocolate Bar" - id = "chocolate_bar" - result = null - required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) - return - - chocolate_bar2 - name = "Chocolate Bar" - id = "chocolate_bar" - result = null - required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) - return - - hot_coco - name = "Hot Coco" - id = "hot_coco" - result = "hot_coco" - required_reagents = list("water" = 5, "coco" = 1) - result_amount = 5 - - chocolate_milk - name = "Chocolate Milk" - id = "chocolate_milk" - result = "chocolate_milk" - required_reagents = list("chocolate" = 1, "milk" = 1) - result_amount = 2 - mix_message = "The mixture turns a nice brown color." - - coffee - name = "Coffee" - id = "coffee" - result = "coffee" - required_reagents = list("coffeepowder" = 1, "water" = 5) - result_amount = 5 - - tea - name = "Tea" - id = "tea" - result = "tea" - required_reagents = list("teapowder" = 1, "water" = 5) - result_amount = 5 - - soysauce - name = "Soy Sauce" - id = "soysauce" - result = "soysauce" - required_reagents = list("soymilk" = 2, "flour" = 1, "sodiumchloride" = 1, "water" = 3) - result_amount = 7 - - cheesewheel - name = "Cheesewheel" - id = "cheesewheel" - result = null - required_reagents = list("milk" = 40) - required_catalysts = list("enzyme" = 5) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location) - return - - syntiflesh - name = "Syntiflesh" - id = "syntiflesh" - result = null - required_reagents = list("blood" = 5, "cryoxadone" = 1) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) - return - - hot_ramen - name = "Hot Ramen" - id = "hot_ramen" - result = "hot_ramen" - required_reagents = list("water" = 1, "dry_ramen" = 3) - result_amount = 3 - - hell_ramen - name = "Hell Ramen" - id = "hell_ramen" - result = "hell_ramen" - required_reagents = list("capsaicin" = 1, "hot_ramen" = 6) - result_amount = 6 - - doughball - name = "Ball of dough" - id = "dough_ball" - result = "dough_ball" - required_reagents = list("flour" = 15, "water" = 5) - required_catalysts = list("enzyme" = 5) - - -////////////////////////////////////////// COCKTAILS ////////////////////////////////////// - - - goldschlager - name = "Goldschlager" - id = "goldschlager" - result = "goldschlager" - required_reagents = list("vodka" = 10, "gold" = 1) - result_amount = 10 - - patron - name = "Patron" - id = "patron" - result = "patron" - required_reagents = list("tequilla" = 10, "silver" = 1) - result_amount = 10 - - bilk - name = "Bilk" - id = "bilk" - result = "bilk" - required_reagents = list("milk" = 1, "beer" = 1) - result_amount = 2 - - icetea - name = "Iced Tea" - id = "icetea" - result = "icetea" - required_reagents = list("ice" = 1, "tea" = 3) - result_amount = 4 - - icecoffee - name = "Iced Coffee" - id = "icecoffee" - result = "icecoffee" - required_reagents = list("ice" = 1, "coffee" = 3) - result_amount = 4 - - nuka_cola - name = "Nuka Cola" - id = "nuka_cola" - result = "nuka_cola" - required_reagents = list("uranium" = 1, "cola" = 6) - result_amount = 6 - - moonshine - name = "Moonshine" - id = "moonshine" - result = "moonshine" - required_reagents = list("nutriment" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 10 - - wine - name = "Wine" - id = "wine" - result = "wine" - required_reagents = list("berryjuice" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 10 - - spacebeer - name = "Space Beer" - id = "spacebeer" - result = "beer" - required_reagents = list("cornoil" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 10 - - vodka - name = "Vodka" - id = "vodka" - result = "vodka" - required_reagents = list("potato" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 10 - sake - name = "Sake" - id = "sake" - result = "sake" - required_reagents = list("rice" = 10,"water" = 5) - required_catalysts = list("enzyme" = 5) - result_amount = 15 - - kahlua - name = "Kahlua" - id = "kahlua" - result = "kahlua" - required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5) - required_catalysts = list("enzyme" = 5) - result_amount = 5 - - kahluaVodka - name = "KahluaVodka" - id = "kahlauVodka" - result = "kahlua" - required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5) - required_catalysts = list("enzyme" = 5) - result_amount = 5 - gin_tonic - name = "Gin and Tonic" - id = "gintonic" - result = "gintonic" - required_reagents = list("gin" = 2, "tonic" = 1) - result_amount = 3 - mix_message = "The tonic water and gin mix together perfectly." - - cuba_libre - name = "Cuba Libre" - id = "cubalibre" - result = "cubalibre" - required_reagents = list("rum" = 2, "cola" = 1) - result_amount = 3 - - mojito - name = "Mojito" - id = "mojito" - result = "mojito" - required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1) - result_amount = 4 - - martini - name = "Classic Martini" - id = "martini" - result = "martini" - required_reagents = list("gin" = 2, "vermouth" = 1) - result_amount = 3 - - vodkamartini - name = "Vodka Martini" - id = "vodkamartini" - result = "vodkamartini" - required_reagents = list("vodka" = 2, "vermouth" = 1) - result_amount = 3 - - white_russian - name = "White Russian" - id = "whiterussian" - result = "whiterussian" - required_reagents = list("blackrussian" = 3, "cream" = 2) - result_amount = 5 - - whiskey_cola - name = "Whiskey Cola" - id = "whiskeycola" - result = "whiskeycola" - required_reagents = list("whiskey" = 2, "cola" = 1) - result_amount = 3 - - screwdriver - name = "Screwdriver" - id = "screwdrivercocktail" - result = "screwdrivercocktail" - required_reagents = list("vodka" = 2, "orangejuice" = 1) - result_amount = 3 - - bloody_mary - name = "Bloody Mary" - id = "bloodymary" - result = "bloodymary" - required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1) - result_amount = 4 - - gargle_blaster - name = "Pan-Galactic Gargle Blaster" - id = "gargleblaster" - result = "gargleblaster" - required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1) - result_amount = 5 - - brave_bull - name = "Brave Bull" - id = "bravebull" - result = "bravebull" - required_reagents = list("tequilla" = 2, "kahlua" = 1) - result_amount = 3 - - tequilla_sunrise - name = "Tequilla Sunrise" - id = "tequillasunrise" - result = "tequillasunrise" - required_reagents = list("tequilla" = 2, "orangejuice" = 1) - result_amount = 3 - - toxins_special - name = "Toxins Special" - id = "toxinsspecial" - result = "toxinsspecial" - required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2) - result_amount = 5 - - beepsky_smash - name = "Beepksy Smash" - id = "beepksysmash" - result = "beepskysmash" - required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1) - result_amount = 4 - - doctor_delight - name = "The Doctor's Delight" - id = "doctordelight" - result = "doctorsdelight" - required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1) - result_amount = 5 - - irish_cream - name = "Irish Cream" - id = "irishcream" - result = "irishcream" - required_reagents = list("whiskey" = 2, "cream" = 1) - result_amount = 3 - - manly_dorf - name = "The Manly Dorf" - id = "manlydorf" - result = "manlydorf" - required_reagents = list ("beer" = 1, "ale" = 2) - 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" - id = "irishcoffee" - result = "irishcoffee" - required_reagents = list("irishcream" = 1, "coffee" = 1) - result_amount = 2 - - b52 - name = "B-52" - id = "b52" - result = "b52" - required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1) - result_amount = 3 - - atomicbomb - name = "Atomic Bomb" - id = "atomicbomb" - result = "atomicbomb" - required_reagents = list("b52" = 10, "uranium" = 1) - result_amount = 10 - - margarita - name = "Margarita" - id = "margarita" - result = "margarita" - required_reagents = list("tequilla" = 2, "limejuice" = 1) - result_amount = 3 - - longislandicedtea - name = "Long Island Iced Tea" - id = "longislandicedtea" - result = "longislandicedtea" - required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1) - result_amount = 4 - - threemileisland - name = "Three Mile Island Iced Tea" - id = "threemileisland" - result = "threemileisland" - required_reagents = list("longislandicedtea" = 10, "uranium" = 1) - result_amount = 10 - - whiskeysoda - name = "Whiskey Soda" - id = "whiskeysoda" - result = "whiskeysoda" - required_reagents = list("whiskey" = 2, "sodawater" = 1) - result_amount = 3 - - black_russian - name = "Black Russian" - id = "blackrussian" - result = "blackrussian" - required_reagents = list("vodka" = 3, "kahlua" = 2) - result_amount = 5 - - manhattan - name = "Manhattan" - id = "manhattan" - result = "manhattan" - required_reagents = list("whiskey" = 2, "vermouth" = 1) - result_amount = 3 - - manhattan_proj - name = "Manhattan Project" - id = "manhattan_proj" - result = "manhattan_proj" - required_reagents = list("manhattan" = 10, "uranium" = 1) - result_amount = 10 - - vodka_tonic - name = "Vodka and Tonic" - id = "vodkatonic" - result = "vodkatonic" - required_reagents = list("vodka" = 2, "tonic" = 1) - result_amount = 3 - - gin_fizz - name = "Gin Fizz" - id = "ginfizz" - result = "ginfizz" - required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1) - result_amount = 4 - - bahama_mama - name = "Bahama mama" - id = "bahama_mama" - result = "bahama_mama" - required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1) - result_amount = 6 - - singulo - name = "Singulo" - id = "singulo" - result = "singulo" - required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5) - result_amount = 10 - - alliescocktail - name = "Allies Cocktail" - id = "alliescocktail" - result = "alliescocktail" - required_reagents = list("martini" = 1, "vodka" = 1) - result_amount = 2 - - demonsblood - name = "Demons Blood" - id = "demonsblood" - result = "demonsblood" - required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1) - result_amount = 4 - - booger - name = "Booger" - id = "booger" - result = "booger" - required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1) - result_amount = 4 - - antifreeze - name = "Anti-freeze" - id = "antifreeze" - result = "antifreeze" - required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1) - result_amount = 4 - - barefoot - name = "Barefoot" - id = "barefoot" - result = "barefoot" - required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1) - result_amount = 3 - - -////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri///// - - sbiten - name = "Sbiten" - id = "sbiten" - result = "sbiten" - required_reagents = list("vodka" = 10, "capsaicin" = 1) - result_amount = 10 - - red_mead - name = "Red Mead" - id = "red_mead" - result = "red_mead" - required_reagents = list("blood" = 1, "mead" = 1) - result_amount = 2 - - mead - name = "Mead" - id = "mead" - result = "mead" - required_reagents = list("sugar" = 1, "water" = 1) - required_catalysts = list("enzyme" = 5) - result_amount = 2 - - iced_beer - name = "Iced Beer" - id = "iced_beer" - result = "iced_beer" - required_reagents = list("beer" = 10, "frostoil" = 1) - result_amount = 10 - - iced_beer2 - name = "Iced Beer" - id = "iced_beer" - result = "iced_beer" - required_reagents = list("beer" = 5, "ice" = 1) - result_amount = 6 - - grog - name = "Grog" - id = "grog" - result = "grog" - required_reagents = list("rum" = 1, "water" = 1) - result_amount = 2 - - soy_latte - name = "Soy Latte" - id = "soy_latte" - result = "soy_latte" - required_reagents = list("coffee" = 1, "soymilk" = 1) - result_amount = 2 - - cafe_latte - name = "Cafe Latte" - id = "cafe_latte" - result = "cafe_latte" - required_reagents = list("coffee" = 1, "milk" = 1) - result_amount = 2 - - acidspit - name = "Acid Spit" - id = "acidspit" - result = "acidspit" - required_reagents = list("sacid" = 1, "wine" = 5) - result_amount = 6 - - amasec - name = "Amasec" - id = "amasec" - result = "amasec" - required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5) - result_amount = 10 - - changelingsting - name = "Changeling Sting" - id = "changelingsting" - result = "changelingsting" - required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1) - result_amount = 5 - - aloe - name = "Aloe" - id = "aloe" - result = "aloe" - required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1) - result_amount = 2 - - andalusia - name = "Andalusia" - id = "andalusia" - result = "andalusia" - required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1) - result_amount = 3 - - neurotoxin - name = "Neurotoxin" - id = "neurotoxin" - result = "neurotoxin" - required_reagents = list("gargleblaster" = 1, "ether" = 1) - result_amount = 2 - - snowwhite - name = "Snow White" - id = "snowwhite" - result = "snowwhite" - required_reagents = list("beer" = 1, "lemon_lime" = 1) - result_amount = 2 - - irishcarbomb - name = "Irish Car Bomb" - id = "irishcarbomb" - result = "irishcarbomb" - required_reagents = list("ale" = 1, "irishcream" = 1) - result_amount = 2 - - syndicatebomb - name = "Syndicate Bomb" - id = "syndicatebomb" - result = "syndicatebomb" - required_reagents = list("beer" = 1, "whiskeycola" = 1) - result_amount = 2 - - erikasurprise - name = "Erika Surprise" - id = "erikasurprise" - result = "erikasurprise" - required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1) - result_amount = 5 - - devilskiss - name = "Devils Kiss" - id = "devilskiss" - result = "devilskiss" - required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1) - result_amount = 3 - - hippiesdelight - name = "Hippies Delight" - id = "hippiesdelight" - result = "hippiesdelight" - required_reagents = list("psilocybin" = 1, "gargleblaster" = 1) - result_amount = 2 - - bananahonk - name = "Banana Honk" - id = "bananahonk" - result = "bananahonk" - required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1) - result_amount = 3 - - silencer - name = "Silencer" - id = "silencer" - result = "silencer" - required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1) - result_amount = 3 - - driestmartini - name = "Driest Martini" - id = "driestmartini" - result = "driestmartini" - required_reagents = list("nothing" = 1, "gin" = 1) - result_amount = 2 - - lemonade - name = "Lemonade" - id = "lemonade" - result = "lemonade" - required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1) - result_amount = 3 - - kiraspecial - name = "Kira Special" - id = "kiraspecial" - result = "kiraspecial" - required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1) - result_amount = 2 - - brownstar - name = "Brown Star" - id = "brownstar" - result = "brownstar" - required_reagents = list("orangejuice" = 2, "cola" = 1) - result_amount = 2 - - milkshake - name = "Milkshake" - id = "milkshake" - result = "milkshake" - required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2) - result_amount = 5 - - rewriter - name = "Rewriter" - id = "rewriter" - result = "rewriter" - required_reagents = list("spacemountainwind" = 1, "coffee" = 1) - result_amount = 2 diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index 3107faaae69..48c467fed02 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -17,57 +17,57 @@ materials = list(MAT_METAL=2000) - examine() - set src in view() - ..() - if (!(usr in view(2)) && usr!=src.loc) return - usr << "\icon [name]:" - usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s." +/obj/item/weapon/gun/grenadelauncher/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\icon [name]:" + usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s." - attackby(obj/item/I as obj, mob/user as mob, params) +/obj/item/weapon/gun/grenadelauncher/attackby(obj/item/I as obj, mob/user as mob, params) - if((istype(I, ammo_type))) - if(grenades.len < max_grenades) - user.drop_item() - I.loc = src - grenades += I - user << "\blue You put the [ammo_name] in the [name]." - user << "\blue [grenades.len] / [max_grenades] [ammo_name]s." - else - usr << "\red The grenade launcher cannot hold more [ammo_name]s." - - afterattack(obj/target, mob/user , flag) - - if (istype(target, /obj/item/weapon/storage/backpack )) - return - - else if (locate (/obj/structure/table, src.loc)) - return - - else if(target == user) - return - - if(grenades.len) - spawn(0) fire_grenade(target,user) + if((istype(I, ammo_type))) + if(grenades.len < max_grenades) + user.drop_item() + I.loc = src + grenades += I + user << "\blue You put the [ammo_name] in the [name]." + user << "\blue [grenades.len] / [max_grenades] [ammo_name]s." else - usr << "\red The [name] is empty." + usr << "\red The grenade launcher cannot hold more [ammo_name]s." + +/obj/item/weapon/gun/grenadelauncher/afterattack(obj/target, mob/user , flag) + + if (istype(target, /obj/item/weapon/storage/backpack )) + return + + else if (locate (/obj/structure/table, src.loc)) + return + + else if(target == user) + return + + if(grenades.len) + spawn(0) fire_grenade(target,user) + else + usr << "\red The [name] is empty." + +/obj/item/weapon/gun/grenadelauncher/proc/fire_grenade(atom/target, mob/user) + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [] fired a [ammo_name]!", user), 1) + user << "\red You fire the [name]!" + var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta! + grenades -= F + F.loc = user.loc + F.throw_at(target, 30, 2, user) + message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([name]).") + log_game("[key_name_admin(user)] used a [ammo_name] ([name]).") + F.active = 1 + F.icon_state = initial(icon_state) + "_active" + playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) + spawn(15) + F.prime() - proc - fire_grenade(atom/target, mob/user) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\red [] fired a [ammo_name]!", user), 1) - user << "\red You fire the [name]!" - var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta! - grenades -= F - F.loc = user.loc - F.throw_at(target, 30, 2, user) - message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([name]).") - log_game("[key_name_admin(user)] used a [ammo_name] ([name]).") - F.active = 1 - F.icon_state = initial(icon_state) + "_active" - playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(15) - F.prime() /obj/item/weapon/gun/grenadelauncher/piecannon name = "pie cannon" diff --git a/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm new file mode 100644 index 00000000000..6b5656c8dc5 --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////////// +/datum/chemical_reaction + var/name = null + var/id = null + var/result = null + var/list/required_reagents = list() + var/list/required_catalysts = list() + + // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things + var/atom/required_container = null // the container required for the reaction to happen + var/required_other = 0 // an integer required for the reaction to happen + + var/result_amount = 0 + var/secondary = 0 // set to nonzero if secondary reaction + var/list/secondary_results = list() //additional reagents produced by the reaction + var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement + var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this). + var/mix_message = "The solution begins to bubble." + var/mix_sound = 'sound/effects/bubbles.ogg' + var/no_message = 0 + +/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume) + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm new file mode 100644 index 00000000000..d56cdcf5644 --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm @@ -0,0 +1,590 @@ +/datum/chemical_reaction/ + + hot_coco + name = "Hot Coco" + id = "hot_coco" + result = "hot_coco" + required_reagents = list("water" = 5, "coco" = 1) + result_amount = 5 + + chocolate_milk + name = "Chocolate Milk" + id = "chocolate_milk" + result = "chocolate_milk" + required_reagents = list("chocolate" = 1, "milk" = 1) + result_amount = 2 + mix_message = "The mixture turns a nice brown color." + + coffee + name = "Coffee" + id = "coffee" + result = "coffee" + required_reagents = list("coffeepowder" = 1, "water" = 5) + result_amount = 5 + + tea + name = "Tea" + id = "tea" + result = "tea" + required_reagents = list("teapowder" = 1, "water" = 5) + result_amount = 5 + + + + + goldschlager + name = "Goldschlager" + id = "goldschlager" + result = "goldschlager" + required_reagents = list("vodka" = 10, "gold" = 1) + result_amount = 10 + + patron + name = "Patron" + id = "patron" + result = "patron" + required_reagents = list("tequilla" = 10, "silver" = 1) + result_amount = 10 + + bilk + name = "Bilk" + id = "bilk" + result = "bilk" + required_reagents = list("milk" = 1, "beer" = 1) + result_amount = 2 + + icetea + name = "Iced Tea" + id = "icetea" + result = "icetea" + required_reagents = list("ice" = 1, "tea" = 3) + result_amount = 4 + + icecoffee + name = "Iced Coffee" + id = "icecoffee" + result = "icecoffee" + required_reagents = list("ice" = 1, "coffee" = 3) + result_amount = 4 + + nuka_cola + name = "Nuka Cola" + id = "nuka_cola" + result = "nuka_cola" + required_reagents = list("uranium" = 1, "cola" = 6) + result_amount = 6 + + moonshine + name = "Moonshine" + id = "moonshine" + result = "moonshine" + required_reagents = list("nutriment" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 10 + + wine + name = "Wine" + id = "wine" + result = "wine" + required_reagents = list("berryjuice" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 10 + + spacebeer + name = "Space Beer" + id = "spacebeer" + result = "beer" + required_reagents = list("cornoil" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 10 + + vodka + name = "Vodka" + id = "vodka" + result = "vodka" + required_reagents = list("potato" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 10 + sake + name = "Sake" + id = "sake" + result = "sake" + required_reagents = list("rice" = 10,"water" = 5) + required_catalysts = list("enzyme" = 5) + result_amount = 15 + + kahlua + name = "Kahlua" + id = "kahlua" + result = "kahlua" + required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5) + required_catalysts = list("enzyme" = 5) + result_amount = 5 + + kahluaVodka + name = "KahluaVodka" + id = "kahlauVodka" + result = "kahlua" + required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5) + required_catalysts = list("enzyme" = 5) + result_amount = 5 + gin_tonic + name = "Gin and Tonic" + id = "gintonic" + result = "gintonic" + required_reagents = list("gin" = 2, "tonic" = 1) + result_amount = 3 + mix_message = "The tonic water and gin mix together perfectly." + + cuba_libre + name = "Cuba Libre" + id = "cubalibre" + result = "cubalibre" + required_reagents = list("rum" = 2, "cola" = 1) + result_amount = 3 + + mojito + name = "Mojito" + id = "mojito" + result = "mojito" + required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1) + result_amount = 4 + + martini + name = "Classic Martini" + id = "martini" + result = "martini" + required_reagents = list("gin" = 2, "vermouth" = 1) + result_amount = 3 + + vodkamartini + name = "Vodka Martini" + id = "vodkamartini" + result = "vodkamartini" + required_reagents = list("vodka" = 2, "vermouth" = 1) + result_amount = 3 + + white_russian + name = "White Russian" + id = "whiterussian" + result = "whiterussian" + required_reagents = list("blackrussian" = 3, "cream" = 2) + result_amount = 5 + + whiskey_cola + name = "Whiskey Cola" + id = "whiskeycola" + result = "whiskeycola" + required_reagents = list("whiskey" = 2, "cola" = 1) + result_amount = 3 + + screwdriver + name = "Screwdriver" + id = "screwdrivercocktail" + result = "screwdrivercocktail" + required_reagents = list("vodka" = 2, "orangejuice" = 1) + result_amount = 3 + + bloody_mary + name = "Bloody Mary" + id = "bloodymary" + result = "bloodymary" + required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1) + result_amount = 4 + + gargle_blaster + name = "Pan-Galactic Gargle Blaster" + id = "gargleblaster" + result = "gargleblaster" + required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1) + result_amount = 5 + + brave_bull + name = "Brave Bull" + id = "bravebull" + result = "bravebull" + required_reagents = list("tequilla" = 2, "kahlua" = 1) + result_amount = 3 + + tequilla_sunrise + name = "Tequilla Sunrise" + id = "tequillasunrise" + result = "tequillasunrise" + required_reagents = list("tequilla" = 2, "orangejuice" = 1) + result_amount = 3 + + toxins_special + name = "Toxins Special" + id = "toxinsspecial" + result = "toxinsspecial" + required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2) + result_amount = 5 + + beepsky_smash + name = "Beepksy Smash" + id = "beepksysmash" + result = "beepskysmash" + required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1) + result_amount = 4 + + doctor_delight + name = "The Doctor's Delight" + id = "doctordelight" + result = "doctorsdelight" + required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1) + result_amount = 5 + + irish_cream + name = "Irish Cream" + id = "irishcream" + result = "irishcream" + required_reagents = list("whiskey" = 2, "cream" = 1) + result_amount = 3 + + manly_dorf + name = "The Manly Dorf" + id = "manlydorf" + result = "manlydorf" + required_reagents = list ("beer" = 1, "ale" = 2) + 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" + id = "irishcoffee" + result = "irishcoffee" + required_reagents = list("irishcream" = 1, "coffee" = 1) + result_amount = 2 + + b52 + name = "B-52" + id = "b52" + result = "b52" + required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1) + result_amount = 3 + + atomicbomb + name = "Atomic Bomb" + id = "atomicbomb" + result = "atomicbomb" + required_reagents = list("b52" = 10, "uranium" = 1) + result_amount = 10 + + margarita + name = "Margarita" + id = "margarita" + result = "margarita" + required_reagents = list("tequilla" = 2, "limejuice" = 1) + result_amount = 3 + + longislandicedtea + name = "Long Island Iced Tea" + id = "longislandicedtea" + result = "longislandicedtea" + required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1) + result_amount = 4 + + threemileisland + name = "Three Mile Island Iced Tea" + id = "threemileisland" + result = "threemileisland" + required_reagents = list("longislandicedtea" = 10, "uranium" = 1) + result_amount = 10 + + whiskeysoda + name = "Whiskey Soda" + id = "whiskeysoda" + result = "whiskeysoda" + required_reagents = list("whiskey" = 2, "sodawater" = 1) + result_amount = 3 + + black_russian + name = "Black Russian" + id = "blackrussian" + result = "blackrussian" + required_reagents = list("vodka" = 3, "kahlua" = 2) + result_amount = 5 + + manhattan + name = "Manhattan" + id = "manhattan" + result = "manhattan" + required_reagents = list("whiskey" = 2, "vermouth" = 1) + result_amount = 3 + + manhattan_proj + name = "Manhattan Project" + id = "manhattan_proj" + result = "manhattan_proj" + required_reagents = list("manhattan" = 10, "uranium" = 1) + result_amount = 10 + + vodka_tonic + name = "Vodka and Tonic" + id = "vodkatonic" + result = "vodkatonic" + required_reagents = list("vodka" = 2, "tonic" = 1) + result_amount = 3 + + gin_fizz + name = "Gin Fizz" + id = "ginfizz" + result = "ginfizz" + required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1) + result_amount = 4 + + bahama_mama + name = "Bahama mama" + id = "bahama_mama" + result = "bahama_mama" + required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1) + result_amount = 6 + + singulo + name = "Singulo" + id = "singulo" + result = "singulo" + required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5) + result_amount = 10 + + alliescocktail + name = "Allies Cocktail" + id = "alliescocktail" + result = "alliescocktail" + required_reagents = list("martini" = 1, "vodka" = 1) + result_amount = 2 + + demonsblood + name = "Demons Blood" + id = "demonsblood" + result = "demonsblood" + required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1) + result_amount = 4 + + booger + name = "Booger" + id = "booger" + result = "booger" + required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1) + result_amount = 4 + + antifreeze + name = "Anti-freeze" + id = "antifreeze" + result = "antifreeze" + required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1) + result_amount = 4 + + barefoot + name = "Barefoot" + id = "barefoot" + result = "barefoot" + required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1) + result_amount = 3 + + +////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri///// + + sbiten + name = "Sbiten" + id = "sbiten" + result = "sbiten" + required_reagents = list("vodka" = 10, "capsaicin" = 1) + result_amount = 10 + + red_mead + name = "Red Mead" + id = "red_mead" + result = "red_mead" + required_reagents = list("blood" = 1, "mead" = 1) + result_amount = 2 + + mead + name = "Mead" + id = "mead" + result = "mead" + required_reagents = list("sugar" = 1, "water" = 1) + required_catalysts = list("enzyme" = 5) + result_amount = 2 + + iced_beer + name = "Iced Beer" + id = "iced_beer" + result = "iced_beer" + required_reagents = list("beer" = 10, "frostoil" = 1) + result_amount = 10 + + iced_beer2 + name = "Iced Beer" + id = "iced_beer" + result = "iced_beer" + required_reagents = list("beer" = 5, "ice" = 1) + result_amount = 6 + + grog + name = "Grog" + id = "grog" + result = "grog" + required_reagents = list("rum" = 1, "water" = 1) + result_amount = 2 + + soy_latte + name = "Soy Latte" + id = "soy_latte" + result = "soy_latte" + required_reagents = list("coffee" = 1, "soymilk" = 1) + result_amount = 2 + + cafe_latte + name = "Cafe Latte" + id = "cafe_latte" + result = "cafe_latte" + required_reagents = list("coffee" = 1, "milk" = 1) + result_amount = 2 + + acidspit + name = "Acid Spit" + id = "acidspit" + result = "acidspit" + required_reagents = list("sacid" = 1, "wine" = 5) + result_amount = 6 + + amasec + name = "Amasec" + id = "amasec" + result = "amasec" + required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5) + result_amount = 10 + + changelingsting + name = "Changeling Sting" + id = "changelingsting" + result = "changelingsting" + required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1) + result_amount = 5 + + aloe + name = "Aloe" + id = "aloe" + result = "aloe" + required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1) + result_amount = 2 + + andalusia + name = "Andalusia" + id = "andalusia" + result = "andalusia" + required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1) + result_amount = 3 + + neurotoxin + name = "Neurotoxin" + id = "neurotoxin" + result = "neurotoxin" + required_reagents = list("gargleblaster" = 1, "ether" = 1) + result_amount = 2 + + snowwhite + name = "Snow White" + id = "snowwhite" + result = "snowwhite" + required_reagents = list("beer" = 1, "lemon_lime" = 1) + result_amount = 2 + + irishcarbomb + name = "Irish Car Bomb" + id = "irishcarbomb" + result = "irishcarbomb" + required_reagents = list("ale" = 1, "irishcream" = 1) + result_amount = 2 + + syndicatebomb + name = "Syndicate Bomb" + id = "syndicatebomb" + result = "syndicatebomb" + required_reagents = list("beer" = 1, "whiskeycola" = 1) + result_amount = 2 + + erikasurprise + name = "Erika Surprise" + id = "erikasurprise" + result = "erikasurprise" + required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1) + result_amount = 5 + + devilskiss + name = "Devils Kiss" + id = "devilskiss" + result = "devilskiss" + required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1) + result_amount = 3 + + hippiesdelight + name = "Hippies Delight" + id = "hippiesdelight" + result = "hippiesdelight" + required_reagents = list("psilocybin" = 1, "gargleblaster" = 1) + result_amount = 2 + + bananahonk + name = "Banana Honk" + id = "bananahonk" + result = "bananahonk" + required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1) + result_amount = 3 + + silencer + name = "Silencer" + id = "silencer" + result = "silencer" + required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1) + result_amount = 3 + + driestmartini + name = "Driest Martini" + id = "driestmartini" + result = "driestmartini" + required_reagents = list("nothing" = 1, "gin" = 1) + result_amount = 2 + + lemonade + name = "Lemonade" + id = "lemonade" + result = "lemonade" + required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1) + result_amount = 3 + + kiraspecial + name = "Kira Special" + id = "kiraspecial" + result = "kiraspecial" + required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1) + result_amount = 2 + + brownstar + name = "Brown Star" + id = "brownstar" + result = "brownstar" + required_reagents = list("orangejuice" = 2, "cola" = 1) + result_amount = 2 + + milkshake + name = "Milkshake" + id = "milkshake" + result = "milkshake" + required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2) + result_amount = 5 + + rewriter + name = "Rewriter" + id = "rewriter" + result = "rewriter" + required_reagents = list("spacemountainwind" = 1, "coffee" = 1) + result_amount = 2 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm new file mode 100644 index 00000000000..146dc1da95c --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm @@ -0,0 +1,108 @@ +/datum/chemical_reaction/ + + tofu + name = "Tofu" + id = "tofu" + result = null + required_reagents = list("soymilk" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/tofu(location) + return + + chocolate_bar + name = "Chocolate Bar" + id = "chocolate_bar" + result = null + required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) + return + + chocolate_bar2 + name = "Chocolate Bar" + id = "chocolate_bar" + result = null + required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) + return + + + soysauce + name = "Soy Sauce" + id = "soysauce" + result = "soysauce" + required_reagents = list("soymilk" = 2, "flour" = 1, "sodiumchloride" = 1, "water" = 3) + result_amount = 7 + + cheesewheel + name = "Cheesewheel" + id = "cheesewheel" + result = null + required_reagents = list("milk" = 40) + required_catalysts = list("enzyme" = 5) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location) + return + + syntiflesh + name = "Syntiflesh" + id = "syntiflesh" + result = null + required_reagents = list("blood" = 5, "cryoxadone" = 1) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) + return + + hot_ramen + name = "Hot Ramen" + id = "hot_ramen" + result = "hot_ramen" + required_reagents = list("water" = 1, "dry_ramen" = 3) + result_amount = 3 + + hell_ramen + name = "Hell Ramen" + id = "hell_ramen" + result = "hell_ramen" + required_reagents = list("capsaicin" = 1, "hot_ramen" = 6) + result_amount = 6 + + doughball + name = "Ball of dough" + id = "dough_ball" + result = "dough_ball" + required_reagents = list("flour" = 15, "water" = 5) + required_catalysts = list("enzyme" = 5) + + sodiumchloride + name = "Sodium Chloride" + id = "sodiumchloride" + result = "sodiumchloride" + required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1) + result_amount = 3 + mix_message = "The solution crystallizes with a brief flare of light." + + ice + name = "Ice" + id = "ice" + result = "ice" + required_reagents = list("water" = 1) + result_amount = 1 + max_temp = 273 + mix_message = "Ice forms as the water freezes." + mix_sound = null \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm new file mode 100644 index 00000000000..4ec4c1bb9e4 --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm @@ -0,0 +1,76 @@ +//Anything for harm or hostile intents go here (explosions, EMPs, thermite, mutagen) +/datum/chemical_reaction + + explosion_potassium + name = "Explosion" + id = "explosion_potassium" + result = null + required_reagents = list("water" = 1, "potassium" = 1) + result_amount = 2 + mix_message = "The mixture explodes!" + + on_reaction(var/datum/reagents/holder, var/created_volume) + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) + e.start() + holder.clear_reagents() + return + + emp_pulse + name = "EMP Pulse" + id = "emp_pulse" + result = null + required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense + result_amount = 2 + + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. + // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades. + empulse(location, round(created_volume / 24), round(created_volume / 14), 1) + holder.clear_reagents() + return + + mutagen + name = "Unstable mutagen" + id = "mutagen" + result = "mutagen" + required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1) + result_amount = 3 + mix_message = "The substance turns neon green and bubbles unnervingly." + + thermite + name = "Thermite" + id = "thermite" + result = "thermite" + required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1) + result_amount = 3 + + glycerol + name = "Glycerol" + id = "glycerol" + result = "glycerol" + required_reagents = list("cornoil" = 3, "sacid" = 1) + result_amount = 1 + + nitroglycerin + name = "Nitroglycerin" + id = "nitroglycerin" + result = "nitroglycerin" + required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1) + result_amount = 2 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0) + e.start() + + holder.clear_reagents() + return + + condensedcapsaicin + name = "Condensed Capsaicin" + id = "condensedcapsaicin" + result = "condensedcapsaicin" + required_reagents = list("capsaicin" = 2) + required_catalysts = list("plasma" = 5) + result_amount = 1 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm new file mode 100644 index 00000000000..02e1f4a65cd --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm @@ -0,0 +1,98 @@ +/datum/chemical_reaction/ + + hydrocodone + name = "Hydrocodone" + id = "hydrocodone" + result = "hydrocodone" + required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1) + result_amount = 2 + + mitocholide + name = "mitocholide" + id = "mitocholide" + result = "mitocholide" + required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1) + result_amount = 3 + + cryoxadone + name = "Cryoxadone" + id = "cryoxadone" + result = "cryoxadone" + required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1) + result_amount = 4 + mix_message = "The solution bubbles softly." + + spaceacillin + name = "Spaceacillin" + id = "spaceacillin" + result = "spaceacillin" + required_reagents = list("fungus" = 1, "ethanol" = 1) + result_amount = 2 + mix_message = "The solvent extracts an antibiotic compound from the fungus." + + audioline + name = "Audioline" + id = "audioline" + result = "audioline" + required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1) + result_amount = 3 + + rezadone + name = "Rezadone" + id = "rezadone" + result = "rezadone" + required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1) + result_amount = 3 + + virus_food + name = "Virus Food" + id = "virusfood" + result = "virusfood" + required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1) + result_amount = 3 +/* + mix_virus + name = "Mix Virus" + id = "mixvirus" + result = "blood" + required_reagents = list("virusfood" = 5) + required_catalysts = list("blood") + var/level = 2 + + on_reaction(var/datum/reagents/holder, var/created_volume) + + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list + if(B && B.data) + var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] + if(D) + D.Evolve(level - rand(0, 1)) + + + mix_virus_2 + + name = "Mix Virus 2" + id = "mixvirus2" + required_reagents = list("mutagen" = 5) + level = 4 + + rem_virus + + name = "Devolve Virus" + id = "remvirus" + required_reagents = list("synaptizine" = 5) + + on_reaction(var/datum/reagents/holder, var/created_volume) + + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list + if(B && B.data) + var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] + if(D) + D.Devolve() +*/ + + sterilizine + name = "Sterilizine" + id = "sterilizine" + result = "sterilizine" + required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1) + result_amount = 3 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm new file mode 100644 index 00000000000..020caed47ee --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm @@ -0,0 +1,199 @@ +/datum/chemical_reaction/ +// foam and foam precursor + + surfactant + name = "Foam surfactant" + id = "foam surfactant" + result = "fluorosurfactant" + required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1) + result_amount = 5 + mix_message = "A head of foam results from the mixture's constant fizzing." + + + foam + name = "Foam" + id = "foam" + result = null + required_reagents = list("fluorosurfactant" = 1, "water" = 1) + result_amount = 2 + + on_reaction(var/datum/reagents/holder, var/created_volume) + + + var/location = get_turf(holder.my_atom) + for(var/mob/M in viewers(5, location)) + M << "\red The solution violently bubbles!" + + location = get_turf(holder.my_atom) + + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out foam!" + + //world << "Holder volume is [holder.total_volume]" + //for(var/datum/reagent/R in holder.reagent_list) + // world << "[R.name] = [R.volume]" + + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 0) + s.start() + holder.clear_reagents() + return + + metalfoam + name = "Metal Foam" + id = "metalfoam" + result = null + required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1) + result_amount = 5 + + on_reaction(var/datum/reagents/holder, var/created_volume) + + + var/location = get_turf(holder.my_atom) + + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out a metalic foam!" + + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 1) + s.start() + return + + ironfoam + name = "Iron Foam" + id = "ironlfoam" + result = null + required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1) + result_amount = 5 + + on_reaction(var/datum/reagents/holder, var/created_volume) + + + var/location = get_turf(holder.my_atom) + + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out a metalic foam!" + + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 2) + s.start() + return + + // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game! + ammonia + name = "Ammonia" + id = "ammonia" + result = "ammonia" + required_reagents = list("hydrogen" = 3, "nitrogen" = 1) + result_amount = 3 + mix_message = "The mixture bubbles, emitting an acrid reek." + + diethylamine + name = "Diethylamine" + id = "diethylamine" + result = "diethylamine" + required_reagents = list ("ammonia" = 1, "ethanol" = 1) + result_amount = 2 + min_temp = 374 + mix_message = "A horrible smell pours forth from the mixture." + + space_cleaner + name = "Space cleaner" + id = "cleaner" + result = "cleaner" + required_reagents = list("ammonia" = 1, "water" = 1, "ethanol" = 1) + result_amount = 3 + mix_message = "Ick, this stuff really stinks. Sure does make the container sparkle though!" + + sulfuric_acid + name = "Sulfuric Acid" + id = "sacid" + result = "sacid" + required_reagents = list("sulfur" = 1, "oxygen" = 1, "hydrogen" = 1) + result_amount = 2 + mix_message = "The mixture gives off a sharp acidic tang." + +///////Changeling Blood Test///////////// +/* + changeling_test + name = "Changeling blood test" + id = "changelingblood" + result = "blood" + required_reagents = list("blood" = 5) + required_catalysts = list("fuel") + result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred. + on_reaction(var/datum/reagents/holder, var/created_volume) + if(!holder.reagent_list) //reagent_list is not null + return + var/datum/reagent/blood/B = locate() in holder.reagent_list + if(!B) //B is not null + return + var/mob/living/carbon/human/H = B.data["donor"] + if(!H) //H is not null. + return + if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling. + for(var/mob/M in viewers(get_turf(holder.my_atom), null)) + M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2) + else + for(var/mob/M in viewers(get_turf(holder.my_atom), null)) + M.show_message( "The blood seems to break apart in the fuel.", 1) + holder.del_reagent("blood") + return +*/ + + plastication + name = "Plastic" + id = "solidplastic" + result = null + required_reagents = list("facid" = 10, "plasticide" = 20) + result_amount = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic + M.amount = 10 + M.loc = get_turf(holder.my_atom) + return + + + +//Not really misc chems, but not enough to deserve their own file +/* + silicate + name = "Silicate" + id = "silicate" + result = "silicate" + required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1) + result_amount = 3 +*/ + + space_drugs + name = "Space Drugs" + id = "space_drugs" + result = "space_drugs" + required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1) + result_amount = 3 + mix_message = "Slightly dizzying fumes drift from the solution." + + lube + name = "Space Lube" + id = "lube" + result = "lube" + required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1) + result_amount = 3 + mix_message = "The substance turns a striking cyan and becomes oily." + + holy_water + name = "Holy Water" + id = "holywater" + result = "holywater" + required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1) + result_amount = 3 + mix_message = "The water somehow seems purified. Or maybe defiled." + + + lsd + name = "Lysergic acid diethylamide" + id = "lsd" + result = "lsd" + required_reagents = list("diethylamine" = 1, "fungus" = 1) + result_amount = 3 + mix_message = "The mixture turns a rather unassuming color and settles." \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm new file mode 100644 index 00000000000..a1d8b033672 --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm @@ -0,0 +1,487 @@ +/////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// + +//Grey +/datum/chemical_reaction/ + + slimespawn + name = "Slime Spawn" + id = "m_spawn" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/grey + required_other = 1 + + on_reaction(var/datum/reagents/holder) + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1) + var/mob/living/carbon/slime/S = new /mob/living/carbon/slime + S.loc = get_turf(holder.my_atom) + + + slimeinaprov + name = "Slime Epinephrine" + id = "m_epinephrine" + result = "epinephrine" + required_reagents = list("water" = 5) + result_amount = 3 + required_other = 1 + required_container = /obj/item/slime_extract/grey + + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + + + slimemonkey + name = "Slime Monkey" + id = "m_monkey" + result = null + required_reagents = list("blood" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/grey + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/i = 1, i <= 3, i++) + var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube + M.loc = get_turf(holder.my_atom) + +//Green + slimemutate + name = "Mutation Toxin" + id = "mutationtoxin" + result = "mutationtoxin" + required_reagents = list("plasma" = 5) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/green + +//Metal + slimemetal + name = "Slime Metal" + id = "m_metal" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/metal + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal + M.amount = 15 + M.loc = get_turf(holder.my_atom) + var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel + P.amount = 5 + P.loc = get_turf(holder.my_atom) + +//Gold + slimecrit + name = "Slime Crit" + id = "m_tele" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/gold + required_other = 1 + on_reaction(var/datum/reagents/holder) + + var/blocked = blocked_mobs //global variable of blocked mobs + + var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + for(var/i = 1, i <= 5, i++) + var/chosen = pick(critters) + var/mob/living/simple_animal/hostile/C = new chosen + C.faction |= "slimesummon" + C.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(C, pick(NORTH,SOUTH,EAST,WEST)) +// for(var/mob/O in viewers(get_turf(holder.my_atom), null)) +// O.show_message(text("\red The slime core fizzles disappointingly,"), 1) + + + slimecritlesser + name = "Slime Crit Lesser" + id = "m_tele3" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/gold + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("The slime extract begins to vibrate violently!"), 1) + spawn(50) + + if(holder && holder.my_atom) + + var/blocked = blocked_mobs + + var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + var/chosen = pick(critters) + var/mob/living/simple_animal/hostile/C = new chosen + C.faction |= "neutral" + C.loc = get_turf(holder.my_atom) + +//Silver + slimebork + name = "Slime Bork" + id = "m_tele2" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/silver + required_other = 1 + on_reaction(var/datum/reagents/holder) + + var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks) + // BORK BORK BORK + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + for(var/i = 1, i <= 4 + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) + slimedrinks + name = "Slime Drinks" + id = "m_tele3" + result = null + required_reagents = list("water" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/silver + required_other = 1 + on_reaction(var/datum/reagents/holder) + + var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks) + // BORK BORK BORK + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + for(var/i = 1, i <= 4 + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) + + +//Blue + slimefrost + name = "Slime Frost Oil" + id = "m_frostoil" + result = "frostoil" + required_reagents = list("plasma" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/blue + required_other = 1 +//Dark Blue + slimefreeze + name = "Slime Freeze" + id = "m_freeze" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/darkblue + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + sleep(50) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + for(var/mob/living/M in range (get_turf(holder.my_atom), 7)) + M.bodytemperature -= 140 + M << "\blue You feel a chill!" + +//Orange + slimecasp + name = "Slime Capsaicin Oil" + id = "m_capsaicinoil" + result = "capsaicin" + required_reagents = list("blood" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/orange + required_other = 1 + + slimefire + name = "Slime fire" + id = "m_fire" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/orange + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + sleep(50) + var/turf/simulated/T = get_turf(holder.my_atom) + if(istype(T)) + T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50) + +//Yellow + slimeoverload + name = "Slime EMP" + id = "m_emp" + result = null + required_reagents = list("blood" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + empulse(get_turf(holder.my_atom), 3, 7) + + + slimecell + name = "Slime Powercell" + id = "m_cell" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime + P.loc = get_turf(holder.my_atom) + + slimeglow + name = "Slime Glow" + id = "m_glow" + result = null + required_reagents = list("water" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1) + var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime + F.loc = get_turf(holder.my_atom) + +//Purple + + slimepsteroid + name = "Slime Steroid" + id = "m_steroid" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/purple + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid + P.loc = get_turf(holder.my_atom) + + + + slimejam + name = "Slime Jam" + id = "m_jam" + result = "slimejelly" + required_reagents = list("sugar" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/purple + required_other = 1 + + +//Dark Purple + slimeplasma + name = "Slime Plasma" + id = "m_plasma" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/darkpurple + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma + P.amount = 10 + P.loc = get_turf(holder.my_atom) + +//Red + slimeglycerol + name = "Slime Glycerol" + id = "m_glycerol" + result = "glycerol" + required_reagents = list("plasma" = 5) + result_amount = 8 + required_container = /obj/item/slime_extract/red + required_other = 1 + + + slimebloodlust + name = "Bloodlust" + id = "m_bloodlust" + result = null + required_reagents = list("blood" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/red + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) + slime.rabid = 1 + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The [slime] is driven into a frenzy!."), 1) + +//Pink + slimeppotion + name = "Slime Potion" + id = "m_potion" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/pink + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion + P.loc = get_turf(holder.my_atom) + + +//Black + slimemutate2 + name = "Advanced Mutation Toxin" + id = "mutationtoxin2" + result = "amutationtoxin" + required_reagents = list("plasma" = 5) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/black + +//Oil + slimeexplosion + name = "Slime Explosion" + id = "m_explosion" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/oil + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + sleep(50) + explosion(get_turf(holder.my_atom), 1 ,3, 6) +//Light Pink + slimepotion2 + name = "Slime Potion 2" + id = "m_potion2" + result = null + result_amount = 1 + required_container = /obj/item/slime_extract/lightpink + required_reagents = list("plasma" = 5) + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2 + P.loc = get_turf(holder.my_atom) +//Adamantine + slimegolem + name = "Slime Golem" + id = "m_golem" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/adamantine + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe + Z.loc = get_turf(holder.my_atom) + Z.announce_to_ghosts() +//Bluespace + slimecrystal + name = "Slime Crystal" + id = "m_crystal" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/bluespace + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + if(holder.my_atom) + var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom)) + BC.visible_message("The [BC.name] appears out of thin air!") +//Cerulean + slimepsteroid2 + name = "Slime Steroid 2" + id = "m_steroid2" + result = null + required_reagents = list("plasma" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/cerulean + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2 + P.loc = get_turf(holder.my_atom) +//Sepia + slimecamera + name = "Slime Camera" + id = "m_camera" + result = null + required_reagents = list("plasma" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/sepia + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/device/camera/P = new /obj/item/device/camera + P.loc = get_turf(holder.my_atom) + + + slimefilm + name = "Slime Film" + id = "m_film" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/sepia + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/device/camera_film/P = new /obj/item/device/camera_film + P.loc = get_turf(holder.my_atom) +//Pyrite + slimepaint + name = "Slime Paint" + id = "s_paint" + result = null + required_reagents = list("plasma" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/pyrite + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint) + var/chosen = pick(paints) + var/obj/P = new chosen + if(P) + P.loc = get_turf(holder.my_atom) \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm b/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm new file mode 100644 index 00000000000..815c1208dd9 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm @@ -0,0 +1,5 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 +#define FOOD_METABOLISM 0.4 +#define REM REAGENTS_EFFECT_MULTIPLIER \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/_reagent_base.dm b/code/modules/reagents/oldchem/reagents/_reagent_base.dm new file mode 100644 index 00000000000..2b2a94ee149 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/_reagent_base.dm @@ -0,0 +1,82 @@ +/datum/reagent + var/name = "Reagent" + var/id = "reagent" + var/description = "" + var/datum/reagents/holder = null + var/reagent_state = SOLID + var/list/data = null + var/volume = 0 + var/nutriment_factor = 0 + var/metabolization_rate = REAGENTS_METABOLISM + //var/list/viruses = list() + var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) + var/shock_reduction = 0 + var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin + //Processing flags, defines the type of mobs the reagent will affect + //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths + var/process_flags = ORGANIC + + +/datum/reagent/proc/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not. + if(!istype(M, /mob/living)) return 0 + var/datum/reagent/self = src + src = null + + if(self.holder) //for catching rare runtimes + if(method == TOUCH && self.penetrates_skin) + var/block = 0 + for(var/obj/item/clothing/C in M.get_equipped_items()) + if(istype(C, /obj/item/clothing/suit/bio_suit)) + block += 1 + if(istype(C, /obj/item/clothing/head/bio_hood)) + block += 1 + if(block < 2) + if(M.reagents) + M.reagents.add_reagent(self.id,self.volume) + +/* + if(method == INGEST && istype(M, /mob/living/carbon)) + if(prob(1 * self.addictiveness)) + if(prob(5 * volume)) + var/datum/disease/addiction/A = new /datum/disease/addiction + A.addicted_to = self + A.name = "[self.name] Addiction" + A.addiction ="[self.name]" + A.cure = self.id + M.viruses += A + A.affected_mob = M + A.holder = M +*/ + return 1 + +/datum/reagent/proc/reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object + src = null //if it can hold reagents. nope! + //if(O.reagents) + // O.reagents.add_reagent(id,volume/3) + return + +/datum/reagent/proc/reaction_turf(var/turf/T, var/volume) + src = null + return + +/datum/reagent/proc/on_mob_life(var/mob/living/M as mob, var/alien) + if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball + return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO + // Certain elements in too large amounts cause side-effects + holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears. + current_cycle++ + return + +// Called when two reagents of the same are mixing. +/datum/reagent/proc/on_merge(var/data) + return + +/datum/reagent/proc/on_move(var/mob/M) + return + +/datum/reagent/proc/on_update(var/atom/A) + return + +/datum/reagent/Destroy() + holder = null + return ..() \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm new file mode 100644 index 00000000000..b07cd8355e3 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -0,0 +1,748 @@ +//ALCOHOL WOO +/datum/reagent/ethanol + name = "Ethanol" //Parent class for all alcoholic reagents. + id = "ethanol" + description = "A well-known alcohol with a variety of applications." + reagent_state = LIQUID + nutriment_factor = 0 //So alcohol can fill you up! If they want to. + color = "#404030" // rgb: 64, 64, 48 + var/datum/martial_art/drunk_brawling/F = new + var/dizzy_adj = 3 + var/slurr_adj = 3 + var/confused_adj = 2 + var/slur_start = 65 //amount absorbed after which mob starts slurring + var/brawl_start = 75 //amount absorbed after which mob switches to drunken brawling as a fighting style + var/confused_start = 130 //amount absorbed after which mob starts confusing directions + var/vomit_start = 180 //amount absorbed after which mob starts vomitting + var/blur_start = 260 //amount absorbed after which mob starts getting blurred vision + var/pass_out = 325 //amount absorbed after which mob starts passing out + +/datum/reagent/ethanol/on_mob_life(var/mob/living/M as mob, var/alien) + // Sobering multiplier. + // Sober block makes it more difficult to get drunk + var/sober_str=!(SOBER in M.mutations)?1:2 + M:nutrition += nutriment_factor + holder.remove_reagent(src.id, FOOD_METABOLISM) + if(!src.data) data = 1 + src.data++ + + var/d = data + + // make all the beverages work together + for(var/datum/reagent/ethanol/A in holder.reagent_list) + if(isnum(A.data)) d += A.data + + d/=sober_str + + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly. + d*=5 + + M.dizziness += dizzy_adj. + if(d >= slur_start && d < pass_out) + if (!M:slurring) M:slurring = 1 + M:slurring += slurr_adj/sober_str + if(d >= brawl_start && ishuman(M)) + var/mob/living/carbon/human/H = M + F.teach(H,1) + if(src.volume < 3) + if(H.martial_art == F) + F.remove(H) + if(d >= confused_start && prob(33)) + if (!M:confused) M:confused = 1 + M.confused = max(M:confused+(confused_adj/sober_str),0) + if(d >= blur_start) + M.eye_blurry = max(M.eye_blurry, 10/sober_str) + M:drowsyness = max(M:drowsyness, 0) + if(d >= vomit_start) + if(prob(8)) + M.fakevomit() + if(d >= pass_out) + M:paralysis = max(M:paralysis, 20/sober_str) + M:drowsyness = max(M:drowsyness, 30/sober_str) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"] + if (istype(L)) + L.take_damage(0.1, 1) + H.adjustToxLoss(0.1) + holder.remove_reagent(src.id, 0.4) + ..() + return + +/datum/reagent/ethanol/reaction_obj(var/obj/O, var/volume) + if(istype(O,/obj/item/weapon/paper)) + var/obj/item/weapon/paper/paperaffected = O + paperaffected.clearpaper() + usr << "The solution melts away the ink on the paper." + if(istype(O,/obj/item/weapon/book)) + if(volume >= 5) + var/obj/item/weapon/book/affectedbook = O + affectedbook.dat = null + usr << "The solution melts away the ink on the book." + else + usr << "It wasn't enough..." + return + +/datum/reagent/ethanol/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel. + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 15) + return + + +/datum/reagent/ethanol/beer //It's really much more stronger than other drinks. + name = "Beer" + id = "beer" + description = "An alcoholic beverage made from malted grains, hops, yeast, and water." + nutriment_factor = 2 * FOOD_METABOLISM + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/beer/on_mob_life(var/mob/living/M as mob) + ..() + M:jitteriness = max(M:jitteriness-3,0) + return + +/datum/reagent/ethanol/cider + name = "Cider" + id = "cider" + description = "An alcoholic beverage derived from apples." + color = "#174116" + +/datum/reagent/ethanol/whiskey + name = "Whiskey" + id = "whiskey" + description = "A superb and well-aged single-malt whiskey. Damn." + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + +/datum/reagent/ethanol/specialwhiskey + name = "Special Blend Whiskey" + id = "specialwhiskey" + description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." + color = "#664300" // rgb: 102, 67, 0 + slur_start = 30 //amount absorbed after which mob starts slurring + brawl_start = 40 + +/datum/reagent/ethanol/gin + name = "Gin" + id = "gin" + description = "It's gin. In space. I say, good sir." + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 3 + +/datum/reagent/ethanol/absinthe + name = "Absinthe" + id = "absinthe" + description = "Watch out that the Green Fairy doesn't come for you!" + color = "#33EE00" // rgb: lots, ??, ?? + overdose_threshold = 30 + dizzy_adj = 5 + slur_start = 25 + brawl_start = 40 + confused_start = 100 + +//copy paste from LSD... shoot me +/datum/reagent/ethanol/absinthe/on_mob_life(var/mob/M) + if(!M) M = holder.my_atom + if(!data) data = 1 + data++ + M:hallucination += 5 + if(volume > overdose_threshold) + M:adjustToxLoss(1) + ..() + return + +/datum/reagent/ethanol/rum + name = "Rum" + id = "rum" + description = "Popular with the sailors. Not very popular with everyone else." + color = "#664300" // rgb: 102, 67, 0 + overdose_threshold = 30 + +/datum/reagent/ethanol/rum/on_mob_life(var/mob/living/M as mob) + ..() + M.dizziness +=5 + if(volume > overdose_threshold) + M:adjustToxLoss(1) + return + +/datum/reagent/ethanol/mojito + name = "Mojito" + id = "mojito" + description = "If it's good enough for Spesscuba, it's good enough for you." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/vodka + name = "Vodka" + id = "vodka" + description = "Number one drink AND fueling choice for Russians worldwide." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/sake + name = "Sake" + id = "sake" + description = "Anime's favorite drink." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/tequilla + name = "Tequila" + id = "tequilla" + description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?" + color = "#A8B0B7" // rgb: 168, 176, 183 + +/datum/reagent/ethanol/vermouth + name = "Vermouth" + id = "vermouth" + description = "You suddenly feel a craving for a martini..." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/wine + name = "Wine" + id = "wine" + description = "An premium alchoholic beverage made from distilled grape juice." + color = "#7E4043" // rgb: 126, 64, 67 + dizzy_adj = 2 + slur_start = 65 //amount absorbed after which mob starts slurring + confused_start = 145 //amount absorbed after which mob starts confusing directions + +/datum/reagent/ethanol/cognac + name = "Cognac" + id = "cognac" + description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication." + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + confused_start = 115 //amount absorbed after which mob starts confusing directions + +/datum/reagent/ethanol/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 + brawl_start = 25 + confused_start = 40 + blur_start = 60 + pass_out = 80 + +/datum/reagent/ethanol/ale + name = "Ale" + id = "ale" + description = "A dark alchoholic beverage made by malted barley and yeast." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/thirteenloko + name = "Thirteen Loko" + id = "thirteenloko" + description = "A potent mixture of caffeine and alcohol." + reagent_state = LIQUID + color = "#102000" // rgb: 16, 32, 0 + +/datum/reagent/ethanol/thirteenloko/on_mob_life(var/mob/living/M as mob) + ..() + M:nutrition += nutriment_factor + holder.remove_reagent(src.id, FOOD_METABOLISM) + M:drowsyness = max(0,M:drowsyness-7) + //if(!M:sleeping_willingly) + // M:sleeping = max(0,M.sleeping-2) + if (M.bodytemperature > 310) + M.bodytemperature = max(310, M.bodytemperature-5) + M.Jitter(1) + return + + +/////////////////////////////////////////////////////////////////cocktail entities////////////////////////////////////////////// + +/datum/reagent/ethanol/bilk + name = "Bilk" + id = "bilk" + description = "This appears to be beer mixed with milk. Disgusting." + reagent_state = LIQUID + color = "#895C4C" // rgb: 137, 92, 76 + +/datum/reagent/ethanol/atomicbomb + name = "Atomic Bomb" + id = "atomicbomb" + description = "Nuclear proliferation never tasted so good." + reagent_state = LIQUID + color = "#666300" // rgb: 102, 99, 0 + +/datum/reagent/ethanol/threemileisland + name = "THree Mile Island Iced Tea" + id = "threemileisland" + description = "Made for a woman, strong enough for a man." + reagent_state = LIQUID + color = "#666340" // rgb: 102, 99, 64 + +/datum/reagent/ethanol/goldschlager + name = "Goldschlager" + id = "goldschlager" + description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/patron + name = "Patron" + id = "patron" + description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." + reagent_state = LIQUID + color = "#585840" // rgb: 88, 88, 64 + +/datum/reagent/ethanol/gintonic + name = "Gin and Tonic" + id = "gintonic" + description = "An all time classic, mild cocktail." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/cuba_libre + name = "Cuba Libre" + id = "cubalibre" + description = "Rum, mixed with cola. Viva la revolution." + reagent_state = LIQUID + color = "#3E1B00" // rgb: 62, 27, 0 + +/datum/reagent/ethanol/whiskey_cola + name = "Whiskey Cola" + id = "whiskeycola" + description = "Whiskey, mixed with cola. Surprisingly refreshing." + reagent_state = LIQUID + color = "#3E1B00" // rgb: 62, 27, 0 + +/datum/reagent/ethanol/martini + name = "Classic Martini" + id = "martini" + description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/vodkamartini + name = "Vodka Martini" + id = "vodkamartini" + description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/white_russian + name = "White Russian" + id = "whiterussian" + description = "That's just, like, your opinion, man..." + reagent_state = LIQUID + color = "#A68340" // rgb: 166, 131, 64 + +/datum/reagent/ethanol/screwdrivercocktail + name = "Screwdriver" + id = "screwdrivercocktail" + description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." + reagent_state = LIQUID + color = "#A68310" // rgb: 166, 131, 16 + +/datum/reagent/ethanol/booger + name = "Booger" + id = "booger" + description = "Ewww..." + reagent_state = LIQUID + color = "#A68310" // rgb: 166, 131, 16 + +/datum/reagent/ethanol/bloody_mary + name = "Bloody Mary" + id = "bloodymary" + description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/gargle_blaster + name = "Pan-Galactic Gargle Blaster" + id = "gargleblaster" + description = "Whoah, this stuff looks volatile!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/brave_bull + name = "Brave Bull" + id = "bravebull" + description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/tequilla_sunrise + name = "Tequila Sunrise" + id = "tequillasunrise" + description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/toxins_special + name = "Toxins Special" + id = "toxinsspecial" + description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/beepsky_smash + name = "Beepsky Smash" + id = "beepskysmash" + description = "Deny drinking this and prepare for THE LAW." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/changelingsting + name = "Changeling Sting" + id = "changelingsting" + description = "You take a tiny sip and feel a burning sensation..." + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/irish_cream + name = "Irish Cream" + id = "irishcream" + description = "Whiskey-imbued cream, what else would you expect from the Irish." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/manly_dorf + name = "The Manly Dorf" + id = "manlydorf" + description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/longislandicedtea + name = "Long Island Iced Tea" + id = "longislandicedtea" + description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/moonshine + name = "Moonshine" + id = "moonshine" + description = "You've really hit rock bottom now... your liver packed its bags and left last night." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/b52 + name = "B-52" + id = "b52" + description = "Coffee, Irish Cream, and congac. You will get bombed." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/irishcoffee + name = "Irish Coffee" + id = "irishcoffee" + description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/margarita + name = "Margarita" + id = "margarita" + description = "On the rocks with salt on the rim. Arriba~!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/black_russian + name = "Black Russian" + id = "blackrussian" + description = "For the lactose-intolerant. Still as classy as a White Russian." + reagent_state = LIQUID + color = "#360000" // rgb: 54, 0, 0 + +/datum/reagent/ethanol/manhattan + name = "Manhattan" + id = "manhattan" + description = "The Detective's undercover drink of choice. He never could stomach gin..." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/manhattan_proj + name = "Manhattan Project" + id = "manhattan_proj" + description = "A scienitst's drink of choice, for pondering ways to blow up the station." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/whiskeysoda + name = "Whiskey Soda" + id = "whiskeysoda" + description = "Ultimate refreshment." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/antifreeze + name = "Anti-freeze" + id = "antifreeze" + description = "Ultimate refreshment." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/barefoot + name = "Barefoot" + id = "barefoot" + description = "Barefoot and pregnant" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/snowwhite + name = "Snow White" + id = "snowwhite" + description = "A cold refreshment" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/demonsblood + name = "Demons Blood" + id = "demonsblood" + description = "AHHHH!!!!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 10 + slurr_adj = 10 + +/datum/reagent/ethanol/vodkatonic + name = "Vodka and Tonic" + id = "vodkatonic" + description = "For when a gin and tonic isn't russian enough." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + slurr_adj = 3 + +/datum/reagent/ethanol/ginfizz + name = "Gin Fizz" + id = "ginfizz" + description = "Refreshingly lemony, deliciously dry." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + slurr_adj = 3 + +/datum/reagent/ethanol/bahama_mama + name = "Bahama mama" + id = "bahama_mama" + description = "Tropic cocktail." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/singulo + name = "Singulo" + id = "singulo" + description = "A blue-space beverage!" + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + dizzy_adj = 15 + slurr_adj = 15 + +/datum/reagent/ethanol/sbiten + name = "Sbiten" + id = "sbiten" + description = "A spicy Vodka! Might be a little hot for the little guys!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/sbiten/on_mob_life(var/mob/living/M as mob) + ..() + if (M.bodytemperature < 360) + M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055 + return + +/datum/reagent/ethanol/devilskiss + name = "Devils Kiss" + id = "devilskiss" + description = "Creepy time!" + reagent_state = LIQUID + color = "#A68310" // rgb: 166, 131, 16 + +/datum/reagent/ethanol/red_mead + name = "Red Mead" + id = "red_mead" + description = "The true Viking drink! Even though it has a strange red color." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/mead + name = "Mead" + id = "mead" + description = "A Vikings drink, though a cheap one." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/iced_beer + name = "Iced Beer" + id = "iced_beer" + description = "A beer which is so cold the air around it freezes." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/iced_beer/on_mob_life(var/mob/living/M as mob) + ..() + if (M.bodytemperature < 270) + M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055 + return + +/datum/reagent/ethanol/grog + name = "Grog" + id = "grog" + description = "Watered down rum, Nanotrasen approves!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/aloe + name = "Aloe" + id = "aloe" + description = "So very, very, very good." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/andalusia + name = "Andalusia" + id = "andalusia" + description = "A nice, strange named drink." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/alliescocktail + name = "Allies Cocktail" + id = "alliescocktail" + description = "A drink made from your allies." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/acid_spit + name = "Acid Spit" + id = "acidspit" + description = "A drink by Nanotrasen. Made from live aliens." + reagent_state = LIQUID + color = "#365000" // rgb: 54, 80, 0 + +/datum/reagent/ethanol/amasec + name = "Amasec" + id = "amasec" + description = "Official drink of the Imperium." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + +/datum/reagent/ethanol/neurotoxin + name = "Neurotoxin" + id = "neurotoxin" + description = "A strong neurotoxin that puts the subject into a death-like state." + reagent_state = LIQUID + color = "#2E2E61" // rgb: 46, 46, 97 + +/datum/reagent/ethanol/neurotoxin/on_mob_life(var/mob/living/M as mob) + M.weakened = max(M.weakened, 3) + if(!data) + data = 1 + data++ + M.dizziness +=6 + if(data >= 15 && data <45) + if (!M.slurring) + M.slurring = 1 + M.slurring += 3 + else if(data >= 45 && prob(50) && data <55) + M.confused = max(M.confused+3,0) + else if(data >=55) + M.druggy = max(M.druggy, 55) + else if(data >=200) + M.adjustToxLoss(2) + ..() + return + +/datum/reagent/ethanol/bananahonk + name = "Banana Mama" + id = "bananahonk" + description = "A drink from Clown Heaven." + nutriment_factor = 1 * FOOD_METABOLISM + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/bananahonk/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Clown")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + +/datum/reagent/ethanol/silencer + name = "Silencer" + id = "silencer" + description = "A drink from Mime Heaven." + nutriment_factor = 1 * FOOD_METABOLISM + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/silencer/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Mime")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + +/datum/reagent/ethanol/changelingsting + name = "Changeling Sting" + id = "changelingsting" + description = "A stingy drink." + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/changelingsting/on_mob_life(var/mob/living/M as mob) + ..() + M.dizziness +=5 + return + +/datum/reagent/ethanol/irishcarbomb + name = "Irish Car Bomb" + id = "irishcarbomb" + description = "Mmm, tastes like chocolate cake..." + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/irishcarbomb/on_mob_life(var/mob/living/M as mob) + ..() + M.dizziness +=5 + return + +/datum/reagent/ethanol/syndicatebomb + name = "Syndicate Bomb" + id = "syndicatebomb" + description = "A Syndicate bomb" + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/erikasurprise + name = "Erika Surprise" + id = "erikasurprise" + description = "The surprise is, it's green!" + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/driestmartini + name = "Driest Martini" + id = "driestmartini" + description = "Only for the experienced. You think you see sand floating in the glass." + nutriment_factor = 1 * FOOD_METABOLISM + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/driestmartini/on_mob_life(var/mob/living/M as mob) + if(!data) data = 1 + data++ + M.dizziness +=10 + if(data >= 55 && data <115) + if (!M.stuttering) M.stuttering = 1 + M.stuttering += 10 + else if(data >= 115 && prob(33)) + M.confused = max(M.confused+15,15) + ..() + + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm new file mode 100644 index 00000000000..e66e48fbdfe --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm @@ -0,0 +1,279 @@ +/datum/reagent/drink/orangejuice + name = "Orange juice" + id = "orangejuice" + description = "Both delicious AND rich in Vitamin C, what more do you need?" + color = "#E78108" // rgb: 231, 129, 8 + +/datum/reagent/drink/orangejuicde/on_mob_life(var/mob/living/M as mob) + ..() + if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM) + return + +/datum/reagent/drink/tomatojuice + name = "Tomato Juice" + id = "tomatojuice" + description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" + color = "#731008" // rgb: 115, 16, 8 + +/datum/reagent/drink/tomatojuice/on_mob_life(var/mob/living/M as mob) + ..() + if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1) + return + +/datum/reagent/drink/limejuice + name = "Lime Juice" + id = "limejuice" + description = "The sweet-sour juice of limes." + color = "#365E30" // rgb: 54, 94, 48 + +/datum/reagent/drink/limejuice/on_mob_life(var/mob/living/M as mob) + ..() + if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) + return + + +/datum/reagent/drink/carrotjuice + name = "Carrot juice" + id = "carrotjuice" + description = "It is just like a carrot but without crunching." + color = "#973800" // rgb: 151, 56, 0 + +/datum/reagent/drink/carrotjuicde/on_mob_life(var/mob/living/M as mob) + ..() + M.eye_blurry = max(M.eye_blurry-1 , 0) + M.eye_blind = max(M.eye_blind-1 , 0) + if(!data) data = 1 + switch(data) + if(1 to 20) + //nothing + if(21 to INFINITY) + if (prob(data-10)) + M.disabilities &= ~NEARSIGHTED + data++ + return + +/datum/reagent/drink/doctor_delight + name = "The Doctor's Delight" + id = "doctorsdelight" + description = "A gulp a day keeps the MediBot away. That's probably for the best." + reagent_state = LIQUID + color = "#FF8CFF" // rgb: 255, 140, 255 + +/datum/reagent/drink/doctors_delight/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) + ..() + return + +/datum/reagent/drink/berryjuice + name = "Berry Juice" + id = "berryjuice" + description = "A delicious blend of several different kinds of berries." + color = "#863333" // rgb: 134, 51, 51 + +/datum/reagent/drink/poisonberryjuice + name = "Poison Berry Juice" + id = "poisonberryjuice" + description = "A tasty juice blended from various kinds of very deadly and toxic berries." + color = "#863353" // rgb: 134, 51, 83 + +/datum/reagent/drink/poisonberryjuice/on_mob_life(var/mob/living/M as mob) + ..() + M.adjustToxLoss(1) + return + +/datum/reagent/drink/watermelonjuice + name = "Watermelon Juice" + id = "watermelonjuice" + description = "Delicious juice made from watermelon." + color = "#863333" // rgb: 134, 51, 51 + +/datum/reagent/drink/lemonjuice + name = "Lemon Juice" + id = "lemonjuice" + description = "This juice is VERY sour." + color = "#863333" // rgb: 175, 175, 0 + +/datum/reagent/drink/grapejuice + name = "Grape Juice" + id = "grapejuice" + description = "This juice is known to stain shirts." + color = "#993399" // rgb: 153, 51, 153 + +/datum/reagent/drink/banana + name = "Banana Juice" + id = "banana" + description = "The raw essence of a banana." + color = "#863333" // rgb: 175, 175, 0 + +/datum/reagent/drink/banana/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Clown")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + +/datum/reagent/drink/nothing + name = "Nothing" + id = "nothing" + description = "Absolutely nothing." + +/datum/reagent/drink/nothing/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Mime")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + +/datum/reagent/drink/potato_juice + name = "Potato Juice" + id = "potato" + description = "Juice of the potato. Bleh." + nutriment_factor = 2 * FOOD_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/drink/milk + name = "Milk" + id = "milk" + description = "An opaque white liquid produced by the mammary glands of mammals." + color = "#DFDFDF" // rgb: 223, 223, 223 + +/datum/reagent/drink/milk/on_mob_life(var/mob/living/M as mob) + if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) + if(holder.has_reagent("capsaicin")) + holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM) + ..() + return + +/datum/reagent/drink/milk/soymilk + name = "Soy Milk" + id = "soymilk" + description = "An opaque white liquid made from soybeans." + color = "#DFDFC7" // rgb: 223, 223, 199 + +/datum/reagent/drink/milk/cream + name = "Cream" + id = "cream" + description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" + color = "#DFD7AF" // rgb: 223, 215, 175 + +/datum/reagent/drink/milk/chocolate_milk + name = "Chocolate milk" + id ="chocolate_milk" + description = "Chocolate-flavored milk, tastes like being a kid again." + color = "#85432C" + +/datum/reagent/drink/hot_coco + name = "Hot Chocolate" + id = "hot_coco" + description = "Made with love! And coco beans." + nutriment_factor = 2 * FOOD_METABOLISM + color = "#403010" // rgb: 64, 48, 16 + adj_temp = 5 + +/datum/reagent/drink/coffee + name = "Coffee" + id = "coffee" + description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant." + color = "#482000" // rgb: 72, 32, 0 + adj_dizzy = -5 + adj_drowsy = -3 + adj_sleepy = -2 + adj_temp = 25 + overdose_threshold = 45 + +/datum/reagent/drink/coffee/on_mob_life(var/mob/living/M as mob) + if(adj_temp > 0 && holder.has_reagent("frostoil")) + holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM) + if(prob(50)) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + ..() + return + +/datum/reagent/drink/coffee/overdose_process(var/mob/living/M as mob) + if(volume > 45) + M.Jitter(5) + + ..() + return + +/datum/reagent/drink/coffee/icecoffee + name = "Iced Coffee" + id = "icecoffee" + description = "Coffee and ice, refreshing and cool." + color = "#102838" // rgb: 16, 40, 56 + adj_temp = -5 + +/datum/reagent/drink/coffee/soy_latte + name = "Soy Latte" + id = "soy_latte" + description = "A nice and tasty beverage while you are reading your hippie books." + color = "#664300" // rgb: 102, 67, 0 + adj_sleepy = 0 + adj_temp = 5 + +/datum/reagent/drink/coffee/soy_latte/on_mob_life(var/mob/living/M as mob) + ..() + M.sleeping = 0 + if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) + return + +/datum/reagent/drink/coffee/cafe_latte + name = "Cafe Latte" + id = "cafe_latte" + description = "A nice, strong and tasty beverage while you are reading." + color = "#664300" // rgb: 102, 67, 0 + adj_sleepy = 0 + adj_temp = 5 + +/datum/reagent/drink/coffee/cafe_latte/on_mob_life(var/mob/living/M as mob) + ..() + M.sleeping = 0 + if(M.getBruteLoss() && prob(20)) + M.heal_organ_damage(1,0) + return + +/datum/reagent/drink/tea + name = "Tea" + id = "tea" + description = "Tasty black tea: It has antioxidants. It's good for you!" + color = "#101000" // rgb: 16, 16, 0 + adj_dizzy = -2 + adj_drowsy = -1 + adj_sleepy = -3 + adj_temp = 20 + +/datum/reagent/drink/tea/on_mob_life(var/mob/living/M as mob) + ..() + if(M.getToxLoss() && prob(20)) + M.adjustToxLoss(-1) + return + +/datum/reagent/drink/tea/icetea + name = "Iced Tea" + id = "icetea" + description = "No relation to a certain rap artist/ actor." + color = "#104038" // rgb: 16, 64, 56 + adj_temp = -5 + +/datum/reagent/drink/kahlua + name = "Kahlua" + id = "kahlua" + description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" + color = "#664300" // rgb: 102, 67, 0 + adj_dizzy = -5 + adj_drowsy = -3 + adj_sleepy = -2 + +/datum/reagent/drink/kahlua/on_mob_life(var/mob/living/M as mob) + ..() + M.Jitter(5) + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm new file mode 100644 index 00000000000..3bc3b364929 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm @@ -0,0 +1,26 @@ +/datum/reagent/drink + name = "Drink" + id = "drink" + description = "Uh, some kind of drink." + reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#E78108" // rgb: 231, 129, 8 + var/adj_dizzy = 0 + var/adj_drowsy = 0 + var/adj_sleepy = 0 + var/adj_temp = 0 + +/datum/reagent/drink/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.nutrition += nutriment_factor + holder.remove_reagent(src.id, FOOD_METABOLISM) + if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy) + if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy) + if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy) + if (adj_temp) + if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 + M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT)) + // Drinks should be used up faster than other reagents. + holder.remove_reagent(src.id, FOOD_METABOLISM) + ..() + return diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm new file mode 100644 index 00000000000..e9acef2da7d --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm @@ -0,0 +1,141 @@ +/datum/reagent/drink/cold + name = "Cold drink" + adj_temp = -5 + +/datum/reagent/drink/cold/tonic + name = "Tonic Water" + id = "tonic" + description = "It tastes strange but at least the quinine keeps the Space Malaria at bay." + color = "#664300" // rgb: 102, 67, 0 + adj_dizzy = -5 + adj_drowsy = -3 + adj_sleepy = -2 + +/datum/reagent/drink/cold/sodawater + name = "Soda Water" + id = "sodawater" + description = "A can of club soda. Why not make a scotch and soda?" + color = "#619494" // rgb: 97, 148, 148 + adj_dizzy = -5 + adj_drowsy = -3 + +/datum/reagent/drink/cold/ice + name = "Ice" + id = "ice" + description = "Frozen water, your dentist wouldn't like you chewing this." + reagent_state = SOLID + color = "#619494" // rgb: 97, 148, 148 + +/datum/reagent/drink/cold/space_cola + name = "Cola" + id = "cola" + description = "A refreshing beverage." + reagent_state = LIQUID + color = "#100800" // rgb: 16, 8, 0 + adj_drowsy = -3 + +/datum/reagent/drink/cold/nuka_cola + name = "Nuka Cola" + id = "nuka_cola" + description = "Cola, cola never changes." + color = "#100800" // rgb: 16, 8, 0 + adj_sleepy = -2 + +/datum/reagent/drink/cold/nuka_cola/on_mob_life(var/mob/living/M as mob) + M.Jitter(20) + M.druggy = max(M.druggy, 30) + M.dizziness +=5 + M.drowsyness = 0 + M.status_flags |= GOTTAGOFAST + ..() + return + +/datum/reagent/drink/cold/spacemountainwind + name = "Space Mountain Wind" + id = "spacemountainwind" + description = "Blows right through you like a space wind." + color = "#102000" // rgb: 16, 32, 0 + adj_drowsy = -7 + adj_sleepy = -1 + +/datum/reagent/drink/cold/dr_gibb + name = "Dr. Gibb" + id = "dr_gibb" + description = "A delicious blend of 42 different flavours" + color = "#102000" // rgb: 16, 32, 0 + adj_drowsy = -6 + +/datum/reagent/drink/cold/space_up + name = "Space-Up" + id = "space_up" + description = "Tastes like a hull breach in your mouth." + color = "#202800" // rgb: 32, 40, 0 + adj_temp = -8 + +/datum/reagent/drink/cold/lemon_lime + name = "Lemon Lime" + description = "A tangy substance made of 0.5% natural citrus!" + id = "lemon_lime" + color = "#878F00" // rgb: 135, 40, 0 + adj_temp = -8 + +/datum/reagent/drink/cold/lemonade + name = "Lemonade" + description = "Oh the nostalgia..." + id = "lemonade" + color = "#FFFF00" // rgb: 255, 255, 0 + +/datum/reagent/drink/cold/kiraspecial + name = "Kira Special" + description = "Long live the guy who everyone had mistaken for a girl. Baka!" + id = "kiraspecial" + color = "#CCCC99" // rgb: 204, 204, 153 + +/datum/reagent/drink/cold/brownstar + name = "Brown Star" + description = "Its not what it sounds like..." + id = "brownstar" + color = "#9F3400" // rgb: 159, 052, 000 + adj_temp = - 2 + +/datum/reagent/drink/cold/milkshake + name = "Milkshake" + description = "Glorious brainfreezing mixture." + id = "milkshake" + color = "#AEE5E4" // rgb" 174, 229, 228 + adj_temp = -9 + +/datum/reagent/drink/cold/milkshake/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!data) data = 1 + switch(data) + if(1 to 15) + M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT + if(holder.has_reagent("capsaicin")) + holder.remove_reagent("capsaicin", 5) + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(5,20) + if(15 to 25) + M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(10,20) + if(25 to INFINITY) + M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(prob(1)) M.emote("shiver") + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(15,20) + data++ + holder.remove_reagent(src.id, FOOD_METABOLISM) + ..() + return + +/datum/reagent/drink/cold/rewriter + name = "Rewriter" + description = "The secert of the sanctuary of the Libarian..." + id = "rewriter" + color = "#485000" // rgb:72, 080, 0 + +/datum/reagent/drink/cold/rewriter/on_mob_life(var/mob/living/M as mob) + ..() + M.Jitter(5) + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/oldchem/reagents/reagents_admin.dm new file mode 100644 index 00000000000..dd9e73a96b1 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_admin.dm @@ -0,0 +1,54 @@ +/datum/reagent/adminordrazine //An OP chemical for admins + name = "Adminordrazine" + id = "adminordrazine" + description = "It's magic. We don't have to explain it." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds! + +/datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob) + if(!M) M = holder.my_atom ///This can even heal dead people. + for(var/datum/reagent/R in M.reagents.reagent_list) + if(R != src) + M.reagents.remove_reagent(R.id,5) + M.setCloneLoss(0) + M.setOxyLoss(0) + M.radiation = 0 + M.heal_organ_damage(5,5) + M.adjustToxLoss(-5) + M.hallucination = 0 + M.setBrainLoss(0) + M.disabilities = 0 + M.sdisabilities = 0 + M.eye_blurry = 0 + M.eye_blind = 0 + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + if(istype(E)) + E.damage = max(E.damage-5 , 0) + M.SetWeakened(0) + M.SetStunned(0) + M.SetParalysis(0) + M.silent = 0 + M.dizziness = 0 + M.drowsyness = 0 + M.stuttering = 0 + M.slurring = 0 + M.confused = 0 + M.sleeping = 0 + M.jitteriness = 0 + if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs + var/mob/living/carbon/C = M + if(C.virus2.len) + for (var/ID in C.virus2) + var/datum/disease2/disease/V = C.virus2[ID] + C.antibodies |= V.antigen + ..() + return + + +/datum/reagent/adminordrazine/nanites + name = "Nanites" + id = "nanites" + description = "Nanomachines that aid in rapid cellular regeneration." \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_drugs.dm b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm new file mode 100644 index 00000000000..a00da8f283a --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm @@ -0,0 +1,95 @@ +/datum/reagent/serotrotium + name = "Serotrotium" + id = "serotrotium" + description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." + reagent_state = LIQUID + color = "#202040" // rgb: 20, 20, 40 + +/datum/reagent/serotrotium/on_mob_life(var/mob/living/M as mob) + if(ishuman(M)) + if(prob(7)) M.emote(pick("twitch","drool","moan","gasp")) + holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM) + return + + +/datum/reagent/lithium + name = "Lithium" + id = "lithium" + description = "A chemical element." + reagent_state = SOLID + color = "#808080" // rgb: 128, 128, 128 + +/datum/reagent/lithium/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.canmove && !M.restrained() && istype(M.loc, /turf/space)) + step(M, pick(cardinal)) + if(prob(5)) M.emote(pick("twitch","drool","moan")) + ..() + return + + +/datum/reagent/hippies_delight + name = "Hippie's Delight" + id = "hippiesdelight" + description = "You just don't get it maaaan." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/hippies_delight/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.druggy = max(M.druggy, 50) + if(!data) data = 1 + switch(data) + if(1 to 5) + if (!M.stuttering) M.stuttering = 1 + M.Dizzy(10) + if(prob(10)) M.emote(pick("twitch","giggle")) + if(5 to 10) + if (!M.stuttering) M.stuttering = 1 + M.Jitter(20) + M.Dizzy(20) + M.druggy = max(M.druggy, 45) + if(prob(20)) M.emote(pick("twitch","giggle")) + if (10 to INFINITY) + if (!M.stuttering) M.stuttering = 1 + M.Jitter(40) + M.Dizzy(40) + M.druggy = max(M.druggy, 60) + if(prob(30)) M.emote(pick("twitch","giggle")) + holder.remove_reagent(src.id, 0.2) + data++ + ..() + return + + +/datum/reagent/lsd + name = "Lysergic acid diethylamide" + id = "lsd" + description = "A highly potent hallucinogenic substance. Far out, maaaan." + reagent_state = LIQUID + color = "#0000D8" + +/datum/reagent/lsd/on_mob_life(var/mob/living/M) + if(!M) M = holder.my_atom + M.hallucination += 10 + ..() + return + + +/datum/reagent/space_drugs + name = "Space drugs" + id = "space_drugs" + description = "An illegal chemical compound used as drug." + reagent_state = LIQUID + color = "#9087A2" + metabolization_rate = 0.2 + +/datum/reagent/space_drugs/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.druggy = max(M.druggy, 15) + if(isturf(M.loc) && !istype(M.loc, /turf/space)) + if(M.canmove && !M.restrained()) + if(prob(10)) step(M, pick(cardinal)) + if(prob(7)) M.emote(pick("twitch","drool","moan","giggle")) + ..() + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_flammable.dm b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm new file mode 100644 index 00000000000..4603aa6c238 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm @@ -0,0 +1,136 @@ +/datum/reagent/fuel + name = "Welding fuel" + id = "fuel" + description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil." + reagent_state = LIQUID + color = "#060606" + +/datum/reagent/fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 10) + return + ..() + +/datum/reagent/fuel/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1) + ..() + return + +/datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke + name = "Unholy Water" + id = "unholywater" + description = "Something that shouldn't exist on this plane of existance." + process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it. + +/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M) + M.adjustBrainLoss(3) + if(iscultist(M)) + M.status_flags |= GOTTAGOFAST + M.drowsyness = max(M.drowsyness-5, 0) + M.AdjustParalysis(-2) + M.AdjustStunned(-2) + M.AdjustWeakened(-2) + else + M.adjustToxLoss(2) + M.adjustFireLoss(2) + M.adjustOxyLoss(2) + M.adjustBruteLoss(2) + holder.remove_reagent(src.id, 1) + + +/datum/reagent/incendiary_fuel //copy-pasta of welding fuel; allow incendiary grenades to function better without the headache of people spraying fuel everywhere with regular welding fuel. + name = "Incendiary fuel" + id = "incendiaryfuel" + description = "A highly flammable compound used in incendiary grenades." + reagent_state = LIQUID + color = "#660000" // rgb: 102, 0, 0 + +/datum/reagent/incendiary_fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 10) + return + +/datum/reagent/incendiary_fuel/reaction_obj(var/obj/O, var/volume) + var/turf/the_turf = get_turf(O) + if(!the_turf) + return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO + new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume) + +/datum/reagent/incendiary_fuel/reaction_turf(var/turf/T, var/volume) + new /obj/effect/decal/cleanable/liquid_fuel(T, volume) + return + +/datum/reagent/incendiary_fuel/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1) + ..() + return + + +/datum/reagent/plasma + name = "Plasma" + id = "plasma" + description = "The liquid phase of an unusual extraterrestrial compound." + reagent_state = LIQUID + color = "#7A2B94" + +/datum/reagent/plasma/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1*REM) + if(holder.has_reagent("epinephrine")) + holder.remove_reagent("epinephrine", 2) + ..() + return + +/datum/reagent/plasma/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 5) + ..() + return + + +/datum/reagent/thermite + name = "Thermite" + id = "thermite" + description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls." + reagent_state = SOLID + color = "#673910" // rgb: 103, 57, 16 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/thermite/reaction_turf(var/turf/T, var/volume) + src = null + if(volume >= 5) + if(istype(T, /turf/simulated/wall)) + T:thermite = 1 + T.overlays.Cut() + T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite") + return + +/datum/reagent/thermite/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustFireLoss(1) + ..() + return + + +/datum/reagent/glycerol + name = "Glycerol" + id = "glycerol" + description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." + reagent_state = LIQUID + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/nitroglycerin + name = "Nitroglycerin" + id = "nitroglycerin" + description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol." + reagent_state = LIQUID + color = "#808080" // rgb: 128, 128, 128 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm new file mode 100644 index 00000000000..485a42e7ca7 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_food.dm @@ -0,0 +1,425 @@ +/////////////////////////Food Reagents//////////////////////////// +// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food +// condiments, additives, and such go. +/datum/reagent/nutriment // Pure nutriment, universally digestable and thus slightly less effective + name = "Nutriment" + id = "nutriment" + description = "A questionable mixture of various pure nutrients commonly found in processed foods." + reagent_state = SOLID + nutriment_factor = 12 * REAGENTS_METABOLISM + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/nutriment/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!(M.mind in ticker.mode.vampires)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients + H.nutrition += nutriment_factor // For hunger and fatness + if(prob(50)) M.heal_organ_damage(1,0) + if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals + if(prob(50)) M.heal_organ_damage(1,0) + ..() + return + + +/datum/reagent/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores + name = "Protein" + id = "protein" + description = "Various essential proteins and fats commonly found in animal flesh and blood." + reagent_state = SOLID + nutriment_factor = 15 * REAGENTS_METABOLISM + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/protein/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!(M.mind in ticker.mode.vampires)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore + H.nutrition += nutriment_factor // For hunger and fatness + if(prob(50)) M.heal_organ_damage(1,0) + if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals + if(prob(50)) M.heal_organ_damage(1,0) + ..() + return + + +/datum/reagent/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores + name = "Plant-matter" + id = "plantmatter" + description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce." + reagent_state = SOLID + nutriment_factor = 15 * REAGENTS_METABOLISM + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/plantmatter/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!(M.mind in ticker.mode.vampires)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore + H.nutrition += nutriment_factor // For hunger and fatness + if(prob(50)) M.heal_organ_damage(1,0) + if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals + if(prob(50)) M.heal_organ_damage(1,0) + ..() + return + + +/datum/reagent/soysauce + name = "Soysauce" + id = "soysauce" + description = "A salty sauce made from the soy plant." + reagent_state = LIQUID + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#792300" // rgb: 121, 35, 0 + +/datum/reagent/ketchup + name = "Ketchup" + id = "ketchup" + description = "Ketchup, catsup, whatever. It's tomato paste." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#731008" // rgb: 115, 16, 8 + + +/datum/reagent/capsaicin + name = "Capsaicin Oil" + id = "capsaicin" + description = "This is what makes chilis hot." + reagent_state = LIQUID + color = "#B31008" // rgb: 179, 16, 8 + +/datum/reagent/capsaicin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!data) data = 1 + switch(data) + if(1 to 15) + M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT + if(holder.has_reagent("frostoil")) + holder.remove_reagent("frostoil", 5) + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature += rand(5,20) + if(15 to 25) + M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature += rand(10,20) + if(25 to INFINITY) + M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature += rand(15,20) + holder.remove_reagent(src.id, FOOD_METABOLISM) + data++ + ..() + return + + +/datum/reagent/sodiumchloride + name = "Salt" + id = "sodiumchloride" + description = "Sodium chloride, common table salt." + reagent_state = SOLID + color = "#B1B0B0" + +/datum/reagent/sodiumchloride/overdose_process(var/mob/living/M as mob) + if(volume > 100) + if(prob(70)) + M.adjustBrainLoss(1) + if(prob(8)) + M.adjustToxLoss(rand(1,2)) + ..() + return + + +/datum/reagent/blackpepper + name = "Black Pepper" + id = "blackpepper" + description = "A powder ground from peppercorns. *AAAACHOOO*" + reagent_state = SOLID + // no color (ie, black) + +/datum/reagent/coco + name = "Coco Powder" + id = "coco" + description = "A fatty, bitter paste made from coco beans." + reagent_state = SOLID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/coco/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + +/datum/reagent/hot_coco + name = "Hot Chocolate" + id = "hot_coco" + description = "Made with love! And coco beans." + reagent_state = LIQUID + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#403010" // rgb: 64, 48, 16 + +/datum/reagent/hot_coco/on_mob_life(var/mob/living/M as mob) + if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 + M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + M.nutrition += nutriment_factor + ..() + return + + +/datum/reagent/psilocybin + name = "Psilocybin" + id = "psilocybin" + description = "A strong psycotropic derived from certain species of mushroom." + color = "#E700E7" // rgb: 231, 0, 231 + +/datum/reagent/psilocybin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.druggy = max(M.druggy, 30) + if(!data) data = 1 + switch(data) + if(1 to 5) + if (!M.stuttering) M.stuttering = 1 + M.Dizzy(5) + if(prob(10)) M.emote(pick("twitch","giggle")) + if(5 to 10) + if (!M.stuttering) M.stuttering = 1 + M.Jitter(10) + M.Dizzy(10) + M.druggy = max(M.druggy, 35) + if(prob(20)) M.emote(pick("twitch","giggle")) + if (10 to INFINITY) + if (!M.stuttering) M.stuttering = 1 + M.Jitter(20) + M.Dizzy(20) + M.druggy = max(M.druggy, 40) + if(prob(30)) M.emote(pick("twitch","giggle")) + data++ + ..() + return + + +/datum/reagent/sprinkles + name = "Sprinkles" + id = "sprinkles" + description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FF00FF" // rgb: 255, 0, 255 + +/datum/reagent/sprinkles/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + + +/datum/reagent/cornoil + name = "Corn Oil" + id = "cornoil" + description = "An oil derived from various types of corn." + reagent_state = LIQUID + nutriment_factor = 20 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/cornoil/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + +/datum/reagent/cornoil/reaction_turf(var/turf/simulated/T, var/volume) + if (!istype(T)) return + src = null + if(volume >= 3) + if(T.wet >= 1) return + T.wet = 1 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") + T.overlays += T.wet_overlay + + spawn(800) + if (!istype(T)) return + if(T.wet >= 2) return + T.wet = 0 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + var/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot) + var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) + lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + + +/datum/reagent/enzyme + name = "Denatured Enzyme" + id = "enzyme" + description = "Heated beyond usefulness, this enzyme is now worthless." + reagent_state = LIQUID + color = "#282314" // rgb: 54, 94, 48 + + +/datum/reagent/dry_ramen + name = "Dry Ramen" + id = "dry_ramen" + description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/dry_ramen/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + + +/datum/reagent/hot_ramen + name = "Hot Ramen" + id = "hot_ramen" + description = "The noodles are boiled, the flavors are artificial, just like being back in school." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/hot_ramen/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 + M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) + ..() + return + + +/datum/reagent/hell_ramen + name = "Hell Ramen" + id = "hell_ramen" + description = "The noodles are boiled, the flavors are artificial, just like being back in school." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/hell_ramen/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT + ..() + return + + +/datum/reagent/flour + name = "flour" + id = "flour" + description = "This is what you rub all over yourself to pretend to be a ghost." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FFFFFF" // rgb: 0, 0, 0 + +/datum/reagent/flour/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + +/datum/reagent/flour/reaction_turf(var/turf/T, var/volume) + src = null + if(!istype(T, /turf/space)) + new /obj/effect/decal/cleanable/flour(T) + + +/datum/reagent/rice + name = "Rice" + id = "rice" + description = "Enjoy the great taste of nothing." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FFFFFF" // rgb: 0, 0, 0 + +/datum/reagent/rice/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + + +/datum/reagent/cherryjelly + name = "Cherry Jelly" + id = "cherryjelly" + description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." + reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#801E28" // rgb: 128, 30, 40 + +/datum/reagent/cherryjelly/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + + +/datum/reagent/toxin/coffeepowder + name = "Coffee Grounds" + id = "coffeepowder" + description = "Finely ground Coffee beans, used to make coffee." + reagent_state = SOLID + color = "#5B2E0D" // rgb: 91, 46, 13 + +/datum/reagent/toxin/teapowder + name = "Ground Tea Leaves" + id = "teapowder" + description = "Finely shredded Tea leaves, used for making tea." + reagent_state = SOLID + color = "#7F8400" // rgb: 127, 132, 0 + +//Reagents used for plant fertilizers. +/datum/reagent/toxin/fertilizer + name = "fertilizer" + id = "fertilizer" + description = "A chemical mix good for growing plants with." + reagent_state = LIQUID +// toxpwr = 0.2 //It's not THAT poisonous. + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/toxin/fertilizer/eznutrient + name = "EZ Nutrient" + id = "eznutrient" + +/datum/reagent/toxin/fertilizer/left4zed + name = "Left-4-Zed" + id = "left4zed" + +/datum/reagent/toxin/fertilizer/robustharvest + name = "Robust Harvest" + id = "robustharvest" + + +/datum/reagent/sugar + name = "Sugar" + id = "sugar" + description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." + reagent_state = SOLID + color = "#FFFFFF" // rgb: 255, 255, 255 + overdose_threshold = 200 // Hyperglycaemic shock + +/datum/reagent/sugar/on_mob_life(var/mob/living/M as mob) + if(prob(4)) + M.reagents.add_reagent("epinephrine", 1.2) + if(prob(50)) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + if(current_cycle >= 90) + M.jitteriness += 10 + ..() + return + +/datum/reagent/sugar/overdose_process(var/mob/living/M as mob) + if(volume > 200) + M << "You pass out from hyperglycemic shock!" + M.Paralyse(1) + if(prob(8)) + M.adjustToxLoss(rand(1,2)) + ..() + return diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm new file mode 100644 index 00000000000..696fa6354a5 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -0,0 +1,152 @@ +/datum/reagent/hydrocodone + name = "Hydrocodone" + id = "hydrocodone" + description = "An extremely effective painkiller; may have long term abuse consequences." + reagent_state = LIQUID + color = "#C805DC" + metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units + shock_reduction = 200 + +/datum/reagent/hydrocodone/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + ..() + return + +/datum/reagent/virus_food + name = "Virus Food" + id = "virusfood" + description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce." + reagent_state = LIQUID + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#899613" // rgb: 137, 150, 19 + +/datum/reagent/virus_food/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.nutrition += nutriment_factor*REM + ..() + return + +/datum/reagent/sterilizine + name = "Sterilizine" + id = "sterilizine" + description = "Sterilizes wounds in preparation for surgery." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + + //makes you squeaky clean +/datum/reagent/sterilizine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if (method == TOUCH) + M.germ_level -= min(volume*20, M.germ_level) + +/datum/reagent/sterilizine/reaction_obj(var/obj/O, var/volume) + O.germ_level -= min(volume*20, O.germ_level) + +/datum/reagent/sterilizine/reaction_turf(var/turf/T, var/volume) + T.germ_level -= min(volume*20, T.germ_level) + +/datum/reagent/synaptizine + name = "Synaptizine" + id = "synaptizine" + description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis." + reagent_state = LIQUID + color = "#FA46FA" + +/datum/reagent/synaptizine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + if(prob(50)) + M.adjustBrainLoss(-1.0) + ..() + return + +/datum/reagent/audioline + name = "Audioline" + id = "audioline" + description = "Heals ear damage." + reagent_state = LIQUID + color = "#6600FF" // rgb: 100, 165, 255 + +/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.ear_damage = 0 + M.ear_deaf = 0 + ..() + return + +/datum/reagent/mitocholide + name = "Mitocholide" + id = "mitocholide" + description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +/datum/reagent/mitocholide/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + //Mitocholide is hard enough to get, it's probably fair to make this all internal organs + for(var/name in H.internal_organs_by_name) + var/obj/item/organ/I = H.internal_organs_by_name[name] + if(I.damage > 0) + I.damage -= 0.20 + ..() + return + +/datum/reagent/cryoxadone + name = "Cryoxadone" + id = "cryoxadone" + description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly." + reagent_state = LIQUID + color = "#0000C8" // rgb: 200, 165, 220 + +/datum/reagent/cryoxadone/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.bodytemperature < 265) + M.adjustCloneLoss(-4) + M.adjustOxyLoss(-10) + M.heal_organ_damage(12,12) + M.adjustToxLoss(-3) + M.status_flags &= ~DISFIGURED + ..() + return + +/datum/reagent/rezadone + name = "Rezadone" + id = "rezadone" + description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects." + reagent_state = SOLID + color = "#669900" // rgb: 102, 153, 0 + +/datum/reagent/rezadone/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!data) data = 1 + data++ + switch(data) + if(1 to 15) + M.adjustCloneLoss(-1) + M.heal_organ_damage(1,1) + if(15 to 35) + M.adjustCloneLoss(-2) + M.heal_organ_damage(2,1) + M.status_flags &= ~DISFIGURED + if(35 to INFINITY) + M.adjustToxLoss(1) + M.Dizzy(5) + M.Jitter(5) + + ..() + return + +/datum/reagent/spaceacillin + name = "Spaceacillin" + id = "spaceacillin" + description = "An all-purpose antibiotic agent extracted from space fungus." + reagent_state = LIQUID + color = "#0AB478" + +/datum/reagent/spaceacillin/on_mob_life(var/mob/living/M as mob) + ..() + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_misc.dm b/code/modules/reagents/oldchem/reagents/reagents_misc.dm new file mode 100644 index 00000000000..8c3352243eb --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_misc.dm @@ -0,0 +1,222 @@ +/*/datum/reagent/silicate + name = "Silicate" + id = "silicate" + description = "A compound that can be used to reinforce glass." + reagent_state = LIQUID + color = "#C7FFFF" // rgb: 199, 255, 255 + +/datum/reagent/silicate/reaction_obj(var/obj/O, var/volume) + src = null + if(istype(O,/obj/structure/window)) + if(O:silicate <= 200) + + O:silicate += volume + O:health += volume * 3 + + if(!O:silicateIcon) + var/icon/I = icon(O.icon,O.icon_state,O.dir) + + var/r = (volume / 100) + 1 + var/g = (volume / 70) + 1 + var/b = (volume / 50) + 1 + I.SetIntensity(r,g,b) + O.icon = I + O:silicateIcon = I + else + var/icon/I = O:silicateIcon + + var/r = (volume / 100) + 1 + var/g = (volume / 70) + 1 + var/b = (volume / 50) + 1 + I.SetIntensity(r,g,b) + O.icon = I + O:silicateIcon = I + + return*/ + + +/datum/reagent/oxygen + name = "Oxygen" + id = "oxygen" + description = "A colorless, odorless gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + +/datum/reagent/oxygen/on_mob_life(var/mob/living/M as mob, var/alien) + if(M.stat == 2) return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis")) + M.adjustToxLoss(REAGENTS_METABOLISM) + holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. + return + ..() + + +/datum/reagent/nitrogen + name = "Nitrogen" + id = "nitrogen" + description = "A colorless, odorless, tasteless gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + +/datum/reagent/nitrogen/on_mob_life(var/mob/living/M as mob, var/alien) + if(M.stat == 2) return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis")) + M.adjustOxyLoss(-2*REM) + holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. + return + ..() + + +/datum/reagent/hydrogen + name = "Hydrogen" + id = "hydrogen" + description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/potassium + name = "Potassium" + id = "potassium" + description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." + reagent_state = SOLID + color = "#A0A0A0" // rgb: 160, 160, 160 + + +/datum/reagent/sulfur + name = "Sulfur" + id = "sulfur" + description = "A chemical element." + reagent_state = SOLID + color = "#BF8C00" // rgb: 191, 140, 0 + + +/datum/reagent/sodium + name = "Sodium" + id = "sodium" + description = "A chemical element." + reagent_state = SOLID + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/phosphorus + name = "Phosphorus" + id = "phosphorus" + description = "A chemical element." + reagent_state = SOLID + color = "#832828" // rgb: 131, 40, 40 + + +/datum/reagent/carbon + name = "Carbon" + id = "carbon" + description = "A chemical element." + reagent_state = SOLID + color = "#1C1300" // rgb: 30, 20, 0 + +/datum/reagent/carbon/reaction_turf(var/turf/T, var/volume) + src = null + // Only add one dirt per turf. Was causing people to crash. + if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T)) + new /obj/effect/decal/cleanable/dirt(T) + + +/datum/reagent/gold + name = "Gold" + id = "gold" + description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." + reagent_state = SOLID + color = "#F7C430" // rgb: 247, 196, 48 + + +/datum/reagent/silver + name = "Silver" + id = "silver" + description = "A lustrous metallic element regarded as one of the precious metals." + reagent_state = SOLID + color = "#D0D0D0" // rgb: 208, 208, 208 + + +/datum/reagent/aluminum + name = "Aluminum" + id = "aluminum" + description = "A silvery white and ductile member of the boron group of chemical elements." + reagent_state = SOLID + color = "#A8A8A8" // rgb: 168, 168, 168 + + +/datum/reagent/silicon + name = "Silicon" + id = "silicon" + description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." + reagent_state = SOLID + color = "#A8A8A8" // rgb: 168, 168, 168 + + +/datum/reagent/copper + name = "Copper" + id = "copper" + description = "A highly ductile metal." + color = "#6E3B08" // rgb: 110, 59, 8 + + +/datum/reagent/iron + name = "Iron" + id = "iron" + description = "Pure iron is a metal." + reagent_state = SOLID + color = "#C8A5DC" // rgb: 200, 165, 220 +/* +/datum/reagent/iron/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if((M.virus) && (prob(8) && (M.virus.name=="Magnitis"))) + if(M.virus.spread == "Airborne") + M.virus.spread = "Remissive" + M.virus.stage-- + if(M.virus.stage <= 0) + M.resistances += M.virus.type + M.virus = null + holder.remove_reagent(src.id, 0.2) + return +*/ + + + +//foam +/datum/reagent/fluorosurfactant + name = "Fluorosurfactant" + id = "fluorosurfactant" + description = "A perfluoronated sulfonic acid that forms a foam when mixed with water." + reagent_state = LIQUID + color = "#9E6B38" // rgb: 158, 107, 56 + +// metal foaming agent +// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually +/datum/reagent/ammonia + name = "Ammonia" + id = "ammonia" + description = "A caustic substance commonly used in fertilizer or household cleaners." + reagent_state = GAS + color = "#404030" // rgb: 64, 64, 48 + +/datum/reagent/diethylamine + name = "Diethylamine" + id = "diethylamine" + description = "A secondary amine, useful as a plant nutrient and as building block for other compounds." + reagent_state = LIQUID + color = "#322D00" + + +// Ported from Bay as part of the Botany Update +// Allows you to make planks from any plant that has this reagent in it. +// Also vines with this reagent are considered dense. +/datum/reagent/woodpulp + name = "Wood Pulp" + id = "woodpulp" + description = "A mass of wood fibers." + reagent_state = LIQUID + color = "#B97A57" \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm new file mode 100644 index 00000000000..89bc66cda68 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm @@ -0,0 +1,597 @@ +/datum/reagent/toxin + name = "Toxin" + id = "toxin" + description = "A Toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/toxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(2) + ..() + return + + +/datum/reagent/spider_venom + name = "Spider venom" + id = "spidertoxin" + description = "A toxic venom injected by spacefaring arachnids." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/spider_venom/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1.5) + ..() + return + + +/datum/reagent/plasticide + name = "Plasticide" + id = "plasticide" + description = "Liquid plastic, do not eat." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/plasticide/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1.5) + ..() + return + + +/datum/reagent/minttoxin + name = "Mint Toxin" + id = "minttoxin" + description = "Useful for dealing with undesirable customers." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/minttoxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if (FAT in M.mutations) + M.gib() + ..() + return + + +/datum/reagent/slimejelly + name = "Slime Jelly" + id = "slimejelly" + description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." + reagent_state = LIQUID + color = "#801E28" // rgb: 128, 30, 40 + +/datum/reagent/slimejelly/on_mob_life(var/mob/living/M as mob) + if(prob(10)) + M << "\red Your insides are burning!" + M.adjustToxLoss(rand(20,60)*REM) + else if(prob(40)) + M.heal_organ_damage(5*REM,0) + ..() + return + +/datum/reagent/slimetoxin + name = "Mutation Toxin" + id = "mutationtoxin" + description = "A corruptive toxin produced by slimes." + reagent_state = LIQUID + color = "#13BC5E" // rgb: 19, 188, 94 + +/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(ishuman(M)) + var/mob/living/carbon/human/human = M + if(human.species.name != "Shadow") + M << "\red Your flesh rapidly mutates!" + M << "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids." + M << "\red Your body reacts violently to light. \green However, it naturally heals in darkness." + M << "Aside from your new traits, you are mentally unchanged and retain your prior obligations." + human.set_species("Shadow") + ..() + return + +/datum/reagent/aslimetoxin + name = "Advanced Mutation Toxin" + id = "amutationtoxin" + description = "An advanced corruptive toxin produced by slimes." + reagent_state = LIQUID + color = "#13BC5E" // rgb: 19, 188, 94 + +/datum/reagent/aslimetoxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(istype(M, /mob/living/carbon) && M.stat != DEAD) + M << "\red Your flesh rapidly mutates!" + if(M.notransform) return + M.notransform = 1 + M.canmove = 0 + M.icon = null + M.overlays.Cut() + M.invisibility = 101 + for(var/obj/item/W in M) + if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something + qdel(W) + continue + W.layer = initial(W.layer) + W.loc = M.loc + W.dropped(M) + var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc) + new_mob.a_intent = "harm" + new_mob.universal_speak = 1 + if(M.mind) + M.mind.transfer_to(new_mob) + else + new_mob.key = M.key + qdel(M) + ..() + return + + +/datum/reagent/mercury + name = "Mercury" + id = "mercury" + description = "A chemical element." + reagent_state = LIQUID + color = "#484848" // rgb: 72, 72, 72 + metabolization_rate = 0.2 + penetrates_skin = 1 + +/datum/reagent/mercury/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(prob(70)) + M.adjustBrainLoss(1) + ..() + return + + +/datum/reagent/chlorine + name = "Chlorine" + id = "chlorine" + description = "A chemical element." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + penetrates_skin = 1 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/chlorine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustFireLoss(1) + ..() + return + +/datum/reagent/fluorine + name = "Fluorine" + id = "fluorine" + description = "A highly-reactive chemical element." + reagent_state = GAS + color = "#6A6054" + penetrates_skin = 1 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/fluorine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustFireLoss(1) + M.adjustToxLoss(1*REM) + ..() + return + + +/datum/reagent/radium + name = "Radium" + id = "radium" + description = "Radium is an alkaline earth metal. It is extremely radioactive." + reagent_state = SOLID + color = "#C7C7C7" // rgb: 199,199,199 + metabolization_rate = 0.4 + penetrates_skin = 1 + +/datum/reagent/radium/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.apply_effect(4*REM,IRRADIATE,0) + // radium may increase your chances to cure a disease + if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs + var/mob/living/carbon/C = M + if(C.virus2.len) + for (var/ID in C.virus2) + var/datum/disease2/disease/V = C.virus2[ID] + if(prob(5)) + if(prob(50)) + M.apply_effect(50,IRRADIATE,0) // curing it that way may kill you instead + M.adjustToxLoss(100) + C.antibodies |= V.antigen + ..() + return + +/datum/reagent/radium/reaction_turf(var/turf/T, var/volume) + src = null + if(volume >= 3) + if(!istype(T, /turf/space)) + new /obj/effect/decal/cleanable/greenglow(T) + return + + +/datum/reagent/mutagen + name = "Unstable mutagen" + id = "mutagen" + description = "Might cause unpredictable mutations. Keep away from children." + reagent_state = LIQUID + color = "#04DF27" + metabolization_rate = 0.3 + +/datum/reagent/mutagen/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + if(!..()) return + if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. + src = null + if((method==TOUCH && prob(33)) || method==INGEST) + if(prob(98)) + randmutb(M) + else + randmutg(M) + domutcheck(M, null) + M.UpdateAppearance() + return + +/datum/reagent/mutagen/on_mob_life(var/mob/living/M as mob) + if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. + if(!M) M = holder.my_atom + M.apply_effect(2*REM,IRRADIATE,0) + if(prob(4)) + randmutb(M) + ..() + return + + +/datum/reagent/uranium + name ="Uranium" + id = "uranium" + description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." + reagent_state = SOLID + color = "#B8B8C0" // rgb: 184, 184, 192 + +/datum/reagent/uranium/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.apply_effect(2,IRRADIATE,0) + ..() + return + +/datum/reagent/uranium/reaction_turf(var/turf/T, var/volume) + src = null + if(volume >= 3) + if(!istype(T, /turf/space)) + new /obj/effect/decal/cleanable/greenglow(T) + + +/datum/reagent/lexorin + name = "Lexorin" + id = "lexorin" + description = "Lexorin temporarily stops respiration. Causes tissue damage." + reagent_state = LIQUID + color = "#52685D" + metabolization_rate = 0.2 + +/datum/reagent/lexorin/on_mob_life(var/mob/living/M as mob) + if(M.stat == 2.0) + return + if(!M) M = holder.my_atom + M.adjustToxLoss(1) + ..() + return + + +/datum/reagent/sacid + name = "Sulphuric acid" + id = "sacid" + description = "A strong mineral acid with the molecular formula H2SO4." + reagent_state = LIQUID + color = "#00D72B" + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/sacid/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustFireLoss(1) + ..() + return + +/datum/reagent/sacid/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(volume > 25) + + if(H.wear_mask) + H << "\red Your mask protects you from the acid!" + return + + if(H.head) + H << "\red Your helmet protects you from the acid!" + return + + if(!M.unacidable) + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.take_damage(20, 0) + H.UpdateDamageIcon() + H.emote("scream") + else + M.take_organ_damage(15,0) + else + M.take_organ_damage(15,0) + + if(method == INGEST) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(volume < 10) + M << "The greenish acidic substance stings you, but isn't concentrated enough to harm you!" + + if(volume >=10 && volume <=25) + if(!H.unacidable) + M.take_organ_damage(min(max(volume-10,2)*2,20),0) + M.emote("scream") + + + if(volume > 25) + if(!M.unacidable) + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.take_damage(20, 0) + H.UpdateDamageIcon() + H.emote("scream") + else + M.take_organ_damage(15,0) + +/datum/reagent/sacid/reaction_obj(var/obj/O, var/volume) + if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40)) + if(!O.unacidable) + var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) + I.desc = "Looks like this was \an [O] some time ago." + for(var/mob/M in viewers(5, O)) + M << "\red \the [O] melts." + qdel(O) + + +/datum/reagent/hellwater + name = "Hell Water" + id = "hell_water" + description = "YOUR FLESH! IT BURNS!" + process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. + +/datum/reagent/hellwater/on_mob_life(var/mob/living/M as mob) + M.fire_stacks = min(5,M.fire_stacks + 3) + M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire + M.adjustToxLoss(1) + M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? + M.adjustBrainLoss(5) + holder.remove_reagent(src.id, 1) + + +/datum/reagent/carpotoxin + name = "Carpotoxin" + id = "carpotoxin" + description = "A deadly neurotoxin produced by the dreaded spess carp." + reagent_state = LIQUID + color = "#003333" // rgb: 0, 51, 51 + +/datum/reagent/carpotoxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(2*REM) + ..() + return + + +/datum/reagent/staminatoxin + name = "Tirizene" + id = "tirizene" + description = "A toxin that affects the stamina of a person when injected into the bloodstream." + reagent_state = LIQUID + color = "#6E2828" + data = 13 + +/datum/reagent/staminatoxin/on_mob_life(var/mob/living/M) + M.adjustStaminaLoss(REM * data) + data = max(data - 1, 3) + ..() + + +/datum/reagent/spores + name = "Spore Toxin" + id = "spores" + description = "A toxic spore cloud which blocks vision when ingested." + color = "#9ACD32" + +/datum/reagent/spores/on_mob_life(var/mob/living/M as mob) + M.adjustToxLoss(0.5) + M.damageoverlaytemp = 60 + M.eye_blurry = max(M.eye_blurry, 3) + ..() + return + + +/datum/reagent/beer2 //disguised as normal beer for use by emagged brobots + name = "Beer" + id = "beer2" + description = "An alcoholic beverage made from malted grains, hops, yeast, and water." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/beer2/on_mob_life(var/mob/living/M as mob) + if(!data) + data = 1 + switch(data) + if(1 to 50) + M.sleeping += 1 + if(51 to INFINITY) + M.sleeping += 1 + M.adjustToxLoss((data - 50)*REM) + data++ + holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM) + ..() + return + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/* +/datum/reagent/nanomachines + name = "Nanomachines" + id = "nanomachines" + description = "Microscopic construction robots." + reagent_state = LIQUID + color = "#535E66" // rgb: 83, 94, 102 + +/datum/reagent/nanomachines/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + src = null + if( (prob(10) && method==TOUCH) || method==INGEST) + M.contract_disease(new /datum/disease/robotic_transformation(0),1) + +/datum/reagent/xenomicrobes + name = "Xenomicrobes" + id = "xenomicrobes" + description = "Microbes with an entirely alien cellular structure." + reagent_state = LIQUID + color = "#535E66" // rgb: 83, 94, 102 + +/datum/reagent/xenomicrobes/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + src = null + if( (prob(10) && method==TOUCH) || method==INGEST) + M.contract_disease(new /datum/disease/xeno_transformation(0),1) +*/ + +/datum/reagent/spore + name = "Blob Spores" + id = "spore" + description = "Spores of some blob creature thingy." + reagent_state = LIQUID + color = "#CE760A" // rgb: 206, 118, 10 + var/client/blob_client = null + var/blob_point_rate = 3 + +/datum/reagent/spore/on_mob_life(var/mob/living/M) + if(!M) M = holder.my_atom + if (holder.has_reagent("atrazine",45)) + holder.del_reagent("spore") + if (prob(1)) + M << "\red Your mouth tastes funny." + if (prob(1) && prob(25)) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(directory[ckey(C.key)]) + blob_client = directory[ckey(C.key)] + C.gib() + if(blob_client) + var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate) + if(core.overmind && core.overmind.mind) + core.overmind.mind.name = C.name + + return + +/datum/reagent/condensedcapsaicin + name = "Condensed Capsaicin" + id = "condensedcapsaicin" + description = "This shit goes in pepperspray." + reagent_state = LIQUID + color = "#B31008" // rgb: 179, 16, 8 + +/datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/victim = M + var/mouth_covered = 0 + var/eyes_covered = 0 + var/obj/item/safe_thing = null + if( victim.wear_mask ) + if ( victim.wear_mask.flags & MASKCOVERSEYES ) + eyes_covered = 1 + safe_thing = victim.wear_mask + if ( victim.wear_mask.flags & MASKCOVERSMOUTH ) + mouth_covered = 1 + safe_thing = victim.wear_mask + if( victim.head ) + if ( victim.head.flags & MASKCOVERSEYES ) + eyes_covered = 1 + safe_thing = victim.head + if ( victim.head.flags & MASKCOVERSMOUTH ) + mouth_covered = 1 + safe_thing = victim.head + if(victim.glasses) + eyes_covered = 1 + if ( !safe_thing ) + safe_thing = victim.glasses + if ( eyes_covered && mouth_covered ) + victim << "\red Your [safe_thing] protects you from the pepperspray!" + return + else if ( mouth_covered ) // Reduced effects if partially protected + victim << "\red Your [safe_thing] protect you from most of the pepperspray!" + if(prob(5)) + victim.emote("scream") + victim.eye_blurry = max(M.eye_blurry, 3) + victim.eye_blind = max(M.eye_blind, 1) + victim.confused = max(M.confused, 3) + victim.damageoverlaytemp = 60 + victim.Weaken(3) + victim.drop_item() + return + else if ( eyes_covered ) // Eye cover is better than mouth cover + victim << "\red Your [safe_thing] protects your eyes from the pepperspray!" + victim.eye_blurry = max(M.eye_blurry, 3) + victim.damageoverlaytemp = 30 + return + else // Oh dear :D + if(prob(5)) + victim.emote("scream") + victim << "\red You're sprayed directly in the eyes with pepperspray!" + victim.eye_blurry = max(M.eye_blurry, 5) + victim.eye_blind = max(M.eye_blind, 2) + victim.confused = max(M.confused, 6) + victim.damageoverlaytemp = 75 + victim.Weaken(5) + victim.drop_item() + +/datum/reagent/condensedcapsaicin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(prob(5)) + M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") + ..() + return + +/datum/reagent/frostoil + name = "Frost Oil" + id = "frostoil" + description = "A special oil that noticably chills the body. Extraced from Icepeppers." + reagent_state = LIQUID + color = "#B31008" // rgb: 139, 166, 233 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/frostoil/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!data) data = 1 + switch(data) + if(1 to 15) + M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT + if(holder.has_reagent("capsaicin")) + holder.remove_reagent("capsaicin", 5) + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(5,20) + if(15 to 25) + M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(10,20) + if(25 to INFINITY) + M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT + if(prob(1)) + M.emote("shiver") + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(15,20) + data++ + holder.remove_reagent(src.id, FOOD_METABOLISM) + ..() + return + +/datum/reagent/frostoil/reaction_turf(var/turf/simulated/T, var/volume) + for(var/mob/living/carbon/slime/M in T) + M.adjustToxLoss(rand(15,30)) diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/oldchem/reagents/reagents_water.dm new file mode 100644 index 00000000000..a94ab397cd8 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_water.dm @@ -0,0 +1,348 @@ +/* +// Frankly, this is just for chemicals that are sortof 'watery', which really didn't seem to fit under any other file +// Current chems: Water, Space Lube, Space Cleaner, Blood, Fish Water, Holy water +// +// +*/ + + + +/datum/reagent/water + name = "Water" + id = "water" + description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." + reagent_state = LIQUID + color = "#0064C8" // rgb: 0, 100, 200 + var/cooling_temperature = 2 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + +// Put out fire + if(method == TOUCH) + M.adjust_fire_stacks(-(volume / 10)) + if(M.fire_stacks <= 0) + M.ExtinguishMob() + return + +/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume) + if (!istype(T)) return + src = null + if(volume >= 3) + if(T.wet >= 1) return + T.wet = 1 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") + T.overlays += T.wet_overlay + + spawn(800) + if (!istype(T)) return + if(T.wet >= 2) return + T.wet = 0 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + + for(var/mob/living/carbon/slime/M in T) + M.apply_water() + + var/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot && !istype(T, /turf/space)) + var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) + lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + return + +/datum/reagent/water/reaction_obj(var/obj/O, var/volume) + src = null + var/turf/T = get_turf(O) + var/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot && !istype(T, /turf/space)) + var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) + lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube)) + var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O + if(!cube.wrapped) + cube.Expand() + // Dehydrated carp + if(istype(O,/obj/item/toy/carpplushie/dehy_carp)) + var/obj/item/toy/carpplushie/dehy_carp/dehy = O + dehy.Swell() // Makes a carp + return + + +/datum/reagent/lube + name = "Space Lube" + id = "lube" + description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity." + reagent_state = LIQUID + color = "#1BB1AB" + +/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume) + if (!istype(T)) return + src = null + if(volume >= 1) + if(T.wet >= 2) return + T.wet = 2 + spawn(800) + if (!istype(T)) return + T.wet = 0 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + return + + +/datum/reagent/space_cleaner + name = "Space cleaner" + id = "cleaner" + description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" + reagent_state = LIQUID + color = "#61C2C2" + +/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume) + if(istype(O,/obj/effect/decal/cleanable)) + qdel(O) + else + if(O) + O.clean_blood() + +/datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume) + if(volume >= 1) + T.overlays.Cut() + T.clean_blood() + for(var/obj/effect/decal/cleanable/C in src) + qdel(C) + + for(var/mob/living/carbon/slime/M in T) + M.adjustToxLoss(rand(5,10)) + +/datum/reagent/space_cleaner/reaction_turf(var/turf/simulated/S, var/volume) + if(volume >= 1) + S.dirt = 0 + +/datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.lip_style) + H.lip_style = null + H.update_body() + if(C.r_hand) + C.r_hand.clean_blood() + if(C.l_hand) + C.l_hand.clean_blood() + if(C.wear_mask) + if(C.wear_mask.clean_blood()) + C.update_inv_wear_mask(0) + if(ishuman(M)) + var/mob/living/carbon/human/H = C + if(H.head) + if(H.head.clean_blood()) + H.update_inv_head(0,0) + if(H.wear_suit) + if(H.wear_suit.clean_blood()) + H.update_inv_wear_suit(0,0) + else if(H.w_uniform) + if(H.w_uniform.clean_blood()) + H.update_inv_w_uniform(0,0) + if(H.shoes) + if(H.shoes.clean_blood()) + H.update_inv_shoes(0,0) + M.clean_blood() + ..() + return + + +/datum/reagent/blood + data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = null) + name = "Blood" + id = "blood" + reagent_state = LIQUID + color = "#C80000" // rgb: 200, 0, 0 + +/datum/reagent/blood/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + var/datum/reagent/blood/self = src + src = null + if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting... + var/list/vlist = self.data["virus2"] + if (vlist.len) + for (var/ID in vlist) + var/datum/disease2/disease/V = vlist[ID] + + if(method == TOUCH) + infect_virus2(M,V.getcopy()) + else + infect_virus2(M,V.getcopy(),1) //injected, force infection! + if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing + var/mob/living/carbon/C = M + C.antibodies |= self.data["antibodies"] + +/datum/reagent/blood/on_merge(var/data) + if(data["blood_colour"]) + color = data["blood_colour"] + return ..() + +/datum/reagent/blood/on_update(var/atom/A) + if(data["blood_colour"]) + color = data["blood_colour"] + return ..() + + + +/datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place + if(!istype(T)) return + var/datum/reagent/blood/self = src + src = null + if(!(volume >= 3)) return + //var/datum/disease/D = self.data["virus"] + if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human)) + var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here + if(!blood_prop) //first blood! + blood_prop = new(T) + blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"] + + if(self.data["virus2"]) + blood_prop.virus2 = virus_copylist(self.data["virus2"]) + + else if(istype(self.data["donor"], /mob/living/carbon/alien)) + var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T + if(!blood_prop) + blood_prop = new(T) + blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*" + return + + +/datum/reagent/fishwater + name = "Fish Water" + id = "fishwater" + description = "Smelly water from a fish tank. Gross!" + reagent_state = LIQUID + color = "#757547" + +/datum/reagent/fishwater/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == INGEST) + M << "Oh god, why did you drink that?" + +/datum/reagent/fishwater/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version) + if(prob(50)) // 50/50 chance of green vomit vs normal vomit + M.fakevomit(1) + else + M.fakevomit(0) + ..() + return + + +/datum/reagent/holywater + name = "Water" + id = "holywater" + description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." + reagent_state = LIQUID + color = "#0064C8" // rgb: 0, 100, 200 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/holywater/on_mob_life(var/mob/living/M as mob) + if(!data) data = 1 + data++ + M.jitteriness = max(M.jitteriness-5,0) + if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec + if (!M.stuttering) M.stuttering = 1 + M.stuttering += 4 + M.Dizzy(5) + if(iscultist(M) && prob(5)) + M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu")) + if(data >= 75 && prob(33)) // 30 units, 150 seconds + if (!M.confused) M.confused = 1 + M.confused += 3 + if(iscultist(M)) + ticker.mode.remove_cultist(M.mind) + holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? + M.jitteriness = 0 + M.stuttering = 0 + M.confused = 0 + if(ishuman(M)) . + if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80)) + switch(data) + if(1 to 4) + M << "Something sizzles in your veins!" + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + if(5 to 12) + M << "You feel an intense burning inside of you!" + M.adjustFireLoss(1) + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + if(13 to INFINITY) + M << "You suddenly ignite in a holy fire!" + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] suddenly bursts into flames!", M), 1) + M.fire_stacks = min(5,M.fire_stacks + 3) + M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire + M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard? + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + ..() + return + + +/datum/reagent/holywater/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + // Vampires have their powers weakened by holy water applied to the skin. + if(ishuman(M)) + if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers)) + var/mob/living/carbon/human/H=M + if(method == TOUCH) + if(H.wear_mask) + H << "\red Your mask protects you from the holy water!" + return + else if(H.head) + H << "\red Your helmet protects you from the holy water!" + return + else + M << "Something holy interferes with your powers!" + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + return + + +/datum/reagent/holywater/reaction_turf(var/turf/simulated/T, var/volume) + ..() + if(!istype(T)) return + if(volume>=10) + for(var/obj/effect/rune/R in T) + qdel(R) + T.Bless() + +/* +/datum/reagent/vaccine + //data must contain virus type + name = "Vaccine" + id = "vaccine" + reagent_state = LIQUID + color = "#C81040" // rgb: 200, 16, 64 + +/datum/reagent/vaccine/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + var/datum/reagent/vaccine/self = src + src = null + if(self.data&&method == INGEST) + for(var/datum/disease/D in M.viruses) + if(istype(D, /datum/disease/advance)) + var/datum/disease/advance/A = D + if(A.GetDiseaseID() == self.data) + D.cure() + else + if(D.type == self.data) + D.cure() + + M.resistances += self.data + return +*/ \ No newline at end of file diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index cd306a78e49..6c3b0db41e0 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -12,60 +12,60 @@ var/amount_per_transfer_from_this = 10 var/possible_transfer_amounts = list(10,25,50,100) - attackby(obj/item/weapon/W as obj, mob/user as mob, params) +/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + return + +/obj/structure/reagent_dispensers/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + if (!possible_transfer_amounts) + src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + ..() + +/obj/structure/reagent_dispensers/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\blue It contains:" + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + usr << "\blue [R.volume] units of [R.name]" + else + usr << "\blue Nothing." + +/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set category = "Object" + set src in view(1) + if(usr.stat || !usr.canmove || usr.restrained()) return + var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts + if (N) + amount_per_transfer_from_this = N - New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src - if (!possible_transfer_amounts) - src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT - ..() - - examine() - set src in view() - ..() - if (!(usr in view(2)) && usr!=src.loc) return - usr << "\blue It contains:" - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - usr << "\blue [R.volume] units of [R.name]" - else - usr << "\blue Nothing." - - verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - if(usr.stat || !usr.canmove || usr.restrained()) +/obj/structure/reagent_dispensers/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) return - var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts - if (N) - amount_per_transfer_from_this = N - - ex_act(severity) - switch(severity) - if(1.0) + if(2.0) + if (prob(50)) + new /obj/effect/effect/water(src.loc) qdel(src) return - if(2.0) - if (prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - else - return + if(3.0) + if (prob(5)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + else + return - blob_act() - if(prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) +/obj/structure/reagent_dispensers/blob_act() + if(prob(50)) + new /obj/effect/effect/water(src.loc) + qdel(src) @@ -80,9 +80,11 @@ icon = 'icons/obj/objects.dmi' icon_state = "watertank" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("water",1000) + +/obj/structure/reagent_dispensers/watertank/New() + ..() + reagents.add_reagent("water",1000) + /obj/structure/reagent_dispensers/fueltank name = "fueltank" @@ -91,22 +93,23 @@ icon_state = "weldtank" amount_per_transfer_from_this = 10 var/obj/item/device/assembly_holder/rig = null - New() - ..() - reagents.add_reagent("fuel",1000) - bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) - if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) - message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.") - log_game("[key_name(Proj.firer)] triggered a fueltank explosion.") - explode() +/obj/structure/reagent_dispensers/fueltank/New() + ..() + reagents.add_reagent("fuel",1000) - blob_act() - explosion(src.loc,0,1,5,7,10, flame_range = 5) +/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) + if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) + message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.") + log_game("[key_name(Proj.firer)] triggered a fueltank explosion.") + explode() - ex_act() - explode() +/obj/structure/reagent_dispensers/fueltank/blob_act() + explosion(src.loc,0,1,5,7,10, flame_range = 5) + +/obj/structure/reagent_dispensers/fueltank/ex_act() + explode() /obj/structure/reagent_dispensers/fueltank/examine() set src in view() @@ -180,6 +183,7 @@ if(rig) rig.process_movement() + /obj/structure/reagent_dispensers/peppertank name = "Pepper Spray Refiller" desc = "Refill pepper spray canisters." @@ -188,9 +192,10 @@ anchored = 1 density = 0 amount_per_transfer_from_this = 45 - New() - ..() - reagents.add_reagent("condensedcapsaicin",1000) + +/obj/structure/reagent_dispensers/peppertank/New() + ..() + reagents.add_reagent("condensedcapsaicin",1000) /obj/structure/reagent_dispensers/water_cooler @@ -201,9 +206,10 @@ icon_state = "water_cooler" possible_transfer_amounts = null anchored = 1 - New() - ..() - reagents.add_reagent("water",500) + +/obj/structure/reagent_dispensers/water_cooler/New() + ..() + reagents.add_reagent("water",500) /obj/structure/reagent_dispensers/beerkeg @@ -212,9 +218,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "beertankTEMP" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/New() + ..() + reagents.add_reagent("beer",1000) /obj/structure/reagent_dispensers/beerkeg/blob_act() explosion(src.loc,0,3,5,7,10) @@ -229,9 +236,9 @@ anchored = 1 density = 0 - New() - ..() - reagents.add_reagent("virusfood", 1000) +/obj/structure/reagent_dispensers/virusfood/New() + ..() + reagents.add_reagent("virusfood", 1000) /obj/structure/reagent_dispensers/spacecleanertank name = "space cleaner refiller" @@ -241,6 +248,7 @@ anchored = 1 density = 0 amount_per_transfer_from_this = 250 - New() - ..() - reagents.add_reagent("cleaner",5000) + +/obj/structure/reagent_dispensers/spacecleanertank/New() + ..() + reagents.add_reagent("cleaner",5000) diff --git a/paradise.dme b/paradise.dme index b8184ad6713..6b0e84f845d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1624,8 +1624,6 @@ #include "code\modules\reagents\Chemistry-Holder.dm" #include "code\modules\reagents\Chemistry-Machinery.dm" #include "code\modules\reagents\Chemistry-Readme.dm" -#include "code\modules\reagents\Chemistry-Reagents.dm" -#include "code\modules\reagents\Chemistry-Recipes.dm" #include "code\modules\reagents\dartgun.dm" #include "code\modules\reagents\grenade_launcher.dm" #include "code\modules\reagents\reagent_containers.dm" @@ -1642,6 +1640,27 @@ #include "code\modules\reagents\newchem\patch.dm" #include "code\modules\reagents\newchem\pyro.dm" #include "code\modules\reagents\newchem\toxins.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\_chemical_reaction_base.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_drink.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_food.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_harm.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_med.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_misc.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_slime.dm" +#include "code\modules\reagents\oldchem\reagents\__oldchem_defines.dm" +#include "code\modules\reagents\oldchem\reagents\_reagent_base.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_admin.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_drugs.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_flammable.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_food.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_med.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_misc.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_toxin.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_water.dm" +#include "code\modules\reagents\oldchem\reagents\drink\reagents_alcohol.dm" +#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink.dm" +#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_base.dm" +#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_cold.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" From e30ae7dbc33592f4519bd92f38bea74e4dc8a946 Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Sun, 6 Sep 2015 21:04:51 -0700 Subject: [PATCH 22/25] Whoops, tabbing. --- .../chemical_reaction_misc.dm | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm index 020caed47ee..f884ef6cb63 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm @@ -141,17 +141,17 @@ return */ - plastication - name = "Plastic" - id = "solidplastic" - result = null - required_reagents = list("facid" = 10, "plasticide" = 20) - result_amount = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic - M.amount = 10 - M.loc = get_turf(holder.my_atom) - return + plastication + name = "Plastic" + id = "solidplastic" + result = null + required_reagents = list("facid" = 10, "plasticide" = 20) + result_amount = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic + M.amount = 10 + M.loc = get_turf(holder.my_atom) + return From fc82cc69760d395ad7fa1ce639f1539a8434fe2a Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 7 Sep 2015 13:52:37 -0400 Subject: [PATCH 23/25] typo --- code/modules/reagents/newchem/medicine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index add5d264d4f..a54072e9bbb 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -828,7 +828,7 @@ datum/reagent/stimulants/reagent_deleted(var/mob/living/M as mob) /datum/reagent/medicine/stimulative_agent name = "Stimulative Agent" id = "stimulative_agent" - description = "An illegal compound that darmatically enhances the body's performance and healing capabilities." + description = "An illegal compound that dramatically enhances the body's performance and healing capabilities." color = "#C8A5DC" metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 60 From a8f41c69fb11e0103f62da678692ef359bdb303e Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Mon, 7 Sep 2015 16:55:40 -0400 Subject: [PATCH 24/25] sprite-revert --- code/modules/recycling/sortingmachinery.dm | 2 +- icons/obj/device.dmi | Bin 31998 -> 31660 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 11ca778f6c0..07c245d889d 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -190,7 +190,7 @@ /obj/item/device/destTagger name = "destination tagger" desc = "Used to set the destination of properly wrapped packages." - icon_state = "cargotagger" + icon_state = "dest_tagger" var/currTag = 0 //The whole system for the sorttype var is determined based on the order of this list, //disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 471cad514e521e68f9b7156e4b38d776bb878843..6ee1fbd0fd3bf2a22465f0618cbf48da81437556 100644 GIT binary patch delta 10618 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 Date: Mon, 7 Sep 2015 14:16:59 -0700 Subject: [PATCH 25/25] fix sock sql --- code/modules/client/preferences_mysql.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm index df57e988e1b..8470ece80a9 100644 --- a/code/modules/client/preferences_mysql.dm +++ b/code/modules/client/preferences_mysql.dm @@ -273,8 +273,8 @@ organ_data='[organlist]', rlimb_data='[rlimblist]', nanotrasen_relation='[nanotrasen_relation]', - speciesprefs='[speciesprefs]' - socks='[socks]', + speciesprefs='[speciesprefs]', + socks='[socks]' WHERE ckey='[C.ckey]' AND slot='[default_slot]'"} )