/obj/item/projectile/hivebotbullet damage = 5 mobdamage = list(BRUTE = 5, BURN = 0, TOX = 0, OXY = 0, CLONE = 0) /obj/hivebot name = "Hivebot" desc = "A small robot" icon = 'Hivebot.dmi' icon_state = "basic" layer = 5.0 density = 1 anchored = 0 var alive = 1 health = 10 task = "thinking" aggressive = 1 wanderer = 1 opensdoors = 1 frustration = 0 last_found = null target = null oldtarget_name = null target_lastloc = null atkcarbon = 1 atksilicon = 0 attack = 0 attacking = 0 steps = 0 firevuln = 0.5 brutevuln = 1 seekrange = 8 basic_damage = 2 armor = 5 proc patrol_step() process() seek_target() Die() ChaseAttack(mob/M) RunAttack(mob/M) Shoot(var/target, var/start, var/user, var/bullet = 0) TakeDamage(var/damage = 0) attackby(obj/item/weapon/W as obj, mob/living/user as mob) ..() if (!src.alive) return var/damage = 0 switch(W.damtype) if("fire") damage = W.force * firevuln if("brute") damage = W.force * brutevuln TakeDamage(damage) attack_hand(var/mob/user as mob) if (!src.alive) return if (user.a_intent == "hurt") TakeDamage(2 * brutevuln) for(var/mob/O in viewers(src, null)) O.show_message("\red [user] punches [src]!", 1) playsound(src.loc, pick('punch1.ogg','punch2.ogg','punch3.ogg','punch4.ogg'), 100, 1) patrol_step() var/moveto = locate(src.x + rand(-1,1),src.y + rand(-1, 1),src.z) if (istype(moveto, /turf/simulated/floor) || istype(moveto, /turf/simulated/shuttle/floor) || istype(moveto, /turf/unsimulated/floor)) step_towards(src, moveto) if(src.aggressive) seek_target() steps += 1 if (steps == rand(5,20)) src.task = "thinking" Bump(M as mob|obj) spawn(0) if ((istype(M, /obj/machinery/door))) var/obj/machinery/door/D = M if (src.opensdoors) D.open() src.frustration = 0 else src.frustration ++ else if ((istype(M, /mob/living/)) && (!src.anchored)) src.loc = M:loc src.frustration = 0 return return Bumped(M as mob|obj) spawn(0) var/turf/T = get_turf(src) M:loc = T bullet_act(var/obj/item/projectile/Proj) TakeDamage(Proj.damage) ex_act(severity) switch(severity) if(1.0) src.Die() return if(2.0) TakeDamage(20) return return emp_act(serverity) src.Die()//Currently why not return meteorhit() src.Die() return blob_act() if(prob(25)) src.Die() return process() set background = 1 if (!src.alive) return switch(task) if("thinking") src.attack = 0 src.target = null sleep(15) walk_to(src,0) if (src.aggressive) seek_target() if (src.wanderer && !src.target) src.task = "wandering" if("chasing") if (src.frustration >= 8) src.target = null src.last_found = world.time src.frustration = 0 src.task = "thinking" walk_to(src,0) if (target) if (get_dist(src, src.target) <= 1) var/mob/living/carbon/M = src.target ChaseAttack(M) src.task = "attacking" src.anchored = 1 src.target_lastloc = M.loc else var/turf/olddist = get_dist(src, src.target) walk_to(src, src.target,1,4) if ((get_dist(src, src.target)) >= (olddist)) src.frustration++ else src.frustration = 0 sleep(5) else src.task = "thinking" if("attacking") // see if he got away if ((get_dist(src, src.target) > 1) || ((src.target:loc != src.target_lastloc))) src.anchored = 0 src.task = "chasing" else if (get_dist(src, src.target) <= 1) var/mob/living/carbon/M = src.target if (!src.attacking) RunAttack(src.target) if (!src.aggressive) src.task = "thinking" src.target = null src.anchored = 0 src.last_found = world.time src.frustration = 0 src.attacking = 0 else if(M!=null) if (M.health < 0) src.task = "thinking" src.target = null src.anchored = 0 src.last_found = world.time src.frustration = 0 src.attacking = 0 else src.anchored = 0 src.attacking = 0 src.task = "chasing" if("wandering") patrol_step() sleep(10) spawn(8) process() return New() spawn(0) process() ..() seek_target() src.anchored = 0 for (var/mob/living/C in view(src.seekrange,src)) if (src.target) src.task = "chasing" break if ((C.name == src.oldtarget_name) && (world.time < src.last_found + 100)) continue if (istype(C, /mob/living/carbon/) && !src.atkcarbon) continue if (istype(C, /mob/living/silicon/) && !src.atksilicon) continue if (C.health < 0) continue if (istype(C, /mob/living/carbon/) && src.atkcarbon) src.attack = 1 if (istype(C, /mob/living/silicon/) && src.atksilicon) src.attack = 1 if (src.attack) src.target = C src.oldtarget_name = C.name src.task = "chasing" break else continue Die() if (!src.alive) return src.alive = 0 walk_to(src,0) src.visible_message("[src] blows apart!") var/turf/Ts = get_turf(src) new /obj/decal/cleanable/robot_debris(Ts) var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread s.set_up(3, 1, src) s.start() del(src) TakeDamage(var/damage = 0) var/tempdamage = (damage-armor) if(tempdamage > 0) src.health -= tempdamage else src.health-- if(src.health <= 0) src.Die() ChaseAttack(mob/M) for(var/mob/O in viewers(src, null)) O.show_message("\red [src] leaps at [src.target]!", 1) RunAttack(mob/M) src.attacking = 1 for(var/mob/O in viewers(src, null)) O.show_message("\red [src] claws at [src.target]!", 1) src.target:bruteloss += basic_damage spawn(25) src.attacking = 0 Shoot(var/target, var/start, var/user, var/bullet = 0) if(target == start) return var/obj/item/projectile/hivebotbullet/A = new /obj/item/projectile/hivebotbullet(user:loc) playsound(user, 'Gunshot.ogg', 100, 1) if(!A) return if (!istype(target, /turf)) del(A) return A.current = target A.yo = target:y - start:y A.xo = target:x - start:x spawn( 0 ) A.process() return /obj/hivebot/range name = "Hivebot" desc = "A smallish robot, this one is armed!" var/rapid = 0 seek_target() src.anchored = 0 for (var/mob/living/C in view(src.seekrange,src)) if (!src.alive) break if (C.health < 0) continue if (istype(C, /mob/living/carbon/) && src.atkcarbon) src.attack = 1 if (istype(C, /mob/living/silicon/) && src.atksilicon) src.attack = 1 if (src.attack) src.target = C src.oldtarget_name = C.name for(var/mob/O in viewers(src, null)) O.show_message("\red [src] fires at [src.target]!", 1) var/tturf = get_turf(target) if(rapid) spawn(1) Shoot(tturf, src.loc, src) spawn(4) Shoot(tturf, src.loc, src) spawn(6) Shoot(tturf, src.loc, src) else Shoot(tturf, src.loc, src) src.attack = 0 sleep(12) seek_target() src.task = "thinking" break else continue /obj/hivebot/range/rapid rapid = 1 /obj/hivebot/range/strong name = "Strong Hivebot" desc = "A robot, this one is armed and looks tough!" health = 50 armor = 10 /obj/hivebot/range/borgkill health = 20 atksilicon = 1