Merge pull request #7340 from Zuhayr/dev-freeze

Dev-freeze fixes.
This commit is contained in:
Ccomp5950
2014-12-09 11:48:33 -05:00
21 changed files with 106 additions and 210 deletions

View File

@@ -31,7 +31,7 @@
var/dat = "<center><h1>Autolathe Control Panel</h1><hr/>" var/dat = "<center><h1>Autolathe Control Panel</h1><hr/>"
if(!panel_open) if(panel_open == 0)
dat += "<table width = '100%'>" dat += "<table width = '100%'>"
var/material_top = "<tr>" var/material_top = "<tr>"
var/material_bottom = "<tr>" var/material_bottom = "<tr>"
@@ -48,41 +48,36 @@
index++ index++
if(R.hidden && !hacked || (show_category != "All" && show_category != R.category)) if(R.hidden && !hacked || (show_category != "All" && show_category != R.category))
continue continue
var/can_make = 1
var/material_string = ""
var/multiplier_string = ""
var/max_sheets
var/comma
if(!R.resources || !R.resources.len)
material_string = "No resources required.</td>"
else
//Make sure it's buildable and list requires resources.
for(var/material in R.resources)
var/sheets = round(stored_material[material]/R.resources[material])
if(isnull(max_sheets) || max_sheets > sheets)
max_sheets = sheets
if(!isnull(stored_material[material]) && stored_material[material] < R.resources[material])
can_make = 0
if(!comma)
comma = 1
else
material_string += ", "
material_string += "[R.resources[material]] [material]"
material_string += ".<br></td>"
//Build list of multipliers for sheets.
if(R.is_stack)
if(max_sheets && max_sheets > 0)
multiplier_string += "<br>"
for(var/i = 5;i<max_sheets;i*=2) //5,10,20,40...
multiplier_string += "<a href='?src=\ref[src];make=[index];multiplier=[i]'>\[x[i]\]</a>"
multiplier_string += "<a href='?src=\ref[src];make=[index];multiplier=[max_sheets]'>\[x[max_sheets]\]</a>"
var/can_make = 1 dat += "<tr><td width = 180>[R.hidden ? "<font color = 'red'>*</font>" : ""]<b>[can_make ? "<a href='?src=\ref[src];make=[index];multiplier=1'>" : ""][R.name][can_make ? "</a>" : ""]</b>[R.hidden ? "<font color = 'red'>*</font>" : ""][multiplier_string]</td><td align = right>[material_string]</tr>"
var/material_string = ""
var/multiplier_string = ""
var/max_sheets
var/comma
if(!R.resources || !R.resources.len)
material_string = "No resources required.</td>"
else
//Make sure it's buildable and list requires resources.
for(var/material in R.resources)
var/sheets = round(stored_material[material]/R.resources[material])
if(isnull(max_sheets) || max_sheets > sheets)
max_sheets = sheets
if(!isnull(stored_material[material]) && stored_material[material] < R.resources[material])
can_make = 0
if(!comma)
comma = 1
else
material_string += ", "
material_string += "[R.resources[material]] [material]"
material_string += ".<br></td>"
//Build list of multipliers for sheets.
if(R.is_stack)
if(max_sheets && max_sheets > 0)
multiplier_string += "<br>"
for(var/i = 5;i<max_sheets;i*=2) //5,10,20,40...
multiplier_string += "<a href='?src=\ref[src];make=[index];multiplier=[i]'>\[x[i]\]</a>"
multiplier_string += "<a href='?src=\ref[src];make=[index];multiplier=[max_sheets]'>\[x[max_sheets]\]</a>"
dat += "<tr><td width = 180>[R.hidden ? "<font color = 'red'>*</font>" : ""]<b>[can_make ? "<a href='?src=\ref[src];make=[index];multiplier=1'>" : ""][R.name][can_make ? "</a>" : ""]</b>[R.hidden ? "<font color = 'red'>*</font>" : ""][multiplier_string]</td><td align = right>[material_string]</tr>"
dat += "</table><hr>" dat += "</table><hr>"
//Hacking. //Hacking.

View File

@@ -59,7 +59,7 @@
if(!proximity) return if(!proximity) return
if(disabled && !isrobot(user)) if(disabled && !isrobot(user))
return 0 return 0
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit)) if(istype(get_area(A),/area/shuttle)||istype(get_area(A),/turf/space/transit))
return 0 return 0
return alter_turf(A,user,(mode == 3)) return alter_turf(A,user,(mode == 3))

View File

@@ -96,6 +96,10 @@
device.attack_self(holder.wearer) device.attack_self(holder.wearer)
return 1 return 1
var/turf/T = get_turf(target)
if(istype(T) && !T.Adjacent(get_turf(src)))
return 0
var/resolved = target.attackby(device,holder.wearer) var/resolved = target.attackby(device,holder.wearer)
if(!resolved && device && target) if(!resolved && device && target)
device.afterattack(target,holder.wearer,1) device.afterattack(target,holder.wearer,1)

View File

@@ -76,7 +76,8 @@
var/datum/effect/effect/system/spark_spread/spark_system var/datum/effect/effect/system/spark_spread/spark_system
/obj/item/weapon/rig/examine() /obj/item/weapon/rig/examine()
..() usr << "This is \icon[src][src.name]."
usr << "[src.desc]"
if(wearer) if(wearer)
for(var/obj/item/piece in list(helmet,gloves,chest,boots)) for(var/obj/item/piece in list(helmet,gloves,chest,boots))
if(!piece || piece.loc != wearer) if(!piece || piece.loc != wearer)
@@ -90,6 +91,7 @@
/obj/item/weapon/rig/New() /obj/item/weapon/rig/New()
..() ..()
item_state = icon_state
wires = new(src) wires = new(src)
if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len)) if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len))
@@ -140,6 +142,8 @@
piece.siemens_coefficient = siemens_coefficient piece.siemens_coefficient = siemens_coefficient
piece.permeability_coefficient = permeability_coefficient piece.permeability_coefficient = permeability_coefficient
update_icon(1)
/obj/item/weapon/rig/Del() /obj/item/weapon/rig/Del()
for(var/obj/item/piece in list(gloves,boots,helmet,chest)) for(var/obj/item/piece in list(gloves,boots,helmet,chest))
var/mob/living/M = piece.loc var/mob/living/M = piece.loc
@@ -178,13 +182,13 @@
sealing = 1 sealing = 1
if(!seal_target && !suit_is_deployed()) if(!seal_target && !suit_is_deployed())
M << "<span class='danger'>The suit flashes an error light. It can't function properly without being fully deployed.</span>" M.visible_message("<span class='danger'>[M]'s suit flashes an error light.</span>","<span class='danger'>Your suit flashes an error light. It can't function properly without being fully deployed.</span>")
failed_to_seal = 1 failed_to_seal = 1
if(!failed_to_seal) if(!failed_to_seal)
if(!instant) if(!instant)
M << "<font color='blue'>With a quiet hum, the suit begins running checks and adjusting components.</font>" M.visible_message("<font color='blue'>[M]'s suit emits a quiet hum as it begins to adjust its seals.</font>","<font color='blue'>With a quiet hum, the suit begins running checks and adjusting components.</font>")
if(!do_after(M,SEAL_DELAY)) if(!do_after(M,SEAL_DELAY))
if(M) M << "<span class='warning'>You must remain still while the suit is adjusting the components.</span>" if(M) M << "<span class='warning'>You must remain still while the suit is adjusting the components.</span>"
failed_to_seal = 1 failed_to_seal = 1
@@ -203,12 +207,11 @@
continue continue
if(!istype(M) || !istype(piece) || !istype(compare_piece) || !msg_type) if(!istype(M) || !istype(piece) || !istype(compare_piece) || !msg_type)
if(!failed_to_seal) if(M) M << "<span class='warning'>You must remain still while the suit is adjusting the components.</span>"
if(M) M << "<span class='warning'>You must remain still while the suit is adjusting the components.</span>"
failed_to_seal = 1 failed_to_seal = 1
break break
if(M.back == src && piece == compare_piece) if(!failed_to_seal && M.back == src && piece == compare_piece)
if(!instant) if(!instant)
if(!do_after(M,SEAL_DELAY)) if(!do_after(M,SEAL_DELAY))
@@ -232,11 +235,11 @@
if(!seal_target) if(!seal_target)
if(flags & AIRTIGHT) if(flags & AIRTIGHT)
helmet.flags |= AIRTIGHT helmet.flags |= AIRTIGHT
helmet.flags_inv |= (HIDEEYES|HIDEFACE) helmet.flags_inv |= (HIDEEYES|HIDEFACE|HIDEMASK)
helmet.body_parts_covered |= (FACE|EYES) helmet.body_parts_covered |= (FACE|EYES)
else else
helmet.flags &= ~AIRTIGHT helmet.flags &= ~AIRTIGHT
helmet.flags_inv &= ~(HIDEEYES|HIDEFACE) helmet.flags_inv &= ~(HIDEEYES|HIDEFACE|HIDEMASK)
helmet.body_parts_covered &= ~(FACE|EYES) helmet.body_parts_covered &= ~(FACE|EYES)
helmet.update_light(wearer) helmet.update_light(wearer)
else else
@@ -446,11 +449,8 @@
//TODO: Maybe consider a cache for this (use mob_icon as blank canvas, use suit icon overlay). //TODO: Maybe consider a cache for this (use mob_icon as blank canvas, use suit icon overlay).
overlays.Cut() overlays.Cut()
if(mob_icon)
mob_icon.overlays.Cut()
if(!mob_icon || update_mob_icon) if(!mob_icon || update_mob_icon)
var/species_icon = 'icons/mob/back.dmi' var/species_icon = 'icons/mob/rig_back.dmi'
// Since setting mob_icon will override the species checks in // Since setting mob_icon will override the species checks in
// update_inv_wear_suit(), handle species checks here. // update_inv_wear_suit(), handle species checks here.
if(wearer && sprite_sheets && sprite_sheets[wearer.species.name]) if(wearer && sprite_sheets && sprite_sheets[wearer.species.name])
@@ -458,10 +458,8 @@
mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]") mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]")
if(installed_modules.len) if(installed_modules.len)
for(var/obj/item/rig_module/module in installed_modules) for(var/obj/item/rig_module/module in installed_modules)
if(module.suit_overlay) if(module.suit_overlay)
mob_icon.overlays += image("icon" = 'icons/mob/rig_modules.dmi', "icon_state" = "[module.suit_overlay]")
chest.overlays += image("icon" = 'icons/mob/rig_modules.dmi', "icon_state" = "[module.suit_overlay]", "dir" = SOUTH) chest.overlays += image("icon" = 'icons/mob/rig_modules.dmi', "icon_state" = "[module.suit_overlay]", "dir" = SOUTH)
if(wearer) if(wearer)
@@ -488,10 +486,9 @@
user << "<span class='danger'>Unauthorized user. Access denied.</span>" user << "<span class='danger'>Unauthorized user. Access denied.</span>"
return 0 return 0
else if(user.loc && user.loc.loc && istype(user.loc.loc,/obj/item/rig_module/ai_container)) else if(!ai_override_enabled)
if(!ai_override_enabled) user << "<span class='danger'>Synthetic access disabled. Please consult hardware provider.</span>"
user << "<span class='danger'>Synthetic access disabled. Please consult hardware provider.</span>" return 0
return 0
return 1 return 1

View File

@@ -122,6 +122,25 @@
"mutagen" = 15 "mutagen" = 15
) )
/obj/machinery/portable_atmospherics/hydroponics/attack_generic(var/mob/user)
if(istype(user,/mob/living/carbon/alien/diona))
var/mob/living/carbon/alien/diona/nymph = user
if(nymph.stat == DEAD || nymph.paralysis || nymph.weakened || nymph.stunned || nymph.restrained())
return
if(weedlevel > 0)
nymph.reagents.add_reagent("nutriment", weedlevel)
weedlevel = 0
nymph.visible_message("<font color='blue'><b>[nymph]</b> begins rooting through [src], ripping out weeds and eating them noisily.</font>","<font color='blue'>You begin rooting through [src], ripping out weeds and eating them noisily.</font>")
else if(nymph.nutrition > 100 && nutrilevel < 10)
nymph.nutrition -= ((10-nutrilevel)*5)
nutrilevel = 10
nymph.visible_message("<font color='blue'><b>[nymph]</b> secretes a trickle of green liquid, refilling [src].</font>","<font color='blue'>You secrete a trickle of green liquid, refilling [src].</font>")
else
nymph.visible_message("<font color='blue'><b>[nymph]</b> rolls around in [src] for a bit.</font>","<font color='blue'>You roll around in [src] for a bit.</font>")
return
/obj/machinery/portable_atmospherics/hydroponics/New() /obj/machinery/portable_atmospherics/hydroponics/New()
..() ..()
temp_chem_holder = new() temp_chem_holder = new()

View File

@@ -7,6 +7,7 @@
sprite_sheets = list("Vox" = 'icons/mob/species/vox/head.dmi') sprite_sheets = list("Vox" = 'icons/mob/species/vox/head.dmi')
/obj/item/weapon/holder/New() /obj/item/weapon/holder/New()
item_state = icon_state
..() ..()
processing_objects.Add(src) processing_objects.Add(src)

View File

@@ -11,7 +11,7 @@
var/adult_form var/adult_form
var/dead_icon var/dead_icon
var/amount_grown = 0 var/amount_grown = 0
var/max_grown = 10 var/max_grown = 200
var/time_of_birth var/time_of_birth
var/language var/language

View File

@@ -6,12 +6,6 @@
icon_state = "nymph" icon_state = "nymph"
language = "Rootspeak" language = "Rootspeak"
amount_grown = 0
max_grown = 5 // Target number of donors.
var/list/donors = list()
var/last_checked_stage = 0
universal_understand = 1 universal_understand = 1
universal_speak = 0 // Dionaea do not need to speak to people other than other dionaea. universal_speak = 0 // Dionaea do not need to speak to people other than other dionaea.
holder_type = /obj/item/weapon/holder/diona holder_type = /obj/item/weapon/holder/diona
@@ -20,7 +14,4 @@
..() ..()
species = all_species["Diona"] species = all_species["Diona"]
verbs += /mob/living/carbon/proc/eat_weeds
verbs += /mob/living/carbon/proc/fertilize_plant
verbs += /mob/living/carbon/alien/diona/proc/steal_blood
verbs += /mob/living/carbon/alien/diona/proc/merge verbs += /mob/living/carbon/alien/diona/proc/merge

View File

@@ -11,5 +11,6 @@
src.loc = M src.loc = M
else else
get_scooped(M) get_scooped(M)
return
..() ..()

View File

@@ -63,37 +63,4 @@
for(var/atom/A in M.contents) for(var/atom/A in M.contents)
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder)) if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
return return
M.status_flags &= ~PASSEMOTES M.status_flags &= ~PASSEMOTES
/mob/living/carbon/alien/diona/proc/steal_blood()
set category = "Abilities"
set name = "Steal Blood"
set desc = "Take a blood sample from a suitable donor."
if(stat == DEAD || paralysis || weakened || stunned || restrained())
return
var/list/choices = list()
for(var/mob/living/carbon/human/H in oview(1,src))
if(src.Adjacent(H))
choices += H
var/mob/living/carbon/human/M = input(src,"Who do you wish to take a sample from?") in null|choices
if(!M || !src) return
if(M.species.flags & NO_BLOOD)
src << "\red That donor has no blood to take."
return
if(donors.Find(M.real_name))
src << "\red That donor offers you nothing new."
return
src.visible_message("\red [src] flicks out a feeler and neatly steals a sample of [M]'s blood.","\red You flick out a feeler and neatly steal a sample of [M]'s blood.")
donors += M.real_name
for(var/datum/language/L in M.languages)
languages |= L
spawn(25)
update_progression()

View File

@@ -16,25 +16,4 @@
del(L) del(L)
src.visible_message("\red [src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","\red You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.") src.visible_message("\red [src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","\red You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.")
return "Diona" return "Diona"
/mob/living/carbon/alien/diona/show_evolution_blurb()
//TODO
return
/mob/living/carbon/alien/diona/update_progression()
amount_grown = donors.len
if(amount_grown <= last_checked_stage)
return
// Only fire off these messages once.
last_checked_stage = amount_grown
if(amount_grown == max_grown)
src << "\green You feel ready to move on to your next stage of growth."
else if(amount_grown == 3)
universal_understand = 1
src << "\green You feel your awareness expand, and realize you know how to understand the creatures around you."
else
src << "\green The blood seeps into your small form, and you draw out the echoes of memories and personality from it, working them into your budding mind."

View File

@@ -5,10 +5,6 @@
speak_emote = list("hisses") speak_emote = list("hisses")
icon_state = "larva" icon_state = "larva"
language = "Hivemind" language = "Hivemind"
amount_grown = 0
max_grown = 200
maxHealth = 25 maxHealth = 25
health = 25 health = 25

View File

@@ -1,8 +1,3 @@
/mob/living/carbon/alien/larva/update_progression()
if(amount_grown < max_grown)
amount_grown++
return
/mob/living/carbon/alien/larva/confirm_evolution() /mob/living/carbon/alien/larva/confirm_evolution()
src << "\blue <b>You are growing into a beautiful alien! It is time to choose a caste.</b>" src << "\blue <b>You are growing into a beautiful alien! It is time to choose a caste.</b>"

View File

@@ -41,6 +41,8 @@
del(src) del(src)
/mob/living/carbon/alien/proc/update_progression() /mob/living/carbon/alien/proc/update_progression()
if(amount_grown < max_grown)
amount_grown++
return return
/mob/living/carbon/alien/proc/confirm_evolution() /mob/living/carbon/alien/proc/confirm_evolution()

View File

@@ -1,49 +1,3 @@
//TODO: Consider renaming carbon/monkey to carbon/small.
/mob/living/carbon/proc/fertilize_plant()
set category = "Abilities"
set name = "Fertilize plant"
set desc = "Turn your food into nutrients for plants."
if(stat == DEAD || paralysis || weakened || stunned || restrained())
return
var/list/trays = list()
for(var/obj/machinery/portable_atmospherics/hydroponics/tray in range(1))
if(tray.nutrilevel < 10 && src.Adjacent(tray))
trays += tray
var/obj/machinery/portable_atmospherics/hydroponics/target = input("Select a tray:") as null|anything in trays
if(!src || !target || target.nutrilevel == 10) return //Sanity check.
src.nutrition -= ((10-target.nutrilevel)*5)
target.nutrilevel = 10
src.visible_message("\red [src] secretes a trickle of green liquid, refilling [target]'s nutrient tray.","\red You secrete a trickle of green liquid from your tail, refilling [target]'s nutrient tray.")
/mob/living/carbon/proc/eat_weeds()
set category = "Abilities"
set name = "Eat Weeds"
set desc = "Clean the weeds out of soil or a hydroponics tray."
if(stat == DEAD || paralysis || weakened || stunned || restrained())
return
var/list/trays = list()
for(var/obj/machinery/portable_atmospherics/hydroponics/tray in range(1))
if(tray.weedlevel > 0 && src.Adjacent(tray))
trays += tray
var/obj/machinery/portable_atmospherics/hydroponics/target = input("Select a tray:") as null|anything in trays
if(!src || !target || target.weedlevel == 0) return //Sanity check.
src.reagents.add_reagent("nutriment", target.weedlevel)
target.weedlevel = 0
src.visible_message("\red [src] begins rooting through [target], ripping out weeds and eating them noisily.","\red You begin rooting through [target], ripping out weeds and eating them noisily.")
//Brain slug proc for voluntary removal of control. //Brain slug proc for voluntary removal of control.
/mob/living/carbon/proc/release_control() /mob/living/carbon/proc/release_control()

View File

@@ -131,24 +131,26 @@
/* /*
This is kind of convoluted, but it seems to break down like this: This is kind of convoluted, but it seems to break down like this:
(note that the chance to miss is exaggerated here since ran_zone() might roll "chest" (note that the chance to miss is exaggerated here since ran_zone() might roll "chest"
If aiming for chest: If aiming for chest:
80% chance you hit your target 80% chance you hit your target
17% chance you hit a random zone 17% chance you hit a random zone
3% chance you miss 3% chance you miss
If aiming for something else: If aiming for something else:
68% chance you hit your target 68% chance you hit your target
17% chance you hit a random zone 17% chance you hit a random zone
15% chance you miss 15% chance you miss
Why don't we just use get_zone_with_miss_chance() ??? Why don't we just use get_zone_with_miss_chance() ???
*/ */
if(prob(80)) if(prob(80))
hit_zone = ran_zone(hit_zone) hit_zone = ran_zone(hit_zone)
if(prob(15) && hit_zone != "chest") // Missed! if(prob(15) && hit_zone != "chest") // Missed!
attack_message = "[H] attempted to [pick(attack.attack_verb)] [src], but the [attack.attack_noun] missed!" attack_message = "[H] attempted to strike [src], but missed!"
miss_type = 1 miss_type = 1
else
hit_zone = ran_zone(hit_zone)
if(!miss_type && block) if(!miss_type && block)
attack_message = "[H] went for [src]'s [affecting.display_name] but was blocked!" attack_message = "[H] went for [src]'s [affecting.display_name] but was blocked!"
@@ -160,9 +162,9 @@
H.visible_message("<span class='danger'>[attack_message]</span>") H.visible_message("<span class='danger'>[attack_message]</span>")
playsound(loc, ((miss_type) ? (miss_type == 1 ? attack.miss_sound : 'sound/weapons/thudswoosh.ogg') : attack.attack_sound), 25, 1, -1) playsound(loc, ((miss_type) ? (miss_type == 1 ? attack.miss_sound : 'sound/weapons/thudswoosh.ogg') : attack.attack_sound), 25, 1, -1)
H.attack_log += text("\[[time_stamp()]\] <font color='red'>[miss_type ? (miss_type == 1 ? "Missed" : "Blocked") : "[pick(attack.attack_verb)]ed"] [src.name] ([src.ckey])</font>") H.attack_log += text("\[[time_stamp()]\] <font color='red'>[miss_type ? (miss_type == 1 ? "Missed" : "Blocked") : "[pick(attack.attack_verb)]"] [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>[miss_type ? (miss_type == 1 ? "Was missed by" : "Has blocked") : "Has Been [pick(attack.attack_verb)]ed"] by [H.name] ([H.ckey])</font>") src.attack_log += text("\[[time_stamp()]\] <font color='orange'>[miss_type ? (miss_type == 1 ? "Was missed by" : "Has blocked") : "Has Been [pick(attack.attack_verb)]ed"] by [H.name] ([H.ckey])</font>")
msg_admin_attack("[key_name(H)] [miss_type ? (miss_type == 1 ? "has missed" : "was blocked by") : "has [pick(attack.attack_verb)]ed"] [key_name(src)]") msg_admin_attack("[key_name(H)] [miss_type ? (miss_type == 1 ? "has missed" : "was blocked by") : "has [pick(attack.attack_verb)]"] [key_name(src)]")
if(miss_type) if(miss_type)
return 0 return 0

View File

@@ -107,6 +107,7 @@
var/organ = affecting.display_name var/organ = affecting.display_name
if(!skill) skill = 1 if(!skill) skill = 1
attack_damage = Clamp(attack_damage, 1, 5)
if(target == user) if(target == user)
user.visible_message("<span class='danger'>[user] [pick(attack_verb)] \himself in the [organ]!</span>") user.visible_message("<span class='danger'>[user] [pick(attack_verb)] \himself in the [organ]!</span>")
@@ -125,7 +126,7 @@
switch(attack_damage) switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] slapped [target]'s [organ]!</span>") if(1 to 2) user.visible_message("<span class='danger'>[user] slapped [target]'s [organ]!</span>")
if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [target] in \his [organ]!</span>") if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [target] in \his [organ]!</span>")
if(5) user.visible_message("<span class='danger'>[user] slams \his [pick(attack_noun)] into [target]'s [organ]!</span>") if(5) user.visible_message("<span class='danger'>[user] slammed \his [pick(attack_noun)] into [target]'s [organ]!</span>")
if("groin", "l_leg", "r_leg") if("groin", "l_leg", "r_leg")
// -- LOWER BODY -- // // -- LOWER BODY -- //
switch(attack_damage) switch(attack_damage)
@@ -138,7 +139,7 @@
if(1 to 4) user.visible_message("<span class='danger'>[user] kicked [target] in \his [organ]!</span>") if(1 to 4) user.visible_message("<span class='danger'>[user] kicked [target] in \his [organ]!</span>")
if(5) user.visible_message("<span class='danger'>[user] stomped down hard on [target]'s [organ]!</span>") if(5) user.visible_message("<span class='danger'>[user] stomped down hard on [target]'s [organ]!</span>")
else if (user.loc != target.loc) else if (user.loc != target.loc)
user.visible_message("<span class='danger'>[user] [pick("stomped down hard on", "kicked against", "gave a strong kick against", "slams their foot into")] [target]'s [organ]!</span>") user.visible_message("<span class='danger'>[user] [pick("stomped down hard on", "kicked against", "gave a strong kick against", "slammed their foot into")] [target]'s [organ]!</span>")
else else
user.visible_message("<span class='danger'>[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!</span>") user.visible_message("<span class='danger'>[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!</span>")
@@ -171,13 +172,13 @@
switch(zone) switch(zone)
if("head", "mouth", "eyes") if("head", "mouth", "eyes")
// ----- HEAD ----- // // ----- HEAD ----- //
switch(damage) switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] scratched [target] across \his cheek!</span>") if(1 to 2) user.visible_message("<span class='danger'>[user] scratched [target] across \his cheek!</span>")
if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [target]'s [pick("head", "neck")] [pick("", "", "", "with spread [pick(attack_noun)]")]!</span>") if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [target]'s [pick("head", "neck")] [pick("", "", "", "with spread [pick(attack_noun)]")]!</span>")
if(5) user.visible_message("<span class='danger'>[pick("[user] [pick(attack_verb)] [target] across \his face!", "[user] rakes \his [pick(attack_noun)] across [target]'s face!")]</span>") if(5) user.visible_message("<span class='danger'>[pick("[user] [pick(attack_verb)] [target] across \his face!", "[user] rakes \his [pick(attack_noun)] across [target]'s face!")]</span>")
if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_leg", "l_foot", "r_foot") if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_leg", "l_foot", "r_foot")
// ----- BODY ----- // // ----- BODY ----- //
switch(damage) switch(attack_damage)
if(1 to 2) user.visible_message("<span class='danger'>[user] scratched [target]'s [affecting.display_name]!</span>") if(1 to 2) user.visible_message("<span class='danger'>[user] scratched [target]'s [affecting.display_name]!</span>")
if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [pick("", "", "the side of")] [target]'s [affecting.display_name]!</span>") if(3 to 4) user.visible_message("<span class='danger'>[user] [pick(attack_verb)] [pick("", "", "the side of")] [target]'s [affecting.display_name]!</span>")
if(5) user.visible_message("<span class='danger'>[user] tears \his [pick(attack_noun)] deep into [target]'s [affecting.display_name]!</span>") if(5) user.visible_message("<span class='danger'>[user] tears \his [pick(attack_noun)] deep into [target]'s [affecting.display_name]!</span>")

View File

@@ -760,8 +760,8 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) /mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1)
if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this if( wear_suit && istype(wear_suit, /obj/item/) )
wear_suit.screen_loc = ui_oclothing //TODO wear_suit.screen_loc = ui_oclothing
var/image/standing var/image/standing
@@ -831,7 +831,7 @@ proc/get_damage_icon_part(damage_state, body_part)
if(back.icon_override) if(back.icon_override)
overlays_standing[BACK_LAYER] = image("icon" = back.icon_override, "icon_state" = "[back.icon_state]") overlays_standing[BACK_LAYER] = image("icon" = back.icon_override, "icon_state" = "[back.icon_state]")
//If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc. //If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc.
else if(istype(rig) && !rig.offline && rig.mob_icon) else if(istype(rig) && rig.mob_icon)
overlays_standing[BACK_LAYER] = rig.mob_icon overlays_standing[BACK_LAYER] = rig.mob_icon
else if(back.sprite_sheets && back.sprite_sheets[species.name]) else if(back.sprite_sheets && back.sprite_sheets[species.name])
overlays_standing[BACK_LAYER] = image("icon" = back.sprite_sheets[species.name], "icon_state" = "[back.icon_state]") overlays_standing[BACK_LAYER] = image("icon" = back.sprite_sheets[species.name], "icon_state" = "[back.icon_state]")

View File

@@ -16,9 +16,7 @@
/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M) /obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M)
if(!usr) return if(!usr) return
if(!reagents.total_volume) if(!reagents.total_volume)
if(M == usr) M.visible_message("<span class='notice'>[M] finishes eating \the [src].</span>","<span class='notice'>You finish eating \the [src].</span>")
usr << "<span class='notice'>You finish eating \the [src].</span>"
M.visible_message("<span class='notice'>[M] finishes eating \the [src].</span>")
usr.drop_from_inventory(src) //so icons update :[ usr.drop_from_inventory(src) //so icons update :[
if(trash) if(trash)
@@ -194,8 +192,8 @@
del(src) del(src)
return return
/obj/item/weapon/reagent_containers/food/snacks/proc/is_sliceable() /obj/item/weapon/reagent_containers/food/snacks/proc/is_sliceable()
return (slices_num && slice_path && slices_num > 0) return (slices_num && slice_path && slices_num > 0)
/obj/item/weapon/reagent_containers/food/snacks/Del() /obj/item/weapon/reagent_containers/food/snacks/Del()
if(contents) if(contents)
@@ -206,24 +204,18 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// FOOD END /// FOOD END
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/snacks/attack_generic(var/mob/living/user) /obj/item/weapon/reagent_containers/food/snacks/attack_generic(var/mob/living/user)
if(!isanimal(user) && !isalien(user))
if(isanimal(user) || isalien(user)) return
user.visible_message("<b>[user]</b> nibbles away at the [src].","You nibble away at the [src].")
if(bitecount == 0 || prob(50)) bitecount++
user.custom_emote(1,"nibbles away at the [src]") if(reagents && user.reagents)
bitecount++ reagents.trans_to_ingest(user, bitesize)
spawn(5)
if(reagents && user.reagents) if(!src && !user.client)
reagents.trans_to_ingest(user, bitesize) user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
del(src)
spawn(5) On_Consume(user)
if(!src && !user.client)
user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
del(src)
On_Consume(user)
////////////////////////////////////////////////// //////////////////////////////////////////////////
////////////////////////////////////////////Snacks ////////////////////////////////////////////Snacks

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 153 KiB

BIN
icons/mob/rig_back.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB