Merge branch 'master' of git://github.com/tgstation/-tg-station.git
@@ -47,6 +47,30 @@ CREATE TABLE `erro_admin_log` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `erro_admin_ranks`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `erro_admin_ranks`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `erro_admin_ranks` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`rank` varchar(40) NOT NULL,
|
||||
`flags` int(16) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
insert into erro_admin_ranks (rank, flags) values ('Moderator',2);
|
||||
insert into erro_admin_ranks (rank, flags) values ('Admin Candidate',2);
|
||||
insert into erro_admin_ranks (rank, flags) values ('Trial Admin',5638);
|
||||
insert into erro_admin_ranks (rank, flags) values ('Badmin',5727);
|
||||
insert into erro_admin_ranks (rank, flags) values ('Game Admin',8063);
|
||||
insert into erro_admin_ranks (rank, flags) values ('Game Master',65535);
|
||||
insert into erro_admin_ranks (rank, flags) values ('Host',65535);
|
||||
insert into erro_admin_ranks (rank, flags) values ('Coder',5168);
|
||||
|
||||
--
|
||||
-- Table structure for table `erro_ban`
|
||||
--
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#if !defined(MAP_FILE)
|
||||
|
||||
#include "map_files\tgstation.2.1.2.dmm"
|
||||
#include "map_files\tgstation.2.1.3.dmm"
|
||||
|
||||
#define MAP_FILE "tgstation.2.1.2.dmm"
|
||||
#define MAP_FILE "tgstation.2.1.3.dmm"
|
||||
#define MAP_NAME "TGstation 2"
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
|
||||
@@ -24,9 +24,37 @@ var/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser.
|
||||
// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to
|
||||
// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages
|
||||
// tagged for the Cargo Bay.
|
||||
|
||||
/* List of sortType codes for mapping reference
|
||||
0 Waste
|
||||
1 Disposals
|
||||
2 Cargo Bay
|
||||
3 QM Office
|
||||
4 Engineering
|
||||
5 CE Office
|
||||
6 Atmospherics
|
||||
7 Security
|
||||
8 HoS Office
|
||||
9 Medbay
|
||||
10 CMO Office
|
||||
11 Chemistry
|
||||
12 Research
|
||||
13 RD Office
|
||||
14 Robotics
|
||||
15 HoP Office
|
||||
16 Library
|
||||
17 Chapel
|
||||
18 Theatre
|
||||
19 Bar
|
||||
20 Kitchen
|
||||
21 Hydroponics
|
||||
22 Janitor
|
||||
23 Genetics
|
||||
*/
|
||||
|
||||
var/list/TAGGERLOCATIONS = list("Disposals",
|
||||
"Cargo Bay", "QM Office", "Engineering", "CE Office",
|
||||
"Atmospherics", "Security", "HoS Office", "Medbay",
|
||||
"CMO Office", "Chemistry", "Research", "RD Office",
|
||||
"Robotics", "HoP Office", "Library", "Chapel", "Theatre",
|
||||
"Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics")
|
||||
"Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics")
|
||||
@@ -101,8 +101,8 @@
|
||||
if(!resolved && A && W)
|
||||
W.afterattack(A,src,1,params) // 1 indicates adjacency
|
||||
else
|
||||
//if(ismob(A))
|
||||
// changeNext_move(8)
|
||||
if(ismob(A))
|
||||
changeNext_move(8)
|
||||
UnarmedAttack(A)
|
||||
return
|
||||
|
||||
@@ -120,8 +120,8 @@
|
||||
if(!resolved && A && W)
|
||||
W.afterattack(A,src,1,params) // 1: clicking something Adjacent
|
||||
else
|
||||
//if(ismob(A))
|
||||
// changeNext_move(8)
|
||||
if(ismob(A))
|
||||
changeNext_move(8)
|
||||
UnarmedAttack(A, 1)
|
||||
return
|
||||
else // non-adjacent click
|
||||
@@ -153,8 +153,8 @@
|
||||
in human click code to allow glove touches only at melee range.
|
||||
*/
|
||||
/mob/proc/UnarmedAttack(var/atom/A, var/proximity_flag)
|
||||
//if(ismob(A))
|
||||
// changeNext_move(8)
|
||||
if(ismob(A))
|
||||
changeNext_move(8)
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
visible_message("<span class='danger'>[src] has been hit by [user] with [W].</span>")
|
||||
|
||||
/mob/living/attackby(obj/item/I, mob/user)
|
||||
//user.changeNext_move(8)
|
||||
user.changeNext_move(8)
|
||||
I.attack(src, user)
|
||||
|
||||
/mob/living/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
|
||||
|
||||
@@ -135,7 +135,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/start_recharge()
|
||||
while(charge_counter < charge_max && !isnull(gc_destroyed))
|
||||
while(charge_counter < charge_max && isnull(gc_destroyed))
|
||||
sleep(1)
|
||||
charge_counter++
|
||||
|
||||
|
||||
@@ -405,7 +405,7 @@
|
||||
icon_state = "RPED"
|
||||
item_state = "RPED"
|
||||
w_class = 5
|
||||
can_hold = list("/obj/item/weapon/stock_parts")
|
||||
can_hold = list(/obj/item/weapon/stock_parts)
|
||||
storage_slots = 14
|
||||
use_to_pickup = 1
|
||||
allow_quick_gather = 1
|
||||
|
||||
@@ -610,6 +610,10 @@ proc/process_ghost_teleport_locs()
|
||||
name = "Waste Disposal"
|
||||
icon_state = "disposal"
|
||||
|
||||
/area/maintenance/electrical
|
||||
name = "Electrical Maintenance"
|
||||
icon_state = "yellow"
|
||||
|
||||
//Hallway
|
||||
|
||||
/area/hallway/primary/fore
|
||||
@@ -1008,13 +1012,17 @@ proc/process_ghost_teleport_locs()
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/processing
|
||||
name = "\improper Prisoner Processing"
|
||||
name = "\improper Labor Shuttle Dock"
|
||||
icon_state = "sec_prison"
|
||||
|
||||
/area/security/warden
|
||||
name = "\improper Armory"
|
||||
name = "\improper Brig Control"
|
||||
icon_state = "Warden"
|
||||
|
||||
/area/security/armory
|
||||
name = "\improper Armory"
|
||||
icon_state = "armory"
|
||||
|
||||
/area/security/hos
|
||||
name = "\improper Head of Security's Office"
|
||||
icon_state = "sec_hos"
|
||||
|
||||
@@ -76,6 +76,7 @@ Radio:
|
||||
1443 - Confession Intercom
|
||||
1349 - Miners
|
||||
1347 - Cargo techs
|
||||
1447 - AI Private
|
||||
|
||||
Devices:
|
||||
1451 - tracking implant
|
||||
@@ -108,6 +109,7 @@ var/list/radiochannels = list(
|
||||
"Syndicate" = 1213,
|
||||
"Supply" = 1347,
|
||||
"Service" = 1349,
|
||||
"AI Private" = 1447,
|
||||
)
|
||||
//depenging helpers
|
||||
var/const/SYND_FREQ = 1213 //nuke op frequency, coloured dark brown in chat window
|
||||
@@ -119,6 +121,7 @@ var/const/MED_FREQ = 1355 //medical, coloured blue in chat window
|
||||
var/const/ENG_FREQ = 1357 //engineering, coloured orange in chat window
|
||||
var/const/SEC_FREQ = 1359 //security, coloured red in chat window
|
||||
var/const/DSQUAD_FREQ = 1441 //death squad frequency, coloured grey in chat window
|
||||
var/const/AIPRIV_FREQ = 1447 //AI private, colored magenta in chat window
|
||||
|
||||
#define TRANSMISSION_WIRE 0
|
||||
#define TRANSMISSION_RADIO 1
|
||||
|
||||
@@ -271,6 +271,11 @@
|
||||
icon = 'icons/obj/doors/hightechsecurity.dmi'
|
||||
doortype = 33
|
||||
|
||||
/obj/machinery/door/airlock/shuttle
|
||||
name = "shuttle airlock"
|
||||
icon = 'icons/obj/doors/doorshuttle.dmi'
|
||||
doortype = 34
|
||||
|
||||
/*
|
||||
About the new airlock wires panel:
|
||||
* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires.
|
||||
@@ -935,6 +940,7 @@ About the new airlock wires panel:
|
||||
if(31) new/obj/structure/door_assembly/door_assembly_science( src.loc )
|
||||
if(32) new/obj/structure/door_assembly/door_assembly_science/glass( src.loc )
|
||||
if(33) new/obj/structure/door_assembly/door_assembly_highsecurity(src.loc)
|
||||
if(34) new/obj/structure/door_assembly/door_assembly_shuttle(src.loc)
|
||||
if(emagged)
|
||||
user << "<span class='warning'>You discard the damaged electronics.</span>"
|
||||
qdel(src)
|
||||
|
||||
@@ -352,6 +352,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
freq_text = "Service"
|
||||
if(SUPP_FREQ)
|
||||
freq_text = "Supply"
|
||||
if(AIPRIV_FREQ)
|
||||
freq_text = "AI Private"
|
||||
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
|
||||
|
||||
|
||||
@@ -386,6 +388,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
part_a = "<span class='suppradio'><span class='name'>"
|
||||
else if (display_freq==DSQUAD_FREQ)
|
||||
part_a = "<span class='dsquadradio'><span class='name'>"
|
||||
else if (display_freq==AIPRIV_FREQ)
|
||||
part_a = "<span class='aiprivradio'><span class='name'>"
|
||||
|
||||
// --- Filter the message; place it in quotes apply a verb ---
|
||||
|
||||
@@ -647,6 +651,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
freq_text = "Service"
|
||||
if(SUPP_FREQ)
|
||||
freq_text = "Supply"
|
||||
if(AIPRIV_FREQ)
|
||||
freq_text = "AI Private"
|
||||
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
|
||||
|
||||
|
||||
@@ -685,6 +691,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
part_a = "<span class='suppradio'><span class='name'>"
|
||||
else if (display_freq==DSQUAD_FREQ)
|
||||
part_a = "<span class='dsquadradio'><span class='name'>"
|
||||
else if (display_freq==AIPRIV_FREQ)
|
||||
part_a = "<span class='aiprivradio'><span class='name'>"
|
||||
|
||||
// --- This following recording is intended for research and feedback in the use of department radio channels ---
|
||||
|
||||
|
||||
@@ -699,7 +699,7 @@
|
||||
icon_deny = "sec-deny"
|
||||
req_access_txt = "1"
|
||||
products = list(/obj/item/weapon/handcuffs = 8,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/flash = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12,/obj/item/weapon/storage/box/evidence = 6)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12,/obj/item/weapon/storage/box/evidence = 6,/obj/item/device/flashlight/seclite = 4)
|
||||
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/fancy/donut_box = 2)
|
||||
|
||||
/obj/machinery/vending/hydronutrients
|
||||
|
||||
@@ -108,6 +108,15 @@
|
||||
brightness_on = 2
|
||||
|
||||
|
||||
/obj/item/device/flashlight/seclite
|
||||
name = "seclite"
|
||||
desc = "A robust flashlight used by security."
|
||||
icon_state = "seclite"
|
||||
item_state = "seclite"
|
||||
force = 9 // Not as good as a stun baton.
|
||||
brightness_on = 5 // A little better than the standard flashlight.
|
||||
|
||||
|
||||
// the desk lamps are a bit special
|
||||
/obj/item/device/flashlight/lamp
|
||||
name = "desk lamp"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
var/power_drained = 0 // has drained this much power
|
||||
var/max_power = 1e8 // maximum power that can be drained before exploding
|
||||
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
|
||||
var/admins_warned = 0 // stop spam, only warn the admins once that we are about to boom
|
||||
|
||||
var/const/DISCONNECTED = 0
|
||||
var/const/CLAMPED_OFF = 1
|
||||
@@ -133,7 +134,9 @@
|
||||
A.charging = 1 // It's no longer full
|
||||
|
||||
if(power_drained > max_power * 0.95)
|
||||
message_admins("Power sink at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) is about to explode")
|
||||
if (!admins_warned)
|
||||
admins_warned = 1
|
||||
message_admins("Power sink at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) is 95% full. Explosion imminent.")
|
||||
playsound(src, 'sound/effects/screech.ogg', 100, 1, 1)
|
||||
|
||||
if(power_drained >= max_power)
|
||||
|
||||
@@ -494,6 +494,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
freq_text = "Service"
|
||||
if(SUPP_FREQ)
|
||||
freq_text = "Supply"
|
||||
if(AIPRIV_FREQ)
|
||||
freq_text = "AI Private"
|
||||
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
|
||||
|
||||
if(!freq_text)
|
||||
@@ -520,7 +522,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
|
||||
part_a = "<span class='suppradio'><span class='name'>"
|
||||
else if (display_freq==DSQUAD_FREQ)
|
||||
part_a = "<span class='dsquadradio'><span class='name'>"
|
||||
|
||||
else if (display_freq==AIPRIV_FREQ)
|
||||
part_a = "<span class='aiprivradio'><span class='name'>"
|
||||
var/quotedmsg = M.say_quote(message)
|
||||
|
||||
//This following recording is intended for research and feedback in the use of department radio channels.
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
max_w_class = 2
|
||||
storage_slots = 21
|
||||
can_hold = list() // any
|
||||
cant_hold = list("/obj/item/weapon/disk/nuclear")
|
||||
cant_hold = list(/obj/item/weapon/disk/nuclear)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/bag/trash/update_icon()
|
||||
@@ -72,7 +72,7 @@
|
||||
storage_slots = 50
|
||||
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
|
||||
max_w_class = 3
|
||||
can_hold = list("/obj/item/weapon/ore")
|
||||
can_hold = list(/obj/item/weapon/ore)
|
||||
|
||||
|
||||
// -----------------------------
|
||||
@@ -87,7 +87,7 @@
|
||||
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
|
||||
max_w_class = 3
|
||||
w_class = 1
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
|
||||
|
||||
////////
|
||||
|
||||
@@ -261,4 +261,4 @@
|
||||
max_combined_w_class = 21
|
||||
max_w_class = 3
|
||||
w_class = 4 //Bigger than a book because physics
|
||||
can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/spellbook") //No bibles, consistent with bookcase
|
||||
can_hold = list(/obj/item/weapon/book, /obj/item/weapon/spellbook) //No bibles, consistent with bookcase
|
||||
|
||||
@@ -41,16 +41,16 @@
|
||||
icon_state = "utilitybelt"
|
||||
item_state = "utility"
|
||||
can_hold = list(
|
||||
"/obj/item/weapon/crowbar",
|
||||
"/obj/item/weapon/screwdriver",
|
||||
"/obj/item/weapon/weldingtool",
|
||||
"/obj/item/weapon/wirecutters",
|
||||
"/obj/item/weapon/wrench",
|
||||
"/obj/item/device/multitool",
|
||||
"/obj/item/device/flashlight",
|
||||
"/obj/item/stack/cable_coil",
|
||||
"/obj/item/device/t_scanner",
|
||||
"/obj/item/device/analyzer")
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/wrench,
|
||||
/obj/item/device/multitool,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/item/device/t_scanner,
|
||||
/obj/item/device/analyzer)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/full/New()
|
||||
@@ -80,19 +80,18 @@
|
||||
icon_state = "medicalbelt"
|
||||
item_state = "medical"
|
||||
can_hold = list(
|
||||
"/obj/item/device/healthanalyzer",
|
||||
"/obj/item/weapon/dnainjector",
|
||||
"/obj/item/weapon/reagent_containers/dropper",
|
||||
"/obj/item/weapon/reagent_containers/glass/beaker",
|
||||
"/obj/item/weapon/reagent_containers/glass/bottle",
|
||||
"/obj/item/weapon/reagent_containers/pill",
|
||||
"/obj/item/weapon/reagent_containers/syringe",
|
||||
"/obj/item/weapon/reagent_containers/glass/dispenser",
|
||||
"/obj/item/weapon/lighter/zippo",
|
||||
"/obj/item/weapon/storage/fancy/cigarettes",
|
||||
"/obj/item/weapon/storage/pill_bottle",
|
||||
"/obj/item/stack/medical",
|
||||
"/obj/item/device/flashlight/pen"
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/dnainjector,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle,
|
||||
/obj/item/weapon/reagent_containers/pill,
|
||||
/obj/item/weapon/reagent_containers/syringe,
|
||||
/obj/item/weapon/lighter/zippo,
|
||||
/obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/storage/pill_bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/device/flashlight/pen
|
||||
)
|
||||
|
||||
|
||||
@@ -104,19 +103,24 @@
|
||||
storage_slots = 5
|
||||
max_w_class = 3 //Because the baton wouldn't fit otherwise. - Neerti
|
||||
can_hold = list(
|
||||
"/obj/item/weapon/melee/baton",
|
||||
"/obj/item/weapon/melee/classic_baton",
|
||||
"/obj/item/weapon/grenade/flashbang",
|
||||
"/obj/item/weapon/reagent_containers/spray/pepper",
|
||||
"/obj/item/weapon/handcuffs",
|
||||
"/obj/item/device/flash",
|
||||
"/obj/item/clothing/glasses",
|
||||
"/obj/item/ammo_casing/shotgun",
|
||||
"/obj/item/ammo_box",
|
||||
"/obj/item/weapon/reagent_containers/food/snacks/donut/normal",
|
||||
"/obj/item/weapon/reagent_containers/food/snacks/donut/jelly"
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/melee/classic_baton,
|
||||
/obj/item/weapon/grenade/flashbang,
|
||||
/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
/obj/item/weapon/handcuffs,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/ammo_casing/shotgun,
|
||||
/obj/item/ammo_box,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
|
||||
/obj/item/device/flashlight/seclite
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/security/New()
|
||||
..()
|
||||
new /obj/item/device/flashlight/seclite(src)
|
||||
|
||||
/obj/item/weapon/storage/belt/soulstone
|
||||
name = "soul stone belt"
|
||||
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
|
||||
@@ -124,7 +128,7 @@
|
||||
item_state = "soulstonebelt"
|
||||
storage_slots = 6
|
||||
can_hold = list(
|
||||
"/obj/item/device/soulstone"
|
||||
/obj/item/device/soulstone
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/soulstone/full/New()
|
||||
@@ -144,7 +148,7 @@
|
||||
item_state = "champion"
|
||||
storage_slots = 1
|
||||
can_hold = list(
|
||||
"/obj/item/clothing/mask/luchador"
|
||||
/obj/item/clothing/mask/luchador
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/military
|
||||
@@ -160,7 +164,7 @@
|
||||
item_state = "soulstonebelt"
|
||||
storage_slots = 6
|
||||
can_hold = list(
|
||||
"/obj/item/weapon/gun/magic/wand"
|
||||
/obj/item/weapon/gun/magic/wand
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/wands/full/New()
|
||||
|
||||
@@ -329,7 +329,7 @@
|
||||
icon = 'icons/obj/food.dmi'
|
||||
icon_state = "monkeycubebox"
|
||||
storage_slots = 7
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/monkeycube")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
|
||||
New()
|
||||
..()
|
||||
for(var/i = 1; i <= 5; i++)
|
||||
@@ -483,7 +483,7 @@
|
||||
item_state = "syringe_kit"
|
||||
foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
|
||||
storage_slots=21
|
||||
can_hold = list("/obj/item/weapon/light/tube", "/obj/item/weapon/light/bulb")
|
||||
can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb)
|
||||
max_combined_w_class = 21
|
||||
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
icon_type = "donut"
|
||||
name = "donut box"
|
||||
storage_slots = 6
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/donut")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/fancy/donut_box/New()
|
||||
@@ -67,7 +67,7 @@
|
||||
icon_type = "egg"
|
||||
name = "egg box"
|
||||
storage_slots = 12
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/egg")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/egg)
|
||||
|
||||
/obj/item/weapon/storage/fancy/egg_box/New()
|
||||
..()
|
||||
@@ -153,7 +153,7 @@
|
||||
throwforce = 0
|
||||
slot_flags = SLOT_BELT
|
||||
storage_slots = 6
|
||||
can_hold = list("/obj/item/clothing/mask/cigarette")
|
||||
can_hold = list(/obj/item/clothing/mask/cigarette)
|
||||
icon_type = "cigarette"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/New()
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
item_state = "contsolid"
|
||||
w_class = 2.0
|
||||
can_hold = list("/obj/item/weapon/reagent_containers/pill","/obj/item/weapon/dice")
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice)
|
||||
allow_quick_gather = 1
|
||||
use_to_pickup = 1
|
||||
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
max_w_class = 8
|
||||
anchored = 1.0
|
||||
density = 0
|
||||
cant_hold = list("/obj/item/weapon/storage/secure/briefcase")
|
||||
cant_hold = list(/obj/item/weapon/storage/secure/briefcase)
|
||||
|
||||
New()
|
||||
..()
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
if(can_hold.len)
|
||||
var/ok = 0
|
||||
for(var/A in can_hold)
|
||||
if(istype(W, text2path(A) ))
|
||||
if(istype(W, A))
|
||||
ok = 1
|
||||
break
|
||||
if(!ok)
|
||||
@@ -211,7 +211,7 @@
|
||||
return 0
|
||||
|
||||
for(var/A in cant_hold) //Check for specific items which this container can't hold.
|
||||
if(istype(W, text2path(A) ))
|
||||
if(istype(W, A))
|
||||
if(!stop_messages)
|
||||
usr << "<span class='notice'>[src] cannot hold [W].</span>"
|
||||
return 0
|
||||
|
||||
@@ -5,25 +5,25 @@
|
||||
icon_state = "wallet"
|
||||
w_class = 2
|
||||
can_hold = list(
|
||||
"/obj/item/weapon/spacecash",
|
||||
"/obj/item/weapon/card",
|
||||
"/obj/item/clothing/mask/cigarette",
|
||||
"/obj/item/device/flashlight/pen",
|
||||
"/obj/item/seeds",
|
||||
"/obj/item/stack/medical",
|
||||
"/obj/item/toy/crayon",
|
||||
"/obj/item/weapon/coin",
|
||||
"/obj/item/weapon/dice",
|
||||
"/obj/item/weapon/disk",
|
||||
"/obj/item/weapon/implanter",
|
||||
"/obj/item/weapon/lighter",
|
||||
"/obj/item/weapon/match",
|
||||
"/obj/item/weapon/paper",
|
||||
"/obj/item/weapon/pen",
|
||||
"/obj/item/weapon/photo",
|
||||
"/obj/item/weapon/reagent_containers/dropper",
|
||||
"/obj/item/weapon/screwdriver",
|
||||
"/obj/item/weapon/stamp")
|
||||
/obj/item/weapon/spacecash,
|
||||
/obj/item/weapon/card,
|
||||
/obj/item/clothing/mask/cigarette,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/seeds,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/toy/crayon,
|
||||
/obj/item/weapon/coin,
|
||||
/obj/item/weapon/dice,
|
||||
/obj/item/weapon/disk,
|
||||
/obj/item/weapon/implanter,
|
||||
/obj/item/weapon/lighter,
|
||||
/obj/item/weapon/match,
|
||||
/obj/item/weapon/paper,
|
||||
/obj/item/weapon/pen,
|
||||
/obj/item/weapon/photo,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/stamp)
|
||||
slot_flags = SLOT_ID
|
||||
|
||||
var/obj/item/weapon/card/id/front_id = null
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
new /obj/item/device/radio/headset/heads/ce(src)
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(src)
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
new /obj/item/weapon/airlock_painter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/multitool(src)
|
||||
new /obj/item/device/flash(src)
|
||||
|
||||
@@ -296,6 +296,16 @@ obj/structure/door_assembly
|
||||
density = 1
|
||||
state = 1
|
||||
|
||||
door_assembly_shuttle
|
||||
name = "Shuttle Airlock Assembly"
|
||||
icon_state = "door_as_shuttle1"
|
||||
typetext = "shuttle"
|
||||
icontext = "shuttle"
|
||||
airlock_type = /obj/machinery/door/airlock/shuttle
|
||||
anchored = 1
|
||||
density = 1
|
||||
state = 1
|
||||
|
||||
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pen))
|
||||
var/t = copytext(stripped_input(user, "Enter the name for the door.", src.name, src.created_name),1,MAX_NAME_LEN)
|
||||
|
||||
@@ -3,7 +3,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
/datum/admin_rank
|
||||
var/name = "NoRank"
|
||||
var/rights = 0
|
||||
var/list/adds
|
||||
var/list/adds
|
||||
var/list/subs
|
||||
|
||||
/datum/admin_rank/New(init_name, init_rights, list/init_adds, list/init_subs)
|
||||
@@ -74,7 +74,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
next = findchar(line, "+-", prev+1, 0)
|
||||
R.process_keyword(copytext(line, prev, next), previous_rights)
|
||||
prev = next
|
||||
|
||||
|
||||
previous_rights = R.rights
|
||||
else
|
||||
establish_db_connection()
|
||||
@@ -117,7 +117,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
var/list/rank_names = list()
|
||||
for(var/datum/admin_rank/R in admin_ranks)
|
||||
rank_names[R.name] = R
|
||||
|
||||
|
||||
if(config.admin_legacy_system)
|
||||
//load text from file
|
||||
var/list/Lines = file2list("config/admins.txt")
|
||||
@@ -158,7 +158,10 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
while(query.NextRow())
|
||||
var/ckey = ckey(query.item[1])
|
||||
var/rank = ckeyEx(query.item[2])
|
||||
var/datum/admins/D = new(rank, ckey) //create the admin datum and store it for later use
|
||||
if(rank_names[rank] == null)
|
||||
error("Admin rank ([rank]) does not exist.")
|
||||
continue
|
||||
var/datum/admins/D = new(rank_names[rank], ckey) //create the admin datum and store it for later use
|
||||
if(!D) continue //will occur if an invalid rank is provided
|
||||
D.associate(directory[ckey]) //find the client for a ckey if they are connected and associate them with the new admin datum
|
||||
|
||||
@@ -214,7 +217,7 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
return
|
||||
|
||||
var/datum/admins/D = admin_datums[adm_ckey]
|
||||
|
||||
|
||||
switch(task)
|
||||
if("remove")
|
||||
if(alert("Are you sure you want to remove [adm_ckey]?","Message","Yes","Cancel") == "Yes")
|
||||
@@ -228,57 +231,57 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
|
||||
if("rank")
|
||||
var/datum/admin_rank/R
|
||||
|
||||
|
||||
var/list/rank_names = list("*New Rank*")
|
||||
for(R in admin_ranks)
|
||||
rank_names[R.name] = R
|
||||
|
||||
|
||||
var/new_rank = input("Please select a rank", "New rank", null, null) as null|anything in rank_names
|
||||
|
||||
|
||||
switch(new_rank)
|
||||
if(null) return
|
||||
if("*New Rank*")
|
||||
new_rank = ckeyEx(input("Please input a new rank", "New custom rank", null, null) as null|text)
|
||||
if(!new_rank) return
|
||||
|
||||
|
||||
R = rank_names[new_rank]
|
||||
if(!R) //rank with that name doesn't exist yet - make it
|
||||
if(D) R = new(new_rank, D.rank.rights, D.rank.adds, D.rank.subs) //duplicate our previous admin_rank but with a new name
|
||||
else R = new(new_rank) //blank new admin_rank
|
||||
admin_ranks += R
|
||||
|
||||
|
||||
if(D) //they were previously an admin
|
||||
D.disassociate() //existing admin needs to be disassociated
|
||||
D.rank = R //set the admin_rank as our rank
|
||||
else
|
||||
D = new(R,adm_ckey) //new admin
|
||||
|
||||
|
||||
var/client/C = directory[adm_ckey] //find the client with the specified ckey (if they are logged in)
|
||||
D.associate(C) //link up with the client and add verbs
|
||||
|
||||
|
||||
message_admins("[key_name_admin(usr)] edited the admin rank of [adm_ckey] to [new_rank]")
|
||||
log_admin("[key_name(usr)] edited the admin rank of [adm_ckey] to [new_rank]")
|
||||
log_admin_rank_modification(adm_ckey, new_rank)
|
||||
|
||||
if("permissions")
|
||||
if(!D) return //they're not an admin!
|
||||
|
||||
|
||||
var/keyword = input("Input permission keyword (one at a time):\ne.g. +BAN or -FUN or +/client/proc/someverb", "Permission toggle", null, null) as null|text
|
||||
if(!keyword) return
|
||||
|
||||
|
||||
D.disassociate()
|
||||
|
||||
|
||||
if(!findtext(D.rank.name, "([adm_ckey])")) //not a modified subrank, need to duplicate the admin_rank datum to prevent modifying others too
|
||||
D.rank = new("[D.rank.name]([adm_ckey])", D.rank.rights, D.rank.adds, D.rank.subs) //duplicate our previous admin_rank but with a new name
|
||||
//we don't add this clone to the admin_ranks list, as it is unique to that ckey
|
||||
|
||||
|
||||
D.rank.process_keyword(keyword)
|
||||
|
||||
|
||||
var/client/C = directory[adm_ckey] //find the client with the specified ckey (if they are logged in)
|
||||
D.associate(C) //link up with the client and add verbs
|
||||
|
||||
|
||||
message_admins("[key_name(usr)] added keyword [keyword] to permission of [adm_ckey]")
|
||||
log_admin("[key_name(usr)] added keyword [keyword] to permission of [adm_ckey]")
|
||||
log_admin_permission_modification(adm_ckey, D.rank.rights)
|
||||
|
||||
|
||||
edit_admin_permissions()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/obj/item/clothing/suit/armor
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/seclite)
|
||||
body_parts_covered = CHEST
|
||||
|
||||
cold_protection = CHEST|GROIN
|
||||
|
||||
@@ -30,6 +30,9 @@
|
||||
for(var/i=0;i<7;i++) // 2 for medHUDs and 5 for secHUDs
|
||||
hud_list += image('icons/mob/hud.dmi', src, "hudunknown")
|
||||
|
||||
if(real_name == "John McClane")
|
||||
ventcrawler = 2
|
||||
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/Destroy()
|
||||
|
||||
@@ -331,13 +331,15 @@
|
||||
name = "Ian"
|
||||
real_name = "Ian" //Intended to hold the name without altering it.
|
||||
gender = MALE
|
||||
desc = "It's a corgi."
|
||||
desc = "wow"
|
||||
var/turns_since_scan = 0
|
||||
var/obj/movement_target
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "kicks"
|
||||
|
||||
speak = list("wow", "such corgi", "much cute", "very pet")
|
||||
|
||||
/mob/living/simple_animal/corgi/Ian/Life()
|
||||
..()
|
||||
|
||||
@@ -382,6 +384,9 @@
|
||||
if(prob(20))
|
||||
emote("stares at [movement_target.loc]'s [movement_target] with a sad puppy-face")
|
||||
|
||||
if(prob(2))
|
||||
say(pick("wow", "such dog", "much corgi", "very cute"))
|
||||
|
||||
if(prob(1))
|
||||
emote(pick("dances around","chases its tail"))
|
||||
spawn(0)
|
||||
@@ -389,6 +394,7 @@
|
||||
dir = i
|
||||
sleep(1)
|
||||
|
||||
|
||||
/mob/living/simple_animal/corgi/Ian/Bump(atom/movable/AM as mob|obj, yes)
|
||||
if ((!( yes ) || now_pushing))
|
||||
return
|
||||
@@ -417,10 +423,22 @@
|
||||
now_pushing = null
|
||||
//PC stuff-Sieve
|
||||
|
||||
/mob/living/simple_animal/corgi/Ian/Die()
|
||||
say(pick("wow", "much die", "very dead", "such afterlife"))
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/corgi/Ian/gib(animation)
|
||||
say(pick("wow", "such gore", "much graphic", "very gib"))
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/corgi/Ian/adjustBruteLoss(damage)
|
||||
say(pick("wow", "much hurt", "very pain", "such damage"))
|
||||
|
||||
/mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
if(istype(O, /obj/item/weapon/newspaper))
|
||||
if(!stat)
|
||||
user.visible_message("\blue [user] baps [name] on the nose with the rolled up [O]")
|
||||
say(pick("much pain", "very hurt", "such sad"))
|
||||
spawn(0)
|
||||
for(var/i in list(1,2,4,8,4,2,1,2))
|
||||
dir = i
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "album"
|
||||
item_state = "briefcase"
|
||||
can_hold = list("/obj/item/weapon/photo",)
|
||||
can_hold = list(/obj/item/weapon/photo)
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -194,6 +194,7 @@
|
||||
if(iscorgi(M))
|
||||
if(bitecount == 0 || prob(50))
|
||||
M.emote("nibbles away at the [src]")
|
||||
M.say(pick("wow", "such taste", "much food", "very eat"))
|
||||
bitecount++
|
||||
if(bitecount >= 5)
|
||||
var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where the [src] was")
|
||||
|
||||
@@ -53,6 +53,60 @@ should be listed in the changelog upon commit tho. Thanks. -->
|
||||
<!-- You can simply add changelogs using AddToChangelog.exe -->
|
||||
|
||||
<!-- DO NOT REMOVE OR MOVE THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>2 April 2014</h2>
|
||||
<h3 class='author'>Ikarrus updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='experiment'><b>Nanotrasen Construction division is pleased to announce the unveiling of our brand now state-of-the-art Space Station 13 v2.1.3!</b></li>
|
||||
<li class='rscadd'>-Scaffolding used during construction has been repurposed as an expanded maintenance around the station.</li>
|
||||
<li class='tweak'>-Our new Emergency Transport Shuttle Mk III will be making its debut in times of crisis. Includes a new cargo area and extra security features.</li>
|
||||
<li class='tweak'>-A redesigned brig will give security staff more peace of mind with added security features</li>
|
||||
<li class='rscadd'>-The armory is now protected by a motion alarm.</li>
|
||||
<li class='rscadd'>-The armory is now equipped with security hardsuits.</li>
|
||||
<li class='rscadd'>-A new command EVA wing has been added to EVA Storage. Station heads of staff will be able to make use of suits stored here.</li>
|
||||
<li class='rscadd'>-A new garden area will be made publicly available for everyone to enjoy some R&R during their company-endorsed break periods</li>
|
||||
<li class='rscadd'>-A new Testing Lab has been added to the Science department for any field experiments that need to be run.</li>
|
||||
<li class='tweak'>-The mining ore redemption machine has been relocated to the Cargo Delivery Office.</li>
|
||||
|
||||
</ul>
|
||||
<h3 class='author'>Giacom updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='rscadd'>The syndicate suit is now black and red, because black and red is the new red.</li>
|
||||
<li class='rscadd'>The Ruskie DJ Station now has a classy orange syndicate suit.</li>
|
||||
<li class='rscadd'>Security officers have been equipped with the latest in flashlight technology. You can find a SecLite™ inside your security belt or you can dispense one from the security vending machine.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>1 April 2014</h2>
|
||||
<h3 class='author'>Malkevin updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='experiment'><b>Sacrifice Cult - Cult has received a massive overhaul to how it works, focusing more on cult magics and sacrificing unbelievers. The most important changes are:</b></li>
|
||||
<li class='tweak'>Cult starts off with alot more cultists, 6 cultists below 30 players and 9 above. The HoP can no longer be a round start cultist but is still convertible.</li>
|
||||
<li class='tweak'>Cultists start off with join, blood, self, and hell. These give the runes for the sacrifice and convert.</li>
|
||||
<li class='tweak'>Conversions now require three cultists and converts no longer reward words, words must be obtained via sacrifice</li>
|
||||
<li class='tweak'>Sacrificing players traps their soul in a soul stone, which can then be used on construct shells to implant the souls in them</li>
|
||||
<li class='tweak'>Constructs shells can be summoned via a new rune (travel, hell, technology)</li>
|
||||
<li class='bugfix'>You can no longer convert the sacrifice target, you dozzy sods</li>
|
||||
<li class='experiment'>Summoning Narsie when she is not an objective leads to !!FUN!!</li>
|
||||
<li class='wip'>Wrote a system to allow all mob types to be sacrificable - currently only corgis are in the new system</li>
|
||||
<li class='experiment'>Holy Water will DECONVERT cultists, takes around 35 units and two minutes to succeed</li>
|
||||
<li class='experiment'>Hitting a mob that contains holy water with a tome will convert that water to unholy water, conversely hitting any container that contains unholy water with a bible as chaplain will 'cleanse' the taint.</li>
|
||||
<li class='experiment'>Unholy water works like a combination synaptazine and hyperzine, with a twist of branes dimarge and highly toxic to non-cultists</li>
|
||||
<li class='rscadd'>Cargo can order a religious supplies crate - it contains flasks of holy water, candles, bibles, and robes </li>
|
||||
<li class='experiment'>Cultists have an innate ability to communicate to the cult hive mind (BE AWARE - THIS DOES A LOT OF DAMAGE), cultists can also communicate via the new Commune option on their tomes (the Read Tome option has been shifted under the Notes option)</li>
|
||||
</ul>
|
||||
<h3 class='author'>MrStonedOne updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='rscadd'>Cyborgs can now use AI click shortcuts. (shift click on doors opens them, etc) (including ones added below)</li>
|
||||
<li class='rscadd'>New silicon click shortcut: Control+Shift click on doors toggles access override</li>
|
||||
<li class='rscadd'>New silicon click shortcut: Control click turret controls toggles them on or off</li>
|
||||
<li class='rscadd'>New silicon click shortcut: Alt click turret controls toggles lethal on or off</li>
|
||||
<li class='tweak'>Cyborg hotkey mode was massively improved. 1-3 selects module slot, q unloads the active module. use hotkeys-help as cyborg for more details</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>1 Aphril 2014</h2>
|
||||
<h3 class='author'>Aranclanos updated:</h3>
|
||||
|
||||
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 189 KiB |
|
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 155 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 33 KiB |
@@ -34,6 +34,7 @@ em {font-style: normal; font-weight: bold;}
|
||||
.servradio {color: #6eaa2c;}
|
||||
.syndradio {color: #6D3F40;}
|
||||
.dsquadradio {color: #686868;}
|
||||
.aiprivradio {color: #ff00ff;}
|
||||
|
||||
.alert {color: #ff0000;}
|
||||
h1.alert, h2.alert {color: #000000;}
|
||||
@@ -63,4 +64,4 @@ h1.alert, h2.alert {color: #000000;}
|
||||
BIG IMG.icon {width: 32px; height: 32px;}
|
||||
|
||||
|
||||
</style>"}
|
||||
</style>"}
|
||||
|
||||