From f22948967f573651457e07a825a5e846a848fd12 Mon Sep 17 00:00:00 2001 From: Cael_Aislinn Date: Wed, 10 Oct 2012 00:41:50 +1000 Subject: [PATCH] tweaks to game start / admins, fixe for adjacent reaching not working Signed-off-by: Cael_Aislinn --- baystation12.dme | 1 + code/defines/procs/gamehelpers.dm | 35 ++++++++++ code/game/atoms.dm | 108 ++++++++++++++++++------------ code/global.dm | 2 +- code/modules/admin/admin_verbs.dm | 2 +- 5 files changed, 103 insertions(+), 45 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index dedd7859af7..585de4dd5b2 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -250,6 +250,7 @@ #define FILE_DIR "icons/vending_icons" #define FILE_DIR "interface" #define FILE_DIR "maps" +#define FILE_DIR "maps/backup" #define FILE_DIR "maps/RandomZLevels" #define FILE_DIR "sound" #define FILE_DIR "sound/AI" diff --git a/code/defines/procs/gamehelpers.dm b/code/defines/procs/gamehelpers.dm index fa3609a4548..5d8baf58df1 100644 --- a/code/defines/procs/gamehelpers.dm +++ b/code/defines/procs/gamehelpers.dm @@ -285,3 +285,38 @@ proc/check_can_reach(atom/user, atom/target) if(!in_range(user,target)) return 0 return CanReachThrough(get_turf(user), get_turf(target), target) + +//dummy caching, used to speed up reach checks +var/list/DummyCache = list() + +/proc/CanReachThrough(turf/srcturf, turf/targetturf, atom/target) + + var/obj/item/weapon/dummy/D = locate() in DummyCache + if(!D) + D = new /obj/item/weapon/dummy( srcturf ) + else + DummyCache.Remove(D) + D.loc = srcturf + + if(targetturf.density && targetturf != get_turf(target)) + return 0 + + //Now, check objects to block exit that are on the border + for(var/obj/border_obstacle in srcturf) + if(border_obstacle.flags & ON_BORDER) + if(!border_obstacle.CheckExit(D, targetturf)) + D.loc = null + DummyCache.Add(D) + return 0 + + //Next, check objects to block entry that are on the border + for(var/obj/border_obstacle in targetturf) + if((border_obstacle.flags & ON_BORDER) && (target != border_obstacle)) + if(!border_obstacle.CanPass(D, srcturf, 1, 0)) + D.loc = null + DummyCache.Add(D) + return 0 + + D.loc = null + DummyCache.Add(D) + return 1 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 1dbda6bdcdf..3d9130adce0 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -1037,6 +1037,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl // ------- CLICKED OBJECT EXISTS IN GAME WORLD, DISTANCE FROM PERSON TO OBJECT IS 1 SQUARE OR THEY'RE ON THE SAME SQUARE ------- var/direct = get_dir(usr, src) + var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( usr.loc ) var/ok = 0 if ( (direct - 1) & direct) @@ -1068,12 +1069,35 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl var/check_1 = 0 var/check_2 = 0 - check_1 = CanReachThrough(get_turf(usr), Step_1, src) && CanReachThrough(Step_1, get_turf(src), src) + if(step_to(D, Step_1)) + check_1 = 1 + for(var/obj/border_obstacle in Step_1) + if(border_obstacle.flags & ON_BORDER) + if(!border_obstacle.CheckExit(D, src)) + check_1 = 0 + // ------- YOU TRIED TO CLICK ON AN ITEM THROUGH A WINDOW (OR SIMILAR THING THAT LIMITS ON BORDERS) ON ONE OF THE DIRECITON TILES ------- + for(var/obj/border_obstacle in get_turf(src)) + if((border_obstacle.flags & ON_BORDER) && (src != border_obstacle)) + if(!border_obstacle.CanPass(D, D.loc, 1, 0)) + // ------- YOU TRIED TO CLICK ON AN ITEM THROUGH A WINDOW (OR SIMILAR THING THAT LIMITS ON BORDERS) ON THE TILE YOU'RE ON ------- + check_1 = 0 - check_2 = CanReachThrough(get_turf(usr), Step_2, src) && CanReachThrough(Step_2, get_turf(src), src) + D.loc = usr.loc + if(step_to(D, Step_2)) + check_2 = 1 - ok = (check_1 || check_2) + for(var/obj/border_obstacle in Step_2) + if(border_obstacle.flags & ON_BORDER) + if(!border_obstacle.CheckExit(D, src)) + check_2 = 0 + for(var/obj/border_obstacle in get_turf(src)) + if((border_obstacle.flags & ON_BORDER) && (src != border_obstacle)) + if(!border_obstacle.CanPass(D, D.loc, 1, 0)) + check_2 = 0 + + if(check_1 || check_2) + ok = 1 // ------- YOU CAN REACH THE ITEM THROUGH AT LEAST ONE OF THE TWO DIRECTIONS. GOOD. ------- /* @@ -1086,12 +1110,34 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl */ else // ------- OBJECT IS ON A CARDINAL TILE (NORTH, SOUTH, EAST OR WEST OR THE TILE YOU'RE ON) ------- - ok = CanReachThrough(get_turf(usr), get_turf(src), src) + if(loc == usr.loc) + ok = 1 + // ------- OBJECT IS ON THE SAME TILE AS YOU ------- + else + ok = 1 + + //Now, check objects to block exit that are on the border + for(var/obj/border_obstacle in usr.loc) + if(border_obstacle.flags & ON_BORDER) + if(!border_obstacle.CheckExit(D, src)) + ok = 0 + + //Next, check objects to block entry that are on the border + for(var/obj/border_obstacle in get_turf(src)) + if((border_obstacle.flags & ON_BORDER) && (src != border_obstacle)) + if(!border_obstacle.CanPass(D, D.loc, 1, 0)) + ok = 0 /* See the previous More info, for... more info... */ - //del(D) // Garbage Collect Dummy D.loc = null D = null // ------- DUMMY OBJECT'S SERVED IT'S PURPOSE, IT'S REWARDED WITH A SWIFT DELETE ------- if (!( ok )) + //del(D) + // Garbage Collect Dummy + D.loc = null + D = null + + // ------- DUMMY OBJECT'S SERVED IT'S PURPOSE, IT'S REWARDED WITH A SWIFT DELETE ------- + if (!( ok )) // ------- TESTS ABOVE DETERMINED YOU CANNOT REACH THE TILE ------- return 0 @@ -1207,43 +1253,6 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl usr.next_move = world.time + 6 return -//////////////////////////////////////// -///IMPORTANT: CACHE FOR DUMMY OBJECTS/// -//Used to cut down on stupid deletions// -//////////////////////////////////////// -var/list/DummyCache = list() - -/proc/CanReachThrough(turf/srcturf, turf/targetturf, atom/target) - - var/obj/item/weapon/dummy/D = locate() in DummyCache - if(!D) - D = new /obj/item/weapon/dummy( srcturf ) - else - DummyCache.Remove(D) - D.loc = srcturf - - if(targetturf.density && targetturf != get_turf(target)) - return 0 - - //Now, check objects to block exit that are on the border - for(var/obj/border_obstacle in srcturf) - if(border_obstacle.flags & ON_BORDER) - if(!border_obstacle.CheckExit(D, targetturf)) - D.loc = null - DummyCache.Add(D) - return 0 - - //Next, check objects to block entry that are on the border - for(var/obj/border_obstacle in targetturf) - if((border_obstacle.flags & ON_BORDER) && (target != border_obstacle)) - if(!border_obstacle.CanPass(D, srcturf, 1, 0)) - D.loc = null - DummyCache.Add(D) - return 0 - - D.loc = null - DummyCache.Add(D) - return 1 /atom/proc/ShiftClick(var/mob/M as mob) @@ -1355,4 +1364,17 @@ var/list/DummyCache = list() return 0 /atom/proc/checkpass(passflag) - return pass_flags&passflag/*/client/verb/check_dummy() set name = "List Dummies" set category = "Debug" var/list/dummies = list() for(var/obj/item/weapon/dummy/D in world) usr << "[D] - [D.x], [D.y], [D.z] - [D.loc]" dummies += D usr << "[dummies.len] found!"*/ \ No newline at end of file + return pass_flags&passflag + +/* +/client/verb/check_dummy() + set name = "List Dummies" + set category = "Debug" + + var/list/dummies = list() + for(var/obj/item/weapon/dummy/D in world) + usr << "[D] - [D.x], [D.y], [D.z] - [D.loc]" + dummies += D + usr << "[dummies.len] found!" +*/ + diff --git a/code/global.dm b/code/global.dm index 9ba689ad530..dfe5984b0a7 100644 --- a/code/global.dm +++ b/code/global.dm @@ -48,7 +48,7 @@ var/blobevent = 0 var/diary = null var/diaryofmeanpeople = null var/href_logfile = null -var/station_name = "Baystation12" +var/station_name = "NSV Exodus" var/game_version = "Baystation12" var/datum/air_tunnel/air_tunnel1/SS13_airtunnel = null diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index d410dfd6a5a..bd41a2658f1 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -133,6 +133,7 @@ //Temporary Admin if (holder.level >= 1) + verbs += /datum/admins/proc/startnow verbs += /datum/admins/proc/delay //game start delay verbs += /datum/admins/proc/immreboot //immediate reboot verbs += /datum/admins/proc/restart //restart @@ -256,7 +257,6 @@ //Game Master if (holder.level >= 6) - world << "game master applied successfuly" verbs += /datum/admins/proc/toggle_aliens //toggle aliens verbs += /datum/admins/proc/toggle_space_ninja //toggle ninjas verbs += /datum/admins/proc/adjump