Landmark Shuttles (#8512)

The lifeless live again. Or in this case, what never actually lived here.

Ports Baystation12/Baystation12#17460 probably for real this time. What this allows us to do is create shuttles on runtime and make shuttles easier by just making landmarks and a shuttle instead of areas and shuttles. Also allows runtime landmark creation via flares or whatever AND allows shuttles to use different landmarks at will.

I removed most of the overmap stuff, I think. It shouldn't be hard to slam it in whenever we need to.

Changes:

    "Shuttle code has been completely reworked."
    "Shuttles can now be modified to have more than one destination."
    "Shuttles now have a takeoff sound."
    "You can now throw mobs against walls to damage them. A lot."
    "You now need a neckgrab to throw mobs."
    "BEING UNBUCKLED DURING SHUTTLE LAUNCH IS DANGEROUS! Don't do it."
    "Adminghosts can now interact with all shuttles."
This commit is contained in:
Matt Atlas
2020-04-05 20:15:31 +02:00
committed by GitHub
parent cf7fe3eff7
commit 2e5fdf970c
100 changed files with 15780 additions and 16628 deletions

View File

@@ -352,13 +352,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/holyblock = 0
if(usr.invisibility <= SEE_INVISIBLE_LIVING || (usr.mind in cult.current_antagonists))
for(var/turf/T in get_area_turfs(thearea.type))
for(var/turf/T in get_area_turfs(thearea))
if(!T.holy)
L+=T
else
holyblock = 1
else
for(var/turf/T in get_area_turfs(thearea.type))
for(var/turf/T in get_area_turfs(thearea))
L+=T
if(!L || !L.len)

View File

@@ -319,16 +319,19 @@ var/list/slot_equipment_priority = list( \
src.throw_mode_off()
if(stat || !target)
return
if(target.type == /obj/screen) return
if(target.type == /obj/screen)
return
var/atom/movable/item = src.get_active_hand()
if(!item) return
if(!item)
return
if (istype(item, /obj/item/grab))
var/can_throw = TRUE
if(istype(item, /obj/item/grab))
var/obj/item/grab/G = item
item = G.throw_held() //throw the person instead of the grab
if(ismob(item))
if(ismob(item) && G.state >= GRAB_NECK)
var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors
var/turf/end_T = get_turf(target)
if(start_T && end_T)
@@ -346,8 +349,11 @@ var/list/slot_equipment_priority = list( \
msg_admin_attack("[usr.name] ([usr.ckey]) has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[usr.x];Y=[usr.y];Z=[usr.z]'>JMP</a>)",ckey=key_name(usr),ckey_target=key_name(M))
qdel(G)
else
can_throw = FALSE
if(!item) return //Grab processing has a chance of returning null
if(!item || !can_throw)
return //Grab processing has a chance of returning null
src.remove_from_mob(item)

View File

@@ -235,9 +235,10 @@
src.embedded += O
src.verbs += /mob/proc/yank_out_object
//This is called when the mob is thrown into a dense turf
/mob/living/proc/turf_collision(var/turf/T, var/speed)
src.take_organ_damage(speed*5)
/mob/living/proc/turf_collision(var/turf/T, var/speed = THROWFORCE_SPEED_DIVISOR)
visible_message("<span class='danger'>[src] slams into \the [T]!</span>")
playsound(T, 'sound/effects/bangtaper.ogg', 50, 1, 1)//so it plays sounds on the turf instead, makes for awesome carps to hull collision and such
apply_damage(speed*5, BRUTE)
/mob/living/proc/near_wall(var/direction,var/distance=1)
var/turf/T = get_step(get_turf(src),direction)

View File

@@ -231,7 +231,8 @@ var/list/ai_verbs_default = list(
to_chat(src, "<b>These laws may be changed by other players, or by you if you are malfunctioning.</b>")
job = "AI"
setup_icon()
if(client)
setup_icon()
eyeobj.possess(src)
/mob/living/silicon/ai/getFireLoss()
@@ -311,7 +312,8 @@ var/list/ai_verbs_default = list(
id_card.assignment = "AI"
id_card.update_name()
setup_icon() //this is because the ai custom name is related to the ai name, so, we just call the setup icon after someone named their ai
if(client)
setup_icon() //this is because the ai custom name is related to the ai name, so, we just call the setup icon after someone named their ai
SSrecords.reset_manifest()
/*

View File

@@ -281,7 +281,7 @@
destinations += T
var/area/A = get_area(src)
if(!isNotStationLevel(A.z))
var/list/area_turfs = get_area_turfs(A, null, 0, FALSE)
var/list/area_turfs = get_area_turfs(A)
var/list/floor_turfs = list()
for(var/turf/simulated/floor/T in (area_turfs))
if(turf_clear(T))

View File

@@ -164,7 +164,6 @@
src.move_speed = world.time - src.l_move_time
src.l_move_time = world.time
src.m_flag = 1
if ((A != src.loc && A && A.z == src.z))
src.last_move = get_dir(A, src.loc)