From 63f28ee0e01d7d093481b970e6f57c8130b9adc2 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Thu, 14 May 2015 22:26:19 +0100 Subject: [PATCH] Fixes - Material comparisons done by name rather than reference equality - get_material_by_name proc that ensures the material list is initialised, initialising it if neccessary - holographic materials moved into main material list - table frames are not a source of infinite metal, and can be deconstructed correctly - gambling table icons are no longer E-W flipped --- code/game/turfs/simulated/walls.dm | 4 +--- code/modules/materials/materials.dm | 20 +++++++++++++++++-- code/modules/tables/flipping.dm | 8 ++++---- code/modules/tables/presets.dm | 30 ++++++++-------------------- code/modules/tables/tables.dm | 6 ++++-- icons/obj/tables.dmi | Bin 22339 -> 22345 bytes 6 files changed, 35 insertions(+), 33 deletions(-) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 4596512fe44..52086c6228c 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -25,11 +25,9 @@ var/list/global/wall_cache = list() /turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype) ..(newloc) icon_state = "blank" - if(!name_to_material) - populate_material_list() if(!materialtype) materialtype = DEFAULT_WALL_MATERIAL - material = name_to_material[materialtype] + material = get_material_by_name(materialtype) if(!isnull(rmaterialtype)) reinf_material = name_to_material[rmaterialtype] update_material() diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 5afb1f27e04..c46ca8e7640 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -1,7 +1,7 @@ var/list/name_to_material -/proc/populate_material_list() - if(name_to_material) return // Already set up! +/proc/populate_material_list(force_remake=0) + if(name_to_material && !force_remake) return // Already set up! name_to_material = list() for(var/type in typesof(/material) - /material) var/material/new_mineral = new type @@ -10,6 +10,12 @@ var/list/name_to_material name_to_material[lowertext(new_mineral.name)] = new_mineral return 1 +/proc/get_material_by_name(name) + if(!name_to_material) + populate_material_list() + + return name_to_material[name] + /* Valid sprite masks: stone @@ -102,6 +108,11 @@ var/list/name_to_material icon_reinf = "reinf_over" icon_colour = "#666666" +/material/steel/holographic + name = "holographic [DEFAULT_WALL_MATERIAL]" + display_name = DEFAULT_WALL_MATERIAL + stack_type = null + /material/plasteel name = "plasteel" stack_type = /obj/item/stack/sheet/plasteel @@ -159,6 +170,11 @@ var/list/name_to_material icon_base = "solid" explosion_resistance = 2 +/material/wood/holographic + name = "holographic wood" + display_name = "wood" + stack_type = null + /material/cult name = "cult" display_name = "disturbing stone" diff --git a/code/modules/tables/flipping.dm b/code/modules/tables/flipping.dm index 210498f1693..43697a938c7 100644 --- a/code/modules/tables/flipping.dm +++ b/code/modules/tables/flipping.dm @@ -5,7 +5,7 @@ var/obj/structure/table/T for(var/angle in list(-90,90)) T = locate() in get_step(src.loc,turn(direction,angle)) - if(T && T.flipped == 0 && T.material == material) + if(T && T.flipped == 0 && T.material.name == material.name) return 0 T = locate() in get_step(src.loc,direction) if (!T || T.flipped == 1 || T.material != material) @@ -50,7 +50,7 @@ L.Add(turn(src.dir,90)) for(var/new_dir in L) var/obj/structure/table/T = locate() in get_step(src.loc,new_dir) - if(T && T.material == material) + if(T && T.material.name == material.name) if(T.flipped == 1 && T.dir == src.dir && !T.unflipping_check(new_dir)) return 0 return 1 @@ -90,7 +90,7 @@ flags |= ON_BORDER for(var/D in list(turn(direction, 90), turn(direction, -90))) var/obj/structure/table/T = locate() in get_step(src,D) - if(T && T.flipped == 0 && T.material == material && material) + if(T && T.flipped == 0 && material && T.material && T.material.name == material.name) T.flip(direction) take_damage(rand(5, 20)) update_connections(1) @@ -108,7 +108,7 @@ flags &= ~ON_BORDER for(var/D in list(turn(dir, 90), turn(dir, -90))) var/obj/structure/table/T = locate() in get_step(src.loc,D) - if(T && T.flipped == 1 && T.dir == src.dir && T.material == material && material) + if(T && T.flipped == 1 && T.dir == src.dir && material && T.material&& T.material.name == material.name) T.unflip() update_connections(1) diff --git a/code/modules/tables/presets.dm b/code/modules/tables/presets.dm index 91badda696d..5f009e7e88c 100644 --- a/code/modules/tables/presets.dm +++ b/code/modules/tables/presets.dm @@ -1,38 +1,31 @@ -var/global/material/material_holographic_steel = null -var/global/material/material_holographic_wood = null - /obj/structure/table standard icon_state = "plain_preview" color = "#666666" New() - if(!name_to_material) populate_material_list() - material = name_to_material[DEFAULT_WALL_MATERIAL] + material = get_material_by_name(DEFAULT_WALL_MATERIAL) ..() reinforced icon_state = "reinf_preview" color = "#666666" New() - if(!name_to_material) populate_material_list() - material = name_to_material[DEFAULT_WALL_MATERIAL] - reinforced = name_to_material[DEFAULT_WALL_MATERIAL] + material = get_material_by_name(DEFAULT_WALL_MATERIAL) + reinforced = get_material_by_name(DEFAULT_WALL_MATERIAL) ..() woodentable icon_state = "plain_preview" color = "#824B28" New() - if(!name_to_material) populate_material_list() - material = name_to_material["wood"] + material = get_material_by_name("wood") ..() gamblingtable icon_state = "gamble_preview" New() - if(!name_to_material) populate_material_list() - material = name_to_material["wood"] + material = get_material_by_name("wood") carpeted = 1 ..() @@ -41,25 +34,18 @@ var/global/material/material_holographic_wood = null color = "#00E1FF" alpha = 77 // 0.3 * 255 New() - if(!name_to_material) populate_material_list() - material = name_to_material["glass"] + material = get_material_by_name("glass") ..() holotable icon_state = "holo_preview" color = "#666666" New() - if(!material_holographic_steel) - material_holographic_steel = new /material/steel - material_holographic_steel.stack_type = null // Tables with null-stacktype materials cannot be deconstructed - material = material_holographic_steel + material = get_material_by_name("holographic [DEFAULT_WALL_MATERIAL]") ..() woodentable/holotable icon_state = "holo_preview" New() - if(!material_holographic_wood) - material_holographic_wood = new /material/wood - material_holographic_wood.stack_type = null // Tables with null-stacktype materials cannot be deconstructed - material = material_holographic_wood + material = get_material_by_name("holographic wood") ..() diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index 895938898a3..0414fe238ad 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -227,6 +227,8 @@ user.visible_message("\The [user] dismantles \the [src].", "You dismantle \the [src].") new /obj/item/stack/sheet/metal(src.loc) + qdel(src) + return /obj/structure/table/proc/break_to_parts(full_return = 0) if(reinforced && reinforced.stack_type && (full_return || prob(25))) @@ -274,7 +276,7 @@ var/tabledirs = 0 for(var/direction in list(turn(dir,90), turn(dir,-90)) ) var/obj/structure/table/T = locate(/obj/structure/table ,get_step(src,direction)) - if (T && T.flipped == 1 && T.dir == src.dir && T.material == material) + if (T && T.flipped == 1 && T.dir == src.dir && T.material.name == material.name) type++ tabledirs |= direction @@ -351,7 +353,7 @@ for(var/obj/structure/table/T in oview(src, 1)) var/T_dir = get_dir(src, T) if(T_dir in blocked_dirs) continue - if(material == T.material && flipped == T.flipped) + if(material.name == T.material.name && flipped == T.flipped) connection_dirs |= T_dir if(propagate) spawn(0) diff --git a/icons/obj/tables.dmi b/icons/obj/tables.dmi index 429969fc86234b2db96ea21c7d10196b9d4eead3..36de1b41836914f47faea38c0d258aa7718e727c 100644 GIT binary patch delta 650 zcmX@Sj`8F=#tp45jO#bIx#;mLB{|Kfi8;=kzyLLPTs znSY4;`in8+6PE;of*S)1L&rxTD}kwczjw{Ei_iU*vpC$3WUP7C^ZePF^Uvz5{-#%i z{tt9)sjOh-VGvLTI`{}j1JFt)1qO#61`Z6N$qoz*Y6Z^98 z$_sv+{#&Fw|66g$|M%a23r=sX-^h$<0E(H4X!iW+i8~M&X35oI`Qrc97wQMH%O<}G zQ<&Tk#wxk_p`?5XiTY5b={o8-R?<^%Z87Jq5sen|N?R?{@FyC*-{7j{P sKG~61wf;ZUdc9{?VC{wa1QD=n_xtrsSzopr0D$Wd^8f$< delta 571 zcmV-B0>u5vt^vcY0kDNc0jaZwL@o~?pn)F0@c6`QiSDfLly<2o8{$tBqs;gvaRzRQ zZ&&=OlVK7j5)9M801ajPG#Iv*zY2NF4`6YVVG<^jz&H&!J%O>k`~d9bDeYOwqskrVlYCSoH~+F;Gt~C- z0{|?vC_RAV){!2-e5NV?qL*upyV1ZR}xgg@_i$6}8>jnVh&;ygeIVck#AKRzFu)X|?VBBY9L-_%q ziRhCs5g(JwIS_yT|Mu?aMqwC=q98~VMm1X}rR^^tY_cc>J2^825IfI8SB~`zK+N^> zbD6f0?KhhIYUI03{r%PF&sgR^9xP`k)YJdkF5Xz002ov JPDHLkV1j}<4Q~Jd