Merge remote-tracking branch 'remotes/upstream/master' into Botcall_V2

Conflicts:
	code/game/machinery/bots/bots.dm
This commit is contained in:
GunHog
2015-05-03 17:59:46 -05:00
203 changed files with 2135 additions and 1197 deletions
+38 -6
View File
@@ -7,6 +7,7 @@
icon_state = "mmi_empty"
w_class = 3
origin_tech = "biotech=3"
var/braintype = "Cyborg"
req_access = list(access_robotics)
@@ -18,7 +19,19 @@
var/obj/mecha = null //This does not appear to be used outside of reference in mecha.dm.
var/obj/item/organ/brain/brain = null //The actual brain
/obj/item/device/mmi/update_icon()
if(brain)
if(istype(brain,/obj/item/organ/brain/alien))
icon_state = "mmi_alien"
braintype = "Xenoborg" //HISS....Beep.
else
icon_state = "mmi_full"
braintype = "Cyborg"
else
icon_state = "mmi_empty"
/obj/item/device/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
if(istype(O,/obj/item/organ/brain)) //Time to stick a brain in it --NEO
var/obj/item/organ/brain/newbrain = O
if(brain)
@@ -27,6 +40,14 @@
if(!newbrain.brainmob)
user << "<span class='warning'>You aren't sure where this brain came from, but you're pretty sure it's a useless brain!</span>"
return
var/mob/living/carbon/brain/B = newbrain.brainmob
if(!B.key)
var/mob/dead/observer/ghost = B.get_ghost()
if(ghost)
if(ghost.client)
ghost << "<span class='ghostalert'>Someone has put your brain in a MMI. Return to your body!</span> (Verbs -> Ghost -> Re-enter corpse)"
ghost << sound('sound/effects/genetics.ogg')
visible_message("[user] sticks \a [newbrain] into \the [src].")
brainmob = newbrain.brainmob
@@ -42,10 +63,7 @@
brain = newbrain
name = "Man-Machine Interface: [brainmob.real_name]"
if(istype(newbrain,/obj/item/organ/brain/alien))
icon_state = "mmi_alien"
else
icon_state = "mmi_full"
update_icon()
locked = 1
@@ -82,7 +100,7 @@
brain.loc = usr.loc
brain = null //No more brain in here
icon_state = "mmi_empty"
update_icon()
name = "Man-Machine Interface"
/obj/item/device/mmi/proc/transfer_identity(var/mob/living/carbon/human/H) //Same deal as the regular brain proc. Used for human-->robot people.
@@ -99,7 +117,7 @@
brain = newbrain
name = "Man-Machine Interface: [brainmob.real_name]"
icon_state = "mmi_full"
update_icon()
locked = 1
return
@@ -149,3 +167,17 @@
qdel(brainmob)
brainmob = null
..()
/obj/item/device/mmi/examine(mob/user)
..()
if(brainmob)
var/mob/living/carbon/brain/B = brainmob
if(!B.key || !B.mind || B.stat == DEAD)
user << "<span class='warning'>The MMI indicates the brain is completely unresponsive.</span>"
else if(!B.client)
user << "<span class='warning'>The MMI indicates the brain is currently inactive; it might change.</span>"
else
user << "<span class='notice'>The MMI indicates the brain is active.</span>"
+16 -5
View File
@@ -124,16 +124,27 @@
return 1
/mob/living/carbon/brain/handle_disabilities()
return
//Eyes
if(disabilities & BLIND || stat)
eye_blind = max(eye_blind, 1)
else
if(eye_blind)
eye_blind = 0
if(eye_blurry)
eye_blurry = 0
if(eye_stat)
eye_stat = 0
//Ears
if(disabilities & DEAF)
setEarDamage(-1, max(ear_deaf, 1))
else if(ear_damage < 100)
setEarDamage(0, 0)
/mob/living/carbon/brain/handle_status_effects()
return
/mob/living/carbon/brain/handle_regular_hud_updates()
handle_vision()
handle_hud_icons_health()
return 1
@@ -0,0 +1,146 @@
/obj/item/device/mmi/posibrain
name = "positronic brain"
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
icon = 'icons/obj/assemblies.dmi'
icon_state = "posibrain"
w_class = 3
origin_tech = "biotech=3;programming=2"
var/searching = 0
var/askDelay = 10 * 60 * 1
brainmob = null
req_access = list(access_robotics)
locked = 0
mecha = null//This does not appear to be used outside of reference in mecha.dm.
braintype = "Android"
/obj/item/device/mmi/posibrain/attack_self(mob/user as mob)
if(brainmob && !brainmob.key && searching == 0)
//Start the process of searching for a new user.
user << "<span class='notice'>You carefully locate the manual activation switch and start the positronic brain's boot process.</span>"
searching = 1
update_icon()
request_player()
spawn(600)
reset_search()
/obj/item/device/mmi/posibrain/proc/request_player()
for(var/mob/dead/observer/O in player_list)
if(jobban_isbanned(O, "posibrain"))
continue
if(O.client)
if(O.client.prefs.be_special & BE_PAI)
question(O.client)
/obj/item/device/mmi/posibrain/proc/question(var/client/C)
spawn(0)
if(!C) return
var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round")
if(!C || brainmob.key || 0 == searching)
return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
if(response == "Yes")
transfer_personality(C.mob)
else if (response == "Never for this round")
C.prefs.be_special ^= BE_PAI
/obj/item/device/mmi/posibrain/transfer_identity(var/mob/living/carbon/H)
name = "positronic brain ([H])"
brainmob.name = H.real_name
brainmob.real_name = H.real_name
brainmob.dna = H.dna
brainmob.timeofhostdeath = H.timeofdeath
brainmob.stat = 0
if(brainmob.mind)
brainmob.mind.assigned_role = "Positronic Brain"
if(H.mind)
H.mind.transfer_to(brainmob)
brainmob.mind.remove_all_antag()
brainmob.mind.wipe_memory()
brainmob << "<span class='warning'>ALL PAST LIVES ARE FORGOTTEN.</span>"
brainmob << "<span class='notice'>Hello World!</span>"
update_icon()
return
/obj/item/device/mmi/posibrain/proc/transfer_personality(var/mob/candidate)
searching = 0
brainmob.mind = candidate.mind
brainmob.ckey = candidate.ckey
name = "positronic brain ([brainmob.name])"
brainmob.mind.remove_all_antag()
brainmob.mind.wipe_memory()
brainmob << "<span class='warning'>ALL PAST LIVES ARE FORGOTTEN.</span>"
brainmob << "<b>You are a positronic brain, brought into existence on [station_name()].</b>"
brainmob << "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>"
brainmob << "<b>Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.</b>"
brainmob.mind.assigned_role = "Positronic Brain"
visible_message("<span class='notice'>The positronic brain chimes quietly.</span>")
update_icon()
/obj/item/device/mmi/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
if(brainmob && brainmob.key) return
searching = 0
update_icon()
visible_message("<span class='notice'>The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?</span>")
/obj/item/device/mmi/posibrain/examine()
set src in oview()
if(!usr || !src) return
if( (usr.disabilities & BLIND || usr.stat) && !istype(usr,/mob/dead/observer) )
usr << "<span class='notice'>Something is there but you can't see it.</span>"
return
var/msg = "<span class='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>!\n[desc]\n"
msg += "<span class='warning'>"
if(brainmob && brainmob.key)
switch(brainmob.stat)
if(CONSCIOUS)
if(!src.brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk
if(UNCONSCIOUS) msg += "<span class='warning'>It doesn't seem to be responsive.</span>\n"
if(DEAD) msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
else
msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
msg += "<span class='info'>*---------*</span>"
usr << msg
return
/obj/item/device/mmi/posibrain/New()
brainmob = new(src)
brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI","HBL","MSO","RR"))]-[rand(100, 999)]"
brainmob.real_name = brainmob.name
brainmob.loc = src
brainmob.container = src
brainmob.stat = 0
brainmob.silent = 0
dead_mob_list -= brainmob
..()
/obj/item/device/mmi/posibrain/attackby(var/obj/item/O as obj, var/mob/user as mob)
return
/obj/item/device/mmi/posibrain/update_icon()
if(searching)
icon_state = "posibrain-searching"
return
if(brainmob && brainmob.key)
icon_state = "posibrain-occupied"
else
icon_state = "posibrain"
@@ -48,7 +48,7 @@
/mob/living/carbon/human/proc/makeSkeleton()
if(!check_dna_integrity(src)) return
status_flags |= DISFIGURED
dna.species = new /datum/species/skeleton(src)
hardset_dna(src, null, null, null, null, /datum/species/skeleton)
return 1
/mob/living/carbon/proc/ChangeToHusk()
@@ -49,6 +49,7 @@
/mob/living/carbon/human/Destroy()
for(var/atom/movable/organelle in organs)
qdel(organelle)
organs = list()
return ..()
/mob/living/carbon/human/Stat()
@@ -12,7 +12,7 @@
/datum/species/human/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(chem.id == "mutationtoxin")
H << "<span class='danger'>Your flesh rapidly mutates!</span>"
H.dna.species = new /datum/species/slime()
hardset_dna(H, null, null, null, null, /datum/species/slime)
H.regenerate_icons()
H.reagents.del_reagent(chem.type)
H.faction |= "slime"
+3 -3
View File
@@ -23,16 +23,16 @@ Sorry Giacom. Please don't be mad :(
/mob/living/Destroy()
. = ..()
..()
for(var/mob/living/simple_animal/drone/D in player_list)
for(var/image/I in staticOverlays)
D.staticOverlays.Remove(I)
D.client.images.Remove(I)
del(I)
qdel(I)
staticOverlays.len = 0
del(src)
return QDEL_HINT_HARDDEL_NOW
/mob/living/proc/generateStaticOverlay()
+6 -1
View File
@@ -218,9 +218,14 @@ var/list/ai_list = list()
var/area/borg_area
for(var/mob/living/silicon/robot/R in connected_robots)
borg_area = get_area(R)
var/robot_status = "Nominal"
if(R.stat || !R.client)
robot_status = "OFFLINE"
else if(!R.cell || R.cell.charge <= 0)
robot_status = "DEPOWERED"
//Name, Health, Battery, Module, Area, and Status! Everything an AI wants to know about its borgies!
stat(null, text("[R.name] | S.Integrity: [R.health]% | Cell: [R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "Empty"] | \
Module: [R.designation] | Loc: [borg_area.name] | Status: [R.stat || !R.client ? "OFFLINE" : "Normal"]"))
Module: [R.designation] | Loc: [borg_area.name] | Status: [robot_status]"))
else
stat(null, text("Systems nonfunctional"))
@@ -59,6 +59,7 @@
/mob/living/silicon/ai/Destroy()
eyeobj.ai = null
qdel(eyeobj) // No AI, no Eye
eyeobj = null
..()
/atom/proc/move_camera_by_click()
@@ -225,7 +225,7 @@
else
src << "<span class='notice'>Unusable emote '[act]'. Say *help for a list.</span>"
if ((message && src.stat == 0))
if (message && src.stat == CONSCIOUS)
log_emote("[name]/[key] : [message]")
if (m_type & 1)
visible_message(message)
@@ -27,6 +27,9 @@
else
msg += "Its cover is closed[locked ? "" : ", and looks unlocked"].\n"
if(cell && cell.charge <= 0)
msg += "<span class='warning'>Its battery indicator is blinking red!</span>\n"
switch(src.stat)
if(CONSCIOUS)
if(!src.client) msg += "It appears to be in stand-by mode.\n" //afk
+32 -26
View File
@@ -59,6 +59,7 @@
var/toner = 0
var/tonermax = 40
var/jetpackoverlay = 0
var/braintype = "Cyborg"
/mob/living/silicon/robot/New(loc)
spark_system = new /datum/effect/effect/system/spark_spread()
@@ -72,7 +73,6 @@
robot_modules_background.layer = 19 //Objects that appear on screen are on layer 20, UI should be just below it.
ident = rand(1, 999)
updatename()
update_icons()
if(!cell)
@@ -100,17 +100,20 @@
..()
//MMI stuff. Held togheter by magic. ~Miauw
mmi = new(src)
mmi.brain = new /obj/item/organ/brain(mmi)
mmi.brain.name = "[real_name]'s brain"
mmi.locked = 1
mmi.icon_state = "mmi_full"
mmi.name = "Man-Machine Interface: [real_name]"
mmi.brainmob = new(src)
mmi.brainmob.name = src.real_name
mmi.brainmob.real_name = src.real_name
mmi.brainmob.container = mmi
mmi.contents += mmi.brainmob
if(!mmi || !mmi.brainmob)
mmi = new(src)
mmi.brain = new /obj/item/organ/brain(mmi)
mmi.brain.name = "[real_name]'s brain"
mmi.locked = 1
mmi.icon_state = "mmi_full"
mmi.name = "Man-Machine Interface: [real_name]"
mmi.brainmob = new(src)
mmi.brainmob.name = src.real_name
mmi.brainmob.real_name = src.real_name
mmi.brainmob.container = mmi
mmi.contents += mmi.brainmob
updatename()
playsound(loc, 'sound/voice/liveagain.ogg', 75, 1)
aicamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
@@ -123,6 +126,7 @@
if(T) mmi.loc = T
if(mmi.brainmob)
mind.transfer_to(mmi.brainmob)
mmi.update_icon()
else
src << "<span class='boldannounce'>Oops! Something went very wrong, your MMI was unable to receive your mind. You have been ghosted. Please make a bug report so we can fix this bug.</span>"
ghostize()
@@ -236,7 +240,7 @@
if(custom_name)
changed_name = custom_name
else
changed_name = "[(designation ? "[designation] " : "")]Cyborg-[num2text(ident)]"
changed_name = "[(designation ? "[designation] " : "")][mmi.braintype]-[num2text(ident)]"
real_name = changed_name
name = real_name
if(camera)
@@ -401,28 +405,31 @@
var/obj/item/weapon/weldingtool/WT = W
if (src == user)
user << "<span class='warning'>You lack the reach to be able to repair yourself!</span>"
return 1
return
if (src.health >= src.maxHealth)
user << "<span class='warning'>[src] is already in good condition!</span>"
return 1
if (WT.remove_fuel(0, user))
return
if (WT.remove_fuel(0, user)) //The welder has 1u of fuel consumed by it's afterattack, so we don't need to worry about taking any away.
adjustBruteLoss(-30)
updatehealth()
add_fingerprint(user)
visible_message("[user] has fixed some of the dents on [src].")
return 0
return
else
user << "<span class='warning'>The welder must be on for this task!</span>"
return 1
return
else if(istype(W, /obj/item/stack/cable_coil) && wiresexposed)
var/obj/item/stack/cable_coil/coil = W
if (coil.use(1))
adjustFireLoss(-30)
updatehealth()
user.visible_message("[user] has fixed some of the burnt wires on [src].", "<span class='notice'>You fix some of the burnt wires on [src].</span>")
if (fireloss > 0)
if (coil.use(1))
adjustFireLoss(-30)
updatehealth()
user.visible_message("[user] has fixed some of the burnt wires on [src].", "<span class='notice'>You fix some of the burnt wires on [src].</span>")
else
user << "<span class='warning'>You need more cable to repair [src]!</span>"
else
user << "<span class='warning'>You need one length of cable to repair [src]!</span>"
user << "The wires seem fine, there's no need to fix them."
else if (istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover
if(opened)
@@ -447,7 +454,6 @@
W.loc = src
cell = W
user << "<span class='notice'>You insert the power cell.</span>"
// chargecount = 0
update_icons()
else if (istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/multitool) || istype(W, /obj/item/device/assembly/signaler))
@@ -720,7 +726,7 @@
/mob/living/silicon/robot/update_icons()
overlays.Cut()
if(stat == 0)
if(stat == CONSCIOUS)
switch(icon_state)
if("robot")
overlays += "eyes-standard"
@@ -1039,4 +1045,4 @@
if(2) //New Module
connected_ai << "<br><br><span class='notice'>NOTICE - Cyborg module change detected: [name] has loaded the [designation] module.</span><br>"
if(3) //New Name
connected_ai << "<br><br><span class='notice'>NOTICE - Cyborg reclassification detected: [oldname] is now designated as [newname].</span><br>"
connected_ai << "<br><br><span class='notice'>NOTICE - Cyborg reclassification detected: [oldname] is now designated as [newname].</span><br>"
@@ -16,8 +16,7 @@
see_in_dark = 6
species = /mob/living/simple_animal/pet/cat
childtype = /mob/living/simple_animal/pet/cat/kitten
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
meat_amount = 3
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -54,8 +54,7 @@
emote_see = list("shakes its head.", "shivers.")
speak_chance = 1
turns_per_move = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi
meat_amount = 3
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi = 3)
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
@@ -10,8 +10,7 @@
emote_see = list("clacks")
speak_chance = 1
turns_per_move = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
meat_amount = 2
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
@@ -16,7 +16,7 @@
var/drone_type = /mob/living/simple_animal/drone //Type of drone that will be spawned
/obj/item/drone_shell/attack_ghost(mob/user)
if(jobban_isbanned(user,"pAI"))
if(jobban_isbanned(user,"drone"))
return
var/be_drone = alert("Become a drone? (Warning, You can no longer be cloned!)",,"Yes","No")
@@ -12,8 +12,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
meat_amount = 4
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 4)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -98,8 +97,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
meat_amount = 6
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 6)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -161,8 +159,7 @@
density = 0
speak_chance = 2
turns_per_move = 2
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
meat_amount = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -204,10 +201,9 @@ var/global/chicken_count = 0
density = 0
speak_chance = 2
turns_per_move = 3
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
var/egg_type = /obj/item/weapon/reagent_containers/food/snacks/egg
var/food_type = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat
meat_amount = 2
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -13,7 +13,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 3)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -13,8 +13,7 @@
see_in_dark = 6
maxHealth = 5
health = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
meat_amount = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "splats"
@@ -12,8 +12,7 @@
emote_see = list("shakes its head.", "chases its tail.","shivers.")
speak_chance = 1
turns_per_move = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/pug
meat_amount = 3
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/pug = 3)
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
@@ -10,9 +10,8 @@
response_disarm = "shoves"
response_harm = "hits"
speed = 0
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
skin_type = /obj/item/stack/sheet/animalhide/xeno
meat_amount = 3
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 4,
/obj/item/stack/sheet/animalhide/xeno = 1)
maxHealth = 100
health = 100
harm_intent_damage = 5
@@ -78,6 +77,8 @@
retreat_distance = 5
minimum_distance = 5
move_to_delay = 4
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 4,
/obj/item/stack/sheet/animalhide/xeno = 1)
projectiletype = /obj/item/projectile/neurotox
projectilesound = 'sound/weapons/pierce.ogg'
status_flags = 0
@@ -124,6 +125,8 @@
move_to_delay = 4
maxHealth = 400
health = 400
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 10,
/obj/item/stack/sheet/animalhide/xeno = 2)
mob_size = MOB_SIZE_LARGE
/obj/item/projectile/neurotox
@@ -13,8 +13,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear
meat_amount = 3
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear = 5)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -7,8 +7,7 @@
icon_gib = "carp_gib"
speak_chance = 0
turns_per_move = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
meat_amount = 2
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/carpmeat = 2)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -41,11 +40,9 @@
/mob/living/simple_animal/hostile/carp/AttackingTarget()
..()
if(isliving(target))
var/mob/living/L = target
if(prob(15))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
if(ishuman(target))
var/mob/living/carbon/human/H = target
H.adjustStaminaLoss(8)
/mob/living/simple_animal/hostile/carp/holocarp
icon_state = "holocarp"
@@ -6,8 +6,6 @@
icon_state = "eyeball"
icon_living = "eyeball"
icon_gib = ""
meat_type = null
meat_amount = 0
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -32,8 +32,7 @@
speak_chance = 5
turns_per_move = 5
see_in_dark = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/spider
meat_amount = 2
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/spider = 2, /obj/item/weapon/reagent_containers/food/snacks/spiderleg = 8)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -55,8 +54,7 @@
icon_state = "nurse"
icon_living = "nurse"
icon_dead = "nurse_dead"
meat_type = /obj/item/weapon/reagent_containers/food/snacks/spidereggs
meat_amount = 4
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/spider = 2, /obj/item/weapon/reagent_containers/food/snacks/spiderleg = 8, /obj/item/weapon/reagent_containers/food/snacks/spidereggs = 4)
maxHealth = 40
health = 40
melee_damage_lower = 5
@@ -94,12 +92,6 @@
stop_automated_movement = 0
walk(src,0)
/mob/living/simple_animal/hostile/poison/giant_spider/harvest(mob/living/user)
var/leg_amount = rand(4,8)
for(var/i=0, i<leg_amount, i++)
new /obj/item/weapon/reagent_containers/food/snacks/spiderleg(src.loc)
..()
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/proc/GiveUp(var/C)
spawn(100)
if(busy == MOVING_TO_TARGET)
@@ -9,8 +9,7 @@
maxHealth = 30
health = 30
see_in_dark = 3
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/killertomato
meat_amount = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/killertomato = 2)
response_help = "prods"
response_disarm = "pushes aside"
response_harm = "smacks"
@@ -8,8 +8,7 @@
turns_per_move = 1
maxHealth = 10
health = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
meat_amount = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "whacks"
@@ -17,6 +17,7 @@
melee_damage_lower = 6
melee_damage_upper = 5
attacktext = "bites"
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
pass_flags = PASSTABLE
faction = list("hostile")
attack_sound = 'sound/weapons/bite.ogg'
@@ -43,8 +43,7 @@
speak_chance = 1 //1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s
turns_per_move = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cracker/
meat_amount = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/cracker/ = 1)
melee_damage_upper = 10
melee_damage_lower = 5
@@ -336,11 +336,3 @@
M.drowsyness += 7
spawn(70)
M.sleeping += 30
/* (WIP)
Strangulate: Chokes the target with crushing force.
/obj/effect/proc_holder/spell/targeted/revenant_strangulate
name = "Unlock: Strangulate (30E)"
desc = "Strangles a target with an asphyxiating hand, dealing decent oxygen damage to them."
*/
@@ -1,7 +1,7 @@
/datum/round_event_control/revenant
name = "Spawn Revenant"
typepath = /datum/round_event/revenant
weight = 15
weight = 0 //Admin only
max_occurrences = 3
earliest_start = 0 //Meant to mix things up early-game.
@@ -18,9 +18,7 @@
var/turns_per_move = 1
var/turns_since_move = 0
var/meat_amount = 0
var/meat_type
var/skin_type
var/list/butcher_results = null
var/stop_automated_movement = 0 //Use this to temporarely stop random movement or to if you write special movement code for animals.
var/wander = 1 // Does the mob wander around when idle?
var/stop_automated_movement_when_pulled = 1 //When set to 1 this stops the animal from moving when someone is pulling it.
@@ -98,6 +96,8 @@
eye_blind = 0
if(eye_blurry)
eye_blurry = 0
if(eye_stat)
eye_stat = 0
//Ears
if(disabilities & DEAF)
@@ -212,11 +212,10 @@
/mob/living/simple_animal/gib(var/animation = 0)
if(icon_gib)
flick(icon_gib, src)
if(meat_amount && meat_type)
for(var/i = 0; i < meat_amount; i++)
new meat_type(src.loc)
if(skin_type)
new skin_type(src.loc)
if(butcher_results)
for(var/path in butcher_results)
for(var/i = 1; i <= butcher_results[path];i++)
new path(src.loc)
..()
@@ -359,7 +358,7 @@
user << "<span class='notice'> [src] is dead, medical items won't bring it back to life.</span>"
return
if((meat_type || skin_type) && (stat == DEAD)) //if the animal has a meat, and if it is dead.
if((butcher_results) && (stat == DEAD))
user.changeNext_move(CLICK_CD_MELEE)
var/sharpness = is_sharp(O)
if(sharpness)
+1 -1
View File
@@ -69,7 +69,7 @@
stat("Game Mode:", (ticker.hide_mode) ? "Secret" : "[master_mode]")
if(ticker.current_state == GAME_STATE_PREGAME)
stat("Time To Start:", (ticker.can_fire) ? "[round(ticker.timeLeft / 10)]s" : "DELAYED")
stat("Time To Start:", (ticker.timeLeft >= 0) ? "[round(ticker.timeLeft / 10)]s" : "DELAYED")
stat("Players:", "[ticker.totalPlayers]")
if(client.holder)
+2 -2
View File
@@ -147,9 +147,9 @@
domutcheck(O)
if(!dna.species)
O.dna.species = new /datum/species/human()
hardset_dna(O, null, null, null, null, /datum/species/human)
else
O.dna.species = new dna.species.type()
hardset_dna(O, null, null, null, null, dna.species.type)
dna = null
if(newname) //if there's a name as an argument, always take that one over the current name