Removed turf_animation for now, ported vg hasproximity optimisation. Rewrite and refactor of how turfs handle icon updates, edge smoothing and

construction/deconstruction. Major map rework/changes.
This commit is contained in:
Zuhayr
2015-07-23 17:04:14 +09:30
parent 4a0a6e7163
commit c8baafed2a
91 changed files with 7763 additions and 8513 deletions

View File

@@ -659,13 +659,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/floor(M), slot_in_backpack)
if ("pirate")
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)

View File

@@ -6,7 +6,7 @@
w_class = 3.0
throw_speed = 2
throw_range = 4
flags = CONDUCT //Copied this from old code, so this may or may not be necessary
flags = CONDUCT | PROXMOVE
var/status = 0 //0 - not readied //1 - bomb finished with welder
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a phoron tank

View File

@@ -3,7 +3,7 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "holder"
item_state = "assembly"
flags = CONDUCT
flags = CONDUCT | PROXMOVE
throwforce = 5
w_class = 2.0
throw_speed = 3

View File

@@ -4,8 +4,8 @@
name = "infrared emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
icon_state = "infrared"
origin_tech = list(TECH_MAGNET = 2)
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
origin_tech = list(TECH_MAGNET = 2)
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
wires = WIRE_PULSE
@@ -171,9 +171,7 @@
/obj/effect/beam/i_beam/proc/hit()
//world << "beam \ref[src]: hit"
if(master)
//world << "beam hit \ref[src]: calling master \ref[master].hit"
master.trigger_beam()
qdel(src)
return

View File

@@ -2,9 +2,9 @@
name = "proximity sensor"
desc = "Used for scanning and alerting when someone enters a certain proximity."
icon_state = "prox"
origin_tech = list(TECH_MAGNET = 1)
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
origin_tech = list(TECH_MAGNET = 1)
matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
flags = PROXMOVE
wires = WIRE_PULSE
secured = 0

View File

@@ -9,17 +9,6 @@
/turf/simulated/floor/holofloor/grass
name = "Lush Grass"
icon_state = "grass1"
floor_type = /obj/item/stack/tile/grass
New()
icon_state = "grass[pick("1","2","3","4")]"
..()
spawn(4)
update_icon()
for(var/direction in cardinal)
if(istype(get_step(src,direction),/turf/simulated/floor))
var/turf/simulated/floor/FF = get_step(src,direction)
FF.update_icon() //so siding get updated properly
/turf/simulated/floor/holofloor/space
icon = 'icons/turf/space.dmi'

View File

@@ -46,7 +46,7 @@
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
recipes += new/datum/stack_recipe("floor tile", /obj/item/stack/tile/steel, 1, 4, 20)
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
@@ -83,6 +83,7 @@
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20)
/material/sandstone/generate_recipes()
..()
@@ -96,6 +97,8 @@
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0) // 500u
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0) // 250u
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20)
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20)
/material/wood/generate_recipes()
..()

View File

@@ -74,8 +74,8 @@
return
//Drill through the flooring, if any.
if(istype(get_turf(src), /turf/simulated/floor/plating/airless/asteroid))
var/turf/simulated/floor/plating/airless/asteroid/T = get_turf(src)
if(istype(get_turf(src), /turf/simulated/floor/asteroid))
var/turf/simulated/floor/asteroid/T = get_turf(src)
if(!T.dug)
T.gets_dug()
else if(istype(get_turf(src), /turf/simulated/floor))

View File

@@ -230,7 +230,7 @@
var/obj/item/stack/flag/F = locate() in get_turf(src)
var/turf/T = get_turf(src)
if(!T || !istype(T,/turf/simulated/floor/plating/airless/asteroid))
if(!T || !istype(T,/turf/simulated/floor/asteroid))
user << "The flag won't stand up in this terrain."
return

View File

@@ -14,7 +14,7 @@
density = 1
blocks_air = 1
temperature = T0C
var/mined_turf = /turf/simulated/floor/plating/airless/asteroid
var/mined_turf = /turf/simulated/floor/asteroid
var/ore/mineral
var/mined_ore = 0
var/last_act = 0
@@ -41,8 +41,8 @@
var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST)
for(var/direction in step_overlays)
var/turf/turf_to_check = get_step(src,step_overlays[direction])
if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/plating/airless/asteroid))
var/turf/simulated/floor/plating/airless/asteroid/T = turf_to_check
if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/asteroid))
var/turf/simulated/floor/asteroid/T = turf_to_check
T.updateMineralOverlays()
else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor))
turf_to_check.overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
@@ -283,7 +283,7 @@
//Add some rubble, you did just clear out a big chunk of rock.
var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(mined_turf)
var/turf/simulated/floor/asteroid/N = ChangeTurf(mined_turf)
// Kill and update the space overlays around us.
for(var/direction in step_overlays)
@@ -387,25 +387,31 @@
/**********************Asteroid**************************/
/turf/simulated/floor/plating/airless/asteroid //floor piece
// Setting icon/icon_state initially will use these values when the turf is built on/replaced.
// This means you can put grass on the asteroid etc.
/turf/simulated/floor/asteroid
name = "sand"
icon = 'icons/turf/floors.dmi'
icon = 'icons/turf/flooring/asteroid.dmi'
icon_state = "asteroid"
base_name = "sand"
base_desc = "Gritty and unpleasant."
base_icon = 'icons/turf/flooring/asteroid.dmi'
base_icon_state = "asteroid"
initial_flooring = null
oxygen = 0
nitrogen = 0
temperature = TCMB
icon_plating = "asteroid"
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
var/overlay_detail
has_resources = 1
/turf/simulated/floor/plating/airless/asteroid/New()
/turf/simulated/floor/asteroid/New()
if(prob(20))
overlay_detail = "asteroid[rand(0,9)]"
/turf/simulated/floor/plating/airless/asteroid/ex_act(severity)
/turf/simulated/floor/asteroid/ex_act(severity)
switch(severity)
if(3.0)
return
@@ -416,7 +422,10 @@
gets_dug()
return
/turf/simulated/floor/plating/airless/asteroid/attackby(obj/item/weapon/W as obj, mob/user as mob)
/turf/simulated/floor/asteroid/is_plating()
return 0
/turf/simulated/floor/asteroid/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(!W || !user)
return 0
@@ -468,7 +477,7 @@
..(W,user)
return
/turf/simulated/floor/plating/airless/asteroid/proc/gets_dug()
/turf/simulated/floor/asteroid/proc/gets_dug()
if(dug)
return
@@ -477,11 +486,10 @@
new/obj/item/weapon/ore/glass(src)
dug = 1
icon_plating = "asteroid_dug"
icon_state = "asteroid_dug"
return
/turf/simulated/floor/plating/airless/asteroid/proc/updateMineralOverlays(var/update_neighbors)
/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors)
overlays.Cut()
@@ -494,17 +502,18 @@
if(istype(get_step(src, step_overlays[direction]), /turf/simulated/mineral))
overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
if(overlay_detail) overlays += overlay_detail
//todo cache
if(overlay_detail) overlays |= image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail)
if(update_neighbors)
var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST)
for(var/direction in all_step_directions)
var/turf/simulated/floor/plating/airless/asteroid/A
if(istype(get_step(src, direction), /turf/simulated/floor/plating/airless/asteroid))
var/turf/simulated/floor/asteroid/A
if(istype(get_step(src, direction), /turf/simulated/floor/asteroid))
A = get_step(src, direction)
A.updateMineralOverlays()
/turf/simulated/floor/plating/airless/asteroid/Entered(atom/movable/M as mob|obj)
/turf/simulated/floor/asteroid/Entered(atom/movable/M as mob|obj)
..()
if(istype(M,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = M

View File

@@ -15,6 +15,7 @@
var/list/path = list()
var/list/ignorelist = list()
var/turf/target
var/floor_build_type = "floor" // Basic steel floor.
/mob/living/bot/floorbot/update_icons()
if(repairing)
@@ -136,7 +137,7 @@
target = T
if(improvefloors && istype(T, /turf/simulated/floor))
var/turf/simulated/floor/F = T
if(!F.floor_type && (get_turf(T) == loc || prob(40)))
if(!F.flooring && (get_turf(T) == loc || prob(40)))
target = T
if(emagged) // Time to griff
@@ -150,7 +151,7 @@
if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles
if(eattiles)
for(var/obj/item/stack/tile/steel/T in view(src))
for(var/obj/item/stack/tile/floor/T in view(src))
if(T in ignorelist)
continue
target = T
@@ -217,7 +218,7 @@
if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs
var/obj/item/I
if(building == 1)
I = new /obj/item/stack/tile/steel(src)
I = new /obj/item/stack/tile/floor(src)
else
I = PoolOrNew(/obj/item/stack/rods, src)
A.attackby(I, src)
@@ -226,20 +227,19 @@
update_icons()
else if(istype(A, /turf/simulated/floor))
var/turf/simulated/floor/F = A
if(!F.floor_type && amount)
if(!F.flooring && amount)
repairing = 1
update_icons()
visible_message("<span class='notice'>[src] begins to improve the floor.</span>")
if(do_after(src, 50))
if(!F.floor_type)
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(src)
F.attackby(T, src)
if(!F.flooring)
F.set_flooring(floor_build_type)
addTiles(-1)
target = null
repairing = 0
update_icons()
else if(istype(A, /obj/item/stack/tile/steel) && amount < maxAmount)
var/obj/item/stack/tile/steel/T = A
else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount)
var/obj/item/stack/tile/floor/T = A
visible_message("<span class='notice'>[src] begins to collect tiles.</span>")
repairing = 1
update_icons()
@@ -272,7 +272,7 @@
new /obj/item/device/assembly/prox_sensor(Tsec)
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(Tsec)
var/obj/item/stack/tile/floor/T = new /obj/item/stack/tile/floor(Tsec)
T.amount = amount
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
@@ -288,8 +288,8 @@
/* Assembly */
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/steel/T, mob/user as mob)
if(!istype(T, /obj/item/stack/tile/steel))
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/user as mob)
if(!istype(T, /obj/item/stack/tile/floor))
..()
return
if(contents.len >= 1)

View File

@@ -15,7 +15,7 @@ var/const/MAX_ACTIVE_TIME = 400
icon_state = "facehugger"
item_state = "facehugger"
w_class = 3 //note: can be picked up by aliens unlike most other items of w_class below 4
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT | PROXMOVE
body_parts_covered = FACE|EYES
throw_range = 5

View File

@@ -144,8 +144,10 @@
var/turf/simulated/wall/W = O
if(W.material.flags & MATERIAL_UNMELTABLE)
cannot_melt = 1
else if(istype(O, /turf/simulated/floor/engine))
cannot_melt = 1
else if(istype(O, /turf/simulated/floor))
var/turf/simulated/floor/F = O
if(F.flooring && (F.flooring.flags & TURF_ACID_IMMUNE))
cannot_melt = 1
if(cannot_melt)
src << "<span class='alium'>You cannot dissolve this object.</span>"

View File

@@ -374,7 +374,7 @@ var/global/list/robot_modules = list(
C.synths = list(wire)
src.modules += C
var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src)
var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src)
S.synths = list(metal)
src.modules += S
@@ -698,7 +698,7 @@ var/global/list/robot_modules = list(
C.synths = list(wire)
src.modules += C
var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src)
var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src)
S.synths = list(metal)
src.modules += S

View File

@@ -2,7 +2,7 @@
density = 1
layer = 4.0
animate_movement = 2
// flags = NOREACT
flags = PROXMOVE
var/datum/mind/mind
var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak

View File

@@ -80,7 +80,6 @@ By design, d1 is the smallest direction and d2 is the highest
d2 = text2num( copytext( icon_state, dash+1 ) )
var/turf/T = src.loc // hide if turf is not intact
if(level==1) hide(T.intact)
cable_list += src //add it to the global cable list
@@ -97,11 +96,13 @@ By design, d1 is the smallest direction and d2 is the highest
//If underfloor, hide the cable
/obj/structure/cable/hide(var/i)
if(level == 1 && istype(loc, /turf))
if(istype(loc, /turf))
invisibility = i ? 101 : 0
updateicon()
/obj/structure/cable/hides_under_flooring()
return 1
/obj/structure/cable/proc/updateicon()
icon_state = "[d1]-[d2]"
alpha = invisibility ? 127 : 255

View File

@@ -1,37 +0,0 @@
/turf/simulated/floor/engine/attack_hand(var/mob/user as mob)
if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
return
if (user.pulling.anchored)
return
if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
return
if (ismob(user.pulling))
var/mob/M = user.pulling
var/atom/movable/t = M.pulling
M.stop_pulling()
step(user.pulling, get_dir(user.pulling.loc, src))
M.start_pulling(t)
else
step(user.pulling, get_dir(user.pulling.loc, src))
return
/turf/simulated/floor/engine/ex_act(severity)
switch(severity)
if(1.0)
ChangeTurf(get_base_turf(src.z))
qdel(src)
return
if(2.0)
if (prob(50))
ChangeTurf(get_base_turf(src.z))
qdel(src)
return
else
return
/turf/simulated/floor/engine/blob_act()
if (prob(25))
ChangeTurf(get_base_turf(src.z))
qdel(src)
return
return

View File

@@ -10,6 +10,7 @@
unacidable = 1
use_power = 0
light_range = 4
flags = PROXMOVE
var/obj/machinery/field_generator/FG1 = null
var/obj/machinery/field_generator/FG2 = null
var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
@@ -62,7 +63,7 @@
user.throw_at(target, 200, 4)
sleep(20)
hasShocked = 0
return

View File

@@ -27,12 +27,11 @@
return ..()
/obj/machinery/power/terminal/hide(var/i)
if(i)
invisibility = 101
icon_state = "term-f"
else
invisibility = 0
icon_state = "term"
invisibility = i ? 101 : 0
icon_state = i ? "term-f" : "term"
/obj/structure/power/terminal/hides_under_flooring()
return 1
// Needed so terminals are not removed from machines list.
// Powernet rebuilds need this to work properly.

View File

@@ -2,7 +2,7 @@
iterations = 5
descriptor = "moon caves"
wall_type = /turf/simulated/mineral
floor_type = /turf/simulated/floor/plating/airless/asteroid
floor_type = /turf/simulated/floor/asteroid
target_turf_type = /turf/unsimulated/mask
var/mineral_sparse = /turf/simulated/mineral/random
var/mineral_rich = /turf/simulated/mineral/random/high_chance

View File

@@ -37,7 +37,7 @@
/datum/random_map/noise/volcanism/get_additional_spawns(var/value, var/turf/T)
if(value>=178)
if(istype(T,/turf/simulated/floor/plating/airless/asteroid))
if(istype(T,/turf/simulated/floor/asteroid))
T.ChangeTurf(/turf/simulated/floor/airless/lava)
else if(istype(T,/turf/simulated/mineral))
var/turf/simulated/mineral/M = T

View File

@@ -30,7 +30,7 @@
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/turf/simulated/floor/engine/cult)
summon_type = list(/turf/simulated/floor/cult)
hud_state = "const_floor"

View File

@@ -2,8 +2,6 @@
proc/findNullRod(var/atom/target)
if(istype(target,/obj/item/weapon/nullrod))
var/turf/T = get_turf(target)
T.turf_animation('icons/effects/96x96.dmi',"nullding",-32,-32,MOB_LAYER+1,'sound/piano/Ab7.ogg')
return 1
else if(target.contents)
for(var/atom/A in target.contents)