Merge branch 'master' into development

This commit is contained in:
skull132
2017-04-08 23:20:02 +03:00
34 changed files with 438 additions and 239 deletions
+1
View File
@@ -325,6 +325,7 @@
#include "code\game\dna\dna_modifier.dm"
#include "code\game\dna\genes\disabilities.dm"
#include "code\game\dna\genes\gene.dm"
#include "code\game\dna\genes\monkey.dm"
#include "code\game\dna\genes\powers.dm"
#include "code\game\gamemodes\antagspawner.dm"
#include "code\game\gamemodes\events.dm"
+21 -1
View File
@@ -51,7 +51,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/storage/box/swabs,
/obj/item/weapon/storage/box/swabs,
/obj/item/weapon/storage/box/slides,
/obj/item/weapon/reagent_containers/spray/luminol)
/obj/item/weapon/reagent_containers/spray/luminol,
/obj/item/device/uv_light)
cost = 30
containertype = /obj/structure/closet/crate
containername = "Auxiliary forensic tools"
@@ -138,6 +139,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron,
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager,
/obj/item/weapon/reagent_containers/food/drinks/bottle/sarezhiwine,
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
/obj/item/weapon/lipstick/random,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale,
@@ -206,6 +208,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Atmospherics"
/datum/supply_packs/inflatable
name = "Inflatable barriers"
contains = list(/obj/item/weapon/storage/briefcase/inflatable,
@@ -1092,6 +1096,22 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "Sterile equipment crate"
group = "Medical"
/datum/supply_packs/beer
contains = list(/obj/structure/reagent_dispensers/beerkeg)
name = "Beer Keg"
cost = 10
containertype = /obj/structure/largecrate
containername = "Beer Crate"
group = "Hospitality"
/datum/supply_packs/xuizi
contains = list(/obj/structure/reagent_dispensers/xuizikeg)
name = "Xuizi Juice Keg"
cost = 20
containertype = /obj/structure/largecrate
containername = "Xuizi Juice Crate"
group = "Hospitality"
/datum/supply_packs/randomised/pizza
num_contained = 5
contains = list(/obj/item/pizzabox/margherita,
+23 -165
View File
@@ -1,175 +1,33 @@
/datum/dna/gene/monkey
name="Monkey"
name = "Monkey"
/datum/dna/gene/monkey/New()
block=MONKEYBLOCK
block = MONKEYBLOCK
/datum/dna/gene/monkey/can_activate(var/mob/M,var/flags)
return istype(M, /mob/living/carbon/human) || istype(M,/mob/living/carbon/monkey)
return ishuman(M)
/datum/dna/gene/monkey/activate(var/mob/living/M, var/connected, var/flags)
if(!istype(M,/mob/living/carbon/human))
//testing("Cannot monkey-ify [M], type is [M.type].")
return
var/mob/living/carbon/human/H = M
H.transforming = 1
var/list/implants = list() //Try to preserve implants.
for(var/obj/item/weapon/implant/W in H)
implants += W
W.loc = null
if(!connected)
for(var/obj/item/W in (H.contents-implants))
if (W==H.w_uniform) // will be teared
continue
H.drop_from_inventory(W)
M.transforming = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
var/atom/movable/overlay/animation = new( M.loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
flick("h2monkey", animation)
sleep(48)
qdel(animation)
var/mob/living/carbon/monkey/O = null
if(H.species.primitive)
O = new H.species.primitive(src)
/datum/dna/gene/monkey/activate(var/mob/living/carbon/C)
var/mob/living/carbon/human/H
if(ishuman(C))
H = C
else
return
if(!islesserform(H))
H = H.monkeyize(1)
H.name = H.species.get_random_name() // keep the realname
/datum/dna/gene/monkey/deactivate(var/mob/living/carbon/C)
var/mob/living/carbon/human/H
if(ishuman(C))
H = C
else
H.gib() //Trying to change the species of a creature with no primitive var set is messy.
return
if(M)
if (M.dna)
O.dna = M.dna.Clone()
M.dna = null
if(islesserform(H))
H = H.humanize(1) // woo transform procs!
if (M.suiciding)
O.suiciding = M.suiciding
M.suiciding = null
for(var/datum/disease/D in M.viruses)
O.viruses += D
D.affected_mob = O
M.viruses -= D
for(var/obj/T in (M.contents-implants))
qdel(T)
O.loc = M.loc
if(M.mind)
M.mind.transfer_to(O) //transfer our mind to the cute little monkey
if (connected) //inside dna thing
var/obj/machinery/dna_scannernew/C = connected
O.loc = C
C.occupant = O
connected = null
O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6))
O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss())
O.adjustToxLoss(M.getToxLoss() + 20)
O.adjustOxyLoss(M.getOxyLoss())
O.stat = M.stat
O.a_intent = I_HURT
for (var/obj/item/weapon/implant/I in implants)
I.loc = O
I.implanted = O
// O.update_icon = 1 //queue a full icon update at next life() call
qdel(M)
return
/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags)
if(!istype(M,/mob/living/carbon/monkey))
//testing("Cannot humanize [M], type is [M.type].")
return
var/mob/living/carbon/monkey/Mo = M
Mo.transforming = 1
var/list/implants = list() //Still preserving implants
for(var/obj/item/weapon/implant/W in Mo)
implants += W
W.loc = null
if(!connected)
for(var/obj/item/W in (Mo.contents-implants))
Mo.drop_from_inventory(W)
M.transforming = 1
M.canmove = 0
M.icon = null
M.invisibility = 101
var/atom/movable/overlay/animation = new( M.loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
flick("monkey2h", animation)
sleep(48)
qdel(animation)
var/mob/living/carbon/human/O
if(Mo.greaterform)
O = new(src, Mo.greaterform)
else
O = new(src)
if (M.dna.GetUIState(DNA_UI_GENDER))
O.gender = FEMALE
else
O.gender = MALE
if (M)
if (M.dna)
O.dna = M.dna.Clone()
M.dna = null
if (M.suiciding)
O.suiciding = M.suiciding
M.suiciding = null
for(var/datum/disease/D in M.viruses)
O.viruses += D
D.affected_mob = O
M.viruses -= D
//for(var/obj/T in M)
// qdel(T)
O.loc = M.loc
if(M.mind)
M.mind.transfer_to(O) //transfer our mind to the human
if (connected) //inside dna thing
var/obj/machinery/dna_scannernew/C = connected
O.loc = C
C.occupant = O
connected = null
var/i
while (!i)
var/randomname
if (O.gender == MALE)
randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
else
randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names)))
if (findname(randomname))
continue
else
O.real_name = randomname
O.dna.real_name = randomname
i++
O.UpdateAppearance()
O.take_overall_damage(M.getBruteLoss(), M.getFireLoss())
O.adjustToxLoss(M.getToxLoss())
O.adjustOxyLoss(M.getOxyLoss())
O.stat = M.stat
for (var/obj/item/weapon/implant/I in implants)
I.loc = O
I.implanted = O
// O.update_icon = 1 //queue a full icon update at next life() call
qdel(M)
return
if(!H.dna.real_name)
var/randomname = H.species.get_random_name()
H.real_name = randomname
H.dna.real_name = randomname
@@ -92,32 +92,89 @@
if(!ability_prechecks(user, price))
return
var/title = input("Select message title: ")
var/text = input("Select message text: ")
if(!title || !text || !ability_pay(user, price))
user << "Hack Aborted"
return
var/reporttitle
var/reportbody
var/reporttype = input(usr, "Choose whether to use a template or custom report.", "Create Command Report") in list("Template", "Custom", "Cancel")
switch(reporttype)
if("Template")
establish_db_connection(dbcon)
if (!dbcon.IsConnected())
src << "<span class='notice'>Unable to connect to the database.</span>"
return
var/DBQuery/query = dbcon.NewQuery("SELECT title, message FROM ss13_ccia_general_notice_list WHERE deleted_at IS NULL")
query.Execute()
log_ability_use(user, "advanced encryption hack")
var/list/template_names = list()
var/list/templates = list()
if(prob(50) && user.hack_can_fail)
user << "Hack Failed."
if(prob(5))
user.hack_fails ++
announce_hack_failure(user, "quantum message relay")
log_ability_use(user, "elite encryption hack (CRITFAIL - title: [title])")
while (query.NextRow())
template_names += query.item[1]
templates[query.item[1]] = query.item[2]
// Catch empty list
if (!templates.len)
src << "<span class='notice'>There are no templates in the database.</span>"
return
reporttitle = input(usr, "Please select a command report template.", "Create Command Report") in template_names
reportbody = templates[reporttitle]
if("Custom")
reporttitle = sanitizeSafe(input(usr, "Pick a title for the report.", "Title") as text|null)
if(!reporttitle)
reporttitle = "NanoTrasen Update"
reportbody = sanitize(input(usr, "Please enter anything you want. Anything. Serious.", "Body", "") as message|null, extra = 0)
if(!reportbody)
return
else
return
log_ability_use(user, "elite encryption hack (FAIL - title: [title])")
return
log_ability_use(user, "elite encryption hack (SUCCESS - title: [title])")
command_announcement.Announce(text, title)
for (var/obj/machinery/computer/communications/C in machines)
if(! (C.stat & (BROKEN|NOPOWER) ) )
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
P.name = "[command_name()] Update"
P.info = replacetext(text, "\n", "<br/>")
P.update_space(P.info)
P.update_icon()
if (reporttype == "Template")
sanitizeSafe(alert(usr, "Would you like it to appear as if CCIAMS made the report?",,"Yes","No"))
if ("Yes")
reportbody += "\n\n- CCIAMS, [commstation_name()]"
else
switch(alert("Should this be announced to the general population?",,"Yes","No"))
if("Yes")
if(!reporttitle || !reportbody || !ability_pay(user, price))
user << "Hack Aborted due to no title, no body message, or you do not have enough CPU for this action."
return
log_ability_use(user, "advanced encryption hack")
if(prob(50) && user.hack_can_fail)
user << "Hack Failed."
if(prob(5))
user.hack_fails ++
announce_hack_failure(user, "quantum message relay")
log_ability_use(user, "advanced encryption hack (CRITFAIL - title: [reporttitle])")
return
log_ability_use(user, "advanced encryption hack (FAIL - title: [reporttitle])")
return
log_ability_use(user, "advanced encryption hack (SUCCESS - title: [reporttitle])")
command_announcement.Announce("[reportbody]", reporttitle, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
if("No")
if(!reporttitle || !reportbody || !ability_pay(user, price))
user << "Hack Aborted due to no title, no body message, or you do not have enough CPU for this action."
return
log_ability_use(user, "advanced encryption hack")
if(prob(50) && user.hack_can_fail)
user << "Hack Failed."
if(prob(5))
user.hack_fails ++
announce_hack_failure(user, "quantum message relay")
log_ability_use(user, "advanced encryption hack (CRITFAIL - title: [reporttitle])")
return
log_ability_use(user, "advanced encryption hack (FAIL - title: [reporttitle])")
return
log_ability_use(user, "advanced encryption hack (SUCCESS - title: [reporttitle])")
world << "\red New [company_name] Update available at all communication consoles."
world << sound('sound/AI/commandreport.ogg')
post_comm_message(reporttitle, reportbody)
/datum/game_mode/malfunction/verb/elite_encryption_hack()
set category = "Software"
@@ -219,4 +276,4 @@
user.verbs += new/datum/game_mode/malfunction/verb/ai_destroy_station()
// END ABILITY VERBS
// END ABILITY VERBS
@@ -680,7 +680,7 @@
T.mind.vampire.master = src
vampire.thralls += T
T << "<span class='notice'>You have been forced into a blood bond by [T.mind.vampire.master], and are thus their thrall. While a thrall may feel a myriad of emotions towards their master, ranging from fear, to hate, to love; the supernatural bond between them still forces the thrall to obey their master, and to listen to the master's commands.<br><br>You must obey your master's orders, you must protect them, you cannot harm them.</span>"
src << "<span class='notice'>You have completed the thralling process. They are now your slave and will obey your commands.</span>"
admin_attack_log(src, T, "enthralled [key_name(T)]", "was enthralled by [key_name(src)]", "successfully enthralled")
vampire.use_blood(150)
+3 -3
View File
@@ -62,7 +62,7 @@
economic_modifier = 5
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
minimal_player_age = 5
minimal_player_age = 7
equip(var/mob/living/carbon/human/H)
if(!H) return 0
@@ -106,7 +106,7 @@
economic_modifier = 5
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
minimal_player_age = 3
minimal_player_age = 7
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
@@ -153,7 +153,7 @@
economic_modifier = 4
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks)
minimal_player_age = 3
minimal_player_age = 7
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
+8 -13
View File
@@ -63,7 +63,7 @@
target << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered."
target.ResetSecurityCodes()
else
message_admins("<span class='notice'>[key_name_admin(usr)] detonated [target.name]!</span>")
message_admins("[key_name_admin(usr)] detonated [target.name]!")
log_game("[key_name(usr)] detonated [target.name]!",ckey=key_name(usr))
target << "<span class='danger'>Self-destruct command received.</span>"
spawn(10)
@@ -92,15 +92,10 @@
if(!target || !istype(target))
return
message_admins("<span class='notice'>[key_name_admin(usr)] [target.canmove ? "locked down" : "released"] [target.name]!</span>")
log_game("[key_name(usr)] [target.canmove ? "locked down" : "released"] [target.name]!",ckey=key_name(usr))
target.canmove = !target.canmove
if (target.lockcharge)
target.lockcharge = !target.lockcharge
target << "Your lockdown has been lifted!"
else
target.lockcharge = !target.lockcharge
target << "You have been locked down!"
target.SetLockdown(!target.lockcharge) // Toggle.
message_admins("[key_name_admin(usr)] [target.lockcharge ? "locked down" : "released"] [target.name]!")
log_game("[key_name(usr)] [target.lockcharge ? "locked down" : "released"] [target.name]!",ckey=key_name(usr))
target << (target.lockcharge ? "You have been locked down!" : "Your lockdown has been lifted!")
// Remotely hacks the cyborg. Only antag AIs can do this and only to linked cyborgs.
else if (href_list["hack"])
@@ -124,7 +119,7 @@
if(!target || !istype(target))
return
message_admins("<span class='notice'>[key_name_admin(usr)] emagged [target.name] using robotic console!</span>")
message_admins("[key_name_admin(usr)] emagged [target.name] using robotic console!")
log_game("[key_name(usr)] emagged [target.name] using robotic console!",ckey=key_name(usr))
target.emagged = 1
target << "<span class='notice'>Failsafe protocols overriden. New tools available.</span>"
@@ -147,7 +142,7 @@
user << "Self-destruct aborted - safety active"
return
message_admins("<span class='notice'>[key_name_admin(usr)] detonated all cyborgs!</span>")
message_admins("[key_name_admin(usr)] detonated all cyborgs!")
log_game("[key_name(usr)] detonated all cyborgs!",ckey=key_name(usr))
for(var/mob/living/silicon/robot/R in mob_list)
@@ -179,7 +174,7 @@
robot["name"] = R.name
if(R.stat)
robot["status"] = "Not Responding"
else if (!R.canmove)
else if (R.lockcharge) // changed this from !R.canmove to R.lockcharge because of issues with lockdown and chairs
robot["status"] = "Lockdown"
else
robot["status"] = "Operational"
+2 -1
View File
@@ -715,7 +715,8 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/chartreusegreen = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/chartreuseyellow =5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cremewhite = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/brandy = 4,
/obj/item/weapon/reagent_containers/food/drinks/bottle/guinnes = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/drambuie = 4,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cremeyvette = 4)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cremeyvette = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/xuizijuice = 8,
/obj/item/weapon/reagent_containers/food/drinks/bottle/sarezhiwine = 2, /obj/item/weapon/reagent_containers/food/drinks/bottle/victorygin = 2)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/tea = 10)
vend_delay = 15
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
@@ -329,6 +329,14 @@
C.holder.original_mob = null
suicide()
/mob/living/carbon/human/bst/verb/tgm()
set name = "Toggle Godmode"
set desc = "Enable or disable god mode. For testing things that require you to be vulnerable."
set category = "BST"
status_flags ^= GODMODE
src << span("notice", "God mode is now [status_flags & GODMODE ? "enabled" : "disabled"]")
//Equipment. All should have canremove set to 0
//All items with a /bst need the attack_hand() proc overrided to stop people getting overpowered items.
+7 -4
View File
@@ -115,7 +115,7 @@ var/list/global/random_stock_common = list(
"cosmetic" = 2.2,
"suitcooler" = 1.2,
"officechair" = 1.2,
"booze" = 3.5,
"booze" = 3.7,
"plant" = 3.5,
"bag" = 2,
"extinguish" = 2.2,
@@ -795,7 +795,7 @@ var/list/global/random_stock_large = list(
break
new /obj/structure/bed/chair/office/dark(T)
if ("booze")
if (prob(8))//Spare keg of beer
if (prob(8))//Spare keg of beer or xuizi juice
var/turf/T = get_turf(L)
if (!turf_clear(T))
for (var/turf/U in range(T,1))
@@ -803,7 +803,10 @@ var/list/global/random_stock_large = list(
T = U
break
new /obj/structure/reagent_dispensers/beerkeg(T)
if (prob(80))
new /obj/structure/reagent_dispensers/beerkeg(T)
else
new /obj/structure/reagent_dispensers/xuizikeg(T)
else
var/list/drinks = typesof(/obj/item/weapon/reagent_containers/food/drinks/bottle)
drinks -= /obj/item/weapon/reagent_containers/food/drinks/bottle
@@ -1657,7 +1660,7 @@ var/list/global/random_stock_large = list(
if ("bike")
new /obj/vehicle/bike(L)
if ("sol")
if (prob(50))
new /obj/structure/closet/sol/navy(L)
@@ -241,8 +241,12 @@
if(target_mob != H)
H << "<span class='danger'>You inject [target_mob] with [chems_to_use] unit\s of [charge.display_name].</span>"
target_mob << "<span class='danger'>You feel a rushing in your veins as [chems_to_use] unit\s of [charge.display_name] [chems_to_use == 1 ? "is" : "are"] injected.</span>"
target_mob.reagents.add_reagent(charge.display_name, chems_to_use)
if(target_mob.is_physically_disabled())
target_mob.reagents.add_reagent(charge.display_name, chems_to_use)
else
target_mob << "<span class='danger'>You feel a rushing in your veins as [chems_to_use] unit\s of [charge.display_name] [chems_to_use == 1 ? "is" : "are"] injected.</span>"
target_mob.reagents.add_reagent(charge.display_name, chems_to_use)
charge.charges -= chems_to_use
if(charge.charges < 0) charge.charges = 0
+1 -8
View File
@@ -21,16 +21,9 @@ datum/event/viral_infection/setup()
viruses += D
datum/event/viral_infection/announce()
var/level
if (severity == EVENT_LEVEL_MUNDANE)
return
else if (severity == EVENT_LEVEL_MODERATE)
level = pick("one", "two", "three", "four")
else
level = "five"
if (severity == EVENT_LEVEL_MAJOR || prob(60))
command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
datum/event/viral_infection/start()
if(!viruses.len) return
+1
View File
@@ -569,6 +569,7 @@ I said no!
items = list()
result = /obj/item/weapon/reagent_containers/food/snacks/slimesoup
/datum/recipe/boiledslimeextract
reagents = list("water" = 5)
items = list(
@@ -1128,7 +1128,7 @@
else
usr << "<span class='warning'>You failed to check the pulse. Try again.</span>"
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour)
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/kpg=0)
if(!dna)
if(!new_species)
@@ -1180,7 +1180,7 @@
species.create_organs(src)
species.handle_post_spawn(src)
species.handle_post_spawn(src,kpg) // should be zero by default
maxHealth = species.total_health
@@ -12,7 +12,7 @@
#define BASE_DIZZY 100
#define ALCOHOL_FILTRATION_RATE 0.02//The base rate at which intoxication decreases per proc. this is actually multiplied by 3 most of the time if the liver is healthy
#define ALCOHOL_FILTRATION_RATE 0.015//The base rate at which intoxication decreases per proc. this is actually multiplied by 3 most of the time if the liver is healthy
#define BASE_VOMIT_CHANCE 2
#define VOMIT_CHANCE_SCALE 0.2//An extra 1% for every 5 units over the vomiting threshold
@@ -26,6 +26,17 @@ var/mob/living/carbon/human/alcohol_clumsy = 0
intoxication = 0
return
//Godmode messes some things up, so no more BSTs getting drunk unless they toggle it off
if (status_flags & GODMODE)
intoxication = 0 //Zero out intoxication but don't return, let the rest of this function run to remove any residual effects
slurring = 0
confused = 0
eye_blurry = 0
drowsyness = 0
paralysis = 0
sleeping = 0
//Many of these parameters normally tick down in life code, but some parts of that code don't run in godmode, so this prevents a BST being stuck with blurred vision
if(intoxication > AE_DIZZY*SR) // Early warning
if (dizziness == 0)
src << "<span class='notice'>The room starts spinning!</span>"
+2 -3
View File
@@ -182,6 +182,8 @@
if(!(sdisabilities & BLIND))
if(equipment_tint_total >= TINT_BLIND) // Covered eyes, heal faster
eye_blurry = max(eye_blurry-2, 0)
else
eye_blurry = max(eye_blurry-1, 0)
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 1))
@@ -916,9 +918,6 @@
if (intoxication)
handle_intoxication()
else if (alcohol_clumsy)//This var is defined in intoxication.dm, its set true when alcohol has caused clumsiness
mutations.Remove(CLUMSY)
alcohol_clumsy = 0
if(status_flags & GODMODE) return 0 //godmode
@@ -317,13 +317,18 @@
H.verbs |= verb_path
return
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H,var/kpg = 0) //Handles anything not already covered by basic species assignment. Keepgene value should only be used by genetics.
add_inherent_verbs(H)
H.mob_bump_flag = bump_flag
H.mob_swap_flags = swap_flags
H.mob_push_flags = push_flags
H.pass_flags = pass_flags
H.mob_size = mob_size
if(!kpg)
if(islesserform(H))
H.dna.SetSEState(MONKEYBLOCK,1)
else
H.dna.SetSEState(MONKEYBLOCK,0)
/datum/species/proc/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0) //Handles any species-specific death events (such as dionaea nymph spawns).
return
@@ -60,13 +60,24 @@
icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
greater_form = "Tajaran"
greater_form = "Tajara"
default_language = "Farwa"
flesh_color = "#AFA59E"
base_color = "#333333"
tail = "farwatail"
holder_type = /obj/item/weapon/holder/monkey/farwa
/datum/species/monkey/tajaran/get_random_name()
return "farwa ([rand(100,999)])" // HACK HACK HACK, oh lords of coding please forgive me!
/datum/species/monkey/tajaran/m_sai
name = "M'sai Farwa"
greater_form = "M'sai Tajara"
/datum/species/monkey/tajaran/zhan_khazan
name = "Zhan-Khazan Farwa"
greater_form = "Zhan-Khazan Tajara"
/datum/species/monkey/skrell
name = "Neaera"
short_name = "nea"
@@ -23,6 +23,8 @@
heat_level_2 = 360 //RaceDefault 380 Default 400
heat_level_3 = 700 //RaceDefault 800 Default 1000
primitive_form = "Zhan-Khazan Farwa"
num_alternate_languages = 1 // Only one Extra Language
/datum/species/tajaran/m_sai
@@ -48,4 +50,6 @@
heat_level_2 = 390 //RaceDefault 380 Default 400
heat_level_3 = 900 //RaceDefault 800 Default 1000
primitive_form = "M'sai Farwa"
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_SIGN_TAJARA)
@@ -954,6 +954,12 @@
gib()
return
/mob/living/silicon/robot/update_canmove() // to fix lockdown issues w/ chairs
. = ..()
if (lockcharge)
canmove = 0
. = 0
/mob/living/silicon/robot/proc/UnlinkSelf()
disconnect_from_ai()
lawupdate = 0
+44 -5
View File
@@ -1,4 +1,4 @@
/mob/living/carbon/human/proc/monkeyize()
/mob/living/carbon/human/proc/monkeyize(var/kpg=0)
if (transforming)
return
for(var/obj/item/W in src)
@@ -11,8 +11,6 @@
stunned = 1
icon = null
invisibility = 101
for(var/t in organs)
qdel(t)
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
@@ -33,14 +31,55 @@
for(var/obj/item/W in src)
drop_from_inventory(W)
set_species(species.primitive_form)
dna.SetSEState(MONKEYBLOCK,1)
dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF)
if(!kpg)
dna.SetSEState(MONKEYBLOCK,1)
src << "<B>You are now [species.name]. </B>"
qdel(animation)
return src
/mob/living/carbon/human/proc/humanize(var/kpg=0) // we needed this a lot to be honest, why wasn't it made before?
if (transforming)
return
for(var/obj/item/W in src)
drop_from_inventory(W)
regenerate_icons()
transforming = 1
canmove = 0
stunned = 1
icon = null
invisibility = 101
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = src
flick("monkey2h", animation)
sleep(48)
transforming = 0
stunned = 0
update_canmove()
invisibility = initial(invisibility)
if(!species.greater_form) //If the creature in question has no greater form set, this is going to be messy.
gib()
return
for(var/obj/item/W in src)
drop_from_inventory(W)
set_species(species.greater_form)
if(!kpg)
dna.SetSEState(MONKEYBLOCK,0)
src << "<B>You are now [species.name]. </B>"
qdel(animation)
return src
/mob/new_player/AIize()
spawning = 1
return ..()
+4 -1
View File
@@ -141,10 +141,13 @@
if(is_broken())
filter_effect -= 2
if (owner.intoxication)
if (owner.intoxication > 0)
//ALCOHOL_FILTRATION_RATE is defined in intoxication.dm
owner.intoxication -= ALCOHOL_FILTRATION_RATE*filter_effect*PROCESS_ACCURACY//A weakened liver filters out alcohol more slowly
owner.intoxication = max(owner.intoxication, 0)
if (!owner.intoxication)
//If intoxication has just been reduced to zero, this will handle removing any effects
owner.handle_intoxication()
// Do some reagent processing.
if(owner.chem_effects[CE_ALCOHOL_TOXIC])
@@ -117,9 +117,9 @@
if(alien == IS_DIONA)
return //Diona can gain nutrients, but don't get drunk or suffer other effects
if(isunathi(M))//unathi are poisoned by alcohol as well
M.adjustToxLoss(2.5 * removed * (strength / 100))
M.adjustToxLoss(1.5 * removed * (strength / 100))
var/quantity = (strength / 100) * removed
M.intoxication += quantity
@@ -158,6 +158,50 @@
usr << "<span class='notice'>The solution dissolves the ink on the book.</span>"
return
//Butanol is a common alcohol that is fairly ineffective for humans and most other species, but highly intoxicating to unathi
//Butanol duplicates a lot of code from ethanol. This is by design, it does not inherit.
//Possible future todo: Add "alcohol" as a parent class to both ethanol and butanol
/datum/reagent/butanol
name = "Butanol" //Parent class for all alcoholic reagents.
id = "butanol"
description = "A fairly harmless alcohol that has intoxicating effects on certain species."
reagent_state = LIQUID
color = "#404030"
ingest_met = 0.17 //Extremely slow metabolic rate means the liver will generally purge it faster than it can intoxicate you
var/nutriment_factor = 0.5
var/strength = 100 // This is the ABV of the drink
glass_icon_state = "glass_clear"
glass_name = "glass of butanol"
glass_desc = "A fairly harmless alcohol that has intoxicating effects on certain species."
/datum/reagent/butanol/touch_mob(var/mob/living/L, var/amount)
if(istype(L) && strength > 40)
L.adjust_fire_stacks((amount / 7) * (strength / 100)) //Butanol is a bit less flammable than ethanol
/datum/reagent/butanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.adjustToxLoss(removed)
return
/datum/reagent/butanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(isvaurca(M))//Vaurca are damaged instead of getting nutrients, but they can still get drunk
M.adjustToxLoss(removed * (strength / 100))
else
M.nutrition += nutriment_factor * removed
if(alien == IS_DIONA)
return //Diona can gain nutrients, but don't get drunk or suffer other effects
if(isunathi(M))
ingest_met = initial(ingest_met)*3 //Unathi digest butanol much faster
var/quantity = (strength / 100) * removed
M.intoxication += quantity
/datum/reagent/hydrazine
name = "Hydrazine"
id = "hydrazine"
@@ -787,6 +787,7 @@
glass_desc = "No relation to a certain rap artist/ actor."
glass_center_of_mass = list("x"=15, "y"=10)
/datum/reagent/drink/coffee
name = "Coffee"
id = "coffee"
@@ -1262,6 +1263,18 @@
glass_desc = "A crystal clear glass of Griffeater gin."
glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/victorygin
name = "Victory Gin"
id = "victorygin"
description = "An oily Adhomai-based gin."
color = "#664300"
strength = 32
glass_icon_state = "ginvodkaglass"
glass_name = "glass of gin"
glass_desc = "It has an oily smell and doesn't taste like typical gin."
glass_center_of_mass = list("x"=16, "y"=12)
//Base type for alchoholic drinks containing coffee
/datum/reagent/ethanol/coffee
overdose = 45
@@ -2529,3 +2542,31 @@
glass_icon_state = "tallblackrussian"
glass_name = "glass of Tall Black Russian"
glass_desc = "Just like black russian but taller."
// Butanol-based alcoholic drinks
//=====================================
//These are mainly for unathi, and have very little (but still some) effect on other species
/datum/reagent/butanol/xuizijuice
name = "Xuizi Juice"
id = "xuizijuice"
description = "Blended flower buds from a Moghean Xuizi cactus. Has a mild butanol content and is a staple recreational beverage in Unathi culture."
color = "#91de47"
strength = 5
glass_icon_state = "xuiziglass"
glass_name = "glass of Xuizi Juice"
glass_desc = "The clear green liquid smells like vanilla, tastes like water. Unathi swear it has a rich taste and texture."
/datum/reagent/butanol/sarezhiwine
name = "Sarezhi Wine"
id = "sarezhiwine"
description = "An alcoholic beverage made from lightly fermented Sareszhi berries, considered an upper class delicacy on Moghes. Significant butanol content indicates intoxicating effects on Unathi."
color = "#bf8fbc"
strength = 20
glass_icon_state = "sarezhiglass"
glass_name = "glass of Sarezhi Wine"
glass_desc = "It tastes like flat grape soda. Is this supposed to be alcoholic?"
@@ -1560,6 +1560,8 @@
required_reagents = list("ice" = 1, "tea" = 2)
result_amount = 3
/datum/chemical_reaction/icecoffee
name = "Iced Coffee"
id = "icecoffee"
@@ -1582,6 +1584,14 @@
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/butanol
name = "Butanol"
id = "butanol"
result = "butanol"
required_reagents = list("cornoil" = 10, "sugar" = 10)
catalysts = list("enzyme" = 5)
result_amount = 5
/datum/chemical_reaction/grenadine
name = "Grenadine Syrup"
id = "grenadine"
@@ -27,6 +27,7 @@
mercury spawn_reagent = "mercury"
radium spawn_reagent = "radium"
ethanol spawn_reagent = "ethanol"
butanol spawn_reagent = "butanol"
sacid spawn_reagent = "sacid"
tungsten spawn_reagent = "tungsten"
@@ -18,6 +18,7 @@
/obj/item/weapon/reagent_containers/chem_disp_cartridge/radium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/water,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/butanol,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten
@@ -179,6 +179,15 @@
..()
reagents.add_reagent("gin", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/victorygin
name = "Victory gin"
desc = "Pour one out for Al'mari. His gun was on stun, bless his heart."
icon_state = "victorygin"
center_of_mass = list("x"=16, "y"=4)
New()
..()
reagents.add_reagent("victorygin", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
name = "Uncle Git's Special Reserve"
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
@@ -499,3 +508,25 @@
New()
..()
reagents.add_reagent("sbiten", 100)
// Butanol-based alcoholic drinks
//=====================================
//These are mainly for unathi, and have very little (but still some) effect on other species
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/xuizijuice
name = "Xuizi Juice"
desc = "Blended flower buds from the Xuizi cactus. It smells faintly of vanilla. Bottled by the Arizi Guild for over 200 years."
icon_state = "xuizibottle"
center_of_mass = list("x"=16, "y"=10)
New()
..()
reagents.add_reagent("xuizijuice", 30)
/obj/item/weapon/reagent_containers/food/drinks/bottle/sarezhiwine
name = "Sarezhi Wine"
desc = "A premium Moghean wine made from Sareszhi berries. Bottled by the Arizi Guild for over 200 years."
icon_state = "sarezhibottle"
New()
..()
reagents.add_reagent("sarezhiwine", 100)
@@ -245,6 +245,16 @@
..()
reagents.add_reagent("beer",capacity)
/obj/structure/reagent_dispensers/xuizikeg
name = "xuizi juice keg"
desc = "A keg full of Xuizi juice, blended flower buds from the Moghean Xuizi cactus. The export stamp of the Arizi Guild is imprinted on the side."
icon = 'icons/obj/objects.dmi'
icon_state = "keg_xuizi"
amount_per_transfer_from_this = 10
New()
..()
reagents.add_reagent("xuizijuice",capacity)
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
desc = "A dispenser of virus food."
+20
View File
@@ -57,6 +57,26 @@
<div class="commit sansserif">
<h2 class="date">08 April 2017</h2>
<h3 class="author">MoondancerPony updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixed protohumans.</li>
<li class="rscadd">Tajaran subspecies now have their own subspecies of Farwa.</li>
</ul>
<h3 class="author">Nanako updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Added butanol, an alcohol that is safe, though largely ineffective, for humans and most species, but highly intoxicating (and safe in moderation) for unathi. Pure butanol is in the chem dispenser, and can be distilled by combining sugar, corn oil and universal enzyme.</li>
<li class="rscadd">Added two new butanol-based drinks, imported from Moghes, they can be found in the bar and rarely in the cargo warehouse.</li>
<li class="rscadd">Added a new tajaran spirit, can be found in the bar fridge and sometimes in the warehouse.</li>
<li class="tweak">Kegs of beer or xuizi juice can now be ordered at cargo.</li>
<li class="bugfix">Fixed several issues with alcohol effects getting stuck and not wearing off when you sober up.</li>
<li class="tweak">Reduced the rate at which the liver filters alcohol, making it slightly easier to get drunk and take longer to sober up. Drink responsibly!</li>
</ul>
<h3 class="author">Printer16 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Vampires now know when they finished enthralling someone.</li>
<li class="bugfix">The Auxilliary Forensics Tools crate now spawns with a UV light.</li>
<li class="bugfix">A Malf AI's advanced encryption hack has been given a lot more space to work with.</li>
</ul>
<h3 class="author">inselc updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Drones are now able to decompile burnt matches.</li>
+22
View File
@@ -4065,6 +4065,28 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- bugfix: Fixed some issues where creatures being sacrificed to pylons could bug
out.
2017-04-08:
MoondancerPony:
- bugfix: Fixed protohumans.
- rscadd: Tajaran subspecies now have their own subspecies of Farwa.
Nanako:
- rscadd: Added butanol, an alcohol that is safe, though largely ineffective, for
humans and most species, but highly intoxicating (and safe in moderation) for
unathi. Pure butanol is in the chem dispenser, and can be distilled by combining
sugar, corn oil and universal enzyme.
- rscadd: Added two new butanol-based drinks, imported from Moghes, they can be
found in the bar and rarely in the cargo warehouse.
- rscadd: Added a new tajaran spirit, can be found in the bar fridge and sometimes
in the warehouse.
- tweak: Kegs of beer or xuizi juice can now be ordered at cargo.
- bugfix: Fixed several issues with alcohol effects getting stuck and not wearing
off when you sober up.
- tweak: Reduced the rate at which the liver filters alcohol, making it slightly
easier to get drunk and take longer to sober up. Drink responsibly!
Printer16:
- bugfix: Vampires now know when they finished enthralling someone.
- bugfix: The Auxilliary Forensics Tools crate now spawns with a UV light.
- bugfix: A Malf AI's advanced encryption hack has been given a lot more space to
work with.
inselc:
- bugfix: Drones are now able to decompile burnt matches.
- bugfix: Ghosts will no longer trigger infrared emitters.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

+1 -1
View File
@@ -4941,7 +4941,7 @@
"bRa" = (/obj/item/weapon/aicard,/obj/item/weapon/aiModule/reset,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech)
"bRb" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3; pixel_y = 3},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3; pixel_y = -3},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech)
"bRc" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/security/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/tech)
"bRd" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
"bRd" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/message_monitor{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
"bRe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/rnd/mixing)
"bRf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/mixing)
"bRg" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access"; req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/mixing)