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:
@@ -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
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 59 KiB |
Reference in New Issue
Block a user