Merge pull request #11474 from comma/slipping

Refactored slipping code a little.
This commit is contained in:
PsiOmegaDelta
2015-11-22 11:19:30 +01:00
6 changed files with 37 additions and 68 deletions
@@ -1371,10 +1371,6 @@
if(update_hud)
handle_regular_hud_updates()
/mob/living/carbon/human/Check_Shoegrip()
if(shoes && (shoes.item_flags & NOSLIP) && istype(shoes, /obj/item/clothing/shoes/magboots)) //magboots + dense_object = no floating
return 1
return 0
/mob/living/carbon/human/can_stand_overridden()
if(wearing_rig && wearing_rig.ai_can_move_suit(check_for_ai = 1))
@@ -87,18 +87,9 @@
return 0
/mob/living/carbon/human/Process_Spaceslipping(var/prob_slip = 5)
//If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such.
if(species.flags & NO_SLIP)
return
if(stat)
prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense.
//Do we have magboots or such on if so no slip
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.item_flags & NOSLIP))
prob_slip = 0
/mob/living/carbon/human/slip_chance(var/prob_slip = 5)
if(!..())
return 0
//Check hands and mod slip
if(!l_hand) prob_slip -= 2
@@ -106,5 +97,11 @@
if (!r_hand) prob_slip -= 2
else if(r_hand.w_class <= 2) prob_slip -= 1
prob_slip = round(prob_slip)
return(prob_slip)
return prob_slip
/mob/living/carbon/human/Check_Shoegrip()
if(species.flags & NO_SLIP)
return 1
if(shoes && (shoes.item_flags & NOSLIP) && istype(shoes, /obj/item/clothing/shoes/magboots)) //magboots + dense_object = no floating
return 1
return 0
-2
View File
@@ -38,8 +38,6 @@
//stuff in the stomach
handle_stomach()
update_gravity(mob_has_gravity())
update_pulling()
for(var/obj/item/weapon/grab/G in src)
@@ -247,7 +247,7 @@ var/list/mob_hat_cache = list()
..()
//DRONE MOVEMENT.
/mob/living/silicon/robot/drone/Process_Spaceslipping(var/prob_slip)
/mob/living/silicon/robot/drone/slip_chance(var/prob_slip)
return 0
//CONSOLE PROCS
@@ -1,4 +1,4 @@
/mob/living/silicon/robot/Process_Spaceslipping(var/prob_slip)
/mob/living/silicon/robot/slip_chance(var/prob_slip)
if(module && module.no_slip)
return 0
..(prob_slip)
+24 -46
View File
@@ -11,7 +11,7 @@
return
/mob/proc/setMoveCooldown(var/timeout)
if(client)
if(client)
client.move_delay = max(world.time + timeout, client.move_delay)
/client/North()
@@ -450,15 +450,15 @@
if(!Check_Dense_Object()) //Nothing to push off of so end here
update_floating(0)
return 0
update_floating(1)
update_floating(1)
if(restrained()) //Check to see if we can do things
return 0
//Check to see if we slipped
if(prob(Process_Spaceslipping(5)) && !buckled)
src << "\blue <B>You slipped!</B>"
if(prob(slip_chance(5)) && !buckled)
src << "<span class='warning'>You slipped!</span>"
src.inertia_dir = src.last_move
step(src, src.inertia_dir)
return 0
@@ -468,52 +468,30 @@
/mob/proc/Check_Dense_Object() //checks for anything to push off in the vicinity. also handles magboots on gravity-less floors tiles
var/dense_object = 0
var/shoegrip
var/shoegrip = Check_Shoegrip()
for(var/turf/turf in oview(1,src))
if(istype(turf,/turf/space))
continue
for(var/turf/simulated/T in trange(1,src)) //we only care for non-space turfs
if(T.density) //walls work
return 1
else
var/area/A = T.loc
if(A.has_gravity || shoegrip)
return 1
if(istype(turf,/turf/simulated/floor)) // Floors don't count if they don't have gravity
var/area/A = turf.loc
if(istype(A) && A.has_gravity == 0)
if(shoegrip == null)
shoegrip = Check_Shoegrip() //Shoegrip is only ever checked when a zero-gravity floor is encountered to reduce load
if(!shoegrip)
continue
for(var/obj/O in orange(1, src))
if(istype(O, /obj/structure/lattice))
return 1
if(O && O.density && O.anchored)
return 1
dense_object++
break
if(!dense_object && (locate(/obj/structure/lattice) in oview(1, src)))
dense_object++
//Lastly attempt to locate any dense objects we could push off of
//TODO: If we implement objects drifing in space this needs to really push them
//Due to a few issues only anchored and dense objects will now work.
if(!dense_object)
for(var/obj/O in oview(1, src))
if((O) && (O.density) && (O.anchored))
dense_object++
break
return dense_object
return 0
/mob/proc/Check_Shoegrip()
return 0
/mob/proc/Process_Spaceslipping(var/prob_slip = 5)
//Setup slipage
//If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such.
/mob/proc/slip_chance(var/prob_slip = 5)
if(stat)
prob_slip = 0 // Changing this to zero to make it line up with the comment.
prob_slip = round(prob_slip)
return(prob_slip)
/mob/proc/mob_has_gravity(turf/T)
return has_gravity(src, T)
/mob/proc/update_gravity()
return
return 0
if(Check_Shoegrip())
return 0
return prob_slip