Name: “Fast” Reggie James\nO.C.C./R.C.C.: Human ex-CS Grunt, Level 4\nDisposition: Normally friendly and gregarious, Fast Reggie becomes quiet and withdrawn when high on pain killers. When on drugs he is laid back, withdrawn, wants to be left alone. When Reggie is in this withdrawn state he will snap at those who interrupt/disturb him.\nHistory: At one time Reggie was a promising recruit in the CS Army. Originally from level four he broke out by enlisting and his top physical condition earned him high marks and an eyeball toward a commando unit. All that changed in a training accident that sent Private James to the infirmary for six weeks with a serious back injury. While he did recover Reggie was cursed with chronic pain. Depressed at being discharged and sent back to level four Reggie quickly became addicted to pain killers and now spends most of his days holed up at the Red Ranger with an easy buzz of pain meds and beer.\nOccupation: Although his pension covers the basics Reggie’s habit is expensive. To earn cash from time to time he will take jobs as muscle for local gangs. He’s also a skilled demolitions expert and semi-skilled mechanic making his services valuable for car bombs and other high profile jobs – if he can be trusted. When he can stay off the meds and fight through the pain Reggie is still a formidable solider.
With no father in the picture and a less then enthusiastic mother Andrew, the youngest of three, only had his siblings as role models. [[Faye Drake]], was level headed and tough - the real mother figure in the Drake family. [[Coran Drake]] on the other hand was exciting. He drove fast cars, lived fast, and ran with a fast crowd. His life seemed to rise above the mundane squalor the Drake's had been born into. Andrew idoloized Coran and wanted a slice of this life for himself. \n \nWhen Coran left unexpectedly, leaving behind his debts and his family, Andrew was somewhat soured on his older brother and was determined to make a name for himself, to succeed where Andrew percieved that Coran had failed. \n \nAmbitious, but unconnected, Andrew tried to leverage his brother's cred with the Red Jackals and was given an 'in' as a low level gang banger. Andrew thought he deserved more and was constantly looking for a way to get a 'big score' and make a name for himself. This mentality led to a few half-cocked schemes that made Andrew a few petty enemies and a bit of an embarassment to the Jackals who cut him loose as a member. \n \nDisenfranchised, but undeterred, Andrew got a job washing dishes at the same club where his sister, Faye, worked. But Andrew only had a job to live, he was still looking for his big score.
Occupation: Bartender / Owner\nDescription: Very Fit; Short Auburn hair. Cybernetic left eye. His face is scarred from a number of fights, especially around his left eye. Background: Owner of the 'The Stagger Inn,' a butcher shop that Bill bought and converted into the bar. This is where Coran spents most of his free time, watching the games. Bill is a true player, with his ear to the ground, always on the pulse of Underworld activity. Bill is looking for information on Coran's Brother's death, for a price of course.\n
Not an actual park, this is the nickname of a city-block sized area which is officially designated as Sector 42. Burn Park is a collection of half-collapsed brick and cement buildings, usually with fresh smoke pouring out of one window or another. Robot footprints in the floors and railgun holes in the walls all signify the level of conflict associated with this place. Well defined trails crisscross over the piles of rubble and a few dark tunnels exist underneath. Toward the center, a small pond has formed from a leaking water pipe.\n\nWhen Chi-Town was new, this area was the immigration complex, a huge building full of impressive gothic architecture. It was here a perspective citizens and other refugees were counted, scrutinized, processed, and rejected. Later, the immigration bureaucrats were moved outside of the city walls leaving behind miles of empty hallways and offices.\n\nDuring the war with the Federation of Magic, Sector 42 was reclaimed by the military as a training facility. The Coalition Army used it as a training ground for urban-themed war games. Officers at the time felt that it was preferable to make new recruits practice inside the relative safety of the city walls. As Chi Town grew, the war games were moved into the Burbs and surrounding communities.\n\nAfter the dead boys abandoned Burn Park, mercenaries took their place. The numerous head hunters who inhabit Level 4 use Sector 42 as their own practice field. Weapons testing, mock gang wars, shooting practice, and duels (both practice and real). The most popular games are played between small bands of mercs. These teams play scavenger hunt, capture the flag, and king of the hill. Rarely, the games spill over into neighboring streets and buildings, but the authorities tend to frown upon this.\n\nThe primary inhabitants of Burn Park are squatters, both recently evicted citizens and the chronically homeless. The squatters are primarily vagabonds, juicer wannabes, city rats, and unskilled nobodies. A few manage to make a meager living by salvaging hardware from the rubble including unexploded shells or grenades, spent e-clips, and reusable rail gun flecettes.\n\nThe mercs do like to use the squatters as target practice. These squatters are technically considered CS citizens, so the mercs aren't allowed to actually kill them. For that, the mercs go out into the burbs. However, the mercs are allowed to bruise, break, and scar any "trespassers" found in the military urban training facility. It isn't uncommon to see vagabonds running out of Burn Park when the games start like rats running from a sinking ship.\n\nIronically, Burn Park is considered a community asset by most of the citizens of Level 4. Several times per year, the site becomes an arena for legitimate sporting events. The city's citizens will perform boxing matches, races, and battle reenactments.\n\nRumors say that somewhere in Burn Park, there is a tunnel which leads down into the hidden ruins of old Chicago underneath the city. This rumor is untrue. There is a tunnel there which goes as far down as Level Three, but it leads into the garbage incinerator.
Occupation: Gang Muscle, City Rat\n\nDescription: A huge, 6'10", and burly African American with large muscular arms and torso. Many suspect he takes some sort of enhancement drugs to look so cut.\n\nBackground: A long time level four denizen, Buster, has held every job one wouldn't want from street fighter, athlete, drug addict and more. After losing badly in what was his last street fight Buster went on a drug binge and fried some serious brain cells. As a result he has a few screws loose and often beats people at random and bullies anyone who 'looks at him funny'. After a long detox, thanks to some gang members from the Jackals Buster is now as clean as a whistle and is a real health nut. He works out and trains constantly, running, exercising, and playing all manner of sports - particularly boxing. His size and strength make him an excellent enforcer.
Occupation: Leader, Red Jackals Gang\nDescription: Thick Black man with a slight afro. Mid 30s\nBackground: While Coran was gone, the man he used to run with has become the leader of the Red Jackals. As such, he still has a soft spot for Coran, and knows how good a wheelman he is, perhaps better now that he is Juiced. Whenever Coran falls behind with his gambling debts, Bryan can usually find a job for him.\n
Chi-Town is the capital city of the Coalition States and home to Emperor Prosek. This fortress city, towers more than 1,000 feet above the squalor of the 'Burbs like a man-made mountain of concrete and steel. Inside, the city is a comparative paradise.
A modest apartment complex ran by Ms Abernathy. Small and homely with faded rugs and worn wood panelling. The kitchen on the main floor and small dining area make Clover Heights resemble more a Bed and Breakfast than a sanctioned Coalition apartment complex and that’s the way Ms Abernathy runs it. Troublemakers aren’t welcome.\n\nAssociated [[NPC]]s:\n[[Ms. Abernathy]], Superintendant\n[[Manuel Neuman]], Courier
Height: 6'3 \nWeight: 250 lbs.\nAge: 22\nPhysical Desription: Very Fit, thick arms and torso. Short brown hair, longer in the middle, like a lazy mohawk. Face and body heavily scarred.\n\nDisposition: Somewhat simple minded. He has a tendacy to follow his base impulses; not particularly good at holding his cards close, when it comes to controling his temper or \nhiding his excitement. \n \nPlace of Origin: Chi-Town, Level 4\n\nBio: \n\nCoran is a man tailed by darkness, a shadow always covering him, a dark cloud always looming overhead. Born in the slums of level 4, to a broken family, with no father to speak of and a mother who resented the children for it. One older sister, one younger brother. He grew up hanging with the wrong crowd, as if there was a good crowd on level 4 to hang with. They did petty crimes, like stealing from the convinence store, jacking parts off of cars and bikes, tagging. \n\nAs a young adult, he ran with the Red Jackals, a local group of thugs who did more serious crimes. Coran was good for two things: Looking tough and driving. Not much of a fighter, he could hold his own, but he was no prize fighter. However, standing behind the big mouth of Byron Anderson, a smugler who took little lip and followed any means necessary, the two made a good team. And, of all the guys in his crew, Coran was the best wheelman. What little money he made, however, was wasted on gambling. He had an addiction to bet. While Protected to a degree by his friends and his gang, the impulse got him into trouble more than once. And after getting in a bit over his head, a friend convinced him to leave chi-town and start his life a new. \n\nThat advice lead him to Kingsdale, and back to the same old Habits. However, this time, he operated with bigger fish. By night, he drove for Jamison Astru, a rising star in the black market. By day, he followed juicer sports and gambled away his savings. Yet, His \nreputation as a reliable driver affording him a golden opportunity: Juicer Conversion. With the conversion, he would be able to compete in the games he bet on, and better influence their outcome. But, the work of the underworld cyberdoc didn't work out as planned. \n\nHis Kingsdale bookie convinced him to throw his games for big credit payoffs. However, in Juicer sports, throwing a game means getting beaten half to death. Each match would land Coran in the medical center for weeks. Even with his enhanced healing-which did not work as expected. He never did heal as fast as the other Juicers.\n\nIt was not long before things turned bad; first, the credits he did make by throwing matches went fast to his gambling habit. Second, after consulting with another cyberdoc about his healing, Coran found out that the man who performed his Juicer procedure,\nand that he was prematurely experiencing the systems of last call. This news caused Coran to be even more hazardous with his gambling, taking out loans he had not intention of paying back. Third, new came that his younger brother, Andrew, had been killed. This, \nalong with his gambling woes, convinced him to return to Level 4. \n\nCoran is on the lookout for his brother's killer, running with the same Red Jackal crew, with a load of debt (and likely trouble) on his tail. \n
The centre core of each level is home to domestic shops, services and businesses as well as public spaces and parks. On level four this central section is home to numerous bars, restaurants, casinos, pawnshops, bargain stores, and other businesses. The buildings in this area are dilapidated and dank. Many have basements and backrooms that house drug dens, chop-chops, brothels and other vices.
“Wall-to wall and floor-to-ceiling the inside of this small shop is jammed with items loosely organized. Bins filled with surplus clothing, belts, hats and other outerwear take up most of the floor space while shelves built into the walls contain household and common gadgets of all types. Near the front counter are a number of large glass display cases where jewellery, high-end electronics, and other high-value items are kept on display.”\n\nFlavour Text:\nA glorified pawn shop, CreditXchange, specializes in buying items for credits and reselling them for a profit. Their policy of no-questions-asked makes them very popular. However, for the convenience of this no-questions policy they will also buy items for the lowest possible value. Nonetheless, they remain popular with petty thieves and those wishing to make some quick cash with little scrutiny.\n\nMost low-end technological gadgets (See Basic Gear, p. 261) can be found for sale here, often for 30-50% of retail price. All items are sold as is, where is. Occasionally a very high value item becomes available at a significant discount. Of course, its previous owner may not be so thrilled with the transaction.\n\nCreditXchange also makes high interest short term loans, usually requiring some sort of collateral. Loan terms range from a few days to two weeks with interest being high (20%) to outrageous (100% or more!). Non-payment results in the losing your collateral, if you are lucky. Sometimes for large dollar amounts CreditXchange will contract loan collectors who retrieve payment in exchange for a percentage of the amount owing.\n\nAssociated [[Non-Player Characters]]:\n[[Sandra “Sandy” Hillier]]\n[[Ellie Pounder]]\n
[[Welcome to Level 4]]
Dirt Row\nDesciption: A section of alleyway in Level 4, officially named 'Row D' and affectionately called Dirt Row. It is lined with Card Board boxes, which is not an uncommon sight in the level. However, this row seems to made up completely of drug addicts, waiting to score their next hit. The area is littered with used needles and \nother paraphenialia. \n
Occupation: Body Fixer/Administrator at St Luke’s Medical Center\n\nDescription: Short, fat and crooked with a tight-fisted approach to medicine. \n\nBackground: Dr Stahl rules St Lukes with an iron fist and takes pleasure in the control he has over life and death on Level 4. It was he who brought about the neutral status of the hospital for the truth is that Stahl takes bribes from both the authorities and the local gangs. A potentially explosive balancing act for all who depend on the clinic.
Huey is the youngest child of a prominent middle class family. For most of his life he looked up to his parents, older brother and peers and sought nothing but their approval. He studied to be a doctor to impress his peers and studied fencing to impress the ladies. His was meant to be a life of privilege and fortune and the social ladder, his to climb. Just as he had completed Medical School and was poised to offer himself to only the most prestigious clinics in Chi-Town, the bottom fell out from his world. \n\nHis parents were caught and found guilty of Subversive Activities and scandal ensued. Huey was absolved of all crimes for he truly was unaware of what was happening right under his nose. His name was tarnished. The job offers never came and his family’s assets were seized. Huey fell into a downward spiral of literal and figurative means. Over a few short months Huey sank into depression and alcoholism and his status and residence plummeted until he wound up on Level 4. \n\nHuey is highly skilled and intelligent. However, this profession was chosen as path to gaining approval or praise. As such, Huey performs his duties with competence, but no passion. He heals and saves lives as if on auto-pilot, never realizing how important and noble the task the role of healer is to those around him. Likewise, Huey learned fencing to impress others. It has not yet occurred to him that he can use those skills to spill blood. \n\nIt’s been 2 years since Dr Huey Brahm came down to the lower levels. The boozing and depression have lessened and the shock of betrayal by the same social game he had dedicated his whole life to has ebbed. But at the tender age of 29, Huey finds his life having no purpose or meaning. He finds himself adrift on the cruel tides of Level 4.
Occupation: Medical Doctor (Body Fixer) and Senior Physician at St Luke’s Medical Center\n\nDescription: Tall and imposing with a little grey around the temples. Has a combative personality. \n\nBackground: Dr Perry came from the lower levels and went back to them because more than any of the glitz and shine of the higher levels, this is home. He knows it’s a crappy place to live but he does his part to make it better for those poor lives he gets to touch each and every day. After all, its not gonna get any better without the help of people like him
Name: Ellie Pounder\nO.C.C./R.C.C.: Human Vagabond, Level 3\nDisposition: Appears outwardly confident and doesn’t back down from a fight.\nHistory: Ellie has lived a lot of years for such a young woman. Originally fated to go nowhere she caught the eye of a rich high-leveller who was “grunging” at the bar where she worked as a waitress. To facilitate their affair he hired Ellie as a housekeeper in his high level apartment…until his wife figured out what was happening. Ellie was shoved back to level four but her work papers remained valid and her guilty lover helped find her a few jobs in the mid-levels.\nOccupation: Works days as a house servant on Level 17. She does cooking, cleaning and general upkeep in an upper-middle class neighbourhood. In her job she will often find some small trinket that will fetch good value and try to acquire it; making her a regular customer at CreditXchange. Her easy access to the higher levels also makes her ideal for ‘casing’ potential burglary targets. A few gangs use her in this role from time to time.\n
The Red Jackals operate a block of apartments known as Emperor Square. Despite its grandiose name this three-building apartment complex is pretty low end - even by Level Four standards. Each building is an exact replica of the other and they are arranged in the middle of the Housing District. Lighting levels are low and there are many alley ways and dead ends behind the large super structures. Trash collection is somewhat lax and overflowing dumpsters are a common sight. When the super city was built, all levels had high quality construction, as a result small parks dot the courtyard which connects the buildings but they have since been overrun with garbage, squatters, and graffiti. Sadly, if the area were not so neglected it could be just as opulent as something found in the High Levels.\n\nAssociated [[NPC]]s:\n[[Buster]], Gutter Rat\n[[Weasel]], Maze Rat\n[[Henri Racine]], retired merc
Occupation: Waitress (Coran's Sister)\nDescription: Long black hair, with some meat on her bones. Late 20s.\nBackground: Faye and Coran have had a bit of a falling out, as she disapproved of his leaving and his conversion. He disapproves of her waitress job at a strip joint and occasional dancing. But while there is much animosity, they find common ground in their dead brother, and Coran's search to find the killers. \n
A small toy shop owned and operated by Goffredo Petto. The front part of the shop houses many children’s toys, both basic wood and more advance electronic toys and even the rare toy that may be found 10 or 12 levels higher. \n\nThe rear is a fully equipped machine shop, though on a very small scale. Nestled in one corner beneath faded canvas lie Petto’s beloved woodworking tools. Though they sell less than the more advanced, Goffredo Petto crafts each wooden toy that he makes with love and attention to detail.\n\nAssociated [[Non-Player Characters]]:\n[[Goffredo Petto]], Toymaker\n
Real Name: Guy Bullock\n\nGuy was born into a family of forgers. He learned his trade at a young age. When his parents were caught and executed in Iron Heart, he created a new idenity for himself and traveled to Chi Town. Selling his skills for money, protection, and favors, he managed over a few years to work his way up to Level 4. Once there, he decided that he had climbed high enough, so he settled and opened his own shop.\n\nHe is a quiet and hard working man. He's content to run his business and busy himself with his books. At first appearance, he seems to nice to live Level 4. In order his keep his team of employed forgers in line, he sometimes demonstrates a mean streak.
There aren't many true relics of the Golden Age of Man inside Level 4, but there is a small shop which offers impressive replicas. A small store is located on the second floor of a non-descript red brick building with no signage. The locals all know where to find it.\n\nGatsby is a rogue scholar who specializes in forgery. He creates replicas of some of the golden aged books, magazines, and newspapers, and even official documents. The replicas in his shop are marked as such, so he maintains a reputation of remaining legal. In fact, his shop is a frequent stop for higher ranking citizens and officers who infrequently visit Level 4.\n\nOf couse, no one expects a book binder to make a living in a mostly illeterate society. Gatsby also runs two side businesses through the back of his shop, though they are less well known and much less legal. The first side business is a small pornography production line. At night, the printing presses turn out stacks of dirty magazines copied from Golden Age originals. Gatsby offers these prints to Dead Boys in exchange for a little extra protection.\n\nThe second side business is a little less risque but more risky. Gatsby and his assistants also produce replicas books and other items which are not marked as being replicas. These items are special orders based upon photographs taken by thieves who work the higher levels. After completion of the replicas, the thieves purchase them for the purpose of switching them with the real items. When the plan works well (and it usually does), the victims of this scheme don't realize that they have been robbed for weeks afterward.\n\nAssociated [[Non-Player Characters]]:\n[[Gatsby]], Rogue Scholar & Owner
Occupation: Toymaker\n\nDescription: Middle-aged and of Italian descent. Has a small curve of the spine due to years hunched over his work table. \n\nBackground: Grew up in Chi-town and married his childhood sweetheart Lina. Together they own and operate G Petto’s toyshop. They had a son name Jacopo or Jacob as he was known to the other kids. Jacob died not too long ago and the Pettos have found it hard. Ever kind and hard working, Goffredo has buried himself in his toy making, finding solace in creation to overshadow his loss.
Occupation: Retired mercenary, Techno Hound Headhunter\n\nDescription: A partial conversion cyborg with artifical legs, arms, ears and left eye. His main facial features are in tact along with his right eye. Natural eye is brown in colour and hair is brown. Height is about six feet. Speaks excellent American but sometimes reverts to his native French when agitated or alramed.\n\nBackground: Former Iron Heart citizen turned mercenary. Upon retirement Henri resettled in Chi-Town to be close to the technology scene and work on his 'inventions'. While a gifted and well educated engineer Henri is slightly insane and often talks to himself and becomes obssesed with his little projects.
The outer ring of each level of the fortress city is dedicated to housing. Multi-unit apartment buildings line the walls and are densely packed. The best rooms are up against the outer walls of the city, with some even boasting outside views, while others are jammed against inside walls making them dark and dimly lit.\n\nLevel 4 is a slum, even by Rifts standards, residents live in apartments that are state-owned. However, maintenance, upkeep, on the low-levels is farmed out to corporations and individuals. Thus, some apartments are luxurious while others are downright disgusting. These corporations and landlords are known as soups in local slang.\n\nAlthough most people on Level 4 are technically CS citizens and are thus assigned a residence many people need to find housing on the down-low. Disreputable soups are more then willing to charge a fee to these people. Non-citizens face a stiff fee which increases as a person becomes increasingly undesirable, mutants, non-registered psychics, d-bees, etc.\n\nThe housing situation also lends itself to a very big protection racket. Organized crime will often attempt to earn a superintendent contract. Citizens stay in their residence as is their right and maintenance is preformed to exacting CS standards in order to avoid suspicion from the ISS and other governmental agencies. However, level 4 is a dangerous place and once a gang or organized crime syndicate takes over a rash of petty and destructive crimes will begin. The ISS cares little for level four and as a result many citizens find themselves paying for ‘protection’.\n\nDespite the lack of upkeep almost every building and apartment has electricity and running water provided by the fortress city. Although some industrious soups will jury-rig an on/off system for these services and only activate them for a fee.
Subject: Andrew Drake \nCase Status: Cold\n \nBody discovered in Burn Park by mercenaries conducting authorized pratice in the area. Scene compormised by merc activity, very little physical evidence recovered. Victim's cybernetics and been cut out in a rough manner suggesting a cyber-snatch. Burn Park is a known dump site for snatchers. This is consistent with other bodies found in the area and with no evidence available determining which group was responsible is virtually impossible. Both eyes and tounge were cut out as part of the crime. Victim had no cybernetic enhancements to that area, suggesting a possible gang signature. No gang is known to tag victims in this way and no other cyber snatch victims recoverd in the area were mutilated in this fashion.\n\nFile Note: Cybernetics with the victim's DNA were recovered from a chop-shop raid at The Bod Mod Tattoo Parloour on Level Four\n\nPersons of Interest: [[Jimmy The Gun]] VanBuren (fugitive, former owner/operator of the Bod Mod suspected in at least eight other homicides)
While there is a significant underground economy on level four (drugs, chop shops, prostitution, gambling, protection, extortion, etc.) there are many legitimate and semi-legitimate employers. Most of these businesses will only employ CS citizens who possess valid citizenship cards. Of course, there are always exceptions.
Area for notes, clues, and other info relating to the death of [[Andrew Drake]].
Name: Jimmy the Gun\nO.C.C./R.C.C.: Human 3rd level City Rat(thug)/5th level Rogue Scholar\n\nDisposition: Friendly, outgoing, always joking and laughing. Never a harsh word, even when someone deserves it. Despite all his nice guy qualities, Jim has a very dark streak and is not above killing someone if he, or Torrence, deems it’s necessary.\n\nDescription: 6feet, 5 inches tall, 348 pounds of muscle. Though he is almost pure muscle, it isn’t very defined. Rather than rippling muscles he is just a bear of a man with huge arms and a barrel chest. The only parts of his body not covered in tattoos are his head, hands and feet.\n\nHistory: From an early age Jimmy was a bully, so it wasn’t a surprise that as he entered his teens he quickly found a place in a gang as a strong-arm specialist. By 18 years old he was known to be quick tempered and deadly, having killed 8 people, it’s also how he got his nickname The Gun, though most have forgotten that and believe it’s because of his tattoo gun. To many it’s unclear why Jimmy suddenly changed, and if you ask he just smiles and shrugs. The truth is quite simple, however. He met Torrence, and since he has devoted himself to studying art, history and being as close to Torrence as he can.\n\nOccupation: Tattooist and Piercer of The Bod Mod.
Greetings my comrades in the huddled masses!\n\nYou know we’ve been following the exploits of those jack booted, heels of oppression, the ISS. Well, have we got news for you. Today the ISS raided a brothel on Level Four, turns out they caught some deal going down that involved a major level psychic. The psychic and his comrade got away…way to go brothers, fight the power!\n\nYou know how those thought police reacted? They marched right down to dirt road and levelled the whole place and undertook mass arrests. So much for the utopia of Coalition society, not only are there not enough beds for all the citizens to live in, if you’re a victim of this uneven distribution of resources you’re the first one rounded up for questioning.\n\nListen to me friends if some black jacketed ‘spectre comes knocking on your door tonight, tell him you know nothing. Be polite lest you get dragged away in the night and never seen again, but let’s come together in solidarity for the brothers and sisters of Row D. Let’s show the powers that be that rounded up people at random is not going to net us any results. Since we are un-free to lock our doors, lest they be broken down, brothers and sisters let us lock our hearts together by locking our mouths shut and giving our brave fugitives all the passive help we can.\n\nSince there’s a manhunt underway, you can bet they’re looking for me, so I’ll sign off now. Be free!\n
An underground video blog that documents abuses and misdeeds by the Internal Security Service as well as other unpleasant realities of Coalition society. It is considered contraband, censored material punishable by fines and other disciplines if a citizen is discovered watching or possessing the videos. The illicit nature and intelligence provided on ISS movements makes them extremely popular with the criminal underground.
Occupation: CS Military Specialist\n\nDescription: A proud and patriotic socialite turned soldier. The All-American golden boy. Has nothing but contempt for all those who fall short of his standard, and that is pretty much everybody. \n\nBackground: An opportunist and social climber, Kip gave up the life of priveledge on the upper levels for the prestige and glory of being a war hero. He views his commission as another notch on the belt and a means to pave his own way to the highest status the Coalition has to offer: that of Emperor.
Main Menu\n[[Welcome to Level 4]]\n[[Low Level Links]]\n[[Investigation]]\n[[Core]] \n[[Housing]] \n[[Industry]] \n[[Player Character]]s\n[[NPC]]s\n\nAdmin Area\n[[Welcome to Tiddlyspot]]\n[[GettingStarted]]\n
Occupation: Courier/City Rat\n\nDescription: A sneering and unpleasant cockroach of a man. Greasy dark hair and coke-bottle glasses. \n\nBackground: Manuel suffers from delusions of grandeur but instead of being important or heroic, he fancies himself an evil genius and criminal mastermind. Often wrings his hands and makes poor attempts at deep and threatening laughter. The only problem is that Manuel is a lowly courier and delivery boy and his nemeses are nothing but his poor and suffering neighbours at Clover Heights. \n
Occupation: Socialite/City Rat \n\nDescription: An adventurous, beautiful and spirited young woman. Has a wholesome quality that is at odds with the slums of level 4. \n\nBackground: To Misty, a sheltered and boring life on the higher levels is no life at all. The allure and excitement of the lower levels has always been too great of a temptation and as soon as she felt she was ready, Misty ventured out and down and loved it. So far the trips have been brief and as safe as a trip down can get. Misty spent a lot of time training and learning to handle herself but neither her parents nor her soldier brother would approve.
Occupation: Superintendant\n\nDescription: A plump old woman with greying blonde hair held in a tight bun. Usually seen with a wooden spoon in hand and well pressed apron on. \n\nBackground: Ms Abernathy is the kindly but stern superintendent of Clover Heights, a very small apartment complex on level 4. An honest woman yet tough enough to get by on the lower levels.
Non Player Characters of interest on Level 4.
[[Coran Drake]], Phaeton Juicer
“From the outside the building looks like a wilderness cookhouse or saloon with short, squat construction, a stone foundation, cedar plank siding and large wooden doors. Closer inspection reveals that all of this is synthetic materials and not actual wood and stone. Inside the tavern is dimly lit and features a huge wooden bar with many taps of draught from all over the Coalition States, planked floors, beamed ceilings, and a giant stone hearth round out the ‘cookhouse’ feel. Neon signs advertising various beer and alcohol brands cut through the poor lighting. Rough hewn tables with high stools are scattered throughout the bar.\n\nMost of the patrons are short haired humans with a clean cut military look. Some are mercenaries, or ex-CS soldiers, while many are off-duty army and ISS personnel.”\n\nFlavour Text: \nThis is a man-at-arms pub frequented by mercenaries, ex-CS soliders, head hunters, off duty army and ISS personnel, and other warriors looking to relax, network and tell tall tales. The tavern is owned an operated by a former CS Ranger named Will ‘Red’ Harrington. Harrington is a veteran of the Tolkeen front and earned the nickname ‘Red’ for his red hair and fiery disposition.\n\nGiven his military rank and status very few people understand why Red chooses to frequent the low levels. Anyone who has bothered to ask find that after years in the field Red just feels too uncivilized to spend much time in the higher-levels. As Red puts it “These are my kind of people”.\n\nThe tavern features a grill house menu of high grade CS Lone Star & CS Iowa beef and pork as well as beans, spicy chilli, and other comfort foods. Beer is the drink of choice, a wide variety from all of the Coalition States, with Iron Brew, from CS Iron Heart, being the most popular. There is also a variety of distilled spirits from bourbon to whiskey. Rumour has it that Red keeps a few bottles of more exotic alcohols under the bar from his time as a Ranger, mostly those made outside the CS in places such as the Pecos Badlands, Minnesota, and Colorado.\n\nAssociated [[Non-Player Characters]]:\n[[William "Red" Harrington]]\n[["Fast" Reggie James]]\n
Occupation: Lawyer\n\nDescription: Always the caricature of what a lawyer should be, Phillips is never without an expensive suit, leather briefcase and a handmade pipe in his coat pocket. \n\nBackground: For Richard Phillips, there is a place for everyone in Chi-town as long as everyone is in their place and the law provides the foundation on which his city can thrive. Understands that it is his role to travel to the lower levels on occasion but feels no guilt for checking his valuables at the door and washing his hands when he’s done. A family friend of Dr Brahm.
game resource area
Level 4 - Shattered Dreams
Occupation: Junkie / Dealer\nDescription: Looks homeless and strung-out (not far from the truth). \nProbably in his mid thirties.\nBackground: Eddie latched on to Coran when he returned, impressed by his Juicer conversion and connections to the Red Jackals. Coran gets his Cigs through Eddie, even though they come at a slight premium, because he likes the guy. Eddie might be more of a user than a dealer, but he always has good insight on the local games, and often goes with Coran to the bar to watch the game.
Occupation: Bookie\nDescription: Short fat man in his late twenties, wears thick black\nframe glasses.\nBackground: Specs is Coran's Bookie on level 4. He grew up down the street frm Coran, and has a soft spot for the kid. He was the one to convince Coran to leave when he was younger, and though he doesn't like to see the kid turn into a gambler, Specs feels he can do more good than harm by taking his bets. The bookie will try and talk Coran out of the riskier ones.
The denizens of Level four don’t have much but in St Luke’s Medical Clinic they have hospital that on any day might give them a fighting chance to live. \n\nThe outside may be as rough and dirty as any other but the inside is clean and sterile, for the most part. Non-essential rooms may have dust and litter in the corners or flickering and burnt out lighting fixtures but the important areas are spotless and well maintained. The staff is competent and rough around the edges and the morgue and emergency room rarely empty.\n\nSt Luke’s is neutral territory and gangs have grudgingly accepted it because everyone is treated the same. They know that if one of their own is wheeled in with multiple stab wounds, he’ll be looked after and no questions asked. They also know that if the authorities ask questions, names and basic information are given, the rest is confidential. As such, St Luke’s treats a lot of John Does. It’s tough but fair.\n\nAssociated [[Non-Player Characters]]:\n[[Dr. Harold Stahl]], Administrator\n[[Dr. Ross Perry]], Senior Physician
"The grimy walls are covered with torn posters of all kinds, from missing animals to missing persons to Coalition sanctioned Wanted posters yet the flickering neon sign above the door declares that The Bod Mod is not an abandoned building like many of it’s neighbors. The grimy walls change little as you enter the shop, though the torn posters have been replaced by tattoo designs in all shapes, sizes and colors that have been affixed to every possible surface, including the barrel chested man sitting behind the glass counter filled with body jewelry of every style imaginable.\n\nThe “work room” looks little different, with an old, beat up tattoo bed in the center, the walls being lined with inks and needles and more tattoos designs.\n\nBehind a well hidden door is where Torrence can be found in her neatly gleaming den of cybernetics. In shocking contrast to the rest of the building, this room is spotless and meticulously organized with an operating table in the center and, similar to the tattoo designs, cybernetic parts attached to every bit of open surface, including racks hanging from the ceiling with various limbs dangling."\n\nFlavour Text: \nIf you’re looking for a body modification, then this is the place you want to be. For tattoos and piercings, none are better than Jimmy The Gun, but if it’s something maybe a little more illegal and truly body altering, Torrence Masterson is the woman to see, but you had best be on the up and up and come bearing a good reference or you may just find out the real reason they call Jimmy, The Gun.\n\nAssociated [[Non-Player Characters]]:\n[[Jimmy The Gun]]\n[[Torrence Masterson]]
The Charles Theater\nDescription: A relic of the days before, when level 4 wasn't just for shattered dreams. The theater, now in great disrepair, seats about 150, is the scene of burlesque, freak shows, and other oddities. It also serves as a base of operations (and revenue) for the Red Jackals Gang. As a result of this underworld involvement, the backstage area during shows is usually a good place to waste your credits. \n
One of the main industries on level four is the production of clothing for consumption by the CS military and citizens. Huge garment factories line the inner rings producing uniforms for the military. Smaller factories and facilities produce everything from basic utility clothes to designer fashions that are all the rage on level twenty-two.\n\nWhile the uniform factories are modern and clean, employing only human CS citizens other manufactures do what it takes to increase profit margins. Some will emply non-citizens and d-bees for miniscule wages in order to pocket a few extra credits on each piece of merchandise. Ironically, many of the most expensive fashions worn in the CS are made in these d-bee staffed sweat-shops.
Former butcher shop, now converted into a bar. Some old butcher shop items remain for the color. The upper levels are some rooms, but they are more often used prostitution than as a legitimate Inn. The bar includes a large TV, which often shows local sports games. It is run by Bill the Butcher, a serious barkeep who takes no lip from the clients and is a good source of information, for the right price. Molly, a plain looking woman, is the other regular employee.\n\nAssocaited [[Non-Player Characters]]\n[[Bill the Butcher]]\n
Name: Torrence Masterson\nO.C.C./R.C.C.: Human 8th level Cyber Doc\n\nDisposition: When she is working, or negotiating work, Torrence is completely cold and clinical. She has heard every sob story in the book and shows no sympathy. Yet that is a mask and she has been known to send Jimmy to check out several of the stories to see how true they are, if he finds the stories to be on the up and up she’ll have him bring the person, usually children, to her for whatever cybernetics they need. Her true nature comes out when she’s with Jimmy, smiling and laughing as she watches him with tenderness.\n\nDescription: 5 feet 6 inches, 130 pounds. Her shoulder length, light brown hair is usually styled so it covers the right side of her face where her cybernetic eye, ear, jaw and cheek are a glaring contrast to the soft lines of her pretty, left side.\n\nHistory: Torrence was a smart, happy child even though her family barely scraped by. At 16 she met Jimmy completely by accident and ended up meeting him “accidentally” many more times over several weeks, she was fast falling in love with the huge man, as he was falling for her. On her way to meet him one afternoon, she saw him come out of an old store and she started to chase after, calling his name. He turned and screamed her name just as the storefront exploded in a hail of glass and steel that ripped into her slight frame. Jimmy carried the half dead girl to an old Cyber Doc that had fixed several of his fellow gang members, and with every credit Jimmy had he begged the Doc to help her. The old man took pity on Jimmy and Torrence and set to work replacing almost the entire right side of her body.\n\nOccupation: Cyber Doc in the “backroom” of The Bod Mod
/***\nRequired by Tiddlyspot\n***/\n//{{{\n\nconfig.options.chkHttpReadOnly = false; // make it so you can by default see edit controls via http\n\nif (window.location.protocol != "file:")\n config.options.chkGTDLazyAutoSave = false; // disable autosave in d3\n\nconfig.tiddlyspotSiteId = 'level4';\n\n// probably will need to redo this for TW 2.2\nwith (config.shadowTiddlers) {\n SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';\n SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");\n OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");\n DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[Welcome to Tiddlyspot]] ");\n MainMenu = MainMenu.replace(/^/,"[[Welcome to Tiddlyspot]] ");\n}\n\nmerge(config.shadowTiddlers,{\n\n'Welcome to Tiddlyspot':[\n "This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",\n "<<tiddler TspotControls>>",\n "See also GettingStarted.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \s"save to web\s" button in the column on the right.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \s"upload\s" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."\n].join("\sn"),\n\n'TspotControls':[\n "| tiddlyspot password:|<<option pasUploadPassword>>|",\n "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<<br>>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",\n "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"\n].join("\sn"),\n\n'TspotSidebar':[\n "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"\n].join("\sn"),\n\n'TspotOptions':[\n "tiddlyspot password:",\n "<<option pasUploadPassword>>",\n ""\n].join("\sn")\n\n});\n//}}}\n
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 29/4/2007 15:18:6 | John Stevens | [[/|http://level4.tiddlyspot.com/]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 29/4/2007 17:41:16 | John Stevens | [[/|http://level4.tiddlyspot.com/]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 29/4/2007 17:43:44 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 29/4/2007 17:46:42 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 30/4/2007 8:12:53 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 1/5/2007 11:57:17 | Tlurker | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 1/5/2007 13:26:16 | Tlurker | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/5/2007 12:12:58 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 7/5/2007 13:43:42 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 8/5/2007 8:26:23 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 8/5/2007 8:35:35 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 8/5/2007 8:35:52 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 8/5/2007 8:36:11 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/5/2007 9:50:48 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/5/2007 12:47:12 | LordZ | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/12/2008 14:32:41 | YourName | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/12/2008 14:34:27 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/12/2008 14:34:45 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/12/2008 14:34:50 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok | Ok |\n| 12/12/2008 14:41:20 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/12/2008 14:54:25 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/12/2008 14:55:40 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/12/2008 15:10:15 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html#%5B%5BLow%20Level%20Links%5D%5D]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/12/2008 15:11:13 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html#%5B%5BLow%20Level%20Links%5D%5D]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/12/2008 17:26:2 | YourName | [[index.html|http://level4.tiddlyspot.com/index.html#%5B%5BLow%20Level%20Links%5D%5D%20%5B%5BLow%20Level%20Link%3A%20Passive%20Resistance!%5D%5D]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 14/12/2008 17:26:26 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html#%5B%5BLow%20Level%20Links%5D%5D%20%5B%5BLow%20Level%20Link%3A%20Passive%20Resistance!%5D%5D]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/12/2008 22:25:47 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2008 22:31:0 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 17/12/2008 14:46:12 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 14:47:38 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 14:52:17 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 14:53:31 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 14:54:8 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 14:58:54 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 15:2:55 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 15:9:43 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 15:28:12 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 17/12/2008 21:58:24 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 22:18:51 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 17/12/2008 22:23:58 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 18/12/2008 16:37:17 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 18/12/2008 16:43:46 | John Stevens | [[index.html|http://level4.tiddlyspot.com/index.html]] | [[store.cgi|http://level4.tiddlyspot.com/store.cgi]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.5|\n|''Date:''|Oct 15, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|\n|''Documentation:''|http://tiddlywiki.bidix.info/#UploadDoc|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|\n|''Require:''|[[UploadService|http://tiddlywiki.bidix.info/#UploadService]]|\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 4, revision: 5, \n date: new Date(2006,9,15),\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n documentation: 'http://tiddlywiki.bidix.info/#UploadDoc',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(0, lastpos);\n } else {\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n }\n};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(lastpos + 1);\n } else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 1}, \n date: new Date(2006,8,19)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 3, date: new Date(2006,8,30),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "Save this password on this computer";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) \n {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.className = "txtOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "pasOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n backupFileStored: "Previous file backuped in %0",\n crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n passwordEmpty: "Unable to upload, your password is empty",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.toDirUrl(storeUrl, uploadDir, username)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.toRootUrl = function (storeUrl, username)\n{\n return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));\n}\nconfig.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)\n{\n var root = this.toRootUrl(storeUrl, username);\n if (uploadDir && uploadDir != '.')\n root = root + '/' + uploadDir;\n return root;\n}\nconfig.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)\n{\n return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;\n}\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n if (!password || password === '') {\n alert(config.macros.upload.messages.passwordEmpty);\n return;\n }\n if (storeUrl === '') {\n storeUrl = config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n // Check that file is not locked\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {\n alert(config.macros.upload.messages.fileLocked);\n return;\n }\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);\n displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [toFileUrl]), toFileUrl);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\n if(window.Components) {\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n\n revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");\n revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");\n revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");\n revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");\n revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");\n\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n if (responseText.indexOf("destfile:") > 0) {\n var destfile = responseText.substring(responseText.indexOf("destfile:")+9, \n responseText.indexOf("\sn", responseText.indexOf("destfile:")));\n toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;\n }\n else {\n toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [toFileUrl]), toFileUrl);\n if (backupDir && responseText.indexOf("backupfile:") > 0) {\n var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11, \n responseText.indexOf("\sn", responseText.indexOf("backupfile:")));\n toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;\n displayMessage(config.macros.upload.messages.backupFileStored.format(\n [toBackupUrl]), toBackupUrl);\n }\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n // erase local lock\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n BidiX.GroupAuthoring.lock.eraseLock();\n // change mtime with new mtime after upload\n var mtime = responseText.substr(responseText.indexOf("mtime:")+6);\n BidiX.GroupAuthoring.lock.mtime = mtime;\n }\n \n \n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) {}\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir;\n // add lock attributes to sheader\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n var l = BidiX.GroupAuthoring.lock.myLock;\n sheader += ";lockuser=" + l.user\n + ";mtime=" + l.mtime\n + ";locktime=" + l.locktime;\n }\n sheader += ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n //strailer = "--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //request.open("POST", storeUrl, true, username, password);\n try {\n request.open("POST", storeUrl, true); \n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if (request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent + "\snStatus: "+request.status.statusText);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n //request.open("GET", document.location.toString(), true, username, password);\n try {\n request.open("GET", document.location.toString(), true);\n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n \n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]) + "\snStatus: "+request.status.statusText);\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nsetStylesheet(\n ".pasOptionInput {width: 11em;}\sn"+\n ".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadDir {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+\n "",\n "UploadOptionsStyles");\nif (document.location.toString().substr(0,4) == "http") {\n config.options.chkAutoSave = false; \n saveOptionCookie('chkAutoSave');\n}\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n};\n\n//}}}\n////===\n\n
Occupation: Enforcer, Red Jackals Gang\nDescription: Pale man dressed in western clothes. Late 20s\nBackground: A new addition to the gang, since Coran has been gone. He dresses like he's from out west, but Coran has his doubts. Still, the man is a fearsome enforcer, and many rumors fly about him being a gunslinger or an unregistered psychic. Whenever Coran gets work from Byron, he is teamed up with Ward.\n\nStory:\nWarren Burtnick was a famed psi-slinger of the Colorado Baronies. He had a quick-draw and a flare for the dramatic. One of the few psi-slingers on record who also had the ability to generate and manipulate flames (pyrokinesis) he had pulled off some flashy jobs using a combination of psionics and deadly accuracy. He also did his jobs with flamboyant arrogance and unnecessary showmanship. Of course, the taller one stands the bigger target he becomes.\n\nIt wasn’t long before Warren found himself on the wrong end of some feuding ranchers and a significant bounty was placed on his head. After losing a draw to a “mundane” slinger Warren was publicly ridiculed by the lawmen of the Charity Barony. His public execution was scheduled and his arrest was flaunted in saloons, newspapers, and other outlets.\n\nHumbled and humiliated Warren used his psionic abilities to make a daring escape from his prison cell the night before his execution. In a rage he set fire to a section of town riding away on a stolen hover cycle leaving it to burn to the ground. Now, Warren Burtnick is a persona non grata in all of the Colorado Baronies and is wanted in all western towns and outposts with a significant reward on his head.\n\nHis career as a flashy gunfighter over, Warren took on the alias “Ward” and slinked eastward taking menial jobs as a physical labourer and handyman often trading services for food and other goods. Eventually he found himself in the ‘Burbs of Chi-Town doing odd jobs. When his skill with a gun was discovered, Ward the enforcer was born. \n\nTaking up small time independent contracts for the Black Market and other criminal organizations Ward was careful not to draw attention to his abilities, often surprising people with his psionics, learning to hide them from the prying dog packs in the area, and using them to make deaths look like accidents – especially fires in the infamous “Firetown” burb.\n\nWhen a job took him secretly into the fortress city Ward decided being inside was the safest place to hide from any hunters who might be on his tail and took on jobs with the Red Jackals. While still an independent, Ward does most of his work for the jackals but likes to cool his jets in a flea bag apartment in the city core where he only has a bed roll and some beaten up furniture to his name. Ward lives his life as ‘the hunted’ always ready to move on when the heat gets to be too much to handle.\n\nFull Character Sheet: http://docs.google.com/Doc?id=dgt59xg_27fj5xmwp7
Level Four is home to one of the most important functions of the fortress city, waste management. Refuse, garbage and sewage from all other levels pass through various waste management facilities on this level. Everything consumed in the city is picked over for recycling or reuse. Thus, large plants are dedicated to organic composting, sewage treatment and chemical recovery, recycling and incineration.\n\nThe plants themselves provide a myriad of well-paying technical jobs, but also have their share of scrub work such as sorting, transportation, and collection. Although not very glamorous the function is important to the smooth operation of the city and thus it is frequently inspected by CS officials and the facilities are patrolled and protected by the ISS.\n\nOf course, despite the best efforts of the air scrubbers these facilities produce a pervasive stench that hangs in the air throughout level four. Additionally, accidents, broken pipes, and backlogs often create pile-ups of garbage and puddles of sewage in the streets that could go days without being fixed.
Occupation: Runner, City Rat\n\nDescription: A wiry kid who can't grow facial hair. His meager attempt results in a thin mustache and scraggly goatee. His bad facial hair combined with angular features give him a rodent like quality to his appearance.\n\nBackground: Weasel was a street kid who roamed in packs throughout level four. As a result he learned every short cut, back alley, and area of interest on level four. He can move about the city unseen with relative ease and can lose a tail faster then the most highly trained espionage agent. The same skills also make him an excellent tail, as he can keep a target under surveillance without drawing attention to himself. A secret to his success, that nobody really knows about, is that Weasel has an eidetic memory.
“The lower one goes, the older and shabbier the city becomes. This is the home of City Rats, cyber-clinics, bargain stores, pawnshops, and the Black Market. The lowest levels look almost like a sewer and are as corrupt and dangerous as the ‘Burbs. This is a place of shattered dreams.” Erin Tarn, Our Changing World\n\nThe fortress city of [[Chi-Town]] is a bastion of humanity, capital of the mighty Coalition States. Humanity’s safest and most secure city. People sacrifice their lives so their families can be embraced by its walls. People eke out a life in the ‘Burbs just to earn a spot on a waiting list. People hold the city as a sign of hope and survival.\n\nHowever, all is not rosy in the fortress city. For most CS citizens, those who live in levels 8 to 22, life in the super-city is exactly as promised. Clean and safe with all the amenities and protections the Coalition can afford. As one descends below these mid-levels the quality of life begins to degrade rapidly. These LLs (low-levels) are barely better off then the ‘Burbs, in fact some Old Town ‘Burbs are safer and more amenable.\n\nThe lowest of these levels is Level 4, the place where CS society intersects with the harsh reality of Rifts Earth. This is Level Four, home of shattered dreams.
Real Name: Wes Granger\nOccupation: Underground video blogger\nDecription: A young man who often papears dressed as an unkempt homeless peson. Has shoulder length brown hair and a bushy brown beard. Appears to be in his mid-forties, although it is suspected he is much younger.\nBackground: One of the true subversives in the eyes of the Coalition, Granger hosts an underground video blog. In his videos he likes to point to the brutality of the Internal Security service as well as the stark differences between high level and low level citizens. His video series is well followed and whenever a new episode appears criminal and law enforcement alike tune in in large numbers. His blog [[Low Level Links]] is considered a very trust worthy source of street gossip intermixed with revolutionary ravings.
Name: Will “Red” Harrington\nO.C.C./R.C.C.: Human, ex-CS Ranger, Level 5\nDisposition: Quick tempered and restless. Loves to verbally spar and share ‘one-up’ stories with patrons. Not afraid to mix it up and has been known to roll more then one drunken headhunter or off-duty CS officer. Will is disenfranchised with life in the city, it grates against his experiences and skills as a ranger, however, he lacks the motivation to get outside the walls and do something.\nHistory: Harrington is a veteran of the Tolkeen front and earned the nickname ‘Red’ for his red hair and fiery disposition. After the war ‘Red’ had no inclination to re-enlist he had seen his share of combat and wanted to cool his jets. He moved into a comfortable apartment on level thirteen but found life to lack any sort of colour. Compared to the battlefields of Tolkeen and the wide-open spaces of and freedoms enjoyed by CS Rangers Will feels stifled inside the walls of the fortress city. As a diversion he established the Red Ranger on the lowest level of the city as it reminds him more of the “real” world. Currently, he is considering selling the bar and taking a stake in the expanding CS Arkansas.\nOccupation: Owner/operator of the Red Ranger Tavern on Level 4.
Occupation: Level 4 Crime Boss (Red Jackal Rival)\nDescription: Spiky white hair. Mid 30s. \nBackground: A registered Zapper, Walters is the leader of a rival gang in Level 4, the Manhunters. Coran has been the wheelman on a few jobs against this gang, and has since been identified as a member of the Jackals (even though, technically, Coran is a freelancer). As such,he is on a 'hit list' for the gang, carrying a 150 credit bounty for\nhis death.