TralezaboOoOoo Part 1/1: Paranormal Mulebot-chan Carries Your Ghosts (#45958)

* song for this fix: Streets of Rogue OST - Hit Me With Your Best Rock

* muahahaha

* what the fuck

* linter be happy

* visible G-G-G-GHOSTS

* okay, ACTUAL visuals for ghosts + youtube video soon

* NEW FREAKING SPRITES THAT WILL BLOW YOUR SOCKS OFF

* boom... it now will actually have the name it was given

* first off, the name
This commit is contained in:
tralezab
2019-08-20 06:48:34 -07:00
committed by moo
parent 59b1ae172f
commit e2ddf27890
2 changed files with 95 additions and 6 deletions
@@ -33,6 +33,7 @@
path_image_color = "#7F5200"
var/base_icon = "mulebot"
var/atom/movable/load = null
var/mob/living/passenger = null
var/turf/target // this is turf to navigate to (location of beacon)
@@ -48,8 +49,11 @@
var/obj/item/stock_parts/cell/cell
var/bloodiness = 0
/mob/living/simple_animal/bot/mulebot/Initialize()
/mob/living/simple_animal/bot/mulebot/Initialize(mapload)
. = ..()
if(prob(0.666) && mapload)
new /mob/living/simple_animal/bot/mulebot/paranormal(get_turf(src))
qdel(src)
wires = new /datum/wires/mulebot(src)
var/datum/job/cargo_tech/J = new/datum/job/cargo_tech
access_card.access = J.get_access()
@@ -74,9 +78,9 @@
/mob/living/simple_animal/bot/mulebot/proc/set_id(new_id)
id = new_id
if(paicard)
bot_name = "\improper MULEbot ([new_id])"
bot_name = "[initial(name)] ([new_id])"
else
name = "\improper MULEbot ([new_id])"
name = "[initial(name)] ([new_id])"
/mob/living/simple_animal/bot/mulebot/bot_reset()
..()
@@ -125,9 +129,9 @@
/mob/living/simple_animal/bot/mulebot/update_icon()
if(open)
icon_state="mulebot-hatch"
icon_state="[base_icon]-hatch"
else
icon_state = "mulebot[wires.is_cut(WIRE_AVOIDANCE)]"
icon_state = "[base_icon][wires.is_cut(WIRE_AVOIDANCE)]"
cut_overlays()
if(load && !ismob(load))//buckling handles the mob offsets
load.pixel_y = initial(load.pixel_y) + 9
@@ -449,7 +453,7 @@
num_steps--
if(mode != BOT_IDLE)
var/process_timer = addtimer(CALLBACK(src, .proc/process_bot), 2, TIMER_LOOP|TIMER_STOPPABLE)
addtimer(CALLBACK(GLOBAL_PROC, /proc/deltimer, process_timer), (num_steps*2) + 1)
addtimer(CALLBACK(GLOBAL_PROC, /proc/deltimer, process_timer), (num_steps*2) + 1)
/mob/living/simple_animal/bot/mulebot/proc/process_bot()
if(!on || client)
@@ -739,6 +743,91 @@
if(..())
visible_message("[src] safeties are locked on.")
/mob/living/simple_animal/bot/mulebot/paranormal//allows ghosts only unless hacked to actually be useful
name = "paranormal MULEbot"
desc = "A Multiple Utility Load Effector bot. It only seems to accept paranormal forces, and for this reason is fucking useless."
icon_state = "paranormalmulebot0"
base_icon = "paranormalmulebot"
var/static/mutable_appearance/ghost_overlay
var/ghost_rider = FALSE
/mob/living/simple_animal/bot/mulebot/paranormal/MouseDrop_T(atom/movable/AM, mob/user)
var/mob/living/L = user
if(user.incapacitated() || (istype(L) && !(L.mobility_flags & MOBILITY_STAND)))
return
if(!istype(AM) || iscameramob(AM) || istype(AM, /obj/effect/dummy/phased_mob)) //allows ghosts!
return
load(AM)
/mob/living/simple_animal/bot/mulebot/paranormal/load(atom/movable/AM)
if(load || AM.anchored)
return
if(!isturf(AM.loc)) //To prevent the loading from stuff from someone's inventory or screen icons.
return
if(!istype(AM, /mob/dead/observer) && !wires.is_cut(WIRE_LOADCHECK))
buzz(SIGH)
return // if not hacked, only allow ghosts to be loaded
var/obj/structure/closet/crate/CRATE
if(istype(AM, /obj/structure/closet/crate))
CRATE = AM
if(CRATE) // if it's a crate, close before loading
CRATE.close()
if(isobj(AM))
var/obj/O = AM
if(O.has_buckled_mobs() || (locate(/mob) in AM)) //can't load non crates objects with mobs buckled to it or inside it.
buzz(SIGH)
return
if(isliving(AM))
if(!load_mob(AM))
return
else
AM.forceMove(src)
load = AM
mode = BOT_IDLE
update_icon()
if(istype(AM, /mob/dead/observer))
ghost_rider = TRUE
RegisterSignal(AM, COMSIG_MOVABLE_MOVED, .proc/ghostmoved)
/mob/living/simple_animal/bot/mulebot/paranormal/update_icon()
if(load && isobserver(load) && isnull(ghost_overlay))//there are issues with adding a ghost as an overlay, and this prevents metagaming to see who is dead
ghost_rider = TRUE
visible_message("<span class='warning'>A ghostly figure appears on [src]!</span>")
ghost_overlay = ghost_overlay || mutable_appearance('icons/mob/mob.dmi')
ghost_overlay.icon_state = "ghost"
ghost_overlay.pixel_y = 9
add_overlay(ghost_overlay)
if(open)
icon_state="[base_icon]-hatch"
else
icon_state = "[base_icon][wires.is_cut(WIRE_AVOIDANCE)]"
if(!ghost_rider)
cut_overlays()
if(load && !ismob(load))//buckling handles the mob offsets
load.pixel_y = initial(load.pixel_y) + 9
if(load.layer < layer)
load.layer = layer + 0.01
add_overlay(load)
return
/mob/living/simple_animal/bot/mulebot/paranormal/proc/ghostmoved(atom/movable/AM, OldLoc, Dir, Forced)
visible_message("<span class='notice'>The ghostly figure vanishes...</span>")
UnregisterSignal(AM, COMSIG_MOVABLE_MOVED)
ghost_rider = FALSE
cut_overlays()
QDEL_NULL(ghost_overlay)
unload(0)
update_icon()
#undef SIGH
#undef ANNOYED
#undef DELIGHT