diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 5a21c121b25..9c42d7c30dc 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -92,7 +92,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas) + /obj/item/clothing/mask/gas, + /obj/item/grenade/gas/oxygen, + /obj/item/grenade/gas/oxygen) cost = 35 containertype = /obj/structure/closet/crate/internals containername = "emergency crate" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 7689fa5f56c..872b443c124 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1407,29 +1407,29 @@ var/list/ghostteleportlocs = list() dynamic_lighting = 0 valid_territory = FALSE - auxport - name = "\improper Fore Port Solar Array" - icon_state = "panelsA" +/area/solar/auxport + name = "\improper Fore Port Solar Array" + icon_state = "panelsA" - auxstarboard - name = "\improper Fore Starboard Solar Array" - icon_state = "panelsA" +/area/solar/auxstarboard + name = "\improper Fore Starboard Solar Array" + icon_state = "panelsA" - fore - name = "\improper Fore Solar Array" - icon_state = "yellow" +/area/solar/fore + name = "\improper Fore Solar Array" + icon_state = "yellow" - aft - name = "\improper Aft Solar Array" - icon_state = "aft" +/area/solar/aft + name = "\improper Aft Solar Array" + icon_state = "aft" - starboard - name = "\improper Aft Starboard Solar Array" - icon_state = "panelsS" +/area/solar/starboard + name = "\improper Aft Starboard Solar Array" + icon_state = "panelsS" - port - name = "\improper Aft Port Solar Array" - icon_state = "panelsP" +/area/solar/port + name = "\improper Aft Port Solar Array" + icon_state = "panelsP" /area/maintenance/auxsolarport name = "\improper Fore Port Solar Maintenance" @@ -1756,7 +1756,7 @@ var/list/ghostteleportlocs = list() name = "\improper Head of Security's Office" icon_state = "sec_hos" -area/security/podbay +/area/security/podbay name = "\improper Security Podbay" icon_state = "securitypodbay" @@ -1848,7 +1848,7 @@ area/security/podbay name = "\improper Mech Bay" icon_state = "yellow" -/area/janitor/ +/area/janitor name = "\improper Custodial Closet" icon_state = "janitor" diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index bd66901c4ab..b7c09919a0a 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,4 +1,4 @@ -/obj/machinery/computer/arcade/ +/obj/machinery/computer/arcade name = "random arcade" desc = "random arcade machine" icon = 'icons/obj/computer.dmi' diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 1935869fb53..114835b21c3 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -651,7 +651,7 @@ to destroy them and players will be able to make replacements. build_path = /obj/machinery/power/port_gen/pacman/mrs origin_tech = "programming=3;powerstorage=4;engineering=4;plasmatech=4" -obj/item/circuitboard/rdserver +/obj/item/circuitboard/rdserver name = "Circuit Board (R&D Server)" build_path = /obj/machinery/r_n_d/server board_type = "machine" diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 3c9c67dfce0..975aa9b01ab 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -94,32 +94,32 @@ T.reconsider_lights() update_freelook_sight() -/obj/machinery/door/poddoor/multi_tile/four_tile_ver/ +/obj/machinery/door/poddoor/multi_tile/four_tile_ver icon = 'icons/obj/doors/1x4blast_vert.dmi' width = 4 dir = NORTH -/obj/machinery/door/poddoor/multi_tile/three_tile_ver/ +/obj/machinery/door/poddoor/multi_tile/three_tile_ver icon = 'icons/obj/doors/1x3blast_vert.dmi' width = 3 dir = NORTH -/obj/machinery/door/poddoor/multi_tile/two_tile_ver/ +/obj/machinery/door/poddoor/multi_tile/two_tile_ver icon = 'icons/obj/doors/1x2blast_vert.dmi' width = 2 dir = NORTH -/obj/machinery/door/poddoor/multi_tile/four_tile_hor/ +/obj/machinery/door/poddoor/multi_tile/four_tile_hor icon = 'icons/obj/doors/1x4blast_hor.dmi' width = 4 dir = EAST -/obj/machinery/door/poddoor/multi_tile/three_tile_hor/ +/obj/machinery/door/poddoor/multi_tile/three_tile_hor icon = 'icons/obj/doors/1x3blast_hor.dmi' width = 3 dir = EAST -/obj/machinery/door/poddoor/multi_tile/two_tile_hor/ +/obj/machinery/door/poddoor/multi_tile/two_tile_hor icon = 'icons/obj/doors/1x2blast_hor.dmi' width = 2 dir = EAST diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 019d9a2319e..81006be3fdd 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -115,7 +115,7 @@ if(R.rcell.give(R.rcell.chargerate)) use_power(200) using_power = 1 - + if(istype(charging, /obj/item/bodyanalyzer)) var/obj/item/bodyanalyzer/B = charging if(B.power_supply) @@ -154,7 +154,7 @@ icon_state = icon_state_idle // Atlantis: No need for that copy-pasta code, just use var to store icon_states instead. -obj/machinery/recharger/wallcharger +/obj/machinery/recharger/wallcharger name = "wall recharger" icon_state = "wrecharger0" icon_state_off = "wrechargeroff" diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index d70508e620b..51a39f7cf5f 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -167,7 +167,7 @@ if(!WT.isOn() || !WT.remove_fuel(5, user)) return to_chat(user, "You cut the [src] apart.") - new /obj/item/stack/sheet/plasteel(loc, 5) + new /obj/item/stack/sheet/plasteel(loc, 3) qdel(src) else return ..() diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 037a8b5c9a0..0cabbbb0b22 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -142,7 +142,7 @@ attack_self(usr) //Bananalamp -obj/item/flashlight/lamp/bananalamp +/obj/item/flashlight/lamp/bananalamp name = "banana lamp" desc = "Only a clown would think to make a ghetto banana-shaped lamp. Even has a goofy pullstring." icon_state = "bananalamp" @@ -381,4 +381,4 @@ obj/item/flashlight/lamp/bananalamp anchored = TRUE var/range = null unacidable = TRUE - burn_state = LAVA_PROOF \ No newline at end of file + burn_state = LAVA_PROOF diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index a91410c28fe..8c2d64bda59 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -9,75 +9,76 @@ var/icon/virtualIcon var/list/bulletholes = list() - Destroy() - // if a target is deleted and associated with a stake, force stake to forget - for(var/obj/structure/target_stake/T in view(3,src)) - if(T.pinned_target == src) - T.pinned_target = null - T.density = 1 - break - return ..() // delete target +/obj/item/target/Destroy() + // if a target is deleted and associated with a stake, force stake to forget + for(var/obj/structure/target_stake/T in view(3,src)) + if(T.pinned_target == src) + T.pinned_target = null + T.density = 1 + break + return ..() // delete target - Move() - ..() - // After target moves, check for nearby stakes. If associated, move to target - for(var/obj/structure/target_stake/M in view(3,src)) - if(M.density == 0 && M.pinned_target == src) - M.loc = loc +/obj/item/target/Move() + ..() + // After target moves, check for nearby stakes. If associated, move to target + for(var/obj/structure/target_stake/M in view(3,src)) + if(M.density == 0 && M.pinned_target == src) + M.loc = loc - // This may seem a little counter-intuitive but I assure you that's for a purpose. - // Stakes are the ones that carry targets, yes, but in the stake code we set - // a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing - // the stake now, we have to push the target. + // This may seem a little counter-intuitive but I assure you that's for a purpose. + // Stakes are the ones that carry targets, yes, but in the stake code we set + // a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing + // the stake now, we have to push the target. - attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/weldingtool)) - var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(0, user)) - overlays.Cut() - to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.") - return +/obj/item/target/attackby(obj/item/W as obj, mob/user as mob, params) + if(istype(W, /obj/item/weldingtool)) + var/obj/item/weldingtool/WT = W + if(WT.remove_fuel(0, user)) + overlays.Cut() + to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.") + return - attack_hand(mob/user as mob) - // taking pinned targets off! - var/obj/structure/target_stake/stake - for(var/obj/structure/target_stake/T in view(3,src)) - if(T.pinned_target == src) - stake = T - break +/obj/item/target/attack_hand(mob/user as mob) + // taking pinned targets off! + var/obj/structure/target_stake/stake + for(var/obj/structure/target_stake/T in view(3,src)) + if(T.pinned_target == src) + stake = T + break - if(stake) - if(stake.pinned_target) - stake.density = 1 - density = 0 - layer = OBJ_LAYER + if(stake) + if(stake.pinned_target) + stake.density = 1 + density = 0 + layer = OBJ_LAYER - loc = user.loc - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(src) - to_chat(user, "You take the target out of the stake.") - else - src.loc = get_turf(user) + loc = user.loc + if(ishuman(user)) + if(!user.get_active_hand()) + user.put_in_hands(src) to_chat(user, "You take the target out of the stake.") + else + src.loc = get_turf(user) + to_chat(user, "You take the target out of the stake.") - stake.pinned_target = null - return + stake.pinned_target = null + return - else - ..() + else + ..() - syndicate - icon_state = "target_s" - desc = "A shooting target that looks like a syndicate scum." - hp = 2600 // i guess syndie targets are sturdier? - alien - icon_state = "target_q" - desc = "A shooting target that looks like a xenomorphic alien." - hp = 2350 // alium onest too kinda +/obj/item/target/syndicate + icon_state = "target_s" + desc = "A shooting target that looks like a syndicate scum." + hp = 2600 // i guess syndie targets are sturdier? + +/obj/item/target/alien + icon_state = "target_q" + desc = "A shooting target that looks like a xenomorphic alien." + hp = 2350 // alium onest too kinda /obj/item/target/bullet_act(var/obj/item/projectile/Proj) var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!" diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d26fa182fe1..abc328a8bf1 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -129,7 +129,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list( */ var/global/list/datum/stack_recipe/plasteel_recipes = list( new /datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1), - new /datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50), + new /datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 3, time = 50), new /datum/stack_recipe("Surgery Table", /obj/machinery/optable, 5, time = 50, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1), new /datum/stack_recipe("Mass Driver frame", /obj/machinery/mass_driver_frame, 3, time = 50, one_per_turf = 1), diff --git a/code/game/objects/items/weapons/grenades/atmosgrenade.dm b/code/game/objects/items/weapons/grenades/atmosgrenade.dm index 02e21e31d39..96e2c57b1c3 100644 --- a/code/game/objects/items/weapons/grenades/atmosgrenade.dm +++ b/code/game/objects/items/weapons/grenades/atmosgrenade.dm @@ -1,6 +1,3 @@ - - - /obj/item/grenade/gas name = "plasma fire grenade" desc = "A compressed plasma grenade, used to start horrific plasma fires." @@ -23,9 +20,16 @@ /obj/item/grenade/gas/knockout name = "knockout grenade" - desc = "A grenade that completely removes all air and heat from its detonation area." + desc = "A grenade that releases pure N2O gas." spawn_contents = SPAWN_20C | SPAWN_N2O +/obj/item/grenade/gas/oxygen + name = "oxygen grenade" + desc = "A grenade that releases pure O2 gas." + icon_state = "oxygen" + spawn_contents = SPAWN_20C | SPAWN_OXYGEN + spawn_amount = 500 + /obj/item/grenade/gluon desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also wet any nearby floors." name = "gluon grenade" diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 1a5fe872251..5461367743a 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -89,7 +89,7 @@ w_class = WEIGHT_CLASS_NORMAL attack_verb = list("jabbed","stabbed","ripped") -obj/item/wirerod +/obj/item/wirerod name = "Wired rod" desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." icon_state = "wiredrod" @@ -101,7 +101,7 @@ obj/item/wirerod materials = list(MAT_METAL=1150, MAT_GLASS=75) attack_verb = list("hit", "bludgeoned", "whacked", "bonked") -obj/item/wirerod/attackby(obj/item/I, mob/user, params) +/obj/item/wirerod/attackby(obj/item/I, mob/user, params) ..() if(istype(I, /obj/item/shard)) var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index fbe2c4d8356..7b07e003bca 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -135,6 +135,8 @@ new /obj/item/storage/backpack/satchel_eng(src) new /obj/item/storage/backpack/duffel/atmos(src) new /obj/item/extinguisher(src) + new /obj/item/grenade/gas/oxygen(src) + new /obj/item/grenade/gas/oxygen(src) new /obj/item/clothing/suit/storage/hazardvest(src) new /obj/item/clothing/mask/gas(src) new /obj/item/tank/emergency_oxygen/engi(src) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 8e9b478382a..c6e3ab2e5bd 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -122,7 +122,7 @@ GLOBAL_LIST_EMPTY(safes) switch(alert("What would you like to do?", "Thermal Drill", "Turn [drill_timer ? "Off" : "On"]", "Remove Drill", "Cancel")) if("Turn On") if(do_after(user, 2 SECONDS, target = src)) - drill_timer = addtimer(CALLBACK(src, .proc/drill_open), time_to_drill) + drill_timer = addtimer(CALLBACK(src, .proc/drill_open), time_to_drill, TIMER_STOPPABLE) drill_start_time = world.time drill.soundloop.start() update_icon() diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index b3ce496ec51..a39c4e5a674 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1611,3 +1611,11 @@ icon_state = "asmer_accordion" item_state = "asmer_accordion" + +/obj/item/clothing/head/rabbitears/fluff/pinesalad_bunny // Pineapple Salad : Dan Jello + name = "Bluespace rabbit ears" + desc = "A pair of sparkly bluespace rabbit ears, with a small tag on them that reads,"/"Dan Jello~"/". Yuck, \ + there's some pink slime on the part that goes on your head!" + icon = 'icons/obj/custom_items.dmi' + icon_state = "ps_bunny" + diff --git a/code/modules/detective_work/footprints_and_rag.dm b/code/modules/detective_work/footprints_and_rag.dm index 31f9e66255b..b3c45c0f4a1 100644 --- a/code/modules/detective_work/footprints_and_rag.dm +++ b/code/modules/detective_work/footprints_and_rag.dm @@ -21,6 +21,7 @@ can_be_placed_into = null flags = NOBLUDGEON container_type = OPENCONTAINER + has_lid = FALSE var/wipespeed = 30 /obj/item/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag) diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 69153cb4d89..6b76b0c9dbb 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -1,5 +1,5 @@ /////SINGULARITY SPAWNER -/obj/machinery/the_singularitygen/ +/obj/machinery/the_singularitygen name = "Gravitational Singularity Generator" desc = "An odd device which produces a Gravitational Singularity when set up." icon = 'icons/obj/singularity.dmi' diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 258bf98468d..6d58e42d539 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -10,6 +10,7 @@ var/list/list_reagents = null var/spawned_disease = null var/disease_amount = 20 + var/has_lid = FALSE // Used for containers where we want to put lids on and off /obj/item/reagent_containers/verb/set_APTFT() //set amount_per_transfer_from_this set name = "Set transfer amount" @@ -49,6 +50,14 @@ ..() /obj/item/reagent_containers/attack_self(mob/user) + if(has_lid) + if(is_open_container()) + to_chat(usr, "You put the lid on [src].") + container_type ^= REFILLABLE | DRAINABLE + else + to_chat(usr, "You take the lid off [src].") + container_type |= REFILLABLE | DRAINABLE + update_icon() return // this prevented pills, food, and other things from being picked up by bags. diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 20687a6b98c..23ec5f5cadb 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -12,6 +12,7 @@ possible_transfer_amounts = list(5,10,15,25,30,50) volume = 50 container_type = OPENCONTAINER + has_lid = TRUE var/label_text = "" // the fucking asshole who designed this can go die in a fire - Iamgoofball @@ -55,16 +56,6 @@ if(!is_open_container()) to_chat(user, "Airtight lid seals it completely.") -/obj/item/reagent_containers/glass/attack_self() - ..() - if(is_open_container()) - to_chat(usr, "You put the lid on [src].") - container_type ^= REFILLABLE | DRAINABLE - else - to_chat(usr, "You take the lid off [src].") - container_type |= REFILLABLE | DRAINABLE - update_icon() - /obj/item/reagent_containers/glass/afterattack(obj/target, mob/user, proximity) if(!proximity) return diff --git a/html/changelogs/AutoChangeLog-pr-10689.yml b/html/changelogs/AutoChangeLog-pr-10689.yml new file mode 100644 index 00000000000..e7eadf8c8d6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10689.yml @@ -0,0 +1,4 @@ +author: "AzuleUtama" +delete-after: True +changes: + - bugfix: "Damp rags no longer have a lid, and must remain inferior to other containers." diff --git a/html/changelogs/AutoChangeLog-pr-10699.yml b/html/changelogs/AutoChangeLog-pr-10699.yml new file mode 100644 index 00000000000..aad953cfd70 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10699.yml @@ -0,0 +1,4 @@ +author: "datlo" +delete-after: True +changes: + - tweak: "Reduced the cost of plasteel bomb frame crafting to 3 plasteel sheets (from 10)" diff --git a/html/changelogs/AutoChangeLog-pr-10711.yml b/html/changelogs/AutoChangeLog-pr-10711.yml new file mode 100644 index 00000000000..8c27fa39178 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10711.yml @@ -0,0 +1,4 @@ +author: "Aurorablade" +delete-after: True +changes: + - rscadd: "Pineapplesalad fluff item" diff --git a/html/changelogs/AutoChangeLog-pr-10712.yml b/html/changelogs/AutoChangeLog-pr-10712.yml new file mode 100644 index 00000000000..de32217ca45 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10712.yml @@ -0,0 +1,4 @@ +author: "blinkdog" +delete-after: True +changes: + - bugfix: "Normalized some paths in the code tree" diff --git a/html/changelogs/AutoChangeLog-pr-10715.yml b/html/changelogs/AutoChangeLog-pr-10715.yml new file mode 100644 index 00000000000..d06039579c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10715.yml @@ -0,0 +1,4 @@ +author: "datlo" +delete-after: True +changes: + - rscadd: "Added emergency oxygen grenades to atmospherics lockers and the cargo emergency equipment crate." diff --git a/html/changelogs/AutoChangeLog-pr-10716.yml b/html/changelogs/AutoChangeLog-pr-10716.yml new file mode 100644 index 00000000000..2ea54d8769d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-10716.yml @@ -0,0 +1,4 @@ +author: "warior4356" +delete-after: True +changes: + - bugfix: "Drills now properly stop when turned off." diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index c7853d6437d..0a34c22f6ca 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index abd4617cf79..e2a481d4836 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index e1b2164a39a..505305d4ede 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ