Table of Contents

Create Your Revolutionary Leader

The revolution needs heroes! Answer a series of questions in order to create your own revolutionary, or let fate decide.

First Name:

Last Name:

Gender:

Hometown:

Possible Statistics:

Heart, Intelligence, Wisdom, Charisma, Strength, Agility, Health, Perception?

Original Base Stats:

8 Heart, 3 Intelligence, 1 Wisdom, 4 Charisma, 4 Strength, 5 Agility, 6 Health.

1. The day I was born in 1984…

A - the Polish priest Popieluszko was kidnapped by government agents. (+2 AGI)

B - was the 3rd anniversary of the assassination attempt on Ronald Reagan. (+2 STR)

C - the Macintosh was introduced. (+2 INT)

D - the Nobel Peace Prize went to Desmond Tutu for opposition to apartheid. (+2 HRT)

E - the Sandanista Front won the elections in Nicaragua. (+2 CHA)

My parents named me <propername>.

The doctor said I was a <chosen gender>

2. When I was bad…

A - my parents grounded me and hid my toys, but I knew where they put them. (+1 AGI, +1 Security)

B - my father beat me. I learned to take a punch earlier than most. (+1 HTH, +1 Martial Arts)

C - I was sent to my room, where I studied quietly by myself, alone. (+1 INT, +1 Writing)

D - my parents argued with each other about me, but I was never punished. (+1 HRT, +1 Persuasion)

E - my father lectured me endlessly, trying to make me think like him. (+1 CHA, +1 Psychology)

3. In elementary school…

A - I was mischevious, and always up to something. (+1 AGI, +1 Disguise)

B - I had a lot of repressed anger. I hurt animals. (+1 STR, +1 AGI, -1 HRT, +1 Psychology)

C - I was at the head of the class, and I worked very hard. (+1 INT, +1 Writing)

D - I was unruly and often fought with the other children. (+1 STR, +1 Martial Arts)

E - I was the class clown. I even had some friends. (+1 CHA, +1 Persuasion)

4. When I turned 10…

A - my parents divorced. Whenever I talked, they argued, so I stayed quiet. (+1 Stealth)

B - my parents divorced. Violently. (+1 Martial Arts)

C - my parents divorced. Acrimoniously. I once tripped over the paperwork! (+1 Law)

D - my parents divorced. Mom slept with the divorce lawyer. (+1 Seduction)

E - my parents divorced. It still hurts to read my old diary. (+1 Writing)

5. In junior high school…

A - I was into chemistry. I wanted to know what made the world tick. (+2 INT, +2 Science)

B - I played guitar in a grunge band. We sucked, but so did life. (+2 CHA, +2 Music)

C - I drew things, a lot. I was drawing a world better than this. (+2 HRT, +2 Art)

D - I played violent video games at home. I was a total outcast. (+2 AGI, +2 Computers)

E - I was obsessed with swords, and started lifting weights. (+2 STR, +2 Sword)

6. Things were getting really bad…

A - when I stole my first car. I got a few blocks before I totalled it. (+1 Driving, +1 Security)

B - and I went to live with my dad. He had been in Nam and he still drank. (+1 Shotgun, +1 Rifle, +1 Psychology)

C - and I went completely goth. I had no friends and made costumes by myself. (+2 Tailoring)

D - when I was sent to religious counseling, just stressing me out more. (+1 Religion, +1 Psychology)

E - and I tried being a teacher's assistant. It just made me a target. (+2 Teaching)

7. Well, I knew it had reached a crescendo when…

A - I stole a cop car when I was only 14. I went to juvie for 6 months. (+1 INT, +1 Driving, +1 Security)

B - my stepmom shot her ex-husband, my dad, with a shotgun. She got off. (+1 AGI, +2 Shotgun)

C - I tried wrestling for a quarter, desperate to fit in. (+1 STR, +2 Martial Arts)

D - I got caught making out, and now I needed to be 'cured' of homosexuality. (+1 HRT, +1 Seduction, +1 Religion)

E - I was resorting to controlling people. Had my own clique of outcasts. (+1 CHA, +2 Persuasion)

8. I was only 15 when I ran away, and…

A - I started robbing houses: rich people only. I was fed up with their crap. (+1 AGI, +1 Security, +1 Stealth)

B - I hung out with thugs and beat the shit out of people. (+1 STR, +2 Martial Arts)

C - I got a horrible job working fast food, smiling as people fed the man. (+1 CHA, +2 Business)

D - I let people pay me for sex. I needed the money to survive. (+1 CHA, +2 Seduction)

E - I volunteered for a left-wing candidate. It wasn't *real*, though, you know? (+1 INT, +1 Law, +1 Persuasion)

9. Life went on. On my 18th birthday…

A - I got my hands on an old Beetle. It's still in great shape. (Start with a Beetle)

B - I bought myself an assault rifle. (Start equipped with an AK-47 and 9 clips)

C - I celebrated. I'd saved a thousand bucks! (Start with $1000)

D - I went to party and met a cool law student. We've been dating ever since. (Start with a Lawyer recruited as a sleeper love slave.)

E - I managed to acquire secret maps of several major buildings downtown. (Start with several downtown sites fully explored)

(The Lawyer will be the same gender as the founder if the homosexuality option is chosen two questions previous.)

10. For the past few years, I've been…

A - stealing from Corporations. I know they're still keeping more secrets. (+2 INT, +2 AGI, +2 Security, +2 Stealth, $500, Downtown Apartments Safe House)

B - a violent criminal. Nothing can change me, or stand in my way. (+2 AGI, +2 HTH, +2 Rifle, +2 Pistol, 4 Armed Gang Members, 10 days of Rations, Crack House Safe House)

C - taking college courses. I can see how much the country needs help. (+4 INT, +2 Computers, +2 Science, +2 Teaching, +2 Writing, +1 Business, +1 Law, $200, University District Apartment Safe House)

D - surviving alone, just like anyone. But we can't go on like this. (+1 HRT, +2 INT, +3 HTH, +2 AGI, +1 STR, +1 CHA, +2 First Aid, +2 Street Sense, Homeless Shelter Safe House)

E - writing my manifesto and refining my image. I'm ready to lead. (+2 CHA, +2 INT, +1 Writing, +1 Law, +2 Persuasion, +50 Juice, $50, Industrial Tenement Safe House)

I live in <cityname>, and it's about to experience real change.

Locations

Investing in a Compound

Fortified Compound: Your compound is fortified against assault and cannot be easily breached; your enemies must beseige you, putting the fight on your terms.

Generator: You have set up an emergency generator for power in case the external lines are cut, meaning that you do not need to rely on external power sources.

Tank Traps: You are prepared for the eventuality of an attack by tanks; these tank traps will stop them from being able to successfully approach.

Armory:

Food supplies

Medical supplies

Weapons

Armor

Handguns

Rifles

Shotguns

SMGs

Heavy Weapons

Knives

Swords

Axes

Clubs

Fists

Throwing

Weapon Speed: Influences how many attacks you can get with it per turn. Agility / Speed = Max attacks per turn.

Weapon Random Damage: How much damage weapon can do.

Weapon Fixed Damage: How much damage weapon always does.

Weapon Accuracy: How accurate attacks are.

Weapon Recoil: How much successive attacks are penalized.

Weapon Bulk: How easily hidden weapon is.

Weapon Weight: How heavy weapon is.

Weapon Ammo: What weapon uses for ammunition.

Weapon AmmoCap: How much ammo it holds for bullets; how many units it holds for unit-based items such as fuel.

Weapon FuelRate: Rate at which one unit is consumed by weapon. (1 per…) Fractional amounts mean multiple units consumed per shot.

Weapon Noise: How noisy weapon is when used.

Weapon Intimidation: How intimidating weapon is.

Chainsaw Speed: Very Slow [10] RndDmg: High [251] FixDmg: High [50] Acc: Low [0] Rcl: High [-10] Bulk: Extreme [20] Weight: 10 lb Ammo: Gasoline AmmoCap: 1 [1 gallon] FuelRate: 10 [10 attacks per tank] Noise: Extreme [10] Intimidation: Extreme [10]

Shank Speed: Very High [2] RndDmg: Low [21] FixDmg: Low [5] Acc: Low [0] Rcl: Low [-1] Bulk: Low [2] Weight: 0.5 lb Ammo: None Noise: None Intimidation: Slight [2]

Notes

Intimidation works better if you have a more intimidating weapon than your opponent.

Intimidation factor may fade over time, allowing an enemy the chance to try to run.

Injured captives are always suspicious to any witnesses.

Captives detract from stealth.

Blood on the walls or floors is alarming.

Bloody clothing is alarming.

Damaged clothing is suspicious.

License plate numbers of suspicious vehicles may be taken down.

License plates and descriptions of vehicles involved in pursuits are likely to be taken down.

“Suspects were driving a red Ford Corolla, license plate MD5-AFK…”

Descriptions of individual revolutionaries are likely to be taken down, especially if cameras are available. Height, weight, hair color, eye color, skin color, ethnicity, weapons, etc. More detail if faces are not concealed.

Individual Heat

As an individual commits crimes, they accumulate heat. Heat is a measure of how extensively the police are looking for that individual specifically, and decays slowly over time.

Compound Heat

As the various powers become aware of the existence of a compound, they will work to eradicate it and its contents through legal or illegal channels depending on their goals.

Enemy Raids

The general objective of an enemy raid is to kill or capture your forces and steal your possessions. Depending on how well fortified your base is, they may or may not have an easy time of this. Raids last a single day, after which any survivors retreat.

Enemy Seiges

Enemy seiges are protracted affairs, where the enemy attempts to take out the compound and kill or arrest all within it. Seiges last as long as both sides have supplies and troops; those inside have the disadvantage of not being able to receive outside supplies by most methods, although those in other compounds can conduct raids on the seige party to weaken them and drive them off.

Breaking a Seige

To successfully break a seige in your favor, you must drive your enemies off or kill them. Depending on the resolve of your enemies and their available assets, this may mean anything from running off a few dozen half-drunk rednecks with shotguns to facing down the might of Navy SEALs, National Guard troops, and Army soldiers with helicopters, tanks, and jet bombers as air support.

Seige Warfare

Know Your Enemy

Enemy Sniper

This enemy type will try to shoot random targets in the compound, preferably armed targets, and preferably in the head.

Enemy Aggressor

This enemy type will attempt to raid the compound when opportunity presents itself.

Enemy Barricader

This enemy type attempts to hold the line and keep your people from getting out and anyone else from getting in.

Enemy Officer

This enemy type focuses on shooting or arresting anyone who exits the compound.

Enemy Driver

This enemy type operates a vehicle, usually full of enemy troopers.

Enemy Tank

This enemy type attempts to blow large holes in the walls to nullify defenses. This is more successful if your compound doesn't have thick walls. Tank traps can neuter this enemy easily.

Enemy Helicopter

This enemy type flies around shooting at your compound. Especially problematic unless you have a rocket launcher, as it can hurt a lot of people very quickly.

Enemy Bomber

This enemy type can rain missles and machine gun fire on a compound, causing massive damage. Rocket launchers are the best way to inflict damage, unless you have your own air support.

Alert Status

This is a general measure of how heightened the alert status of a particular area is, whether due to your activities or otherwise. This can range from 0% (completely relaxed) to 100% (time of war); color codes step up based on the terror threat scale at every 20%. Alert Status influences the extent and presence of security in the area, as well as the responsiveness of outside security presences. Most locations close to public business when alert status is too high.

Structural Integrity

How intact the building is. This usually doesn't change, but heavy explosives, massive fires, and the like will cause massive building damage that will close a building temporarily for repairs, and some buildings will close temporarily to redesign; either way, the structural integrity score tells how close rebuilding is to being complete.

Operational Capacity

This is how efficiently the location is currently running, as a result of your activities or otherwise. Typically, releasing half the workers and smashing all of the factory equipment puts a serious damper on the sweatshop, for example.

Staffing

This is how well staffed the location currently is, as a result of your activities or otherwise. Overstaffed areas in places known for unpleasant practices such as slave labor may be overdue for a visit.

Evidence

Depending on the current state of the legal system, courts may require evidence and testimony to prove crimes, as well as to issue warrants for the arrest of an individual. In most cases, the following types of evidence will exist:

Fortunately, there are a variety of ways to remove evidence.

Stopping Recording Devices

Big Brother may always be watching, but that doesn't mean you can't jab a stick in his electronic eye. Negating external recording devices can be as simple as arming a few loyalists with rifles and letting them pick off cameras from a distance; this will increase the alert status of the area, of course, but will mean the target will be blinded in certain areas until they can send repair crews to replace the destroyed cameras.

Inside, of course, this is somewhat more risky, if only because a sufficiently paranoid adversary may have all angles sufficiently covered - take out one camera and another will still see what you're up to. Nevertheless, wrecking cameras is a cheap way to ensure that future visits will be less well-observed.

Cutting power to an area (and backup generators, if any) will effectively neutralize all cameras in that area.

Hackers can remotely break into security systems to neutralize individual cameras temporarily, or take the whole system offline at once.

Finding the security room of a facility gives you direct access to any on-site storage of camera footage (which you can then destroy) and control of any cameras (which you can then shut down). Hackers can also break into security systems directly from the security room to install backdoors to shutdown or destroy the system remotely at a later date, and to determine where offsite backups are sent for future evidence cleanup.

Clearing the Evidence Locker

Most evidence taken by police departments ends up in an evidence locker, warehouse, or room within the police station, or shipped off to an investigative laboratory for analysis. If you know where that destination is, of course, you can always go to the site and directly destroy the evidence in question. Just make sure that the suspect is not involved!

Handling Unfaithful Associates

Sometimes an associate breaks under pressure and starts talking, or turns out to not be quite as reliable as you once thought they were, and needs to be dealt with. Permanently. If you need to eliminate an individual who is testifying against you, the first step is to find out where they are currently located. If they're currently housed in a police lockup or prison, this is relatively easy. If they've been placed in witness protection, you're going to have your work cut out for you.

Once you track your unreliable ex-ally down, you may want to liberate them from their captors (if they merely broke under pressure) or simply silence them once and for all (if they work both sides of the fence, for instance.) Either way, the approach is similar - deal with whoever may be guarding them, and then ensure they come with you or don't leave at all.

Silencing Witnesses

While witnesses can be handled in the same way as the unfaithful, remember that many witnesses are potential converts for your cause who may merely be doing what they think is right. With this in mind, a subtle approach to see if you can recruit them first may be advised. Of course, those that cannot or will not listen to reason can still be dealt with in more violent manners.

Jury Nullification

Regardless of what you do or don't do to ruin the evidence of a state case, you can always attempt to influence the judicial system in other ways. You can attempt to manipulate the jury to see things in your favor, make sure that local judges are in your pocket, and make sure that local lawyers are on your payroll to ensure that any of your friends who end up in court end up leaving shortly afterwards.


Base Stats:

10 HRT 5 INT 1 WIS 8 CHA 5 STR 10 AGI 10 HTH

1E - Sandanista 2B - take a punch 3E - class clown 4E - diary 5D - violent games 6D - goth 7D - makingout 8A - rob houses 9C - $1000 10D _ surviving alone

Crimes and Heat

Crime Heat
Kidnapping 2
Murder 2
Theft 0
Breaking and Entering 0
Terrorism 10
Jury Tampering 0
Treason 10
Escaped Prison 5
Helped Escape 5
Resisting Arrest 1
Extortion 1
Flag Burning 0
Harmful Speech 0
Vandalism 0
Assault 0
Armed Assault 0
Car Theft 0
Information Tampering 5
Interstate Commerce 2
Credit Card Fraud 2
Drug Dealing 5
Unlawful Burial 0
Prostitution 0
Disturbing the Peace 0
Hiring Illegals 1
Racketeering 5
Loitering 0
Unlawful Gun Carry 0
Unlawful Gun Use 0
Arson 5
Public Nudity 0
Default 0

Recruitment:

6 people at >500 juice

5 people at >200 juice

3 people at >100 juice

1 person at >50 juice

+6 people if founder

Liberal Influence: Overall influence of liberals

Loveslave:

Can seduce up to Seduction / 2 + 1 people at once

Arch-Conservative: red

Conservative: magenta

Moderate: Yellow

Liberal: Blue

Elite Liberal: Green

Important Hostages: CEO, Radio Personality, News Anchor, Eminent Scientist, Hangin' Judge

Blood < 0: Dead

Blood < 20: Near Death

Blood < 50: Badly Wounded

Blood < 75: Wounded

Blood < 100: Lightly Wounded

If the student has less skill than the teacher, train the student proportional to the difference in skill between teacher and student times the teacher's ability at teaching.

               if(pool[p]->get_skill(skillarray[i])<teachers[t]->get_skill(skillarray[i])-1&&
                  pool[p]->get_skill(skillarray[i])<teachers[t]->get_skill(SKILL_TEACHING)+2&&
                  ledger.get_funds()>cost&&
                  pool[p]->get_skill(skillarray[i])<pool[p]->skill_cap(skillarray[i],true))
               {
                  // Teach based on teacher's skill in the topic plus skill in teaching, minus
                  // student's skill in the topic
                  int teach=teachers[t]->get_skill(skillarray[i])+
                            teachers[t]->get_skill(SKILL_TEACHING)-
                            pool[p]->get_skill(skillarray[i]);

Teach Base = (Teaching + Teacher Skill) - (Student Skill)

So a teacher with a Teaching score of 2 and a First Aid score of 10 could teach a class of clueless students at a base rate of 12 points per day.

Cost is equal to number of students x $X, or 10 x $X. With more than ten students, as mentioned, teaching cred begins to diminish.


                  if (students > 10)
                  {
                     //teach = (teach * 10) / students; //teach at 50% speed with twice as many students.
                     teach = ((teach * 30 / students) + teach)/4; //62.5% speed with twice as many students.
                  }
                  if(teach<1)
                     teach=1;
                  // Cap at 10 points per day
                  if(teach>10)
                     teach=10;

                  pool[p]->train(skillarray[i],teach);
                  
                  

In short, a teacher can teach between 0.01 and 0.10 skill in each area to each valid student per day. If number of students > 10 in an individual class, then effectiveness is lower.

Soliciting Donations:

Income = Persuasion skill check x Professionalism

Liberal Effect on Moneymaking - More Competition:

Public Mood > 90% Liberal: Income /2

Public Mood > 65% Liberal: Income /2

Public Mood > 35% Liberal: Income /2

Public Mood > 10% Liberal: Income /2

Soliciting donations trains Persuasion by 5 - skill (max 2).

TShirts:

Income = (Tailoring skill check + Business skill check) / 2

Liberal Effect on Moneymaking - More Competition:

Public Mood > 65% Liberal: Income /2

Public Mood > 35% Liberal: Income /2

Making T-shirts trains Tailoring and Business by 7 - skill (max 2).

TShirts:

Income = Art skill check

Liberal Effect on Moneymaking - More Competition:

Public Mood > 65% Liberal: Income /2

Public Mood > 35% Liberal: Income /2

Making T-shirts trains Art by 7 - skill (max 4).

Music:

Income = Music skill check / 2

With instrument, Money x 4

Liberal Effect on Moneymaking - More Competition:

Public Mood > 65% Liberal: Income /2

Public Mood > 35% Liberal: Income /2

Making Music trains Music by 7 - skill (max 4) with instrument, by 5 - skill (max 2) without.

Brownies:

Chance of cops searching: 1 in (30 x severity of drug laws + 3)

If they search, requires a skillcheck vs Street Sense (difficulty Average) to evade.

Money = Skill roll (Persuasion) + Skill roll (Business) + Skill roll (Street Sense)

LawDrugs Effect on Moneymaking - More Illegal is More Money:

LawDrug -2: Money x4

LawDrug -1: Money x2

LawDrug 1: Money /4

LawDrug 2: Money /8

Trains 4 - Persuasion (max 1), 7 - Street Sense (max 3) and 10 - Business (max 3).

   if(sitealarm && sitecrime > 10)
      {
         postalarmtimer++;

         //Attacking government agencies results in the rapid
         //deployment of overwhelming force to the site -- especially
         //if there are a lot of heavily armed people already on site
         
         //Police Station -- SWAT teams are on site already and
         //only need to suit up to respond almost instantly
         //if(location[cursite]->type==SITE_GOVERNMENT_POLICESTATION && 
         //   postalarmtimer<65 && sitealarm)postalarmtimer=65;
         //Army Base -- They're drilled and ready to kick your ass
         //if(location[cursite]->type==SITE_GOVERNMENT_ARMYBASE && 
         //   postalarmtimer<65 && sitealarm)postalarmtimer=65;
         //Courthouse -- Big police response, not far to come
         //if(location[cursite]->type==SITE_GOVERNMENT_COURTHOUSE &&
         //   postalarmtimer<50 && sitealarm)postalarmtimer=50;
         //Prison -- Big police response but has to get from downtown
         //if(location[cursite]->type==SITE_GOVERNMENT_PRISON &&
         //   postalarmtimer<30 && sitealarm)postalarmtimer=30;
         //Intelligence HQ -- Agents are deadly, but the site is not
         //is not designed to be called to action that quickly
         //if(location[cursite]->type==SITE_GOVERNMENT_INTELLIGENCEHQ &&
         //   postalarmtimer<50 && sitealarm)postalarmtimer=50;
      }

      if(sitealarmtimer>0 && !sitealarm && sitecrime > 5)
      {
         sitealarmtimer--;
         if(sitealarmtimer<=0)
         {
            sitealarmtimer=0;

            clearmessagearea();

            set_color(COLOR_YELLOW,COLOR_BLACK,1);
            move(16,1);
            addstr("The Squad smells Conservative panic.");

            if(mode==GAMEMODE_CHASECAR||
                  mode==GAMEMODE_CHASEFOOT)printchaseencounter();
            else printencounter();

            refresh();
            getch();
         }
      }

Alarms and Alerts

Suspicion grows as crimes are committed that are not in direct sight of witnesses. At maximum suspicion, any conservative will be very watchful and ready to sound the Alarm. Alarms will also be sounded when crimes are committed in sight of witnesses.

When an Alarm has been sounded, the response timer begins. This controls how quickly conservative forces will respond to your presence - police, soldiers, agents, Guardians, and the like. Government buildings and high-security areas will have a faster response timer.

Liberal Guardian: Special Edition

Special Editions can be run if you gain any of the following: CEO Photos, CEO Love Letters, CEO Tax Papers, Intel HQ Disk, Corporate Files, Judge Files, Research Files, Prison Files, Cable News Files, AM Radio Files, Secret Documents, or Police Records.

When you run a special edition, the item is deleted.

Special Editions always offend Firemen if [FreeSpeech] = -2.

CEO Photos:

CEO Photos always offend Corporations.

Always grants LCSAwareness +10; LCSRespect +10, CEOSalary +50, CorporateCulture +50. Other effects depend on contents of photos (random):

“Engaging in lewd behavior with animals.”

AnimalResearch +15

“Participating in a murder.”

PoliceBehavior +15, Justices +10

“Making out with an FDA official overseeing the CEO's products.”

Genetics +10, Pollution +10

“Torturing an employee with a hot iron.”

Sweatshops +10

Other disturbing and embarrassing items are likely to be unpleasant or scandalous - caught with a mistress, bribing a politician, associated with unsavory foreign dictators… - but have no other bonus effects.

CEO Love Letters:

CEO Love Letters always offend Corporations.

Always grants LCSAwareness +10; LCSRespect +10, CEOSalary +50, CorporateCulture +50. Other effects depend on contents of letters (random):

“Addressed to his pet dog. Yikes.”

AnimalResearch +15

“To the judge that acquitted him in a corruption trial.”

Justices +15

“To an illicit gay lover.”

Gay+15

“Implying that he has enslaved his houseservants.”

Sweatshops+10

“To the FDA official overseeing the CEO's products.”

Genetics+10, Pollution +10

Other disturbing and embarrassing items are likely to be scandalous or unpleasant, but have no special effects.

CEO Tax Papers:

CEO Tax Papers always show that a CEO has engaged in consistent tax evasion (for now).

Always grants LCSAwareness +10; LCSRespect +10, CEOSalary +50, CorporateCulture +50, Taxes +25.

Corporate Files:

Corporate Files always offend Corporations.

Always grants LCSAwareness +10; LCSRespect +10, CEOSalary +50, CorporateCulture +50. Other effects depend on specifics:

“Describing a genetic monster created in a lab.”

Genetics+50

“With a list of gay employees entitled HomoWorkers.”

Gay+50

“With a memo - Terminate the pregnancy, I terminate you.”

Women+50

“Cheerfully describing foreign corporate sweatshops.”

Sweatshops+50

“Describing an intricate tax shelter scheme.”

Taxes+50

Intelligence HQ Disk / Secret Documents:

These items always offend the Agency. All people at the publication site are charged with Treason.

Always grants LCSAwareness +10; LCSRespect +10, Intelligence +50. Other effects depend on specifics:

“Documenting the planned assassination of a Liberal federal judge.”

Justices +50

“Documenting 'harmful speech' made by innocent citizens.”

FreeSpeech +50

“Used to keep tabs on gay citizens.”

Gay +50

“Documenting the infiltration of a pro-choice group.”

Women +50

Other items may discuss disturbing content such as information on individuals, overthrow of governments, or similar trouble, but does not affect other opinions.

Police Records:

Always grants LCSAwareness +10; LCSRespect +10, PoliceBehavior +50. Other effects depend on specifics:

“Documenting human rights abuses by the force.”

Torture +15

“Documenting a police torture case.”

Torture +50

“Documenting a systematic invasion of privacy by the force.”

Intelligence +15

“Documenting gladiatorial matches held between prisoners by guards.”

DeathPenalty +50

“Documenting a forced confession.”

“Documenting widespread corruption in the force.”

<Other items may discuss disturbing content such as falsifying evidence, corruption, or similar trouble, but does not affect other opinions.>

Judge Files:

Always grants LCSAwareness +10; LCSRespect +10, Justices +50.

Details may include taking bribes to acquit the guilty or promising Conservative rulings in exchange for favors.

Research Papers:

Always grants LCSAwareness +10; LCSRespect +10. Other effects depend on specific research:

“Documenting horrific animal rights abuses.”

“Studying the effects of torture on cats.”

AnimalResearch +50

“Covering up the accidental creation of a genetic monster.”

“Showing human test subjects dying under genetic research.”

Genetics +50

Prison Documents:

Always grants LCSAwareness +10; LCSRespect +10, DeathPenalty+50. Other effects depend on specific reports:

“Documenting a prison torture case.”

Torture +50

“Documenting human rights abuses by prison guards.”

“Documenting widespread corruption among prison employees.”

“Documenting gladiatorial matches held between prisoners by guards.”

Other details may be unsavory, but have no other effects.

Cable TV Papers:

Offends Conservative rednecks.

Always grants LCSAwareness +10; LCSRespect +10, CableNews+50. Other effects depend on specific reports:

“calling their news 'the vanguard of Conservative thought'.”

“mandating negative coverage of Liberal politicians.”

“planning to drum up a false scandal about a Liberal figure.”

“instructing a female anchor to 'get sexier or get a new job'”

Other details may be unsavory, but have no other effects.

AM Radio Papers:

Offends Conservative rednecks.

Always grants LCSAwareness +10; LCSRespect +10, CableNews+50. Other effects depend on specific reports:

“calling listeners 'sheep to be told what to think'.”

“saying 'it's okay to lie, they don't need the truth'.”

“planning to drum up a false scandal about a Liberal figure.”

Other details may be unsavory, but have no other effects.

Liberal Guardian: Popularity

The Liberal Guardian can be published online and in print.

Power determines overall readout:

Power <0: “The only readers are Conservatives, who seem to think it's funny.”

Power =0: “Unfortunately, nobody seems interested.”

Power <5: “Very few people seem to be interested.”

Power <50: “A fair number of people are reading it.”

Power <100: “Many people are reading it.”

Power <250: “The response is very strong. People are changing their minds.”

Power >250: “The response is electric. Everyone is talking about the Liberal Guardian.”

Monthly Changes

Seduction Bonus: Monthly bonus to loveslaves/masters - seduction goes up by number of loveslaves for master, and by five for slave.

Elections take place in November.

Supreme Court makes decisions in June.

Congress votes on issues in March and September.

For those stuck in the police station at the end of the month:

Illegal Aliens will be deported or executed at the end of the month unless immigration law is 2.

Cops will try to pressure the arrested person into giving up their accomplices; base strength is 100, 200 if PoliceBehavior=-2, 150 if PoliceBehavior=-1, 75 if PoliceBehavior=1, 50 if PoliceBehavior=2.

Heat of crimes committed / 4 x CopStrength is used to lean on a person. Max Copstrength is 200.

If LCSRandom(copstrength) > [juice + heart x 5 - wisdom x 5 + psychology x 5], subject breaks under questioning. If their boss is alive and not already in prison, their boss is charged with racketeering and has a confession marked against them; if they worked within a base, it gains 300 heat as well due to their testimony. (possibly add 100 heat to drop points instead if sleeper?)

If they do not break under the pressure, give them prisoner clothing and move them to the courthouse.

For those stuck in the courthouse at the end of the month:

Run their trial.

For those stuck in prison at the end of the month:

Check for execution status, passage of time on sentences. Execute those scheduled for execution, move executed people to the martyrs section.

Other end of month business:

Check to make sure game hasn't ended.

Check to make sure chain of command is still intact.

Show fund reports.

Release people from clinic or transfer to hospital as necessary based on critical status. (Possibly should check how the normal First Aid skill handles things like lung injuries, and act appropriately on clinic/hospital healing. Clinic staff reportedly have an average skill of 6; hospital staff have an average skill of 12.)

Rename buildings according to new laws (re-education camps may just become prisons, for example). New buildings are re-initialized.

Daily Changes

Reset car states.

Squadless without a base should be sent to the homeless shelter.

Stunning clears up if not already cleared.

Aging

(Currently coded only for human targets)

If older than age 60, roll once per ten years or fraction above 60 the liberal is. If LCSRandom(3650) = 0, Health attribute -1. If health equals zero, Liberal dies of old age.

If today is the Liberal's birthday (and they aren't dead), age increases by 1; if 13, they become a Teenager; if 18, they become a Political Activist.

Moving

Check to see whether any squad member is going to a location currently under seige or currently closed down and stop them if so. (maybe later give them the ability to provide external support?) [Squad decided location was too hot to risk.] If this occurs, all squad members have ACTIVITY_NONE set.

If squads are going somewhere, cancel their normal activity (raiding instead of stealing a car, for instance.)

Going Places

Drivers gain driving experience if they go to another location (5 points of driving). All others in squad become passengers of one of the drivers.

Activities

Clear activity for people visiting a location, successfully stealing a car or wheelchair, or currently under seige. Other options are repeatable.

Healing

People set to either Heal or None will automatically heal. The highest First Aid skill at a location is used for the healing score (and anyone Laying Low will be set to Healing.) Areas under seige that are out of food cannot heal.

[The health code is a mess. Seriously. This is a rewrite based on what I think the code should be doing:

Experience given to caretakers is based on the total bloodloss of those treated, divided by the number of caretakers.

Blood is capped at 100 - (current InjuryLevel x 20). If currently less than this, blood is increased by (1 + Healing Score) / 10, then reduced to 100 - (injury level x 20) if necessary.

If blood is currently less than zero, the patient dies of their injuries.

If any limb has been blown off, being stabilized requires a skill roll vs 12 (LCSRandom(10) + healing score must exceed 12). If successful, wound becomes a clean sever. If failed, add four points of damage, note that the patient should not be released, and if Healing Score is 3 or less, transfer to the Clinic.

Otherwise, if wound is bleeding, being stabilized requires a skill roll vs 8 (LCSRandom(10)+healing score > 8). If successful, bleeding is stopped. Otherwise, add one point of damage and mark as not for release.

If blood is >= 95, bleeding is removed and nasty-sever is converted to clean sever automatically.

Critical Injuries:

Base difficulty to fix is 14 (16 for the heart.) Damage to the right or left lung or heart may inflict 1 point of permanent health damage each. Heart wounds cause 8 bleed. Spleen, liver, stomach, left and right kidneys, and spleen cause 1 bleed.

If Healing+LCSRandom(10) > Difficulty, heal wound; if permanent damage noted, then if LCSRandom(20) > Healing, deduct one point from Health permanently (minimum Health 1).

If wound not healed, inflict damage from bleed, mark as not released, and mark for transfer if Healing+9 ⇐ Healing Difficulty (in short, if you don't have a chance at fixing it, you'd better transfer them to someone who does.)

If marked for transfer, note that their injuries require professional treatment and mark them as moving to the free clinic unless this is manually corrected later.

Medic Experience:

If activity type is Heal, if there is no medic work, set activity type to None. Otherwise, give experience based on the healing amount done in that location / 5 minus their current first aid skill (max 0). If they only treat a single person with 10 blood loss, then they get 1 point of experience each and only if they're at level 1.

Dispersal Check:

Make sure that nobody's lost contact with the organization due to someone being in the hospital / dead.

Properties and Rent

If you cannot afford the rent (or if the landlord has decided to evict you) and it's the 3rd, you get evicted - your possessions and squad members are transferred to the homeless shelter, and any investments made at that location are taken down.

Meeting Scheduling

Recruits meet with a specific recruiter at a specific safehouse. If recruiter fails to return to a valid safehouse or is nonexistent (dead, turned traitor, etc), the meeting is over.

[ Possibly add it so that recruits can be passed on, with a hit against their prospective loyalty, if a recruiter can't actually land the recruit for whatever reason? I)ntroduce them to their boss, for example. Recruiting process may even be a form of very basic training… ]

Dates meet with a specific lover at a specific safehouse unless they are hospitalized (they're a bit more understanding about these things.) If they are unable to return to a safehouse and not hospitalized, or nonexistent (dead, traitorous, etc), the date is off.

Handle meetings first, then dates; handle the aftermath from each one at a time (if arrested during a meeting, you're unavailable for a date, for instance.)

Other Aging

Increment day by 1.

For each person:

If Blood < 100, Blood ++;

If Hiding > 0, Hiding –;

If this reduces hiding to 0 but old base is under seige, stay in hiding (hiding = 1). Otherwise, move location to base, as person regains contact with the LCS.

If a person is flagged as missing but not yet as kidnapped:

if LCSRandom(14) + 4 > JoinDays, set Kidnapped flag if not already set, and add a kidnapping story to the news.

Add 1 to joindays (days since joined/kidnapped).

Add 1 to deathdays if dead.

Level up anything where you have enough experience to do so.

Handle newspaper reports.

Clear up empty squads.

Check seige events.

Clear empty squads again.

Dispersal Check

Checks the chain of command to make sure that people have a safe chain of command with their higher-ups. The following is a snippet of the comment code.

#define DISPERSAL_ABANDONLCS 5 #define DISPERSAL_BOSSINHIDING 4 #define DISPERSAL_HIDING 3 #define DISPERSAL_BOSSINPRISON 2 #define DISPERSAL_NOCONTACT 1 #define DISPERSAL_BOSSSAFE 0 #define DISPERSAL_SAFE -1

*JDS* I'm documenting this algorithm carefully because it took me awhile to figure out what exactly was going on here. dispersal_status tracks whether each person has a secure chain of command. if dispersal_status == NOCONTACT, no confirmation of contact has been made if dispersal_status == BOSSSAFE, confirmation that THEY are safe is given, but it is still needed to check whether their subordinates can reach them. if dispersal_status == SAFE, confirmation has been made that this squad member is safe, and their immediate subordinates have also checked. The way the algorithm works, everyone starts at dispersal_status = NOCONTACT. Then we start at the top of the chain of command and walk down it slowly, marking people BOSSSAFE and then SAFE as we sweep down the chain. If someone is dead or in an unreachable state, they block progression down the chain to their subordinates, preventing everyone who requires contact with that person from being marked safe. After everyone reachable has been reached and marked safe, all remaining squad members are nuked. [Now then, with that all in mind, the following is a rewritten version of the pseudocode involved. Everyone starts at NOCONTACT status. First check to see if we're looking at the Founder; the Founder is always marked as BOSSSAFE if not disbanding, and as BOSSINHIDING if disbanding. If the founder is marked as hiding indefinitely, change them to go into hiding for LCSRandom(10) + 5 days. Next, check to see whether they're alive or not. If they're dead, mark them as SAFE and attempt to promote their subordinates. Then, if they are in the buried zone (location -1) or in an area outside of LCS control, delete them from existence. (Otherwise, they're a corpse cluttering up the system that needs to be disposed of.) Now for the massive loop: While Changed != 0 – Set Changed to 0. If person is currently located at a prison and is not a sleeper, mark them as in prison; otherwise mark them as not in prison for purposes of contactability. If your status is marked as Boss In Hiding, change your status to hiding, and change the status of everyone under you who is alive to Boss in Hiding. Mark Changed = 1. If status is Boss in Prison, or if Boss Safe but you are in prison, you can be contacted. Maybe change this depending on prison laws. If you are a love slave, you or your lover are in prison, and you are not together, lose one point of juice per day. If this drives you to below -50 juice, Abandon the LCS. Check all subordinates; if you are in prison, mark them as Boss in Prison; if you are not in prison, mark them as Boss Safe and set Changed = 1. If status Boss Safe and not in prison, search for subordinates, and mark subordinates as Boss Safe. If they are currently in hiding indefinitely, change them to hiding for LCSRandom(10) + 3 days. Mark Changed = 1, and set status to Safe. – End While Loop;. Now that that's done, we can then determine who has lost touch with the LCS and deal with them appropriately. There might be an insurance check to make sure that LCS members that are in a base when their leader dies don't just stupidly wander off. If status is Hiding, announce that they have lost touch with the LCS and gone into hiding; mark as Hiding Indefinitely (hiding -1) with Activity_None, and change base to Homeless Shelter if not a sleeper. If status is Abandon LCS, announce that they have abandoned the LCS and delete them from existence. If status is No Contact, announce that they have lost contact with the LCS and delete them from existence. Once complete, run an end of game check to see if dispersal has destroyed the organization. ===== Promoting Subordinates When Boss Is Lost ===== You need to have more than zero juice to get promoted (or more than 99 juice to be promoted to founder.) Loveslaves cannot be promoted unless their juice is above 99 (in which case they lose the loveslave modifier and become normal members). Enlightened cannot be promoted to founder. [For now.] Highest juice liberal not subject to a life sentence who qualifies gets promoted to be the new boss, and the old boss's subordinates now follow that person; likewise, the new boss becomes the underling of the big boss (boss of the old boss). Special announcement if the founder is replaced, otherwise, big boss promotes newboss to lead in the place of oldboss. ===== Location Management ===== Daily check: If location[closed] > 0, location[closed]–; If location[closed] == 0, then: Note if police station / am radio / cable news has reopened. LCSRandom(2) chance of high security [60] timer being set if settable. If unsettable or otherwise, remodel location [invalidate existing maps]. If location[highsecurity] > 0 location[highsecurity]–; ===== Security Levels ===== Normal Security is zero. Areas with security above zero may go high-security when attacked, resulting in more guards and enemies. Areas with high security: Cigar Bar, Upscale Apartment, Cosmetics Lab, Genetics Lab, Fire Station, Sweat Shop, Industry Site, Corporate HQ, AM Radio, Cable News Areas with very high security and better locks: Nuclear Industry, Police Station, Courthouse, Prison, Intelligence HQ, Army Base, CEO Mansion ===== Initialize Location ===== Seeds and names (or reseeds and renames) an existing site. <code> loc.init(); char str[80]; switch(loc.type) { case SITE_GOVERNMENT_POLICESTATION: strcpy(loc.name,“Police Station”); strcpy(loc.shortname,“Police Station”); break; case SITE_GOVERNMENT_COURTHOUSE: if(law[LAW_DEATHPENALTY]==-2) { strcpy(loc.name,“Halls of Ultimate Judgment”); strcpy(loc.shortname,“Judge Hall”); } else { strcpy(loc.name,“Court House”); strcpy(loc.shortname,“Court House”); } break; case SITE_GOVERNMENT_FIRESTATION: if(law[LAW_FREESPEECH]==-2) { strcpy(loc.name,“Fireman HQ”); strcpy(loc.shortname,“Fireman HQ”); } else { strcpy(loc.name,“Fire Station”); strcpy(loc.shortname,“Fire Station”); } break; case SITE_GOVERNMENT_PRISON: if(law[LAW_DEATHPENALTY]==-2&& law[LAW_POLICEBEHAVIOR]==-2) { switch(LCSrandom(5)) { case 0:strcpy(loc.name,“Happy”);break; case 1:strcpy(loc.name,“Cheery”);break; case 2:strcpy(loc.name,“Quiet”);break; case 3:strcpy(loc.name,“Green”);break; case 4:strcpy(loc.name,“Nectar”);break; } strcat(loc.name,“ ”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Valley”);break; case 1:strcat(loc.name,“Meadow”);break; case 2:strcat(loc.name,“Hills”);break; case 3:strcat(loc.name,“Glade”);break; case 4:strcat(loc.name,“Forest”);break; } strcat(loc.name,“ Re-education Camp”); strcpy(loc.shortname,“Re-ed Camp”); } else { lastname(str); strcpy(loc.name,str); strcat(loc.name,“ Prison”); strcpy(loc.shortname,“Prison”); } break; case SITE_INDUSTRY_NUCLEAR: if(law[LAW_NUCLEARPOWER]==2) { strcpy(loc.name,“Nuclear Waste Center”); strcpy(loc.shortname,“NWaste Center”); } else { strcpy(loc.name,“Nuclear Power Plant”); strcpy(loc.shortname,“NPower Plant”); } break; case SITE_GOVERNMENT_INTELLIGENCEHQ: if(law[LAW_PRIVACY]==-2&& law[LAW_POLICEBEHAVIOR]==-2) { strcpy(loc.name,“Ministry of Love”); strcpy(loc.shortname,“Min. Love”); } else { strcpy(loc.name,“Intelligence HQ”); strcpy(loc.shortname,“Int. HQ”); } break; case SITE_GOVERNMENT_ARMYBASE: lastname(str); strcpy(loc.name,str); strcat(loc.name,“ Army Base”); strcpy(loc.shortname,“Army Base”); break; case SITE_CORPORATE_HEADQUARTERS: strcpy(loc.name,“Corporate HQ”); strcpy(loc.shortname,“Corp. HQ”); break; case SITE_BUSINESS_PAWNSHOP: if(law[LAW_GUNCONTROL]==ALIGN_ELITELIBERAL) { char str[80]; lastname(str); strcpy(loc.name,str); strcat(loc.name,“'s Pawnshop”); strcpy(loc.shortname,“Pawnshop”); } else { char str[80]; lastname(str); strcpy(loc.name,str); strcat(loc.name,“ Pawn & Gun”); strcpy(loc.shortname,“Pawnshop”); } break; case SITE_CORPORATE_HOUSE: if(law[LAW_CORPORATE]==-2&& law[LAW_TAX]==-2) { strcpy(loc.name,“CEO Castle”); strcpy(loc.shortname,“CEO Castle”); } else { strcpy(loc.name,“CEO Residence”); strcpy(loc.shortname,“CEO House”); } break; case SITE_RESIDENTIAL_SHELTER: strcpy(loc.name,“Homeless Shelter”); strcpy(loc.shortname,“Shelter”); break; case SITE_INDUSTRY_WAREHOUSE: { do { strcpy(loc.name,“Old ”); char str[50]; lastname(str); strcat(loc.name,str); strcat(loc.name,“ ”); switch(LCSrandom(10)) { case 0: strcat(loc.name,“Meat Plant”); strcpy(loc.shortname,“Meat Plant”); break; case 1: strcat(loc.name,“Warehouse”); strcpy(loc.shortname,“Warehouse”); break; case 2: strcat(loc.name,“Paper Mill”); strcpy(loc.shortname,“Paper Mill”); break; case 3: strcat(loc.name,“Cement Factory”); strcpy(loc.shortname,“Cement”); break; case 4: strcat(loc.name,“Fertilizer Plant”); strcpy(loc.shortname,“Fertilizer”); break; case 5: strcat(loc.name,“Drill Factory”); strcpy(loc.shortname,“Drill”); break; case 6: strcat(loc.name,“Steel Plant”); strcpy(loc.shortname,“Steel”); break; case 7: strcat(loc.name,“Packing Plant”); strcpy(loc.shortname,“Packing”); break; case 8: strcat(loc.name,“Toy Factory”); strcpy(loc.shortname,“Toy”); break; case 9: strcat(loc.name,“Building Site”); strcpy(loc.shortname,“Building”); break; } } while (duplicatelocation(loc)); break; } case SITE_INDUSTRY_POLLUTER: switch(LCSrandom(5)) { case 0: strcpy(loc.name,“Aluminum Factory”); strcpy(loc.shortname,“Alum Fact”); break; case 1: strcpy(loc.name,“Plastic Factory”); strcpy(loc.shortname,“Plast Fact”); break; case 2: strcpy(loc.name,“Oil Refinery”); strcpy(loc.shortname,“Refinery”); break; case 3: strcpy(loc.name,“Auto Plant”); strcpy(loc.shortname,“Auto Plant”); break; case 4: strcpy(loc.name,“Chemical Factory”); strcpy(loc.shortname,“Chem Fact”); break; } break; case SITE_MEDIA_CABLENEWS: strcpy(loc.name,“Cable News Station”); strcpy(loc.shortname,“News Station”); break; case SITE_MEDIA_AMRADIO: strcpy(loc.name,“AM Radio Station”); strcpy(loc.shortname,“Radio Station”); break; case SITE_RESIDENTIAL_APARTMENT_UPSCALE: case SITE_RESIDENTIAL_APARTMENT: do { lastname(str); strcpy(loc.name,str); strcat(loc.name,“ Apartments”); strcpy(loc.shortname,str); strcat(loc.shortname,“ Apts”); } while (duplicatelocation(loc)); break; case SITE_RESIDENTIAL_TENEMENT: do { char str[50]; lastname(str); strcpy(loc.name,str); strcat(loc.name,“ St. ”); strcat (loc.name, “Housing Projects”); strcpy (loc.shortname, “Projects”); } while (duplicatelocation (loc)); break; case SITE_HOSPITAL_UNIVERSITY: strcpy(loc.name,“The University Hospital”); strcpy(loc.shortname,“U Hospital”); break; case SITE_HOSPITAL_CLINIC: strcpy(loc.name,“The Free CLINIC”); strcpy(loc.shortname,“CLINIC”); break; case SITE_LABORATORY_GENETIC: lastname(str); strcpy(loc.name,str); strcat(loc.name,“ Genetics”); strcpy(loc.shortname,“Genetics Lab”); break; case SITE_LABORATORY_COSMETICS: lastname(str); strcpy(loc.name,str); strcat(loc.name,“ Cosmetics”); strcpy(loc.shortname,“Cosmetics Lab”); break; case SITE_BUSINESS_CARDEALERSHIP: firstname(str,GENDER_WHITEMALEPATRIARCH); strcpy(loc.name,str); strcat(loc.name,“ ”); lastname(str); strcat(loc.name,str); strcat(loc.name,“'s Used Cars”); strcpy(loc.shortname,“Dealership”); break; case SITE_BUSINESS_DEPTSTORE: lastname(str); strcpy(loc.name,str); strcat(loc.name,“'s Department Store”); strcpy(loc.shortname,“Dept. Store”); break; case SITE_BUSINESS_HALLOWEEN: lastname(str); strcpy(loc.name,“The Oubliette”); strcpy(loc.shortname,“Oubliette”); break; case SITE_INDUSTRY_SWEATSHOP: lastname(str); strcpy(loc.name,str); strcat(loc.name,“ Garment Makers”); strcpy(loc.shortname,“Sweatshop”); break; case SITE_BUSINESS_CRACKHOUSE: do { char str[50]; lastname(str); strcpy(loc.name,str); strcat(loc.name,“ St. ”); if (law[LAW_DRUGS]==2) { switch (LCSrandom (4)) { case 0: strcat (loc.name, “Recreational Drugs Center”); strcpy (loc.shortname, “Drugs Center”); break; case 1: strcat (loc.name, “Coffee House”); strcpy (loc.shortname, “Coffee House”); break; case 2: strcat (loc.name, “Cannabis Lounge”); strcpy (loc.shortname, “Cannabis Lounge”); break; case 3: strcat (loc.name, “Marijuana Dispensary”); strcpy (loc.shortname, “Dispensary”); break; } } else { strcat (loc.name, “Crack House”); strcpy (loc.shortname, “Crack House”); } } while (duplicatelocation (loc)); break; case SITE_BUSINESS_JUICEBAR: strcpy(loc.name,“”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Natural”);break; case 1:strcat(loc.name,“Harmonious”);break; case 2:strcat(loc.name,“Restful”);break; case 3:strcat(loc.name,“Healthy”);break; case 4:strcat(loc.name,“New You”);break; } strcat(loc.name,“ ”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Diet”);break; case 1:strcat(loc.name,“Methods”);break; case 2:strcat(loc.name,“Plan”);break; case 3:strcat(loc.name,“Orange”);break; case 4:strcat(loc.name,“Carrot”);break; } strcat(loc.name,“ Juice Bar”); strcpy(loc.shortname,“Juice Bar”); break; case SITE_BUSINESS_VEGANCOOP: strcpy(loc.name,“”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Asparagus”);break; case 1:strcat(loc.name,“Tofu”);break; case 2:strcat(loc.name,“Broccoli”);break; case 3:strcat(loc.name,“Radish”);break; case 4:strcat(loc.name,“Eggplant”);break; } strcat(loc.name,“ ”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Forest”);break; case 1:strcat(loc.name,“Rainbow”);break; case 2:strcat(loc.name,“Garden”);break; case 3:strcat(loc.name,“Farm”);break; case 4:strcat(loc.name,“Meadow”);break; } strcat(loc.name,“ Vegan Co-op”); strcpy(loc.shortname,“Vegan Co-op”); break; case SITE_BUSINESS_INTERNETCAFE: strcpy(loc.name,“”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Electric”);break; case 1:strcat(loc.name,“Wired”);break; case 2:strcat(loc.name,“Nano”);break; case 3:strcat(loc.name,“Micro”);break; case 4:strcat(loc.name,“Techno”);break; } strcat(loc.name,“ ”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Panda”);break; case 1:strcat(loc.name,“Troll”);break; case 2:strcat(loc.name,“Latte”);break; case 3:strcat(loc.name,“Unicorn”);break; case 4:strcat(loc.name,“Pixie”);break; } strcat(loc.name,“ Internet Cafe”); strcpy(loc.shortname,“Net Cafe”); break; case SITE_BUSINESS_CIGARBAR: lastname(str); strcpy(loc.name,“The ”); strcat(loc.name,str); strcat(loc.name,“ Gentlemen's Club”); strcpy(loc.shortname,“Cigar Bar”); break; case SITE_BUSINESS_LATTESTAND: strcpy(loc.name,“”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Frothy”);break; case 1:strcat(loc.name,“Milky”);break; case 2:strcat(loc.name,“Caffeine”);break; case 3:strcat(loc.name,“Morning”);break; case 4:strcat(loc.name,“Evening”);break; } strcat(loc.name,“ ”); switch(LCSrandom(5)) { case 0:strcat(loc.name,“Mug”);break; case 1:strcat(loc.name,“Cup”);break; case 2:strcat(loc.name,“Jolt”);break; case 3:strcat(loc.name,“Wonder”);break; case 4:strcat(loc.name,“Express”);break; } strcat(loc.name,“ Latte Stand”); strcpy(loc.shortname,“Latte Stand”); break; case SITE_OUTDOOR_PUBLICPARK: lastname(loc.name); strcat(loc.name,“ Park”); strcpy(loc.shortname,“Park”); break; case SITE_RESIDENTIAL_BOMBSHELTER: strcpy(loc.name,“Fallout Shelter”); strcpy(loc.shortname,“Bomb Shelter”); break; case SITE_BUSINESS_BARANDGRILL: strcpy(loc.name,“Desert Eagle Bar & Grill”); strcpy(loc.shortname,“Bar & Grill”); break; case SITE_OUTDOOR_BUNKER: strcpy(loc.name,“Robert E. Lee Bunker”); strcpy(loc.shortname,“Bunker”); break; case SITE_BUSINESS_ARMSDEALER: strcpy(loc.name,“Black Market”); strcpy(loc.shortname,“Black Market”); } } </code> <code> /* daily - returns the number of days in the current month */ int monthday(void) { switch(month) { case 4:return 30; case 6:return 30; case 9:return 30; case 11:return 30; case 2: if(year%4==0&&(year%100!=0||year%400==0))return 29; else return 28; default: return 31; } } </code> ===== Dating and Kidnapping ===== ARoll vs TRoll LiberalRolll vs ConservRoll If ARoll > TRoll: Some Guy is quite taken with X's unique life philosophy… * If date's Heart + (aroll-troll)/2 > date's Wisdom: If dater has room for more loveslaves, they become a loveslave, baby! Otherwise, it's breakup time. If they become a loveslave, their workplace is unhidden and they provide a map of the location. * Otherwise, if date's Heart < dater's Heart - 4, date's heart increases by 1. * Otherwise if workplace is unfamiliar and date rolls a zero on an LCSRandom(Wisdom) check, they may talk about their workplace (gives map of location and unhides it.) * They'll meet again tomorrow. Otherwise: * If Date is conservative and ARoll < TRoll /2, Dater gains 1 Wisdom; if Date's Religion, Science, or Business exceed Dater, each is trained by 20 x the difference. If you are a wanted criminal, there is a chance that someone will rat you out on breaking up with you; this is 2% for normal conservatives, and 25% for law enforcement, prison guards, and agents. If this occurs, you are told that Some Guy was leaking information to the police the whole time, and have a 75% chance of being arrested if less than 50 juice, or 50% chance of being arrested if greater than 50 juice. If arrested, go directly to jail and remove all gear but Clothes; date ends with arrest and date vanishes from system. Otherwise, Some Guy can sense things aren't working out, and the relationship ends. ===== Vacation ===== When Dater P comes back from vacation, ARoll is Seduction doubled, TRoll is Wisdom. Dater trains seduction (LCSRandom(11)+15), as well as science, religion, and business equal to the differences between their scores (max zero). If the target has business, religion, or science, make a skill roll for dater and datee in each area and add their results to their rolls. Use this to check date results. ===== Dating ===== Chances of being caught double-dating are 1 in 6; triple-dating or worse is 1 in 4. If caught, lose 5 juice to a maximum of -50, due to the humiliation involved, and all parties break up with the dater. People come to dates wearing normal clothing and unarmed. [Maybe in suits if appropriate?] Things in common: If Dater has a skill between double and half the skill of the other person, amnd both parties have a skill above 1, things in common ++; ARoll = Skill[Seduction]; TRoll = Attribute[Wisdom]; If Date is Conservative, TRoll+=(Conservative Juice / 100) If you pay $100 to help bankroll the evening, add LCSRandom(10) to ARoll. Train Seduction by LCSRandom(4)+5, and Science, Religion, and Business by the difference in skills between date and dater (max 0). If the target has business, religion, or science, make a skill roll for dater and datee in each area and add their results to their rolls. If you have full health and aren't hospitalized, you can go on a vacation: this sets a seven day timer, increases seduction by LCSRandom(40)+15, and Science, Religion, and Business by the difference in skills x 4 (max zero). If you choose to break it off, that's it, no risks or worries. If you try to kidnap the conservative, you threaten to shoot the conservative/hold the weapon to the conservative's throat/grab them from behind. If LCSRandom(15) is not zero AND enemy is not a badass (Agent, Cop, SWAT, Gang Unit, Death Squad, Soldier, Veteran, Hardened Veteran, CCS Vigilante, CCS Archconservative, CCS Molotov, CCS Sniper, Mercenary); or if LCSRandom(1+threat of weapon) is not zero: subject is captured. If bonus was zero, they struggle and yell for help, but nobody comes; if bonus was not zero, they don't resist. [Maybe add in a check for them trying to fight it out?] If this fails: There's a 50% chance the conservative just escapes on the way back to the safehouse – and the dater gets charged with kidnapping. [Modify this to an escape attempt later?] Otherwise, the conservative knocks them out, and the dater ends up waking up in the police station (and are charged with kidnapping.) ===== Hostage Negotiations ===== Once you've successfully captured a hostage, by whatever means, you have a number of options available. [Add option to relocate hostages? take one day, which means they can't be interrogated that day, but may be useful if heat is building.] [Add option to ransom hostages? Making a ransom demand replaces interrogation for the day. Ransom demands decrease rapport and might increase wisdom slightly. Ransom is for cynical types.] [Add option to release hostages? This can be a good or a bad thing, but may be an alternative to killing someone who won't break but that you don't want to kill.] Expensive Props cost $250. Hallucinogenic Drugs cost $50. ==== Killing a Hostage ==== When you choose to kill a hostage, the game checks to see if LCSRandom(50) < the juice of each member, OR LCSRandom(9) + 1 > the heart of each member. If any of these qualify, one of these people will become the executioner. If LCSRandom[executioner's Heart] > LCSRandom[3], it will upset them (they get sick to the stomach and react badly, and lose 1 point of Heart); otherwise if LCSRandom[3] is zero, they grow colder (gain one point of Wisdom.) If nobody is willing to do the deed, the game will inform you as such, and interrogation proceeds as normal, though without talking, beating, or drugs. If the hostage is dead, anyone marked as tending the hostage is set to ACTIVITY_NONE. ==== Educating a Hostage ==== The Automaton… (Restrained) …is tied hands and feet to a metal chair in the middle of a back room. [Attack +5] (Not Restrained) …is locked in a back room converted into a makeshift cell. (Drugged) It is subjected to dangerous hallucinogens. [Attack +10 + armordrugbonus] If LCSRandom(50) < Drug Use total, Hostage Health –; If Hostage Health = 0, hostage dies. “It is a lethal overdose in name's weakened state.” (Beating) Forceroll = 0 Tortured = 0 For each interrogator, rapport is reduced by 0.4, and forceroll is increased by Strength of interrogator. If lead interrogator fails an Easy Heart attribute check and has props, they use torture: * Force roll is doubled. Rapport with lead interrogator is -3. Tortured = true. Victim's Heart and wisdom both drop by 1 if greater than 1. If props were used, force roll is doubled. Hostage loses blood equal to 5 + LCSRandom(5), doubled if props used. If Hostage fails a health check vs the force roll: * If it succeeds a religion check versus the force roll, they will take comfort in their faith (or in the appearance of God, if hallucinating). * If Forceroll > (Hostage[Wisdom]x3 + Hostage[Heart]x3 + Hostage[Health]x3): * Message pertaining to broken spirit - crying for mercy, curling up, going limp, sobbing, contemplating death. * If Heart is greater than 1, Heart is reduced by 1. * If LCSRandom(1) and Hostage[Juice] > 0, hostage loses juice equal to forceroll, minimum 0; else if Wisdom > 1, Wisdom reduced by Forceroll/10 to a minimum of 1. * If LCSRandom(5) is not zero, information about their jobsite is obtained. Otherwise: * Hostage seems to be getting the message. * If LCSRandom(1) and Hostage[Juice] > 0, hostage loses juice equal to forceroll, minimum 0; else if Wisdom > 1, Wisdom reduced by (Forceroll/10)+1 to a minimum of 1. * If Hostage fails a Health check vs Forceroll/3, then if Health > 0, Health-1 (Hostage is badly hurt.), else Health=0, hostage dies, Hostage's weakened body crumbles under the brutal assault.) Else: Hostage seems to be taking it well. If hostage was tortured, and lead interrogator Heart > LCSRandom(3), interrogator gets sick and loses Heart as per execution; else if LCSRandom(3) = 0, interrogator gains Wisdom as per execution. (Verbal Interrogation) TemporaryRapport = Rapport between interrogator and subject. If unrestrained, attack +5 Attack += int(rapport x 3) If props are used, add 10 to attack. If drugged: * If hostage succeeds a Challenging skill check vs Psychology, they resist the hallucinations. * Otherwise if Rapport is greater than 1 and LCSRandom[3] is zero or LCSRandom[10] is not zero, rapport is temporarily 10. * Otherwise if Rapport is less than -1 and LCSRandom[3] is not zero or LCSRandom[5] is zero, attack is 0 (bad trip due to panic!) * Otherwise just odd hallucinatory babble. If their Psychology is greater, they prove resistant to this sort of interrogation / play mind games / refuse to cooperate. Otherwise, if beaten or if temprapport is below -2, they refuse to cooperate (babbles mindlessly, whimpers, cries, grows distant, etc) if talked to. However, if seduction score is greater than double negative rapport temp, interrogator offers consolation - which raises rapport by 0.7. If this raises rapport to above 3, this can induce emotional reactions, and if this raises rapport to 5, converts turns the hostage! If not, though, Hostage Heart drops by 1 as they become more cynical and unhappy. Otherwise, if the hostage's religion exceeds the interrogator's religion + psychology, and they're not drugged, the hostage refuses to break (but the interrogator trains Hostage[Religion]x4. Otherwise, if the hostage's business exceeds the interrogator's business + psychology, and they're not drugged, the hostage refuses to break (but the interrogator trains Hostage[Business]x4. Otherwise, if the hostage's science exceeds the interrogator's science + psychology, and they're not drugged, the hostage refuses to break (but the interrogator trains Hostage[Science]x4. Otherwise, if the Hostage fails a Wisdom check vs Attack / 6: * If they have juice, they lose juice equal to attack, max 0. * If their Heart is less than 10, they gain 1 Heart. * They gain +1.5 rapport with interrogator. * If their Heart > Wisdom +4, they are turned. * If their Rapport > 4, they are turned. * Mention that their beliefs are shaken/considered/etc. * If LCSRandom[5] = 0 and their worklocation isn't mapped, they reveal information about their workplace. Otherwise if you used props or if they fail a Persuasion check vs interrogator's Heart, they hold firm - but rapport + 0.2 Otherwise, hostage wins argument/liberal's convictions are shaken! * Rapport + 0.5 * Interrogator +1 Wisdom * Hostage turns the tables on Name! Name has gained wisdom! Lead interrogator gains (atk /2) + 1 Psychology experience, and others gain (atk /4) +1 Psychology experience. If the hostage has been held for over a week (joindays>6), their Heart is at 1, LCSRandom(3) > 0, they're alive, and they haven't been turned yet, they may contemplate suicide… If LCSRandom[6] > 0 or restrained: <code> switch(LCSRandom[5 - restrained]: case 0:addstr(“ mutters about death.”);break; case 1:addstr(“ broods darkly.”);break; case 2:addstr(“ has lost hope of rescue.”);break; case 3:addstr(“ is making peace with God.”);break; case 4:addstr(“ is bleeding from self-inflicted wounds.”);cr→blood-=LCSrandom(15)+10;break; </code> else: Hostage commits suicide and dies. If the hostage dies for whatever reason under their interrogation, then if LCSRandom[Heart] > 0, lose 1 Heart and get sick as execution. Otherwise if LCSRandom[3] = 0 grow colder and gain 1 Wisdom as Execution. If AutoEnlighten is set, prisoners turn immediately. You lucky cheat. If they're turned successfully: * If Hostage[Heart]>7 and Hostage[Wisdom]>2 and LCSRandom[4]>0 and Hostage is flagged as kidnapped, then remove the missing and kidnapped flags. “The conversion is convincing enough that the police no longer consider it a kidnapping.” * Add the Brainwashed flag. * Anyone assigned to tend this hostage is now assigned to ACTIVITY_NONE. * If the hostage's workplace is unmapped/hidden, the hostage will map it. If they haven't been reported kidnapped yet, they can become a sleeper: their disappearance has not yet been reported. (Unflag MISSING.) If hostage is dead or converted, do a last check to see whether anyone is marked as hostagetending them, and if so, switch them to not. ===== Media Impact ===== The daily newspaper arranges stories by order of priority. Major Events: Priority 30000 (always front page). <code> LCS Stories: case NEWSSTORY_SQUAD_SITE: case NEWSSTORY_SQUAD_ESCAPED: case NEWSSTORY_SQUAD_FLEDATTACK: case NEWSSTORY_SQUAD_DEFENDED: case NEWSSTORY_SQUAD_BROKESIEGE: case NEWSSTORY_SQUAD_KILLED_SIEGEATTACK: case NEWSSTORY_SQUAD_KILLED_SIEGEESCAPE: case NEWSSTORY_SQUAD_KILLED_SITE: case NEWSSTORY_CARTHEFT: case NEWSSTORY_NUDITYARREST: case NEWSSTORY_WANTEDARREST: case NEWSSTORY_DRUGARREST: case NEWSSTORY_GRAFFITIARREST: case NEWSSTORY_BURIALARREST: Priority starts at zero. int crime[CRIMENUM]; memset(crime,0,CRIMENUM*sizeof(int)); Record all the crimes in this story

       for(int c=0;c<ns.crime.size();c++)
       {
          crime[ns.crime[c]]++;
       }
       // Cap publicity for more than ten repeats of an action of some type
       if(crime[CRIME_STOLEGROUND]>10)crime[CRIME_STOLEGROUND]=10;
       if(crime[CRIME_BROKEDOWNDOOR]>10)crime[CRIME_BROKEDOWNDOOR]=10;
       if(crime[CRIME_ATTACKED_MISTAKE]>10)crime[CRIME_ATTACKED_MISTAKE]=10;
       if(crime[CRIME_ATTACKED]>10)crime[CRIME_ATTACKED]=10;
       if(crime[CRIME_BREAK_SWEATSHOP]>10)crime[CRIME_BREAK_SWEATSHOP]=10;
       if(crime[CRIME_BREAK_FACTORY]>10)crime[CRIME_BREAK_FACTORY]=10;
       if(crime[CRIME_FREE_RABBITS]>10)crime[CRIME_FREE_RABBITS]=10;
       if(crime[CRIME_FREE_BEASTS]>10)crime[CRIME_FREE_BEASTS]=10;
       if(crime[CRIME_TAGGING]>10)crime[CRIME_TAGGING]=10;

Increase news story priority based on the number of instances of various crimes, scaled by a factor dependant on the crime

       // Unique site crimes
       ns.priority+=crime[CRIME_SHUTDOWNREACTOR  ] * 100;
       ns.priority+=crime[CRIME_HACK_INTEL       ] * 100;
       ns.priority+=crime[CRIME_ARMY_ARMORY      ] * 100;
       ns.priority+=crime[CRIME_HOUSE_PHOTOS     ] * 100;
       ns.priority+=crime[CRIME_CORP_FILES       ] * 100;
       ns.priority+=crime[CRIME_PRISON_RELEASE   ] *  50;
       ns.priority+=crime[CRIME_JURYTAMPERING    ] *  30;
       ns.priority+=crime[CRIME_POLICE_LOCKUP    ] *  30;
       ns.priority+=crime[CRIME_COURTHOUSE_LOCKUP] *  30;
       // Common site crimes
       ns.priority+=crime[CRIME_KILLEDSOMEBODY   ] *  30;
       ns.priority+=crime[CRIME_FREE_BEASTS      ] *  12;
       ns.priority+=crime[CRIME_BREAK_SWEATSHOP  ] *   8;
       ns.priority+=crime[CRIME_BREAK_FACTORY    ] *   8;
       ns.priority+=crime[CRIME_FREE_RABBITS     ] *   8;
       ns.priority+=crime[CRIME_ATTACKED_MISTAKE ] *   7;
       ns.priority+=crime[CRIME_ATTACKED         ] *   4;
       ns.priority+=crime[CRIME_TAGGING          ] *   2;
       //ns.priority+=crime[CRIME_STOLEGROUND      ];
       //ns.priority+=crime[CRIME_BROKEDOWNDOOR    ];
       // Set story's political and violence levels for determining whether
       // a story becomes positive or negative
       if(ns.claimed)ns.politics_level=5;
       else ns.politics_level=0;
       
       ns.politics_level+=crime[CRIME_SHUTDOWNREACTOR  ] * 100;
       ns.politics_level+=crime[CRIME_HACK_INTEL       ] * 100;
       ns.politics_level+=crime[CRIME_HOUSE_PHOTOS     ] * 100;
       ns.politics_level+=crime[CRIME_CORP_FILES       ] * 100;
       ns.politics_level+=crime[CRIME_PRISON_RELEASE   ] *  50;
       ns.politics_level+=crime[CRIME_POLICE_LOCKUP    ] *  30;
       ns.politics_level+=crime[CRIME_COURTHOUSE_LOCKUP] *  30;
       ns.politics_level+=crime[CRIME_FREE_BEASTS      ] *  10;
       ns.politics_level+=crime[CRIME_BREAK_SWEATSHOP  ] *  10;
       ns.politics_level+=crime[CRIME_BREAK_FACTORY    ] *  10;
       ns.politics_level+=crime[CRIME_FREE_RABBITS     ] *  10;
       ns.politics_level+=crime[CRIME_TAGGING          ] *   3;
       ns.violence_level=0;
       ns.violence_level+=crime[CRIME_ARMY_ARMORY      ] * 100;
       ns.violence_level+=crime[CRIME_KILLEDSOMEBODY   ] *  20;
       ns.violence_level+=crime[CRIME_ATTACKED_MISTAKE ] *  12;
       ns.violence_level+=crime[CRIME_ATTACKED         ] *   4;
       /*
       short violence_threshhold;
       if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<5)violence_threshhold=1;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<25)violence_threshhold=2;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<45)violence_threshhold=3;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<65)violence_threshhold=4;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<85)violence_threshhold=5;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<105)violence_threshhold=6;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<125)violence_threshhold=7;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<145)violence_threshhold=8;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<165)violence_threshhold=9;
       else if(attitude[VIEW_POLITICALVIOLENCE]+attitude[VIEW_LIBERALCRIMESQUADPOS]<185)violence_threshhold=10;
       else violence_threshhold=50;
       */
       //if(ns.violence_level / (ns.politics_level+1) > violence_threshhold)
       //   ns.positive = 0;
       //else ns.positive = 1;
       // Add additional priority based on the type of news story
       // and how high profile the LCS is
       switch(ns.type)
       {
          case NEWSSTORY_SQUAD_ESCAPED:
             ns.priority+=10+attitude[VIEW_LIBERALCRIMESQUAD]/3;
             break;
          case NEWSSTORY_SQUAD_FLEDATTACK:
             ns.priority+=15+attitude[VIEW_LIBERALCRIMESQUAD]/3;
             break;
          case NEWSSTORY_SQUAD_DEFENDED:
             ns.priority+=30+attitude[VIEW_LIBERALCRIMESQUAD]/3;
             break;
          case NEWSSTORY_SQUAD_BROKESIEGE:
             ns.priority+=45+attitude[VIEW_LIBERALCRIMESQUAD]/3;
             break;
          case NEWSSTORY_SQUAD_KILLED_SIEGEATTACK:
             ns.priority+=10+attitude[VIEW_LIBERALCRIMESQUAD]/3;
             break;
          case NEWSSTORY_SQUAD_KILLED_SIEGEESCAPE:
             ns.priority+=15+attitude[VIEW_LIBERALCRIMESQUAD]/3;
             break;
          case NEWSSTORY_SQUAD_KILLED_SITE:
             ns.priority+=10+attitude[VIEW_LIBERALCRIMESQUAD]/3;
             break;
          default:
             // Suppress actions at  CCS safehouses
             if(ns.loc!=-1 &&
                location[ns.loc]->renting==RENTING_CCS)
             {
                ns.priority = 0;
             }
             break;
       }
       // Double profile if the squad moved out in full battle colors
       if(ns.claimed==2)ns.priority*=2;
       // Modify notability by location
       if(ns.loc!=-1)
       {
          switch(location[ns.loc]->type)
          {
             // Not even reported
          case SITE_BUSINESS_CRACKHOUSE:
             if(ns.type == NEWSSTORY_SQUAD_KILLED_SITE ||
                ns.type == NEWSSTORY_SQUAD_SITE)
             {
                ns.priority = 0;
                break;
             }
             // Nobody cares
          case SITE_RESIDENTIAL_TENEMENT:
             ns.priority/=8;
             break;
             // Normal priority
          case SITE_RESIDENTIAL_SHELTER:
          case SITE_INDUSTRY_WAREHOUSE:
          case SITE_RESIDENTIAL_BOMBSHELTER:
          case SITE_DOWNTOWN:
          case SITE_COMMERCIAL:
          case SITE_UDISTRICT:
          case SITE_OUTOFTOWN:
          case SITE_INDUSTRIAL:
          case SITE_RESIDENTIAL_APARTMENT:
          case SITE_RESIDENTIAL_APARTMENT_UPSCALE:
          case SITE_LABORATORY_COSMETICS:
          case SITE_LABORATORY_GENETIC:
          case SITE_HOSPITAL_CLINIC:
          case SITE_HOSPITAL_UNIVERSITY:
          case SITE_INDUSTRY_SWEATSHOP:
          case SITE_INDUSTRY_POLLUTER:
          case SITE_INDUSTRY_NUCLEAR:
          case SITE_BUSINESS_PAWNSHOP:
          case SITE_BUSINESS_JUICEBAR:
          case SITE_BUSINESS_CIGARBAR:
          case SITE_BUSINESS_LATTESTAND:
          case SITE_BUSINESS_VEGANCOOP:
          case SITE_BUSINESS_INTERNETCAFE:
          case SITE_BUSINESS_DEPTSTORE:
          case SITE_BUSINESS_HALLOWEEN:
          case SITE_BUSINESS_BARANDGRILL:
          case SITE_BUSINESS_ARMSDEALER:
          case SITE_BUSINESS_CARDEALERSHIP:
          case SITE_OUTDOOR_PUBLICPARK:
          case SITE_OUTDOOR_BUNKER:
          default:
             break;
             // WOAH OMG
          case SITE_GOVERNMENT_POLICESTATION:
          case SITE_GOVERNMENT_COURTHOUSE:
          case SITE_GOVERNMENT_PRISON:
          case SITE_GOVERNMENT_INTELLIGENCEHQ:
          case SITE_GOVERNMENT_ARMYBASE:
          case SITE_GOVERNMENT_FIRESTATION:
          case SITE_CORPORATE_HEADQUARTERS:
          case SITE_CORPORATE_HOUSE:
          case SITE_MEDIA_AMRADIO:
          case SITE_MEDIA_CABLENEWS:
             ns.priority*=2;
             break;
          }
       }
       // Cap news priority, in part so it can't displace major news stories
       if(ns.priority>20000)ns.priority=20000;
       break;
    }

case NEWSSTORY_KIDNAPREPORT:

       // Kidnappings are higher priority if they're an archconservative
       ns.priority=20;
       if(ns.cr->type==CREATURE_CORPORATE_CEO||
          ns.cr->type==CREATURE_RADIOPERSONALITY||
          ns.cr->type==CREATURE_NEWSANCHOR||
          ns.cr->type==CREATURE_SCIENTIST_EMINENT||
          ns.cr->type==CREATURE_JUDGE_CONSERVATIVE)ns.priority=40;
       break;
    case NEWSSTORY_MASSACRE:
       // More people massacred, higher priority (I think; not verified ns.crime[1] is people present)
       ns.priority=10 + ns.crime[1]*5;
       break;
    case NEWSSTORY_CCS_SITE:
    case NEWSSTORY_CCS_KILLED_SITE:
       // CCS actions loosely simulate LCS actions; here it adds some
       // random site crimes to the story and increases the
       // priority accordingly
       ns.crime.push_back(CRIME_BROKEDOWNDOOR);
       ns.priority=1;
       ns.politics_level+=20;
       if(ns.positive==0)
       {
          ns.crime.push_back(CRIME_ATTACKED_MISTAKE);
          ns.priority+=7;
          ns.violence_level+=12;
       }
       ns.crime.push_back(CRIME_ATTACKED);
       ns.priority+=4*(LCSrandom(10)+1);
       ns.violence_level+=LCSrandom(10) *  4;
       if(LCSrandom(endgamestate+1))
       {
          ns.crime.push_back(CRIME_KILLEDSOMEBODY);
          ns.priority+=LCSrandom(10)*30;
          ns.violence_level+=LCSrandom(10) * 20;
       }
       if(LCSrandom(endgamestate+1))
       {
          ns.crime.push_back(CRIME_STOLEGROUND);
          ns.priority+=LCSrandom(10);
       }
       if(!LCSrandom(endgamestate+4))
       {
          ns.crime.push_back(CRIME_BREAK_FACTORY);
          ns.priority+=LCSrandom(10)*2;
          ns.politics_level+=LCSrandom(10) *  10;
       }
       if(LCSrandom(2))
       {
          ns.crime.push_back(CRIME_CARCHASE);
       }
       break;
    case NEWSSTORY_CCS_DEFENDED:
    case NEWSSTORY_CCS_KILLED_SIEGEATTACK:
       ns.priority=40+attitude[VIEW_LIBERALCRIMESQUAD]/3;
       break;
 }

}

/* news - show major news story */ void displaystory(newsstoryst &ns,bool liberalguardian,int header) {

 int it2;
 preparepage(ns,liberalguardian);
 char story[5000];
 short storyx_s[25];
 short storyx_e[25];
 for(it2=0;it2<25;it2++)storyx_s[it2]=1;
 for(it2=0;it2<25;it2++)storyx_e[it2]=78;
 displayads(ns,liberalguardian,storyx_s,storyx_e,it2);
 switch(ns.type)
 {
    case NEWSSTORY_MAJOREVENT:
       displaymajoreventstory(ns,story,storyx_s,storyx_e);
       break;
    case NEWSSTORY_SQUAD_SITE:
    case NEWSSTORY_SQUAD_ESCAPED:
    case NEWSSTORY_SQUAD_FLEDATTACK:
    case NEWSSTORY_SQUAD_DEFENDED:
    case NEWSSTORY_SQUAD_BROKESIEGE:
    case NEWSSTORY_SQUAD_KILLED_SIEGEATTACK:
    case NEWSSTORY_SQUAD_KILLED_SIEGEESCAPE:
    case NEWSSTORY_SQUAD_KILLED_SITE:
    case NEWSSTORY_CCS_SITE:
    case NEWSSTORY_CCS_KILLED_SITE:
    case NEWSSTORY_CARTHEFT:
    case NEWSSTORY_NUDITYARREST:
    case NEWSSTORY_WANTEDARREST:
    case NEWSSTORY_DRUGARREST:
    case NEWSSTORY_GRAFFITIARREST:
    case NEWSSTORY_BURIALARREST:
    {
       int y=2;
       if((!liberalguardian&&ns.page==1)||(liberalguardian&&ns.guardianpage==1))
       {
          y=21;
          displaystoryheader(ns,liberalguardian,y,header);
       }
       strcpy(story,lcityname);
       strcat(story," - ");
       switch(ns.type)
       {
          case NEWSSTORY_WANTEDARREST:
          case NEWSSTORY_GRAFFITIARREST:
          {
             int crime[CRIMENUM];
             std::memset(crime,0,sizeof(int)*CRIMENUM);
             for(int c=0;c<ns.crime.size();c++)
             {
                crime[ns.crime[c]]++;
             }
             if(crime[CRIME_KILLEDSOMEBODY]>1)
             {
                if(crime[CRIME_KILLEDSOMEBODY]==2)
                   strcat(story,"Two");
                else
                   strcat(story,"Several");
                strcat(story," police officers were");
             }
             else strcat(story,"A police officer was");
             strcat(story," killed in the line of duty yesterday, ");
             strcat(story,"according to a spokesperson from the police department.");
             strcat(story,"&r");
             strcat(story,"  A suspect, identified only as a member of the ");
             strcat(story,"radical political group known as the Liberal Crime Squad, is believed to have killed ");
             if(crime[CRIME_KILLEDSOMEBODY]>1)
             {
                char num[20];
                itoa(crime[CRIME_KILLEDSOMEBODY],num,10);
                strcat(story,num);
                strcat(story," officers ");
             }
             else strcat(story,"the police officer ");
             strcat(story," while they were attempting to perform an arrest.  ");
             strcat(story,"The names of the officers have not been released pending notification of their families.");
             strcat(story,"&r");
             break;
          }
          case NEWSSTORY_NUDITYARREST:
          case NEWSSTORY_CARTHEFT:
          case NEWSSTORY_DRUGARREST:
          case NEWSSTORY_BURIALARREST:
          {
             int crime[CRIMENUM];
             std::memset(crime,0,sizeof(int)*CRIMENUM);
             for(int c=0;c<ns.crime.size();c++)
             {
                crime[ns.crime[c]]++;
             }
             strcat(story,"A routine arrest went horribly wrong yesterday, ");
             strcat(story,"according to a spokesperson from the police department.");
             strcat(story,"&r");
             strcat(story,"  A suspect, whose identify is unclear, ");
             strcat(story,"killed ");
             if(crime[CRIME_KILLEDSOMEBODY]>1)
             {
                char num[20];
                itoa(crime[CRIME_KILLEDSOMEBODY],num,10);
                strcat(story,num);
                strcat(story," police officers that were");
             }
             else strcat(story,"a police officer that was");
             strcat(story," attempting to perform an arrest.  ");
             if(ns.type==NEWSSTORY_NUDITYARREST)
                strcat(story,"The incident apparently occurred as a response to a public nudity complaint.  ");
             else if(ns.type==NEWSSTORY_DRUGARREST)
                strcat(story,"The suspect was allegedly selling \"pot brownies\".  ");
             else if(ns.type==NEWSSTORY_BURIALARREST)
             {
                strcat(story,"A passerby allegedly called the authorities after seeing the suspect dragging what ");
                strcat(story,"appeared to be a corpse through an empty lot.  ");
             }
             else
                strcat(story,"A passerby had allegedly spotted the suspect committing a car theft.  ");
             if(crime[CRIME_KILLEDSOMEBODY]>1)
             {
                strcat(story,"The names of the officers have not been released pending notification of their families.");
             }
             else strcat(story,"The name of the officer has not been released pending notification of the officer's family."); 
             strcat(story,"&r");
             break;
          }
          case NEWSSTORY_SQUAD_ESCAPED:
             strcat(story,"Members of the Liberal Crime Squad ");
             strcat(story,"escaped from a police siege yesterday, according ");
             if(!liberalguardian)strcat(story,"to a spokesperson from the police department.");
             else strcat(story,"to a Liberal Crime Squad spokesperson.");
             strcat(story,"&r");
             break;
          case NEWSSTORY_SQUAD_FLEDATTACK:
             strcat(story,"Members of the Liberal Crime Squad ");
             strcat(story,"escaped from police officers during a raid yesterday, according ");
             if(!liberalguardian)strcat(story,"to a spokesperson from the police department.");
             else strcat(story,"to a Liberal Crime Squad spokesperson.");
             strcat(story,"&r");
             break;
          case NEWSSTORY_SQUAD_DEFENDED:
             strcat(story,"Members of the Liberal Crime Squad ");
             strcat(story,"fought off a police raid yesterday, according ");
             if(!liberalguardian)strcat(story,"to a spokesperson from the police department.");
             else strcat(story,"to a Liberal Crime Squad spokesperson.");
             strcat(story,"&r");
             break;
          case NEWSSTORY_SQUAD_BROKESIEGE:
             strcat(story,"Members of the Liberal Crime Squad ");
             strcat(story,"violently broke a police siege yesterday, according ");
             if(!liberalguardian)strcat(story,"to a spokesperson from the police department.");
             else strcat(story,"to a Liberal Crime Squad spokesperson.");
             strcat(story,"&r");
             break;
          case NEWSSTORY_SQUAD_KILLED_SIEGEATTACK:
             strcat(story,"Members of the Liberal Crime Squad were ");
             if(!liberalguardian)
             {
                strcat(story,"slain during a police raid yesterday, according ");
                strcat(story,"to a spokesperson from the police department.");
             }
             else
             {
                strcat(story,"murdered during a police raid yesterday, according ");
                strcat(story,"to a Liberal Crime Squad spokesperson.");
             }
             strcat(story,"&r");
             break;
          case NEWSSTORY_SQUAD_KILLED_SIEGEESCAPE:
             strcat(story,"Members of the Liberal Crime Squad were ");
             if(!liberalguardian)
             {
                strcat(story,"slain trying to escape from a police siege yesterday, according ");
                strcat(story,"to a spokesperson from the police department.");
             }
             else
             {
                strcat(story,"murdered trying to escape from a police siege yesterday, according ");
                strcat(story,"to a Liberal Crime Squad spokesperson.");
             }
             strcat(story,"&r");
             break;
          default:
          {
             bool ccs=0;
             if(ns.type==NEWSSTORY_CCS_KILLED_SITE||ns.type==NEWSSTORY_CCS_SITE)ccs=1;
             squadstory_text_opening(ns,liberalguardian,ccs,story);
             int crime[CRIMENUM];
             memset(crime,0,sizeof(int)*CRIMENUM);
             int typesum=0;
             for(int c=0;c<ns.crime.size();c++)
             {
                // Count crimes of each type
                crime[ns.crime[c]]++;
                // Special crimes are described at the start or end of the article;
                // others should be recorded in the body
                if(ns.crime[c]==CRIME_HOUSE_PHOTOS)continue;
                if(ns.crime[c]==CRIME_CORP_FILES)continue;
                if(ns.crime[c]==CRIME_SHUTDOWNREACTOR)continue;
                if(ns.crime[c]==CRIME_POLICE_LOCKUP)continue;
                if(ns.crime[c]==CRIME_COURTHOUSE_LOCKUP)continue;
                if(ns.crime[c]==CRIME_PRISON_RELEASE)continue;
                if(ns.crime[c]==CRIME_JURYTAMPERING)continue;
                if(ns.crime[c]==CRIME_HACK_INTEL)continue;
                if(ns.crime[c]==CRIME_ARMY_ARMORY)continue;
                if(ns.crime[c]==CRIME_HOUSE_PHOTOS)continue;
                if(ns.crime[c]==CRIME_CORP_FILES)continue;
                if(ns.crime[c]==CRIME_CARCHASE)continue;
                if(ns.crime[c]==CRIME_CARCRASH)continue;
                if(ns.crime[c]==CRIME_FOOTCHASE)continue;
                //if(ns.crime[c]==CRIME_TAGGING)continue;
                if(crime[ns.crime[c]]==1)typesum++;
             }
             if(crime[CRIME_SHUTDOWNREACTOR])
             {
                if(law[LAW_NUCLEARPOWER]==2)
                {
                   if(!liberalguardian)
                   {
                      strcat(story,"  According to sources that were at the scene, ");
                      strcat(story,"the Liberal Crime Squad contaminated the state's water supply");
                      strcat(story,"yesterday by tampering with equipment on the site.");
                      strcat(story,"&r");
                   }
                   else
                   {
                      strcat(story,"  The Liberal Crime Squad tampered with the state's water supply yesterday, ");
                      strcat(story,"demonstrating the extreme dangers of Nuclear Waste. ");
                      strcat(story,"&r");
                   }
                }
                else
                {
                   if(!liberalguardian)
                   {
                      strcat(story,"  According to sources that were at the scene, ");
                      strcat(story,"the Liberal Crime Squad caused the power out that struck the state ");
                      strcat(story,"yesterday by tampering with equipment on the site.");
                      strcat(story,"&r");
                   }
                   else
                   {
                      strcat(story,"  The Liberal Crime Squad caused the power outage that struck the state yesterday, ");
                      strcat(story,"demonstrating the extreme vulnerability and danger of Nuclear Power Plants. ");
                      strcat(story,"&r");
                   }
                }
             }
             if(crime[CRIME_POLICE_LOCKUP])
             {
                if(!liberalguardian)
                {
                   strcat(story,"  According to sources that were at the scene, ");
                   strcat(story,"the Liberal Crime Squad allegedly freed or attempted to free prisoners from the police lockup.");
                   strcat(story,"&r");
                }
                else
                {
                   strcat(story,"  The Liberal Crime Squad attempted to rescue innocent people from the police lockup, ");
                   strcat(story,"saving them from torture and brutality at the hands of Conservative police interrogators.");
                   strcat(story,"&r");
                }
             }
             if(crime[CRIME_COURTHOUSE_LOCKUP])
             {
                if(!liberalguardian)
                {
                   strcat(story,"  According to sources that were at the scene, ");
                   strcat(story,"the Liberal Crime Squad allegedly freed or attempted to free prisoners from the court house lockup.");
                   strcat(story,"&r");
                }
                else
                {
                   strcat(story,"  The Liberal Crime Squad attempted to rescue innocent people from the court house lockup, ");
                   strcat(story,"saving them from the highly corrupt Conservative justice system.");
                   strcat(story,"&r");
                }
             }
             if(crime[CRIME_PRISON_RELEASE])
             {
                if(!liberalguardian)
                {
                   strcat(story,"  According to sources that were at the scene, ");
                   strcat(story,"the Liberal Crime Squad allegedly freed prisoners while in the facility.");
                   strcat(story,"&r");
                }
                else
                {
                   strcat(story,"  The Liberal Crime Squad attempted to rescue innocent people from the abusive Conservative conditions ");
                   strcat(story,"at the prison.");
                   strcat(story,"&r");
                }
             }
             if(crime[CRIME_JURYTAMPERING])
             {
                if(!liberalguardian)
                {
                   strcat(story,"  According to police sources that were at the scene, ");
                   strcat(story,"the Liberal Crime Squad allegedly violated the sacred ");
                   strcat(story,"trust and attempted to influence a jury.");
                   strcat(story,"&r");
                }
                else
                {
                   strcat(story,"  The Liberal Crime Squad has apologized over reports that the operation ");
                   strcat(story,"may have interfered with jury deliberations.");
                   strcat(story,"&r");
                }
             }
             if(crime[CRIME_HACK_INTEL])
             {
                if(!liberalguardian)
                {
                   strcat(story,"  According to police sources that were at the scene, ");
                   strcat(story,"intelligence officials seemed very nervous about something.");
                   strcat(story,"&r");
                }
                else
                {
                   strcat(story,"  Liberal Crime Squad computer specialists worked to liberate information from CIA computers.");
                   strcat(story,"&r");
                }
             }
             if(crime[CRIME_ARMY_ARMORY])
             {
                if(!liberalguardian)
                {
                   strcat(story,"  According to a military spokesperson, ");
                   strcat(story,"the Liberal Crime Squad attempted to break into the armory.");
                   strcat(story,"&r");
                }
                else
                {
                   strcat(story,"  Liberal Crime Squad infiltration specialists worked to liberate weapons from the oppressors.");
                   strcat(story,"&r");
                }
             }
             if(crime[CRIME_HOUSE_PHOTOS])
             {
                if(!liberalguardian)
                {
                   strcat(story,"  According to police sources that were at the scene, ");
                   strcat(story,"the owner of the house seemed very frantic about some missing property.");
                   strcat(story,"&r");
                }
                else
                {
                   strcat(story,"  The Liberal Crime Squad was attempting to uncover the CEO's Conservative corruption.");
                   strcat(story,"&r");
                }
             }
             if(crime[CRIME_CORP_FILES])
             {
                if(!liberalguardian)
                {
                   strcat(story,"  According to police sources that were at the scene, ");
                   strcat(story,"executives on the scene seemed very nervous about something.");
                   strcat(story,"&r");
                }
                else
                {
                   strcat(story,"  The Liberal Crime Squad was attempting to uncover the company's Conservative corruption.");
                   strcat(story,"&r");
                }
             }
             if(liberalguardian&&!ccs)
             {
                if(crime[CRIME_ATTACKED_MISTAKE])typesum--;
                if(crime[CRIME_KILLEDSOMEBODY])typesum--;
             }
             if(typesum>0)
             {
                if(typesum>0)
                {
                   if(!ccs)
                   {
                      if(!liberalguardian)
                      {
                         strcat(story,"  Further details are sketchy, but police sources suggest that the LCS ");
                         strcat(story,"engaged in ");
                      }
                      else
                      {
                         strcat(story,"  The Liberal Crime Squad ");
                      }
                   }
                   else
                   {
                      strcat(story,"  Further details are sketchy, but police sources suggest that the CCS ");
                         strcat(story,"engaged in ");
                   }
                   if(crime[CRIME_ARSON])
                   {
                      if(!liberalguardian||ccs)
                      {
                         strcat(story,"arson");
                      }
                      else
                      {
                         strcat(story,"set fire to Conservative property");
                      }
                      if(typesum>=3)strcat(story,", ");
                      else if(typesum==2)strcat(story," and ");
                      typesum--;
                   }
                   if(!liberalguardian||ccs)
                   {
                      if(crime[CRIME_KILLEDSOMEBODY])
                      {
                         strcat(story,"murder");
                         if(typesum>=3)strcat(story,", ");
                         else if(typesum==2)strcat(story," and ");
                         typesum--;
                      }
                      if(crime[CRIME_ATTACKED_MISTAKE])
                      {
                         strcat(story,"violence");
                         if(typesum>=3)strcat(story,", ");
                         else if(typesum==2)strcat(story," and ");
                         typesum--;
                      }
                      if(crime[CRIME_ATTACKED])
                      {
                         if(crime[CRIME_ATTACKED_MISTAKE])strcat(story,"more violence");
                         else strcat(story,"violence");
                         if(typesum>=3)strcat(story,", ");
                         else if(typesum==2)strcat(story," and ");
                         typesum--;
                      }
                   }
                   else
                   {
                      if(crime[CRIME_ATTACKED])
                      {
                         strcat(story,"engaged in combat with Conservative forces");
                         if(typesum>=3)strcat(story,", ");
                         else if(typesum==2)strcat(story," and ");
                         typesum--;
                      }
                   }
                   if(crime[CRIME_STOLEGROUND])
                   {
                      if(!liberalguardian||ccs)
                      {
                         strcat(story,"theft");
                      }
                      else
                      {
                         strcat(story,"liberated enemy resources");
                      }
                      if(typesum>=3)strcat(story,", ");
                      else if(typesum==2)strcat(story," and ");
                      typesum--;
                   }
                   if(crime[CRIME_FREE_RABBITS]||crime[CRIME_FREE_BEASTS])
                   {
                      if(!liberalguardian)
                      {
                         strcat(story,"tampering with lab animals");
                      }
                      else
                      {
                         strcat(story,"liberated abused animals");
                      }
                      if(typesum>=3)strcat(story,", ");
                      else if(typesum==2)strcat(story," and ");
                      typesum--;
                   }
                   if(crime[CRIME_BREAK_SWEATSHOP]||crime[CRIME_BREAK_FACTORY])
                   {
                      if(!liberalguardian||ccs)
                      {
                         strcat(story,"destruction of private property");
                      }
                      else
                      {
                         strcat(story,"damaged enemy infrastructure");
                      }
                      if(typesum>=3)strcat(story,", ");
                      else if(typesum==2)strcat(story," and ");
                      typesum--;
                   }
                   if(crime[CRIME_TAGGING])
                   {
                      if(!liberalguardian||ccs)
                      {
                         strcat(story,"vandalism");
                      }
                      else
                      {
                         strcat(story,"marked the site for Liberation");
                      }
                      if(typesum>=3)strcat(story,", ");
                      else if(typesum==2)strcat(story," and ");
                      typesum--;
                   }
                   if(crime[CRIME_BROKEDOWNDOOR])
                   {
                      if(!liberalguardian||ccs)
                      {
                         strcat(story,"breaking and entering");
                      }
                      else
                      {
                         strcat(story,"infiltration of a conservative hot spot");
                      }
                      if(typesum>=3)strcat(story,", ");
                      else if(typesum==2)strcat(story," and ");
                      typesum--;
                   }
                   if(crime[CRIME_UNLOCKEDDOOR])
                   {
                      if(!liberalguardian||ccs)
                      {
                         strcat(story,"unlawful entry");
                      }
                      else
                      {
                         strcat(story,"evaded Conservative security measures");
                      }
                      if(typesum>=3)strcat(story,", ");
                      else if(typesum==2)strcat(story," and ");
                      typesum--;
                   }
                   strcat(story,".");
                }
                strcat(story,"&r");
             }
             if(crime[CRIME_CARCHASE])
             {
                if(!liberalguardian||ccs)
                {
                   strcat(story,"  It is known that there was a high-speed chase ");
                   strcat(story,"following the incident.  ");
                }
                else
                {
                   strcat(story,"  Conservative operatives engaged in a reckless ");
                   strcat(story,"pursuit of the LCS.  ");
                }
                if(crime[CRIME_CARCRASH])
                {
                   if(crime[CRIME_CARCRASH]>1)
                   {
                      char num[20];
                      itoa(crime[CRIME_CARCRASH],num,10);
                      strcat(story," vehicles crashed.  ");
                   }
                   else strcat(story,"One vehicle crashed.  ");
                   if(!liberalguardian||ccs)
                      strcat(story,"Details about injuries were not released.  ");//XXX: Why not turn them into martyrs?
                }
                if(crime[CRIME_FOOTCHASE])
                {
                   if(!liberalguardian||ccs)
                      strcat(story,"There was also a foot chase when the suspect or suspects bailed out after the high-speed pursuit.  ");
                   else
                      strcat(story,"The Liberal Crime Squad ended the dangerous high-speed chase in order to protect the public, and attempted to escape on foot.  ");
                }
                strcat(story,"&r");
             }
             if (!ccs)
             {
                if (!LCSrandom(8))
                {
                    if(crime[CRIME_TAGGING])
                    {
                       strcat(story,"  The slogan, \"");
                       strcat(story,slogan);
                       strcat(story,"\" was found painted on the walls.");
                    }
                    else
                    {
                        switch (LCSrandom(3))
                        {
                        case 0:
                           if (ns.type==NEWSSTORY_SQUAD_KILLED_SITE)
                           {
                              strcat(story,"  One uttered the words, \"");
                                 strcat(story,slogan);
                              strcat(story,"\" before passing out.");
                           }
                           else
                           {
                              strcat(story,"  As they left, they shouted, \"");
                                 strcat(story,slogan);
                              strcat(story,"\"");
                           }
                           break;
                        case 1:
                           strcat(story,"  One of them was rumored to have cried out, \"");
                           strcat(story,slogan);
                           strcat(story,"\"");
                           break;
                        case 2:
                           strcat(story,"  Witnesses reported hearing the phrase, \"");
                           strcat(story,slogan);
                           strcat(story,"\"");
                           break;
                        }
                    }
                }
             }
             break;
          }
       }
       generatefiller(story,200);
       displaynewsstory(story,storyx_s,storyx_e,y);
       if(!newscherrybusted)newscherrybusted=1;
       if(ns.type==NEWSSTORY_CCS_SITE||
          ns.type==NEWSSTORY_CCS_KILLED_SITE)newscherrybusted=2;
       break;
    }
    case NEWSSTORY_MASSACRE:
    {
       int y=3;
       if(ns.page==1)
       {
          y=21;
          if(ns.crime[0]==SIEGE_CCS)
          {
             displaycenterednewsfont("CCS MASSACRE",5);
          }
          else if(!liberalguardian)
          {
             displaycenterednewsfont("MYSTERIOUS",5);
             displaycenterednewsfont("MASSACRE",13);
          }
          else
          {
             displaycenterednewsfont("CONSERVATIVE",5);
             displaycenterednewsfont("MASSACRE",13);
          }
       }
       strcpy(story,lcityname);
       strcat(story," - ");
       if(ns.crime[1]>2)
       {
          char num[20];
          itoa(ns.crime[1],num,10);
          strcat(story,num);
          strcat(story," bodies were "); //Gruesome pile, large pile.
       }
       else if(ns.crime[1]>1)strcat(story," Two bodies were ");
       else strcat(story," A body was ");
       strcat(story," found in the ");
       strcat(story,location[ns.loc]->name);
       strcat(story," yesterday.");
       if(!liberalguardian)
       {
          strcat(story,"  According to a spokesperson for ");
          strcat(story,"the police department, the matter is under investigation as a homicide.");
          strcat(story,"&r");
          strcat(story,"  Privately, sources in the department confide that there aren't any leads.  ");
          strcat(story,"According to one person familiar with the case, \"");
       }
       else
       {
          strcat(story,"  The police have opened an investigation into the massacre, but seem ");
          strcat(story,"unwilling to pursue the case with any serious effort.");
          strcat(story,"&r");
          strcat(story,"  The Liberal Crime Squad has claimed that the ");
          if(ns.crime[1]>1)strcat(story,"victims were members ");
          else strcat(story,"victim was a member ");
          strcat(story,"of the LCS targeted simply due to their political beliefs.  ");
          strcat(story,"According to an LCS spokesperson, \"");
       }
       switch(ns.crime[0])
       {
          case SIEGE_CIA:
             if(!liberalguardian)
             {
                if(ns.crime[1]>1)strcat(story,"The bodies had no faces or ");
                else strcat(story,"The body had no face or ");
                strcat(story,"fingerprints.  Like, it was all smooth.  ");
                if(law[LAW_FREESPEECH]==-2)strcat(story,"[Craziest] thing I've ever seen");
                else if(law[LAW_FREESPEECH]==2)strcat(story,"Damnedest thing I've ever seen");
                else strcat(story,"D*mnd*st thing I've ever seen");
             }
             else
             {
                strcat(story,"We have strong evidence that this was an extra-judicial slaughter ");
                strcat(story,"carried out by the Central Intelligence Agency in retaliation for our ");
                strcat(story,"previous actions to uncover human rights abuses and corruption in the ");
                strcat(story,"intelligence community");
             }
             break;
          case SIEGE_POLICE:
          case SIEGE_HICKS:
             if(!liberalguardian)
             {
                strcat(story,"Burned...  stabbed with, maybe, pitchforks.  There may have ");
                strcat(story,"been bite marks.  Nothing recognizable left.  Complete carnage.");
             }
             else
             {
                strcat(story,"We have reason to believe that this brutal massacre was ");
                strcat(story,"inspired by the Conservative media's brainwashing propaganda");
             }
             break;
          case SIEGE_CORPORATE:
             if(!liberalguardian)
             {
                strcat(story,"It was execution style.  Professional.  We've got nothing");
             }
             else
             {
                strcat(story,"This massacre has the signature mark of a group of mercenaries ");
                strcat(story,"known to work with several corporations we've had confrontations ");
                strcat(story,"with in the past.  *When* the police can't figure this one out, they're ");
                strcat(story,"just covering it up");
             }
             break;
          case SIEGE_CCS:
             if(!liberalguardian)
             {
                strcat(story,"Look, it was a Conservative Crime Squad hit, that's all we know, ");
                strcat(story,"no names, no faces, not even where it happened really");
             }
             else
             {
                strcat(story,"This is the doing of the Conservative Crime Squad butchers.  ");
                strcat(story,"They have to be stopped before they kill again");
             }
             break;
          case SIEGE_FIREMEN:
             if(!liberalguardian)
             {
                if(ns.crime[1]>1)strcat(story,"The recovered bodies were ");
                else strcat(story,"The recovered body was ");
                strcat(story,"burned unrecognizable.  ");
                strcat(story,"Scorch marks throughout the site indicate that this was no accident; ");
                strcat(story,"we are working closely with the Fire Department to track down the arsonist.  ");
                strcat(story,"Fortunately, firemen were able to respond before the fire could spread to other buildings");
             }
             else
             {
                if(ns.crime[1]>1)strcat(story,"The murdered were reporters ");
                else strcat(story,"The murdered was a reporter ");
                strcat(story,"working for this very paper. ");
                strcat(story,"This is clearly the work of conservative butchers enforcing the prohibition on a free press");
             }
       }
       strcat(story,".\"  ");
       strcat(story,"&r");
       generatefiller(story,200);
       displaynewsstory(story,storyx_s,storyx_e,y);
       break;
    }
    case NEWSSTORY_KIDNAPREPORT:
    {
       int y=2;
       if(ns.page==1)
       {
          y=21;
          if(liberalguardian)
          {
             displaycenterednewsfont("LCS DENIES",5);
             displaycenterednewsfont("KIDNAPPING",13);break;
          }
          else
          {
             switch(ns.cr->type)
             {
                case CREATURE_CORPORATE_CEO:
                   displaycenterednewsfont("CEO",5);
                   displaycenterednewsfont("KIDNAPPED",13);break;
                case CREATURE_RADIOPERSONALITY:
                   displaycenterednewsfont("RADIO HOST",5);
                   displaycenterednewsfont("KIDNAPPED",13);break;
                case CREATURE_NEWSANCHOR:
                   displaycenterednewsfont("NEWS ANCHOR",5);
                   displaycenterednewsfont("KIDNAPPED",13);break;
                case CREATURE_SCIENTIST_EMINENT:
                   displaycenterednewsfont("SCIENTIST",5);
                   displaycenterednewsfont("KIDNAPPED",13);break;
                case CREATURE_JUDGE_CONSERVATIVE:
                   displaycenterednewsfont("JUDGE",5);
                   displaycenterednewsfont("KIDNAPPED",13);break;
                case CREATURE_COP:
                case CREATURE_GANGUNIT:
                case CREATURE_DEATHSQUAD:
                   displaycenterednewsfont("COP",5);
                   displaycenterednewsfont("KIDNAPPED",13);break;
                default:
                   displaycenterednewsfont("SOMEONE",5);
                   displaycenterednewsfont("KIDNAPPED",13);break;
             }
          }
       }
       strcpy(story,lcityname);
       strcat(story," - The disappearance of ");
       strcat(story,ns.cr->propername);
       strcat(story," is now considered a kidnapping, ");
       strcat(story,"according to a police spokesperson.");
       strcat(story,"&r");
       char dstr[200],dstr2[200];
       strcat(story,"  ");
       firstname(dstr);lastname(dstr2);
       strcat(story,dstr);
       strcat(story," ");
       strcat(story,dstr2);
       strcat(story,", speaking on behalf of the police department, stated ");
       strcat(story,"\"We now believe that ");
       strcat(story,ns.cr->propername);
       strcat(story," was taken ");
       char num[20];
       itoa(ns.cr->joindays-1,num,10);
       strcat(story,num);
       strcat(story," days ago, by a person or persons as yet undetermined.  ");
       strcat(story,"We have several leads and are confident that we will ");
       strcat(story,"bring ");
       strcat(story,ns.cr->propername);
       strcat(story," back home and bring the kidnappers to justice.  ");
       strcat(story,"As the investigation is ongoing, I cannot be more specific at this time.  ");
       strcat(story,"To the citizens, please contact the department if you have any additional information.");
       strcat(story,"\"");
       strcat(story,"&r");
       strcat(story,"  According to sources, ");
       strcat(story,ns.cr->propername);
       strcat(story,"'s last known location was the ");
       strcat(story,location[ns.cr->worklocation]->name);
       strcat(story,".  Police were seen searching the surrounding area yesterday.");
       strcat(story,"&r");
       generatefiller(story,200);
       displaynewsstory(story,storyx_s,storyx_e,y);
       break;
    }
 }
 int c;
 do
 {
    refresh();
    c=getch();
    translategetch(c);
 }while(c!=27&&c!=10&&c!=32);

}

/* news - graphics */ void loadgraphics(void) {

 int picnum,dimx,dimy;
 int numbytes;
 FILE *h;
 h=LCSOpenFile("largecap.cpc", "rb", LCSIO_PRE_ART);
 if(h!=NULL)
 {
    numbytes=fread(&picnum,sizeof(int),1,h);
    numbytes=fread(&dimx,sizeof(int),1,h);
    numbytes=fread(&dimy,sizeof(int),1,h);
    for(int p=0;p<picnum;p++)
    {
       for(int x=0;x<dimx;x++)
       {
          for(int y=0;y<dimy;y++)
          {
             numbytes=fread(&bigletters[p][x][y][0],sizeof(char),4,h);
          }
       }
    }
    LCSCloseFile(h);
 }
 h=LCSOpenFile("newstops.cpc", "rb", LCSIO_PRE_ART);
 if(h!=NULL)
 {
    numbytes=fread(&picnum,sizeof(int),1,h);
    numbytes=fread(&dimx,sizeof(int),1,h);
    numbytes=fread(&dimy,sizeof(int),1,h);
    for(int p=0;p<picnum;p++)
    {
       for(int x=0;x<dimx;x++)
       {
          for(int y=0;y<dimy;y++)
          {
             numbytes=fread(&newstops[p][x][y][0],sizeof(char),4,h);
          }
       }
    }
    LCSCloseFile(h);
 }
h=LCSOpenFile("newspic.cpc", "rb", LCSIO_PRE_ART);
 if(h!=NULL)
 {
    numbytes=fread(&picnum,sizeof(int),1,h);
    numbytes=fread(&dimx,sizeof(int),1,h);
    numbytes=fread(&dimy,sizeof(int),1,h);
    for(int p=0;p<picnum;p++)
    {
       for(int x=0;x<dimx;x++)
       {
          for(int y=0;y<dimy;y++)
          {
             numbytes=fread(&newspic[p][x][y][0],sizeof(char),4,h);
          }
       }
    }
    LCSCloseFile(h);
 }

}

void displaycenterednewsfont(char *str,int y) {

 int width=-1;
 int s;
 for(s=0;s<strlen(str);s++)
 {
    if(str[s]>='A'&&str[s]<='Z')width+=6;
    else if(str[s]=='\'')width+=4;
    else width+=3;
 }
 int x=39-width/2;
 for(s=0;s<strlen(str);s++)
 {
    if((str[s]>='A'&&str[s]<='Z')||str[s]=='\'')
    {
       int p;
       if(str[s]>='A'&&str[s]<='Z')p=str[s]-'A';
       else p=26;
       int lim=6;
       if(str[s]=='\'')lim=4;
       if(s==strlen(str)-1)lim--;
       for(int x2=0;x2<lim;x2++)
       {
          for(int y2=0;y2<7;y2++)
          {
             move(y+y2,x+x2);

#ifdef NCURSES

             // Clean the square first.
             set_color(COLOR_BLACK, COLOR_BLACK, 0);
             addch(CH_FULL_BLOCK);
             move(y+y2,x+x2);

#endif

             if(x2==5)
             {
                set_color(COLOR_WHITE,COLOR_BLACK,0);
                addch(CH_FULL_BLOCK);
             }
             else
             {
                set_color(bigletters[p][x2][y2][1],
                   bigletters[p][x2][y2][2],
                   bigletters[p][x2][y2][3]);
                addch(translateGraphicsChar(bigletters[p][x2][y2][0]));
             }
          }
       }
       x+=lim;
    }
    else
    {
       set_color(COLOR_WHITE,COLOR_BLACK,0);
       for(int x2=0;x2<3;x2++)
       {
          for(int y2=0;y2<7;y2++)
          {
             move(y+y2,x+x2);
             addch(CH_FULL_BLOCK);
          }
       }
       x+=3;
    }
 }

}

void displaycenteredsmallnews(char *str,int y) {

 int x=39-((strlen(str)-1)>>1);
 move(y,x);
 set_color(COLOR_BLACK,COLOR_WHITE,0);
 addstr(str);

}

void displaynewspicture(int p,int y) {

 for(int x2=0;x2<78;x2++)
 {
    for(int y2=0;y2<15;y2++)
    {
       if(y+y2>24)break;
       move(y+y2,1+x2);
       set_color(newspic[p][x2][y2][1],
          newspic[p][x2][y2][2],
          newspic[p][x2][y2][3]);
       addch(translateGraphicsChar(newspic[p][x2][y2][0]));
    }
 }

}

/* news - draws the specified block of text to the screen */ void displaynewsstory(char *story,short *storyx_s,short *storyx_e,int y) {

 vector<char *> text;
 vector<char> centered;
 int totalwidth;
 int curpos=0;
 int addstrcur;
 char addstring[500];
 char content;
 int cury=y;
 int length;
 char endparagraph=0;
 char iscentered=0;
 int i=0;
 while(curpos<strlen(story)&&cury<25)
 {
    content=0;
    totalwidth=0;
    addstrcur=0;
    length=storyx_e[cury]-storyx_s[cury]+1;
    if(length==0){cury++;if(endparagraph>0)endparagraph--;continue;}
    for(i=curpos;i<strlen(story);i++)
    {
       if(story[i]=='&'&&story[i+1]!='&')
       {
          i++;
          if(story[i]=='c')
          {
             iscentered=1;
          }
          if(story[i]=='r')
          {
             content=1;
             i++;
             addstrcur+=1;
             addstring[addstrcur-1]=' ';
             addstring[addstrcur]='\x0';
             endparagraph=1;
             break;
          }
       }
       else
       {
          content=1;
          if(story[i]=='&')i++;
          addstring[addstrcur]=story[i];
          addstring[addstrcur+1]='\x0';
          totalwidth++;
          if(totalwidth>length)
          {
             while(story[i]!=' '){i--;addstrcur--;}
             while(story[i]==' ')i++;
             addstring[addstrcur]='\x0';
             break;
          }
          addstrcur++;
       }
    }
    if(i==strlen(story))addstring[addstrcur]='\x0';
    if(strlen(addstring)>0&&content)
    {
       int words=0;
       char silent=1;
       vector<int> spacex;
       for(int s2=0;s2<strlen(addstring);s2++)
       {
          if(addstring[s2]==' ')
          {
             if(!silent)
             {
                silent=1;
                words++;
                spacex.push_back(s2);
             }
          }
          else
          {
             if(silent)
             {
                words++;
                silent=0;
             }
          }
       }
       while(!endparagraph&&words>1&&strlen(addstring)<length&&!iscentered)
       {
          int csp=spacex[LCSrandom(spacex.size())];
          for(int x=0;x<spacex.size();x++)
          {
             if(spacex[x]>csp)spacex[x]++;
          }
          int l=strlen(addstring);
          for(int s=l+1;s>csp;s--)
          {
             addstring[s]=addstring[s-1];
          }
       }
       char *news=new char[strlen(addstring)+1];
       strcpy(news,addstring);
       text.push_back(news);
       centered.push_back(iscentered);
       cury++;
       if(endparagraph>0)
       {
          endparagraph--;
          iscentered=0;
       }
    }
    curpos=i;
 }
 set_color(COLOR_BLACK,COLOR_WHITE,0);
 for(int t=0;t<text.size();t++)
 {
    if(y+t>=25)break;
    if(centered[t])
    {
       move(y+t,((storyx_s[y+t]+storyx_e[y+t])>>1)-((strlen(text[t])-1)>>1));
    }
    else move(y+t,storyx_s[y+t]);
    addstr(text[t]);
    delete[] text[t];
 }
 text.clear();

}

/* news - make some filler junk */ void generatefiller(char *story,int amount) { TODO: Use text from filler.cpp char str[80]; strcat(story,“&r”); cityname(str); strcat(story,str); strcat(story,“ - ”); int par=0; while(amount>0) { par++; for(int i=0;i<LCSrandom(10)+3;i++)strcat(story,“~”); if(amount>1)strcat(story,“ ”); if(par>=50&&!LCSrandom(5)&&amount>20) { par=0; strcat(story,“&r”); strcat(story,“ ”); } amount–; } strcat(story,“&r”); } /* news - major newspaper reporting on lcs and other topics */ void majornewspaper(char &clearformess,char canseethings) { int i; int n=0; int writers=0; for(i=0;i<pool.size();i++) { if(pool[i]→alive&&pool[i]→activity.type==ACTIVITY_WRITE_GUARDIAN) { if(pool[i]→location!=-1&& location[pool[i]→location]→compound_walls & COMPOUND_PRINTINGPRESS) { pool[i]→train(SKILL_WRITING,LCSrandom(3)); Experience gain

          writers+=pool[i]->skill_roll(SKILL_WRITING); // Record the writer on this topic
          criminalize(*pool[i],LAWFLAG_SPEECH); // Record possibly illegal speech activity
       }
       else pool[i]->activity.type=ACTIVITY_NONE;
    }
 }
 //Conservative Crime Squad Strikes!
 if(endgamestate<ENDGAME_CCS_DEFEATED && LCSrandom(30)<endgamestate && canseethings)
 {
    newsstoryst *ns=new newsstoryst;
    // 10% chance of CCS squad wipe
    if(LCSrandom(10))ns->type=NEWSSTORY_CCS_SITE;
    else ns->type=NEWSSTORY_CCS_KILLED_SITE;
    // 20% chance of rampage
    ns->positive=LCSrandom(5);
    if(ns->positive)ns->positive=1;
    do
    {
       ns->loc=LCSrandom(location.size());
    } while(location[ns->loc]->renting!=-1);
    newsstory.push_back(ns);
 }
 //SET UP MAJOR EVENTS
 if(!LCSrandom(60))
 {
    newsstoryst *ns=new newsstoryst;
    ns->type=NEWSSTORY_MAJOREVENT;
    do
    {
       ns->view=LCSrandom(VIEWNUM-3);
       ns->positive=LCSrandom(2);
       // Skip issues that we have no news stories for
       if(ns->view==VIEW_IMMIGRATION)continue;
       if(ns->view==VIEW_DRUGS)continue;
       if(ns->view==VIEW_MILITARY)continue;
       if(ns->view==VIEW_CIVILRIGHTS)continue;
       if(ns->view==VIEW_TORTURE)continue;
       if(ns->view==VIEW_GUNCONTROL)continue;
       //if(ns->view==VIEW_POLITICALVIOLENCE)continue;
       //NO ABORTION
       if(ns->view==VIEW_WOMEN&&ns->positive&&law[LAW_ABORTION]==-2)continue;
       //NO PARTIAL BIRTH ABORTION
       if(ns->view==VIEW_WOMEN&&!ns->positive&&law[LAW_ABORTION]<2)continue;
       //NO DEATH PENALTY
       if(ns->view==VIEW_DEATHPENALTY&&law[LAW_DEATHPENALTY]==2)continue;
       //NO NUCLEAR POWER
       if(ns->view==VIEW_NUCLEARPOWER&&ns->positive&&law[LAW_NUCLEARPOWER]==2)continue;
       //NO ANIMAL RESEARCH
       if(ns->view==VIEW_ANIMALRESEARCH&&law[LAW_ANIMALRESEARCH]==2)continue;
       //NO BAD COPS
       if(ns->view==VIEW_POLICEBEHAVIOR&&ns->positive&&law[LAW_POLICEBEHAVIOR]==2)continue;
       //NO PRIVACY VIOLATIONS
       if(ns->view==VIEW_INTELLIGENCE&&ns->positive&&law[LAW_PRIVACY]==2)continue;
       //NO SWEATSHOPS
       if(ns->view==VIEW_SWEATSHOPS&&ns->positive&&law[LAW_LABOR]==2)continue;
       //NO POLLUTION
       if(ns->view==VIEW_POLLUTION&&ns->positive&&law[LAW_POLLUTION]>=1)continue;
       //NO ENRONS
       if(ns->view==VIEW_CORPORATECULTURE&&ns->positive&&law[LAW_CORPORATE]==2)continue;
       //NO CEOS
       if(ns->view==VIEW_CEOSALARY&&ns->positive&&law[LAW_CORPORATE]==2)continue;
       //NO FREEDOM OF SPEECH
       if(ns->view==VIEW_AMRADIO&&!ns->positive&&law[LAW_FREESPEECH]==-2)continue;
       break;
    }while(1);
    newsstory.push_back(ns);
    if(ns->positive)change_public_opinion(ns->view,20,0);
    else change_public_opinion(ns->view,-20,0);
    public_interest[ns->view]+=50;
 }
 //DELETE STORIES THAT HAVE NO CONTENT
 for(n=newsstory.size()-1;n>=0;n--)
 {
    if(newsstory[n]->type==NEWSSTORY_SQUAD_SITE&&
       newsstory[n]->crime.size()==0) // Low content ignored
    {
       delete newsstory[n];
       newsstory.erase(newsstory.begin() + n);
       continue;
    }
    if(newsstory[n]->type==NEWSSTORY_CARTHEFT ||
       newsstory[n]->type==NEWSSTORY_NUDITYARREST||
       newsstory[n]->type==NEWSSTORY_WANTEDARREST||
       newsstory[n]->type==NEWSSTORY_DRUGARREST||
       newsstory[n]->type==NEWSSTORY_GRAFFITIARREST||
       newsstory[n]->type==NEWSSTORY_BURIALARREST)
    {
       char conf=0;
       for(int c=0;c<newsstory[n]->crime.size();c++)
       {
          if(newsstory[n]->crime[c]==CRIME_KILLEDSOMEBODY)
          {
             conf=1;
             break;
          }
       }
       if(!conf)
       {
          delete newsstory[n];
          newsstory.erase(newsstory.begin() + n);
          continue;
       }
    }
    // Suppress news about sieges that aren't police actions
    if((newsstory[n]->type==NEWSSTORY_SQUAD_ESCAPED||
       newsstory[n]->type==NEWSSTORY_SQUAD_FLEDATTACK||
       newsstory[n]->type==NEWSSTORY_SQUAD_DEFENDED||
       newsstory[n]->type==NEWSSTORY_SQUAD_BROKESIEGE||
       newsstory[n]->type==NEWSSTORY_SQUAD_KILLED_SIEGEATTACK||
       newsstory[n]->type==NEWSSTORY_SQUAD_KILLED_SIEGEESCAPE)&&
       newsstory[n]->siegetype!=SIEGE_POLICE)
    {
       delete newsstory[n];
       newsstory.erase(newsstory.begin() + n);
       continue;
    }
 }
 clearformess=1;
 //DO TELEVISION AND OTHER NON-NEWS STORIES, THEN DELETE THEM
 if(canseethings&&newsstory.size())
 {
    char del;
    for(int n=newsstory.size()-1;n>=0;n--)
    {
       del=0;
       if(newsstory[n]->type==NEWSSTORY_MAJOREVENT)
       {
          if(newsstory[n]->positive)
          {
             switch(newsstory[n]->view)
             {
                case VIEW_POLICEBEHAVIOR:
                   movie.loadmovie("art\\lacops.cmv");
                   movie.playmovie(0,0);
                   nodelay(stdscr,FALSE);
                   set_color(COLOR_WHITE,COLOR_BLACK,1);
                   move(19,13);
                   addstr("/----------------------------------------------------\\");
                   move(20,13);
                   addstr("|     The  police  have  beaten  a  black  man  in    |");
                   move(21,13);
                   addstr("|   Los Angeles again.  This time, the incident is    |");
                   move(22,13);
                   addstr("|   taped by  a passerby  and saturates  the news.    |");
                   move(23,13);
                   addstr("\\----------------------------------------------------/");
                   refresh();
                   getch();
                   del=1;
                   break;
                case VIEW_CABLENEWS:
                {
                   char str[80];
                   strcpy(str,"Tonight on a Cable News channel: ");
                   switch(LCSrandom(5))
                   {
                      case 0:strcat(str,"Cross");break;
                      case 1:strcat(str,"Hard");break;
                      case 2:strcat(str,"Lightning");break;
                      case 3:strcat(str,"Washington");break;
                      case 4:strcat(str,"Capital");break;
                   }
                   switch(LCSrandom(5))
                   {
                      case 0:strcat(str," Fire");break;
                      case 1:strcat(str," Ball");break;
                      case 2:strcat(str," Talk");break;
                      case 3:strcat(str," Insider");break;
                      case 4:strcat(str," Gang");break;
                   }
                   strcat(str," with ");
                   char bname[80];
                   generate_name(bname);
                   strcat(str,bname);
                   erase();
                   set_color(COLOR_WHITE,COLOR_BLACK,1);
                   move(0,39-((strlen(str)-1)>>1));
                   addstr(str);
                   move(16,20);
                   addstr(bname);
                   move(17,20);
                   addstr("Washington D.C.");
                   move(16,41);
                   generate_name(bname);
                   addstr(bname);
                   move(17,41);
                   switch(LCSrandom(3))
                   {
                      case 0:addstr("Eugene, OR");break;
                      case 1:addstr("San Francisco, CA");break;
                      case 2:addstr("Cambridge, MA");break;
                   }
                   movie.loadmovie("art\\newscast.cmv");
                   movie.playmovie(1,1);
                   nodelay(stdscr,FALSE);
                   set_color(COLOR_WHITE,COLOR_BLACK,1);
                   move(19,13);
                   addstr("/----------------------------------------------------\\");
                   move(20,13);
                   addstr("|     A  Cable  News  anchor  accidentally  let  a   |");
                   move(21,13);
                   addstr("|   bright Liberal guest  finish a sentence.  Many   |");
                   move(22,13);
                   addstr("|   viewers  across  the  nation  were  listening.   |");
                   move(23,13);
                   addstr("\\----------------------------------------------------/");
                   refresh();
                   getch();
                   del=1;
                   break;
                }
             }
          }
          else
          {
             switch(newsstory[n]->view)
             {
                case VIEW_CEOSALARY:
                   movie.loadmovie("art\\glamshow.cmv");
                   movie.playmovie(0,0);
                   nodelay(stdscr,FALSE);
                   set_color(COLOR_WHITE,COLOR_BLACK,1);
                   move(19,13);
                   addstr("/----------------------------------------------------\\");
                   move(20,13);
                   addstr("|     A new show glamorizing the lives of the rich   |");
                   move(21,13);
                   addstr("|   begins airing  this week.  With the nationwide   |");
                   move(22,13);
                   addstr("|   advertising  blitz, it's bound  to be popular.   |");
                   move(23,13);
                   addstr("\\----------------------------------------------------/");
                   refresh();
                   getch();
                   del=1;
                   break;
                case VIEW_CABLENEWS:
                   movie.loadmovie("art\\anchor.cmv");
                   movie.playmovie(0,0);
                   nodelay(stdscr,FALSE);
                   set_color(COLOR_WHITE,COLOR_BLACK,1);
                   move(19,13);
                   addstr("/----------------------------------------------------\\");
                   move(20,13);
                   addstr("|     A major Cable News channel has hired a slick   |");
                   move(21,13);
                   addstr("|   new anchor for one of  its news shows.  Guided   |");
                   move(22,13);
                   addstr("|   by impressive  advertising, America  tunes in.   |");
                   move(23,13);
                   addstr("\\----------------------------------------------------/");
                   refresh();
                   getch();
                   del=1;
                   break;
                case VIEW_WOMEN:
                   erase();
                   movie.loadmovie("art\\abort.cmv");
                   movie.playmovie(0,0);
                   nodelay(stdscr,FALSE);
                   set_color(COLOR_WHITE,COLOR_BLACK,1);
                   move(19,13);
                   addstr("/----------------------------------------------------\\");
                   move(20,13);
                   addstr("|     A  failed partial  birth abortion  goes on a   |");
                   move(21,13);
                   addstr("|   popular  afternoon  talk  show.    The  studio   |");
                   move(22,13);
                   addstr("|   audience and viewers nationwide feel its pain.   |");
                   move(23,13);
                   addstr("\\----------------------------------------------------/");
                   refresh();
                   getch();
                   del=1;
                   break;
             }
          }
       }
       if(del)
       {
          delete newsstory[n];
          newsstory.erase(newsstory.begin() + n);
       }
    }
 }
 //ASSIGN PAGE NUMBERS TO STORIES BASED ON THEIR PRIORITY
 if(newsstory.size())
 {
    for(n=newsstory.size()-1;n>=0;n--)
    {
       setpriority(*newsstory[n]);
       // Suppress squad actions that aren't worth a story
       if(newsstory[n]->type==NEWSSTORY_SQUAD_SITE &&
          ((newsstory[n]->priority<50 &&
          newsstory[n]->claimed==0)||
          newsstory[n]->priority<4))
       {
          delete newsstory[n];
          newsstory.erase(newsstory.begin() + n);
          continue;
       }
       newsstory[n]->page=-1;
    }
    char acted;
    int curpage=1;
    int curguardianpage=1;
    do
    {
       acted=0;
       // Sort the major newspapers
       int maxn=-1;
       int maxp=-1;
       for(n=0;n<newsstory.size();n++)
       {
          if(newsstory[n]->priority>maxp&&
             newsstory[n]->page==-1)
          {
             maxn=n;
             maxp=newsstory[n]->priority;
          }
       }
       if(maxn!=-1)
       {
          if(newsstory[maxn]->priority<30&&curpage==1)curpage=2;
          if(newsstory[maxn]->priority<25&&curpage<3)curpage=3+LCSrandom(2);
          if(newsstory[maxn]->priority<20&&curpage<5)curpage=5+LCSrandom(5);
          if(newsstory[maxn]->priority<15&&curpage<10)curpage=10+LCSrandom(10);
          if(newsstory[maxn]->priority<10&&curpage<20)curpage=20+LCSrandom(10);
          if(newsstory[maxn]->priority<5&&curpage<30)curpage=30+LCSrandom(20);
          newsstory[maxn]->page=curpage;
          newsstory[maxn]->guardianpage=curguardianpage;
          curpage++;
          curguardianpage++;
          acted=1;
       }
    }while(acted);
    //DISPLAY PAPER
    if(canseethings)
    {
       for(n=0;n<newsstory.size();n++)
       {
          bool liberalguardian=0;
          int header = -1;
          if(writers&&newsstory[n]->type!=NEWSSTORY_MAJOREVENT)
          {
             liberalguardian=1;
          }
          switch(newsstory[n]->type)
          {
             case NEWSSTORY_SQUAD_SITE:
             case NEWSSTORY_SQUAD_KILLED_SITE:
                switch(location[newsstory[n]->loc]->type)
                {
                   case SITE_LABORATORY_COSMETICS:
                      header=VIEW_ANIMALRESEARCH;
                      break;
                   case SITE_LABORATORY_GENETIC:
                      header=VIEW_GENETICS;
                      break;
                   case SITE_GOVERNMENT_POLICESTATION:
                      header=VIEW_POLICEBEHAVIOR;
                      break;
                   case SITE_GOVERNMENT_COURTHOUSE:
                      header=VIEW_JUSTICES;
                      break;
                   case SITE_GOVERNMENT_PRISON:
                      header=VIEW_DEATHPENALTY;
                      break;
                   case SITE_GOVERNMENT_INTELLIGENCEHQ:
                      header=VIEW_INTELLIGENCE;
                      break;
                   case SITE_INDUSTRY_SWEATSHOP:
                      header=VIEW_SWEATSHOPS;
                      break;
                   case SITE_INDUSTRY_POLLUTER:
                      header=VIEW_POLLUTION;
                      break;
                   case SITE_INDUSTRY_NUCLEAR:
                      header=VIEW_NUCLEARPOWER;
                      break;
                   case SITE_CORPORATE_HEADQUARTERS:
                      header=VIEW_CORPORATECULTURE;
                      break;
                   case SITE_CORPORATE_HOUSE:
                      header=VIEW_CEOSALARY;
                      break;
                   case SITE_MEDIA_AMRADIO:
                      header=VIEW_AMRADIO;
                      break;
                   case SITE_MEDIA_CABLENEWS:
                      header=VIEW_CABLENEWS;
                      break;
                   case SITE_RESIDENTIAL_APARTMENT_UPSCALE:
                   case SITE_BUSINESS_CIGARBAR:
                      header=VIEW_TAXES;
                      break;
                }
                break;
             case NEWSSTORY_SQUAD_ESCAPED:
             case NEWSSTORY_SQUAD_FLEDATTACK:
             case NEWSSTORY_SQUAD_DEFENDED:
             case NEWSSTORY_SQUAD_BROKESIEGE:
             case NEWSSTORY_SQUAD_KILLED_SIEGEATTACK:
             case NEWSSTORY_SQUAD_KILLED_SIEGEESCAPE:
                break;
          }
          if(liberalguardian)
          {
             if(newsstory[n]->type==NEWSSTORY_CCS_SITE||
                newsstory[n]->type==NEWSSTORY_CCS_KILLED_SITE)
                newsstory[n]->positive=0;
             displaystory(*newsstory[n],liberalguardian,header);
             if(newsstory[n]->positive)newsstory[n]->positive+=1;
          }
          else displaystory(*newsstory[n],0,-1);
       }
    }
 }
 
 for(int p=0;p<pool.size();p++)
 {
    //Letters to the editor
    if(pool[p]->activity.type==ACTIVITY_WRITE_LETTERS)
    {
       if(pool[p]->skill_check(SKILL_WRITING,DIFFICULTY_EASY))
          background_liberal_influence[randomissue()]+=5;
       pool[p]->train(SKILL_WRITING,LCSrandom(5)+1);
    }
    //Guardian Essays
    //Basically letters to the editor, but thrice as potent, and can backfire
    if(pool[p]->activity.type==ACTIVITY_WRITE_GUARDIAN)
    {
       if(pool[p]->skill_check(SKILL_WRITING,DIFFICULTY_EASY))
          background_liberal_influence[randomissue()]+=15;
       else
          background_liberal_influence[randomissue()]-=15;
       pool[p]->train(SKILL_WRITING,LCSrandom(5)+1);
    }
 }
 //CHANGE FOR SQUAD ACTS PUBLIC OPINION BASED ON PAGE NUMBERS
    //AND OVERALL POWER OF THE STORY
 int power;
 for(n=0;n<newsstory.size();n++)
 {
    if(newsstory[n]->type==NEWSSTORY_SQUAD_SITE||
       newsstory[n]->type==NEWSSTORY_SQUAD_ESCAPED||
       newsstory[n]->type==NEWSSTORY_SQUAD_FLEDATTACK||
       newsstory[n]->type==NEWSSTORY_SQUAD_DEFENDED||
       newsstory[n]->type==NEWSSTORY_SQUAD_BROKESIEGE||
       newsstory[n]->type==NEWSSTORY_SQUAD_KILLED_SIEGEATTACK||
       newsstory[n]->type==NEWSSTORY_SQUAD_KILLED_SIEGEESCAPE||
       newsstory[n]->type==NEWSSTORY_SQUAD_KILLED_SITE||
       newsstory[n]->type==NEWSSTORY_WANTEDARREST||
       newsstory[n]->type==NEWSSTORY_GRAFFITIARREST||
       newsstory[n]->type==NEWSSTORY_CCS_SITE||
       newsstory[n]->type==NEWSSTORY_CCS_KILLED_SITE)
    {
       power=newsstory[n]->priority;
       //PAGE BONUS
       if(newsstory[n]->page==1)power*=5;
       else if(newsstory[n]->page==2)power*=3;
       else if(newsstory[n]->page==3)power*=2;
       int maxpower;
       if(newsstory[n]->page==1)maxpower=100;
       else if(newsstory[n]->page<5)maxpower=100-10*newsstory[n]->page;
       else if(newsstory[n]->page<10)maxpower=40;
       else if(newsstory[n]->page<20)maxpower=20;
       else if(newsstory[n]->page<30)maxpower=10;
       else if(newsstory[n]->page<40)maxpower=5;
       else maxpower=1;
       // Five times effectiveness with the Liberal Guardian
       if(newsstory[n]->positive==2)power*=5;
       if(power>maxpower)power=maxpower;
       power/=10;
       power++;
       char colored=0;
       if(!(newsstory[n]->type==NEWSSTORY_CCS_SITE)&&
          !(newsstory[n]->type==NEWSSTORY_CCS_KILLED_SITE))
       {
          change_public_opinion(VIEW_LIBERALCRIMESQUAD,2+power);
          if(newsstory[n]->positive)
          {
             colored=1;
          }
          else power=-power;
          change_public_opinion(VIEW_LIBERALCRIMESQUADPOS,power);
       }
       if(newsstory[n]->type==NEWSSTORY_CCS_SITE||
          newsstory[n]->type==NEWSSTORY_CCS_KILLED_SITE)
       {
          if(newsstory[n]->positive)
          {
             colored=-1;
             power=-power;
          }
          
          change_public_opinion(VIEW_CONSERVATIVECRIMESQUAD,power,0);
       }
       change_public_opinion(VIEW_GUNCONTROL,abs(power)/10,0,abs(power)*10);
       if(newsstory[n]->loc != -1)
       {
          switch(location[newsstory[n]->loc]->type)
          {
          case SITE_LABORATORY_COSMETICS:
             change_public_opinion(VIEW_ANIMALRESEARCH,power,colored,power*10);
             change_public_opinion(VIEW_WOMEN,power,colored,power*10);
             break;
          case SITE_LABORATORY_GENETIC:
             change_public_opinion(VIEW_ANIMALRESEARCH,power,colored,power*10);
             change_public_opinion(VIEW_GENETICS,power,colored,power*10);
             break;
          case SITE_GOVERNMENT_POLICESTATION:
             change_public_opinion(VIEW_POLICEBEHAVIOR,power,colored,power*10);
             change_public_opinion(VIEW_DRUGS,power,colored,power*10);
             break;
          case SITE_GOVERNMENT_COURTHOUSE:
             change_public_opinion(VIEW_DEATHPENALTY,power,colored,power*10);
             change_public_opinion(VIEW_JUSTICES,power,colored,power*10);
             change_public_opinion(VIEW_FREESPEECH,power,colored,power*10);
             change_public_opinion(VIEW_GAY,power,colored,power*10);
             change_public_opinion(VIEW_WOMEN,power,colored,power*10);
             change_public_opinion(VIEW_CIVILRIGHTS,power,colored,power*10);
             break;
          case SITE_GOVERNMENT_PRISON:
             change_public_opinion(VIEW_DEATHPENALTY,power,colored,power*10);
             change_public_opinion(VIEW_DRUGS,power,colored,power*10);
             change_public_opinion(VIEW_TORTURE,power,colored,power*10);
             break;
          case SITE_GOVERNMENT_ARMYBASE:
             change_public_opinion(VIEW_TORTURE,power,colored,power*10);
             change_public_opinion(VIEW_MILITARY,power,colored,power*10);
             break;
          case SITE_GOVERNMENT_INTELLIGENCEHQ:
             change_public_opinion(VIEW_INTELLIGENCE,power,colored,power*10);
             change_public_opinion(VIEW_TORTURE,power,colored,power*10);
             break;
          case SITE_INDUSTRY_SWEATSHOP:
             change_public_opinion(VIEW_SWEATSHOPS,power,colored,power*10);
             change_public_opinion(VIEW_IMMIGRATION,power,colored,power*10);
             break;
          case SITE_INDUSTRY_POLLUTER:
             change_public_opinion(VIEW_SWEATSHOPS,power,colored,power*10);
             change_public_opinion(VIEW_POLLUTION,power,colored,power*10);
             break;
          case SITE_INDUSTRY_NUCLEAR:
             change_public_opinion(VIEW_NUCLEARPOWER,power,colored,power*10);
             break;
          case SITE_CORPORATE_HEADQUARTERS:
             change_public_opinion(VIEW_TAXES,power,colored,power*10);
             change_public_opinion(VIEW_CORPORATECULTURE,power,colored,power*10);
             change_public_opinion(VIEW_WOMEN,power,colored,power*10);
             break;
          case SITE_CORPORATE_HOUSE:
             change_public_opinion(VIEW_TAXES,power,colored,power*10);
             change_public_opinion(VIEW_CEOSALARY,power,colored,power*10);
             break;
          case SITE_MEDIA_AMRADIO:
             change_public_opinion(VIEW_AMRADIO,power,colored,power*10);
             change_public_opinion(VIEW_FREESPEECH,power,colored,power*10);
             change_public_opinion(VIEW_GAY,power,colored,power*10);
             change_public_opinion(VIEW_WOMEN,power,colored,power*10);
             change_public_opinion(VIEW_CIVILRIGHTS,power,colored,power*10);
             break;
          case SITE_MEDIA_CABLENEWS:
             change_public_opinion(VIEW_CABLENEWS,power,colored,power*10);
             change_public_opinion(VIEW_FREESPEECH,power,colored,power*10);
             change_public_opinion(VIEW_GAY,power,colored,power*10);
             change_public_opinion(VIEW_WOMEN,power,colored,power*10);
             change_public_opinion(VIEW_CIVILRIGHTS,power,colored,power*10);
             break;
          case SITE_RESIDENTIAL_APARTMENT_UPSCALE:
             change_public_opinion(VIEW_TAXES,power,colored,power*10);
             change_public_opinion(VIEW_CEOSALARY,power,colored,power*10);
             change_public_opinion(VIEW_GUNCONTROL,power,colored,power*10);
             break;
          case SITE_BUSINESS_CIGARBAR:
             change_public_opinion(VIEW_TAXES,power,colored,power*10);
             change_public_opinion(VIEW_CEOSALARY,power,colored,power*10);
             change_public_opinion(VIEW_WOMEN,power,colored,power*10);
             break;
          }
       }
    }
 }
 //DELETE STORIES
 for(n=0;n<newsstory.size();n++)delete newsstory[n];
 newsstory.clear();

} </code>

Influencing the Media

Letter to the Editor:

If you pass an EASY writing check, you influence background liberal influence on a random topic by 5. Either way, you gain LCSRandom(5)+1 writing.

Guardian Essays:

If you pass an EASY writing check, you influence background liberal influence on a random topic by 15. If you fail, you influence them by -15. (Oops.)

[choose topics?]

News Stories involving particular locations tend to influence public opinion directly relevant to their power. Gun control tends to shift by power/10 towards abs(powerx10), other issues shift by power towards powerx10).

Seiges and You

[Places are less likely to be raided based on the number of sleepers, their effectiveness, what they're up to, and their job.]

Police Seiges

For each location:

If the police station is closed, heat drops to 95% of normal each day; move to next location.

If a seige is already in progress, move to next location.

If this area is not under the LCS's control, move to next location.

If just beseiged (time until located = -2), set to -1. Otherwise:

If time until located > 0:

      If there is no front business or if LCSRandom(2) > 0:
         Time until located --;
         If Location[Heat] >300:
      Hunt Speed = Heat/150;
      While Hunt Speed > 0 and TimeLocated > 1:
	Subtract 1 from huntspeed and timelocated.

Or in other words, crimes / 10, modified by heat protectino, is what gets added to the location's heat.

If LCSRandom(3000) < location[heat] AND timeuntillocated is not already set, it's time to plan a seige.

If LCSRandom[LocationHeat] > 100 location[seigeescalation]++;

If LCSRandom[LocationHeat] > 250 location[seigeescalation]++;

If LCSRandom[LocationHeat] > 500 location[seigeescalation]++;

if location[seigeescalation]>3 then set it to 3.

Police Raids: Stage zero is SWAT, stage 1 is national guard, stage 2 adds tanks, stage 3 adds jet bombers.

location[timeuntillocate] is set to 14 + LCSRandom(15).

Sleepers in the police department may provide a tipoff if their infiltration% > LCSRandom(50). If you receive a warning, you will be alerted of escalation levels 2 and 3 (tanks/national guard, and bombers, respectively.)

When time runs out on police seige:

location[timeuntillocate] = -2;

location[heat] = 0; They're already there, it's not going to get worse. If there are people at the compound, then you are alerted that a seige has begun (and what level of escalation it is at), as well as what charges they're there to arrest for. If nobody is there, then they raid the unoccupied safehouse, remove corpses, rescue hostages, and confiscate all vehicles and loot on the premises. ===== Corporation Seiges ===== If a seige isn't already planned, and a location has heat, and LCSRandom[600] = 0 and you've offended the corporations and the number of people present at this location is above zero, plan a corporate raid for LCSRandom(3)+1 days from now. [Maybe increase frequency based on degree of offensiveness in the future.] CEO Sleepers will always tip you off to this; otherwise, there's a 1 in 5 chance you'll receive an anonymous tip off to this. [Maybe add mercenaries, corporate managers, CEO house employees as possibly helpful? use effectiveness%?) Else if a raid IS planned and countdown > 0, subtract 1 from the countdown. Else if countdown is zero and people are there, begin the raid! location[timeuntilcorps] = -1 Corporate mercenaries are raiding the Love Shack! offended.corps = 0; seigetype = Corporate; underattack = 1; lights_off = 0; cameras_off = 0; If nobody is at the location when the count expires, the raid is silently called off. ===== CCS Seiges ===== If the CCS is currently active, they may launch seiges if the game is currently in the CCS Seige endgame state or if the target location has compound walls and a printing press. If this is so… If location has heat and timeuntilccs=-1 and a seige is not currently in progress and LCSRandom[60] = 0 and number of people present > 0, set countdown to LCSRandom(3)+1 days from now. CCS sleepers will give a warning if this is about to happen. Otherwise if a raid is planned and countdown > 0, subtract 1 from the countdown. Else if countdown is zero and people are present, let the CCS raid begin. If LCSRandom[5] = 0 and the compound doesn't have walls or tanktraps, the first attack is a carbombing: The truck plows into the building and explodes! Everyone in the location has a 50% chance of being hurt in the blast (losing blood equal to LCSRandom[101 - (Juice/10)]); report is issued for those killed or wounded in the blast. Otherwise “CCS members pour out of the truck and shoot in the front doors!” seigetype = CCS; underattack = 1; lights_off = 0; cameras_off = 0; If nobody is there when the countdown expires, silently cancel foiled raids (timeuntilccs = -1). ===== CIA Seiges ===== If you've offended the CIA and LCSRandom(300) = 0 and location is occupied, has heat, and is not under seige, and timeuntilcia = -1, then it's time to plan a seige for LCSRandom(3)+1 days from now. Agents -may- warn of this if infiltration % > LCSRandom(100). Otherwise if a raid is planned and countdown > 0, subtract 1 from the countdown. Else if countdown is zero and people are present, let the CIA raid begin. Unmarked black vans are surrounding the location! Through some form of high technology, they've managed to shut off the lights and the cameras! Lights and cameras are both taken out at the start of the raid. Damn EMP pulses. seigetype = CIA; underattack = 1; lights_off = 1; cameras_off = 1; If nobody is there when the countdown expires, silently cancel foiled raids (timeuntilcia = -1). The CIA does -not- 'forget' offended status. ===== Redneck Rampage (Cable News) ===== If an area is not under seige at the moment and AM Radio attitude ⇐ 35 and LSCRandom[600] = 0 and there are people present, an impromptu angry mob of rednecks attacks immediately! Masses dissatisfied with your lack of respect for AM Radio are storming the Love Shack! seigetype = HICKS; underattack = 1; lights_off = 0; cameras_off = 0; offended_amradio = 0; ===== Redneck Rampage (AM Radio) ===== If an area is not under seige at the moment and AM Radio attitude ⇐ 35 and LSCRandom[600] = 0 and there are people present, an impromptu angry mob of rednecks attacks immediately! Masses dissatisfied with your lack of respect for Cable News are storming the Love Shack! seigetype = HICKS; underattack = 1; lights_off = 0; cameras_off = 0; offended_cablenews = 0; ===== Firemen Raid ===== If FreeSpeech=-2 and timeuntilfiremen=-1 and not under seige and firemen are offended and people present and a printing press is present and LCSRandom[90] = 0, time to plan a fire drill LCSRandom(3)+1 days from now. If LCSRandom[sleeperfiremencount+1]>0 || !LCSrandom[10] then alert to the firemen planning on burning the place down. Screaming fire engines pull up to the Love Shack! Armored firemen swarm out, pilot lights burning. You hear a screeching voice over the sound of fire engine sirens: Surrender yourselves! Unacceptable Speech has occurred at this location. Come quietly and you will not be harmed. seigetype = FIREMEN; underattack = 1; lights_off = 0; cameras_off = 0; offended_firemen = 0; If the place is abandoned, the Firemen will rescue hostages, recover corpses, destroy all loot, dismantle printing presses and destroy business front materials. ====== Seiges in Progress ====== Under normal circumstances, you eat fresh food bought from a store. Under seige, you eat food from your supplies. Count number of liberals per location. All liberals not at the homeless shelter require money to feed, at a cost of $3 x number eating x 1)

1)
10 - FoodPrep) / 10) + 0.5). Minimum price per location per day is $3 (and what are you, Jesus?) ledger.subtract_funds(price,EXPENSE_FOOD); I like how this is formatted. Anyhow. If you can afford to buy food, you buy food. If not, your people eat from the stored food. If there isn't enough there, they move to the homeless shelter for handouts and abandon the location. Probably should cost some rep, too. Damn liberal hippies. ====== Vehicle Heat ====== Vehicles have a series of stats that make them identifiable, namely: Type Make Model Year Color License Damage VIN The VIN, or vehicle identification number, is essentially a fingerprint that matches everything else together. If a cop gets to check a vehicle's VIN and something doesn't match up, they can attempt to impound the car. Likewise, a vehicle used in crimes can be immediately seized and the driver arrested on probable cause. Fortunately, usually a cop only gets to look at the license plate and other identifying factors. Still, if there's an all-points bulletin for a blue Ford Corolla, license plate MD5-LOL, then cops will attempt to stop that vehicle. If that vehicle is connected to violent crimes, they may attempt to ambush the driver or other such interesting whathaveyou. ====== Criminal Activity and Criminal Pursuit ====== Depending on the extent of your criminal activity, cops may not be inclined to just 'let it go' if you escape immediate capture or refuse to come along quietly. In particular, cops tend to join a pursuit - or add helicopter support - for particularly long chases, and may have the sense to disable or tow vehicles they recognize as stolen, including getaway cars. They also tend to call for backup when they're in trouble. ====== Robbery and You: A Primer to Crimes Against The Man ====== Due to their longstanding indoctrination by Conservative elements, most people may strongly disapprove of your attempts to separate corporation strongholds and outposts from their finances. As such, bear in mind that armed robbery is unlikely to be taken well, even by proponents of political violence, an as such claiming responsibility for these actions is generally unadvised. The easiest and best places to rob, in most cases, are low-end outposts such as convenience stores, dollar stores, and fast food franchises - ubiquitous, heavily frequented, and usually stocked with cash and other supplies that a rebel cause can take advantage of. In general, the more money and value a place has, the more readily defended it is - banks and jewelry stores have some of the highest possible payouts, and some of the most dangerous security forces. If you're low on funds, you might try stealing from the Man instead of outright robbing him – however, it's hard to remain unidentified and still remain unsuspicious, especially in modern stores with their surveillance cameras, and many criminals have been caught for worse crimes because they made the mistake of being arrested for shoplifting. Targets: Food - Stealing food from a supermarket or convenience store might seem petty, but revolutions do have to eat. Cash Register - Most stores have cash registers; being able to operate them or open them by force means easy access to the money inside. ATM - ATMs are full of money, but are notoriously hard to steal or break into. It's almost as if someone thought you might want to take what's inside. Safe - Safes are usually locked for good reason, such as because they store cash envelopes for the store's registers that haven't been deposited yet or valuable documents. Medicines - Aside from the fact that drugs are intrinsically valuable, medicines are important if you need to heal your people and can't or won't take them to a hospital. Fresh Food: Stays good for a a couple of weeks if properly refrigerated. Canned Goods / Boxed Food: Stays good for months if stored in a safe place. Frozen Food: Stays good for a long time if properly frozen and stored. Safe: If you can't open a safe, you can choose to continue trying, or you can try to haul it around with you. Larger safes are h-e-a-v-y, so you need someone with a lot of strength to get away with this… or a pallet. ATM: Likewise, ATMs can't really be hauled around, but you can put them on a pallet or other conveyable object that -can- be hauled in order to steal them appropriately. ====== Game Toggles ====== ===== Conservative Start ===== [ ] Even Footing: You start out with a mostly moderate agenda that is only leaning Conservatively. [ ] Lambs to the Slaughter: You start out with a strongly Conservative agenda with many entrenched political and corporate obstructions. [ ] At the Brink: The United States has effectively become a corporate police state with almost no individual freedoms. ===== Supernatural Mode ===== [ ] Off: There are no supernatural elements in the world, and prayers are no substitute for automatic weapons. [ ] Moderate: The masquerade of the supernatural exists, and figuring out what is real and how to get it on your side is a key element towards protecting liberty and freedom. [ ] Extreme: All supernatural elements are present and actively fighting in the war of Liberators versus Guardians. ===== Political Violence ===== [ ] Exonerated: Collateral damage? So what? It's all in the name of freedom! [ ] Approved: The ends justify the means, as long as you only use it on appropriate targets. [ ] Unapproved: What you call freedom fighting, others will call terrorism. ===== General Morality ===== [ ] Green versus Red: Morality is easily defined as 'us versus them'. [ ] Shades of Gray: Morality is a sliding scale on which all actions may be judged. [ ] Full Color: Morality is a matter of public approval, and even those on your side may disagree with you in many ways. ===== The Guardians ===== [ ] Nonexistent: Not appearing in this game. [ ] Competitive: Your opposition group in all ways, and hindered by the same restrictions you are. [ ] Legitimate: Given legal powers and authority to carry out their goals without interference. ===== Other Factions ===== [ ] Nonexistent: You don't have to worry about negotiating with or fighting against anyone but the Law and the Guardians. [ ] Simplified: Other factions exist that may have to be dealt with to ensure victory. [ ] Complicated: A diverse assortment of factions works to further their own agendas. ===== Victory Conditions ===== [ ] Restore Liberty: All laws must be restored to Liberal or higher state. [ ] Freedom from Tyranny: All Conservative groups must be completely destroyed and all laws must be restored to Liberal or higher state. [ ] Total Liberation: Eliminate all Conservative groups and destroy the Conservative Party. ===== Public Opinion ===== [ ] Nationwide: Your deeds in town influence opinions for the entire country. [ ] Statewide: Your deeds in town strongly influence only the state you are in. [ ] Citywide: Your deeds in town strongly influence only the city you are in. ===== Confidence ===== Your ability to take risks in the name of the cause, and your overall experience with the agenda of your organization. You gain Confidence by committing liberal acts, and can lose it through degrading or embarrassing incidents. Confidence is a powerful thing, as having sufficient Confidence can bolster you in the face of despair, inspire you to rally forth in the name of Liberation, and protect you from misfortunes that might befall less hardcore Liberators! ===== The Guardian Menace ===== Whereas the Liberators seek freedom from oppression, the Guardians seek to eliminate freedoms and bring American values down while harming anyone who gets in the way. In short, they are your arch-rivals. Over time, the Guardian organization becomes more powerful, and its activities will generally influence the public opinion to its benefit. If the Guardians start out with legal powers, they are truly dangerous and can get away with nearly anything in the pursuit of their goals. On the other hand, they are also more easily identifiable and tend to work in uniform. Like you, the Guardians have compounds, safe houses, and drop points that they operate from. Discovering them will require kidnapping and interrogating Guardians, seducing them into talking, or talking them into seeing the rightness of your cause, any of which may get them to reveal places of interest. Guardians cultivate more locations over time, and cannot be banished from an area until all compounds and safehouses are destroyed at once. If forced out of an area, they will retreat to any area where public opinion has not been influenced (ie, if the game is in Statewide mode, they will still function in other states, and if the game is in Citywide mode, they will still operate in other cities.) As a result, games in Statewide and Citywide mode will have less individual locations to target per area, but far more individual locations total. Worse, if given the opportunity, the Guardians may attempt to re-establish control in areas that they have lost - so be ever vigilant! ==== The Guardians: Supernatural Mode ==== In Supernatural Mode, the Guardians have more secrets under those uniforms - we'll leave that for you to discover, except to note that they may not suffer from weapons in the same way that most people do, or even in the same way from game to game. ===== Other Unsavory Organizations ===== While the Guardians are the largest Conservative threat to humanity, they are by no means the only organization that may become an obstruction on the path to freedom. The street gangs of an area are one example of a potentially threatening organization - while they may not strictly work with the Conservative agenda, they may still try to steal your goods for their own gain and wreck your businesses just to keep you out of their turf! Like the Guardians, these unsavory organizations can be purged from the vicinity by successfully destroying all compounds and safehouses under the organization's control; however, making an enemy of these organizations opens you up to attacks and may ostracize potential allies in some cases. It's never easy… ===== Other Helpful Organizations ===== While you may feel sometimes as if you are alone in the fight against the Conservative machine, there are others out there fighting for specific causes or overall freedoms, and they may have a presence in your area as well; this means more targets for your enemies, and perhaps some breathing room for you. Also, forming an alliance with these other organizations can have other potential benefits such as organizing massive strikes on a target. Bloody Massacre: Shooting up a lot of people is likely to get some negative press in most circumstances. Maybe do a check by body count and by mess? and by how many people were seriously hurt / crawled away/etc. “A scene of horrific violence took place at the Snyder Apartments yesterday. Members of the terrorist group known as the Liberators raided the apartment complex armed with high-caliber military weaponry and body armor, and opened fire at law enforcement officers and innocent civilians alike, as well as burglarizing residences, starting fires, committing multiple acts of unlawful entry, destroying property, committing acts of vandalism, and taking multiple hostages. A total of 165 people were pronounced dead on the scene, including 76 members of law enforcement, and 65 people are currently hospitalized in critical condition. Police estimate that approximately $14 million in damages were inflicted during the attack, and apartment property manager Sindel Real Estate has closed Snyder Apartments until further notice due to the extent of the damage. A high-speed pursuit was initiated between law enforcement and three cars suspected to belong to the terrorists immediately after the attack; however, police have not released further information at this time. ==== Medical States ==== The American Hospital Association advises doctors to use the following one-word conditions in describing a patient's condition to those inquiring, including the media. === Undetermined === Patient is awaiting physician and/or assessment. === Good === Vital signs are stable and within normal limits. Patient is conscious and comfortable. Indicators are excellent. (In game stats, this would put their Wounds status at above 75%). === Fair === Vital signs are stable and within normal limits. Patient is conscious, but may be uncomfortable. Indicators are favorable. (In game stats, this would put their Wounds status at above 50%). === Serious === Vital signs may be unstable and not within normal limits. Patient is acutely ill. Indicators are questionable. (In game stats, this would put their Wounds status at above 25%). === Critical === Vital signs are unstable and not within normal limits. Patient may be unconscious. Indicators are unfavorable. (In game stats, this would put their Wounds status at 25% or worse). ===== Medical Treatment ===== ==== Free Street Clinic ==== Areas that have a Free Street Clinic provide a basic level of medical care to those who do not have health insurance. The people who work here are all volunteers, and there are no questions asked about the treatment needed by patients. The effective skill of the clinic varies, though it can increase over time with sufficient experience, and if a Liberator is volunteering at the clinic who has higher effective skill, the clinic will benefit from it. Members of other unlawful groups may go to the clinic to recover after serious injury. The Free Street Clinic also accepts donations; this influences how many people can stay there at one time, and to some extent the degree of medical care performed. ==== University Hospital ==== Areas that have a University will have a University Hospital that provides low-cost daily treatment to those who need it. Costs of service are roughly $100 per day, but the average skill is higher and they usually have ample supplies thanks to college or philanthropy grants. University Hospitals have a low risk of patient arrest in most cases, though that risk rises based on heat (even liberal arts majors will turn in someone who blew up the Empire State Building, if only for the reward money.) ==== General Hospital ==== Most cities have at least one large hospital that provides a full range of professional medical services and treatment, but care is fairly expensive - roughly $500 per day. Those picked up in an ambulance are brought here, and those brought here under police custody stay under police custody during their recovery. Due to the frequent police presence, there is also a chance that those with active warrants will be caught if they come here under an assumed name, and those that don't conceal their identity will almost certainly be caught. ===== Identification, Please ===== Most areas use a state driver's license (or nondriver's identification card), PASS ID, or other compulsary ID system as the major form of identification for an individual. Of course, as most rebels don't really want their true identities divulged, they usually use alternate identification forged for the purpose. ==== Social Security Number ==== Social security numbers aren't easy to get hold of, which is why many ID fraudsters look for people who have died who were born about the same time they were, and use their name, identity, and social security number. Another way to get a social security number is to hack the Social Security database. This is one part of building a complete false identity. ==== Birth Certificate ==== As above, the best way to get a false identification is to get a birth certificate for someone born about the same time you were, ideally someone who isn't alive to complain that you're not them. On the other hand, accessing the Department of Vital Statistics can give you the access to create - or delete - whatever records you wish, as part of building a complete false identity. ==== County ID Card ==== Obtaining most county IDs are essentially a matter of proving you receive mail at a particular address and have some other way of backing up who you are - with that and a small fee, you can have your own legitimate county ID card, which is often as good as a state ID. ==== State ID Card ==== A slightly more officious document that counts as an identifying document. You may be able to 'legally' acquire one once you have your documents in order, or you can just print one up with the right equipment and skills. You'll need to access the Department of Motor Vehicles to register an ID so that it shows up properly in the system, though. ==== State Driver's License ==== The same basic idea as the above, except it also gives you the legal right to drive certain types of vehicles. Usually includes specific certifications (trucker's license, motorcycle license, etc) for vehicles beyond the standard car. ==== Passport Card ==== This is backed by the United States Department of the State and serves as a form of federal identification card for domestic purposes. As such, legally acquiring it requires a legal identity. Illegally printing one up is easier, though the RFID chips they include mean you'd better modify the Department of State database if you want to make a false card. ==== Security Cards ==== High-security areas ideally require an additional level of security - whether it be a simple photo ID to show to a guard, or a complex electronic keycard to insert into a door's card reader - to keep out unwanted intruders. Getting in to these areas may require sleeper assistance, or the access of a hostage. ===== Subjected to Guardian Re-Education Proceedings ===== “Marie has broken under the pressure and submitted to Guardian indoctrination!” Guardians will attempt to capture people and force them to convert to the cause, often through torture, beatings, and interrogations. Sufficient physical and mental abuse may turn your people to the enemy, which can be very bad for your prolonged health as well as your morale. On the other hand, having a sleeper Guardian can be VERY useful, if you can locate your lost follower and re-establish contact. ===== Create False Identities ===== Build your own sleepers by getting loyal members to attempt to get jobs at the target location. If they are skilled at the area they're trying to get a job for – and not wanted criminals, or are very good at Disguise – they may be able to get in. Your Computers and Forgery experts can help establish an identity, and good Persuasion, Acting, and Disguise can sustain a role. ===== Mechanics Can Scrap Your Ride For Parts ===== Need to replace a sedan's passenger door because your last one got shot in a gunfight and you need to lose the cops? Not a problem if you have a good mechanic who's been collecting car parts for you. ==== Replacables ==== Driver Side Front Panel Driver Side Front Door Driver Side Rear Door Driver Side Front Window Driver Side Rear Window Driver Side Rear Panel Driver Side Mirror Driver Side Headlight Driver Side Brakelight Driver Side Front Turn Signal Driver Side Rear Turn Signal Driver Side Windshield Wipers Passenger Side Front Panel Passenger Side Front Door Passenger Side Rear Door Passenger Side Front Window Passenger Side Rear Window Passenger Side Rear Panel Passenger Side Mirror Passenger Side Headlight Passenger Side Brakelight Passenger Side Front Turn Signal Passenger Side Rear Turn Signal Passenger Side Windshield Wipers Front Bumper Rear Bumper Hood Trunk Door Front Windshield Rear Windshield Battery Air Conditioner Front Axle Rear Axle Alternator Accelerator Air Bag Antenna Air Flow Sensor Brakes Camshaft Carburator ===== The Agency ===== The Central Intelligence Agency, or CIA, or just the Agency, operates a variety of Agency outlets around the country ostensibly for the purposes of analyzing intelligence data gathered on our enemies around the world. On the other hand, the Agency has always been perfectly willing to spy on American citizens as potential enemies of the state or for their own benefit whenever it suits them. ===== The FBI ===== The Federal Bureau of Investigations is called into play when you begin operating in multiple states, or begin committing crimes that a federal court might want to have you tried for. These guys are the best and the brightest when it comes to evidence collection, crime-solving, and hunting down fugitives from justice. They also investigate other unusual activities on occasion on request of state or city jurisdictions. ===== The National Guard ===== The first line of defense against anything from invading Russians to homegrown terrorists to Godzilla, the National Guard is essentially an active Army regiment that can be called to action to fight at any time, and WILL be called into action if your activities are such to warrant it. (Say, by establishing a military compound in the middle of Georgia.) The National Guard is a state-run enterprise, which means even if you somehow manage to wipe out the New Jersey National Guard, there's plenty of other states ready to fight back against the green menace. ===== The United States Army ===== The United States Army is one of the finest in the world, with excellent training, weapons, and equipment that are constantly Rebeing refined and updated to meet the challenges of the modern battlefield. With the war on terror a daily reality, the Army is not unfamiliar with combat against fringe groups, and may well take up arms against you if things escalate far enough. The Army coordinates infantry, crew-served artillery, and vehicular support, with air support via the Apache Longbow heavy attack helicopter, Black Hawk tactical transport helicopter, Chinook troop transport helicopter, and Kiowa Warrior light attack helicopter. ===== The United States Air Force ===== ===== The United States Marines ===== ===== The United States Coast Guard ===== ===== The United States Navy ===== ===== Department of Homeland Security ===== Car Parts: http://www.partshotlines.com/ http://www.epa.gov/oms/tcldata.htm ====== Sentencing ====== Sentencing for crimes depends on a number of factors, including the severity of any crimes committed, the past criminal history of the offender, and circumstances related to the crimes that might make them more or less severe. Committable Offenses: First Degree Murder (Premeditated Homicide): Base Offense Level 43 Second Degree Murder (Unplanned Homicide): Base Offense Level 38 Voluntary Manslaughter (Crime of Passion): Base Offense Level 29 Involuntary Manslaughter Due to Negligent Conduct: Base Offense Level 12 Involuntary Manslaughter Due to Reckless Conduct: Base Offense Level 18 Involuntary Manslaughter Due to Reckless Operation of a Mode of Transport: Base Offense Level 22 Conspiracy / Solicitation to Commit Murder: Base Offense Level 33 Conspiracy / Solicitation to Commit Murder for Money: Base Offense Level 37 Premeditated Assault with Intent to Commit Murder / Attempted Murder: Base Offense Level 33 (+2 for Serious Injury Assault with Intent to Commit Murder / Attempted Murder: Base Offense Level 27 confirm marco dropoff next wednesday 5th at 7 am http://www.anchortex.com/404.html Versus an Official Victim: +2 Points Versus ===== Political Viewpoints =====
Viewpoint Pro Law Anti Law General Description
Gay Rights The subject of equal rights for gay, lesbian, bisexual, and transgendered individuals.
Death Penalty The subject of whether the death penalty is appropriate, and to what extent it is used.
Taxes The subject of taxes, and who should be paying them.
Nuclear Power The subject of nuclear power and whether it is considered safe and used commonly.
Animal Research
Police Behavior
Torture
Intelligence
Free Speech
Genetics
Liberal Justices
Gun Control
Sweatshops
Pollution
Corporate Culture
CEO Salary
Women
Abortion
Civil Rights
Drugs
Immigration
Military
AM Radio How popular are AM radio channels when it comes to obtaining information on the issues?
Cable News How popular are cable news channels when it comes to obtaining information on the issues?
Political Violence What degree of political violence is considered 'justified' to enact political change?
Liberators - Awareness What percentage of the population is aware of the Liberators as a political movement.
Liberators - Respect What percentage of those aware of the Liberators consider them a positive movement.
Liberators - Legitimacy How legally empowered the Liberators are to enact change. 100% means they are completely above the law.
Guardians - Awareness What percentage of the population is aware of the Guardians as a political movement.
Guardians - Respect What percentage of those aware of the Liberators consider them a positive movement.
Guardians - Legitimacy How legally empowered the Guardians are to maintain control. 100% means they are completely above the law.
====== Seiges in Progress ====== Under normal circumstances, you eat fresh food bought from a store. Under seige, you eat food from your supplies. Count number of liberals per location. All liberals not at the homeless shelter require money to feed, at a cost of $3 x number eating x ((10 - FoodPrep) / 10) + 0.5). Minimum price per location per day is $3 (and what are you, Jesus?) ledger.subtract_funds(price,EXPENSE_FOOD); I like how this is formatted. Anyhow. If you can afford to buy food, you buy food. If not, your people eat from the stored food. If there isn't enough there, they move to the homeless shelter for handouts and abandon the location. Probably should cost some rep, too. Damn liberal hippies. However, if a location is under siege, nobody can leave… So, first off: If there are no people detected at the target location, then siege finalizes - any corpses on scene are recovered, any hostages are rescued, and any loot and vehicles are taken (towed, destroyed, stolen, etc.) If there are people at the target location, they eat one day's worth of supplies - if there are no supplies in storage, then they are marked as starving (and lose LCSRandom(5)+1 blood). The game tracks the number of kidnapped people at this location and the number of criminals at this location. If the location has been fortified, fortified variable equals 5. If LCSRandom[5] = 0, an attack is launched. Bad things that can happen: If LCSRandom[10] = 0, the police cut external power. If there is a backup generator on hand, you start the lights up again; otherwise, the lights are now off. If the place is not fortified and LCSRandom[5] = 0, the police attempt to take someone out with a sniper. Pick a random victim; if LCSRandom[50] > Juice, the sniper takes them out, otherwise they get lucky. If the seige has bombers and LCSRandom[3] = 0, the compound gets air bombed. If LCSRandom[3] = 0, the generator gets taken out. If LCSRandom[2] = 0, pick a random victim; if LCSRandom[100] > Juice, they are killed in the bombing, otherwise they get lucky. If the seige has escalated to level 3 or higher and the compound has tank traps, then if LCSRandom[15] = 0, the army removes the tank traps. If nothing bad has happened and LCSRandom[20] = 0, an elite reporter gets into the compound to conduct an interview. Choose the person with the best Intelligence, Heart, Persuasion, and Juice total to give an interview. Segment power equals attribroll[Intelligence] + attribroll[Heart] + skillroll[Persuasion] + skillroll[Persuasion] + skillroll[Persuasion]. Interview outcomes: < 15: Interviewer cancels the interview and uses the material for a piece on idiotic liberals. < 20: Interviewer gets bored to sleep. < 25: Interviewee stutters the whole time. < 30: Interviewee gives a poor representation. < 45: Interviewee gives a good representation. < 60: Interviewee gives a very good representation; even the conservative news talks about it.
60: Interviewer gets a Pulitzer; major impact on America.
Public awareness of the LCS increases by 20; respect for them increases (segment - 25)/2 to a max of segment + 50; opinion on five random topics changes by (segmentpower -25)/2. In short, a bad interview can hurt, but a good interview can do wonders. ===== Seiges: Giving Up ===== Giving up a location is essentially surrendering to whatever mercies exist amongst the beseiging forces, if any. This may or may not be wise. Here's what happens. First, your group loses control of the location. Second, all items and equipment are taken, including carried gear, and all vehicles are confiscated. Third, if the seige is by police or firemen:
  • If any illegal aliens are amongst the pool, everyone is charged with hiring illegal aliens.
  • If any kidnap victims are amongst the pool, everyone is charged with kidnapping (and if the victim was a radio personality, AM Radio is offended, and if the victim was a News Anchor, Cable News is offended.)
  • If the siege was by firemen, then if a printing press is on the compound, everyone is charged with unacceptable speech.
  • Anyone marked as criminal is arrested and taken to the police station unless they are also marked missing and conservative.
  • Anyone marked as kidnap victims that is not arrested is rehabilitated and freed (and thus removed from the game).
  • If you have over $10000 and are beseiged by law enforcement, law enforcement confiscates $1000 + LCSRandom [ LCSRandom[current funds - 10000] + 1 ] in funds.
  • If the siegers are firemen, the printing press is destroyed.
  • If the siegers are police, the compound is dismantled entirely.
  • If there is a business front, materials relating to it are seized.
  • If the siege is by firemen, this ends the firemen-offended flag.
  • Anyone tending to a kidnap victim that was freed is no longer tending to them.
  • Anyone arrested goes to the police station; anyone else goes to the homeless shelter.
  • [If we make it so that equipped gear is removed, seeing as there's no code in the original for armor, we should probably dress people in normal clothes, and run a law check for whether what they were carrying was illegal - any excuse to lock 'em up.]
Otherwise, well, you've just signed their death warrant. May throw in a Juice-based chance of sneaking off or escaping, but it'd be low…
  • Anyone left in the base is executed.
  • If the CCS was conducting the siege, they now own the territory.
  • The resulting news story discusses the massacre.
  • [Destroy random equipment on site as well?]
===== Seiges: Who Eats? ===== For the purpose of counting the number eating at a site:
  • You have to be there. (Duh.)
  • You have to be alive. (Also duh.)
  • You have to not be a conservative. (Prisoners tend to get fed scraps.) [May revise this - better treatment may mean better cooperation.]
  • You have to not be a sleeper. Sleeper agents eat on the Conservatives' dime, not yours.
  • Otherwise, you're eating at the revolution's expense.
===== Seiges: Fighting Them Off ===== In order to successfully break a siege, you typically have to fight off or escape from the people besieging the place. Choosing to fight them automatically qualifies as resisting arrest if you are fighting the police, as does attempting to flee. In police sieges, you have to clear out a large group outside of your compound; in other seiges, the invaders are throughout your compound and must be cleared out. (Furthermore, all of your gear is scattered throughout the compound.) Either way, your active party is automatically filled out to six members if none exist. ALSO, if you have more members, they will be following you and providing cover fire with any ranged weapons they possess, and will automatically replace any fallen members. You can choose to Reorganize in order to put your best people on the front lines. In either mode, kill all hostile forces in order to break the siege. If you choose to escape, you lose control of the location and anything left behind, and rebase to the homeless shelter; your compound is destroyed. If you won a police seige, they'll return in 4 + LCSRandom(4) days, and the seige escalates one level (and police heat increases by 1 if less than four.) If you escaped, everyone who escaped goes into hiding for LCSRandom(3)+2 days, you lose control of the location, all compound elements are removed, and the site is re-initialized. ====== Sleepers ====== ===== Effectiveness Levels ===== Infiltration ⇐ 10%: Green Infiltration ⇐ 20%: White Infiltration ⇐ 40%: White Infiltration ⇐ 60%: Yellow Infiltration ⇐ 80%: Magenta Infiltration > 80%: Red ===== Taking Undercover Action ===== Lay Low: The Sleeper will keep quiet and attempt to stay out of trouble. Advocate Liberalism: The Sleeper will promote the Liberal Agenda. Expand Sleeper Network: The Sleeper will attempt to recruit Sleeper underlings. Uncover Secrets: The Sleeper will attempt to uncover evidence of Conservative corruption and actively listen for information of value to the LCS. Embezzle Funds: The Sleeper will attempt to embezzle funds from the workplace for use in liberal activities. Steal Equipment: The Sleeper will attempt to steal equipment from the workplace for use in liberal activities. Join the Active LCS: The Sleeper will quit their job and join the active LCS. ===== Squad Stance ===== Anonymous Action: The LCS will not claim responsibility for this act. If this is set, Graffiti option is unavailable, and the LCS will attempt to remain unidentified. Less likely to garner news attention. Claimed Action: The LCS will claim responsibility for this act after the fact. Graffiti is available, and the LCS will not go out of their way to identify themselves to passersby. Likely to garner news attention. Battle Colors: The LCS will be wearing green armbands of liberation during the exercise, and will not be concerned with stealth. This is a high-profile activity that is very likely to attract attention. ===== Dice Checks ===== The original system is loosely based on the EABA ('End All Be All') dice system. The system rolls a number of six sided dice equal to the ability score / 3. The top three dice are used, the rest are discarded. Any remainder creates a d3 for 1 or d5 for 2. This creates diminishing returns for high skill levels. It is not possible to roll above an 18, but is possible to roll below a 3 if you don't have at least 9 total skill. Skill checks typically use half relevant attribute value to a max of skill+3; certain specialized skills instead just use double the skill value. Adjusted skill total is skill value plus adjusted attribute value. Skills that cannot be used with zero skill (automatic failure): Psychology, Law, Security, Computers, Music, Art, Religion, Science, Business, Teaching, First Aid. Skills that depend on clothing: Stealth. (Value equals value x stealth value divided by 2.) Skills that are disguise dependent: Disguise, of course. If not disguised, disguise checks automatically fail. Otherwise: Partial Disguise (police uniforms when trespassing): » 1 [Bitwise right one level. 8 or 9 becomes 4, for instance. Is there a difference between this and (divide by 2 and round down)?] Bloody Clothing: » 1 Damaged Clothing: » 1 Carrying a corpse or hostage: » 2 ===== Learning Skills ===== Skill experience added is equal to a maximum of 1 vs (XP x Skill Cap / 6). If a level cap is instituted on training (train[skill,experience,upto]), then training is limited to UpTo or SkillCap. Otherwise, you can train up to halfway to the next level (leveling up a skill is part of the new-day code.) ===== Leveling Up A Skill ===== During the newday, check all skills to see if anything is ready to level up (currently 100 + (10xprev); if so, subtract 100 + (10 x prev level) from skill experience and add 1 to skill value. If this puts the skill at the skill cap, skill experience is set to zero. ===== Skill Experience Fraction ===== This is equal to current skill experience divided by (100 + (10 x current level). ===== Internal Variables ===== ==== Difficulty Levels ====
DIFFICULTY_AUTOMATIC    = 1,
 DIFFICULTY_VERYEASY     = 3,
 DIFFICULTY_EASY         = 5,
 DIFFICULTY_AVERAGE      = 7,
 DIFFICULTY_CHALLENGING  = 9,
 DIFFICULTY_HARD         = 11,
 DIFFICULTY_FORMIDABLE   = 13,
 DIFFICULTY_HEROIC       = 15,
 DIFFICULTY_SUPERHEROIC  = 17,
 DIFFICULTY_IMPOSSIBLE   = 19
==== Creature Flags ==== #define CREATUREFLAG_WHEELCHAIR BIT1 #define CREATUREFLAG_JUSTESCAPED BIT2 #define CREATUREFLAG_MISSING BIT3 #define CREATUREFLAG_KIDNAPPED BIT4 #define CREATUREFLAG_SLEEPER BIT5 #define CREATUREFLAG_ILLEGALALIEN BIT6 #define CREATUREFLAG_LOVESLAVE BIT7 #define CREATUREFLAG_BRAINWASHED BIT8 #define CREATUREFLAG_CONVERTED BIT9 ==== Name Length ==== #define CREATURE_NAMELEN 40 ==== Maximum Subordinates ==== #define MAXSUBORDINATES 30 ==== Gender Types ==== #define GENDER_NEUTRAL 0 #define GENDER_MALE 1 #define GENDER_FEMALE 2 #define GENDER_WHITEMALEPATRIARCH 3 ==== Attributes ==== ATTRIBUTE_STRENGTH,
 ATTRIBUTE_INTELLIGENCE,
 ATTRIBUTE_WISDOM,
 ATTRIBUTE_AGILITY,
 ATTRIBUTE_HEALTH,
 ATTRIBUTE_CHARISMA,
 ATTRIBUTE_HEART,
 ATTNUM
==== Skills ====
SKILL_HANDTOHAND,
 SKILL_KNIFE,
 SKILL_SWORD,
 SKILL_CLUB,
 SKILL_AXE,
 SKILL_THROWING,
 SKILL_PISTOL,
 SKILL_RIFLE,
 SKILL_SMG,
 SKILL_SHOTGUN,
 SKILL_PERSUASION,
 SKILL_PSYCHOLOGY,
 SKILL_LAW,
 SKILL_SECURITY,
 SKILL_DISGUISE,
 SKILL_COMPUTERS,
 SKILL_TAILORING,
 SKILL_DRIVING,
 SKILL_WRITING,
 SKILL_MUSIC,
 SKILL_ART,
 SKILL_RELIGION,
 SKILL_SCIENCE,
 SKILL_BUSINESS,
 SKILL_STEALTH,
 SKILL_TEACHING,
 SKILL_STREETSENSE,
 SKILL_SEDUCTION,
 SKILL_FIRSTAID,
 SKILL_DODGE,
 SKILL_HEAVYWEAPONS,
 SKILLNUM
==== Creature Types ====
 CREATURE_BOUNCER,
 CREATURE_SECURITYGUARD,
 CREATURE_SCIENTIST_LABTECH,
 CREATURE_SCIENTIST_EMINENT,
 CREATURE_CORPORATE_MANAGER,
 CREATURE_CORPORATE_CEO,
 CREATURE_WORKER_SERVANT,
 CREATURE_WORKER_JANITOR,
 CREATURE_WORKER_SWEATSHOP,
 CREATURE_WORKER_FACTORY_NONUNION,
 CREATURE_WORKER_FACTORY_CHILD,
 CREATURE_WORKER_SECRETARY,
 CREATURE_WORKER_FACTORY_UNION,
 CREATURE_LANDLORD,
 CREATURE_TEENAGER,
 CREATURE_COP,
 CREATURE_SWAT,
 CREATURE_DEATHSQUAD,
 CREATURE_FIREFIGHTER,
 CREATURE_EDUCATOR,
 CREATURE_GANGUNIT,
 CREATURE_JUDGE_LIBERAL,
 CREATURE_JUDGE_CONSERVATIVE,
 CREATURE_AGENT,
 CREATURE_RADIOPERSONALITY,
 CREATURE_NEWSANCHOR,
 CREATURE_GENETIC,
 CREATURE_GUARDDOG,
 CREATURE_PRISONER,
 CREATURE_JUROR,
 CREATURE_LAWYER,
 CREATURE_SEWERWORKER,
 CREATURE_COLLEGESTUDENT,
 CREATURE_MUSICIAN,
 CREATURE_MATHEMATICIAN,
 CREATURE_TEACHER,
 CREATURE_HSDROPOUT,
 CREATURE_BUM,
 CREATURE_GANGMEMBER,
 CREATURE_CRACKHEAD,
 CREATURE_PRIEST,
 CREATURE_ENGINEER,
 CREATURE_FASTFOODWORKER,
 CREATURE_TELEMARKETER,
 CREATURE_OFFICEWORKER,
 CREATURE_FOOTBALLCOACH,
 CREATURE_PROSTITUTE,
 CREATURE_MAILMAN,
 CREATURE_GARBAGEMAN,
 CREATURE_PLUMBER,
 CREATURE_CHEF,
 CREATURE_CONSTRUCTIONWORKER,
 CREATURE_AMATEURMAGICIAN,
 CREATURE_TANK,
 CREATURE_MERC,
 CREATURE_HICK,
 CREATURE_SOLDIER,
 CREATURE_VETERAN,
 CREATURE_HARDENED_VETERAN,
 CREATURE_PRISONGUARD,
 CREATURE_HIPPIE,
 CREATURE_CRITIC_ART,
 CREATURE_CRITIC_MUSIC,
 CREATURE_SOCIALITE,
 CREATURE_PROGRAMMER,
 CREATURE_RETIREE,
 CREATURE_PAINTER,
 CREATURE_SCULPTOR,
 CREATURE_AUTHOR,
 CREATURE_JOURNALIST,
 CREATURE_DANCER,
 CREATURE_PHOTOGRAPHER,
 CREATURE_CAMERAMAN,
 CREATURE_HAIRSTYLIST,
 CREATURE_FASHIONDESIGNER,
 CREATURE_CLERK,
 CREATURE_THIEF,
 CREATURE_ACTOR,
 CREATURE_YOGAINSTRUCTOR,
 CREATURE_MARTIALARTIST,
 CREATURE_ATHLETE,
 CREATURE_BIKER,
 CREATURE_TRUCKER,
 CREATURE_TAXIDRIVER,
 CREATURE_NUN,
 CREATURE_MUTANT,
 CREATURE_DOCTOR,
 CREATURE_NURSE,
 CREATURE_CCS_VIGILANTE,
 CREATURE_CCS_ARCHCONSERVATIVE,
 CREATURE_POLITICALACTIVIST,
 CREATURE_CCS_MOLOTOV,
 CREATURE_CCS_SNIPER,
 CREATURE_PSYCHOLOGIST,
 CREATURENUM
==== Body Parts ====
 BODYPART_HEAD,
 BODYPART_BODY,
 BODYPART_ARM_RIGHT,
 BODYPART_ARM_LEFT,
 BODYPART_LEG_RIGHT,
 BODYPART_LEG_LEFT,
 BODYPARTNUM
==== Special Injuries ====
SPECIALWOUND_TEETH,
 SPECIALWOUND_RIGHTEYE,
 SPECIALWOUND_LEFTEYE,
 SPECIALWOUND_NOSE,
 SPECIALWOUND_TONGUE,
 SPECIALWOUND_RIGHTLUNG,
 SPECIALWOUND_LEFTLUNG,
 SPECIALWOUND_HEART,
 SPECIALWOUND_LIVER,
 SPECIALWOUND_STOMACH,
 SPECIALWOUND_RIGHTKIDNEY,
 SPECIALWOUND_LEFTKIDNEY,
 SPECIALWOUND_SPLEEN,
 SPECIALWOUND_RIBS,
 SPECIALWOUND_NECK,
 SPECIALWOUND_UPPERSPINE,
 SPECIALWOUND_LOWERSPINE,
 SPECIALWOUNDNUM
==== Injury Definitions ==== #define RIBNUM 10 #define TOOTHNUM 32 #define WOUND_SHOT BIT1 #define WOUND_CUT BIT2 #define WOUND_BRUISED BIT3 #define WOUND_BURNED BIT4 #define WOUND_BLEEDING BIT5 #define WOUND_TORN BIT6 #define WOUND_NASTYOFF BIT7 #define WOUND_CLEANOFF BIT8 ==== Age Estimation System ====
void add_age(Creature& person)
{
   // Who knows how old the purple gorilla/tank/flaming bunny/dog is?
   if(person.animalgloss!=ANIMALGLOSS_NONE)
   {
      addstr(" (?)");
      return;
   }

   // For humans, estimate their age and gender
   addstr(" (");

   // Almost precise estimates of child and teen ages
   if(person.age<20)
   {
      char num[5];
      // Inaccuracy in estimating age should be the same every
      // time a character is queried. I'm using the day of the
      // month the character was born on to determine this.
      itoa(person.age+person.birthday_day%3-1,num,10);
      addstr(num);
      addstr("?");
   }
   // More rough estimates of everyone else
   else
   {
      if(person.age<30)
         addstr("20s");
      else if(person.age<40)
         addstr("30s");
      else if(person.age<50)
         addstr("40s");
      else if(person.age<60)
         addstr("50s");
      else if(person.age<70)
         addstr("60s");
      else if(person.age<80)
         addstr("70s");
      else if(person.age<90)
         addstr("80s");
      else
         addstr("Very Old");
   }

   // Assess their gender Liberally
   if(person.gender_liberal == GENDER_MALE)
      addstr(", Male");
   else if(person.gender_liberal == GENDER_FEMALE)
      addstr(", Female");
   else
      addstr(", Unknown");

   // Note if there's some conflict with Conservative society's perceptions
   if(person.gender_liberal != person.gender_conservative)
      addstr("?");

   addstr(")");
}
==== Naming System ====
/* rolls up a proper name for a creature */
void Creature::namecreature()
{
   if(!dontname)
   {
      generate_name(name, gender_liberal);
      strcpy(propername,name);
   }
}



/* fills a string with a proper name */
void generate_name(char *str, char gender)
{
   strcpy(str,"");

   char first[80];
   firstname(first, gender);
   strcat(str,first);

   strcat(str," ");

   char last[80];
   lastname(last);
   strcat(str,last);
}



/* gets a random first name */
void firstname(char *str, char gender)
{
   strcpy(str,"");

   int roll, nametable;

   // If we don't care if the name is male or female, pick one randomly
   // This ensures gender balance in the names chosen
   if(gender == GENDER_NEUTRAL)
      gender = LCSrandom(2) + 1;

   // For white male Arch-Conservative politicians
   if(gender == GENDER_WHITEMALEPATRIARCH)
   {
      roll = LCSrandom(50);
      nametable = GENDER_WHITEMALEPATRIARCH;
   }

   // Assign a name from the available names for each gender
   if(gender == GENDER_MALE)
   {
      // Roll on the number of gender-specific names,
      // plus the number of gender-neutral names
      roll = LCSrandom(347 + 34);
      // Decide whether to use a gender-specific name
      // or a gender-neutral name
      if(roll >= 34) { roll -= 34; nametable = GENDER_MALE; }
      else nametable = GENDER_NEUTRAL;
   }
   else if(gender == GENDER_FEMALE)
   {
      // (Same here, just use the number of female names instead)
      roll = LCSrandom(346 + 34);
      if(roll >= 34) { roll -= 34; nametable = GENDER_FEMALE; }
      else nametable = GENDER_NEUTRAL;
   }

   if(nametable == GENDER_MALE)
//{{{ Male
   {
      switch(roll)
      {
         //{{{ Male name table
         case 0:strcat(str,"Aaron");break;
         case 1:strcat(str,"Abraham");break;
         case 2:strcat(str,"Adam");break;
         case 3:strcat(str,"Adolph");break;
         case 4:strcat(str,"Adrian");break;
         case 5:strcat(str,"Al");break;
         case 6:strcat(str,"Alan");break;
         case 7:strcat(str,"Albert");break;
         case 8:strcat(str,"Alec");break;
         case 9:strcat(str,"Alejandro");break;
         case 10:strcat(str,"Alexander");break;
         case 11:strcat(str,"Alf");break;
         case 12:strcat(str,"Alfie");break;
         case 13:strcat(str,"Alfred");break;
         case 14:strcat(str,"Ali");break;
         case 15:strcat(str,"Allan");break;
         case 16:strcat(str,"Allen");break;
         case 17:strcat(str,"Andrew");break;
         case 18:strcat(str,"Andy");break;
         case 19:strcat(str,"Anthony");break;
         case 20:strcat(str,"Antonio");break;
         case 21:strcat(str,"Archie");break;
         case 22:strcat(str,"Arnold");break;
         case 23:strcat(str,"Art");break;
         case 24:strcat(str,"Arthur");break;
         case 25:strcat(str,"Avi");break;
         case 26:strcat(str,"Axel");break;
         case 27:strcat(str,"Barack");break;
         case 28:strcat(str,"Barney");break;
         case 29:strcat(str,"Barry");break;
         case 30:strcat(str,"Bartholomew");break;
         case 31:strcat(str,"Beau");break;
         case 32:strcat(str,"Ben");break;
         case 33:strcat(str,"Benjamin");break;
         case 34:strcat(str,"Bernard");break;
         case 35:strcat(str,"Bert");break;
         case 36:strcat(str,"Bill");break;
         case 37:strcat(str,"Billy Bob");break;
         case 38:strcat(str,"Blaire");break;
         case 39:strcat(str,"Blake");break;
         case 40:strcat(str,"Bob");break;
         case 41:strcat(str,"Bobby");break;
         case 42:strcat(str,"Boris");break;
         case 43:strcat(str,"Brad");break;
         case 44:strcat(str,"Bradley");break;
         case 45:strcat(str,"Brandon");break;
         case 46:strcat(str,"Brendon");break;
         case 47:strcat(str,"Brett");break;
         case 48:strcat(str,"Brian");break;
         case 49:strcat(str,"Bruce");break;
         case 50:strcat(str,"Bryan");break;
         case 51:strcat(str,"Calvin");break;
         case 52:strcat(str,"Carl");break;
         case 53:strcat(str,"Carlos");break;
         case 54:strcat(str,"Cesar");break;
         case 55:strcat(str,"Chad");break;
         case 56:strcat(str,"Charles");break;
         case 57:strcat(str,"Charlie");break;
         case 58:strcat(str,"Chester");break;
         case 59:strcat(str,"Chuck");break;
         case 60:strcat(str,"Chris");break;
         case 61:strcat(str,"Christian");break;
         case 62:strcat(str,"Christopher");break;
         case 63:strcat(str,"Claude");break;
         case 64:strcat(str,"Cliff");break;
         case 65:strcat(str,"Clifford");break;
         case 66:strcat(str,"Clyde");break;
         case 67:strcat(str,"Cody");break;
         case 68:strcat(str,"Colin");break;
         case 69:strcat(str,"Colton");break;
         case 70:strcat(str,"Conrad");break;
         case 71:strcat(str,"Cory");break;
         case 72:strcat(str,"Craig");break;
         case 73:strcat(str,"Dale");break;
         case 74:strcat(str,"Damon");break;
         case 75:strcat(str,"Dan");break;
         case 76:strcat(str,"Danforth");break;
         case 77:strcat(str,"Daniel");break;
         case 78:strcat(str,"Danny");break;
         case 79:strcat(str,"Dag");break;
         case 80:strcat(str,"Dave");break;
         case 81:strcat(str,"David");break;
         case 82:strcat(str,"Deepak");break;
         case 83:strcat(str,"Dennis");break;
         case 84:strcat(str,"Derak");break;
         case 85:strcat(str,"Derek");break;
         case 86:strcat(str,"Derrick");break;
         case 87:strcat(str,"Dexter");break;
         case 88:strcat(str,"Dick");break;
         case 89:strcat(str,"Diego");break;
         case 90:strcat(str,"Diwakar");break;
         case 91:strcat(str,"Dominic");break;
         case 92:strcat(str,"Donald");break;
         case 93:strcat(str,"Donovan");break;
         case 94:strcat(str,"Doug");break;
         case 95:strcat(str,"Douglas");break;
         case 96:strcat(str,"Dustin");break;
         case 97:strcat(str,"Dwayne");break;
         case 98:strcat(str,"Dwight");break;
         case 99:strcat(str,"Eathan");break;
         case 100:strcat(str,"Ed");break;
         case 101:strcat(str,"Eddie");break;
         case 102:strcat(str,"Edgar");break;
         case 103:strcat(str,"Eduardo");break;
         case 104:strcat(str,"Edward");break;
         case 105:strcat(str,"Edwin");break;
         case 106:strcat(str,"Eli");break;
         case 107:strcat(str,"Eliah");break;
         case 108:strcat(str,"Elliot");break;
         case 109:strcat(str,"Enrique");break;
         case 110:strcat(str,"Enzo");break;
         case 111:strcat(str,"Eric");break;
         case 112:strcat(str,"Erik");break;
         case 113:strcat(str,"Ernest");break;
         case 114:strcat(str,"Ernie");break;
         case 115:strcat(str,"Eugene");break;
         case 116:strcat(str,"Evan");break;
         case 117:strcat(str,"Fabio");break;
         case 118:strcat(str,"Lyle");break;
         case 119:strcat(str,"Felix");break;
         case 120:strcat(str,"Fernando");break;
         case 121:strcat(str,"Floyd");break;
         case 122:strcat(str,"Francesco");break;
         case 123:strcat(str,"Francis");break;
         case 124:strcat(str,"Frank");break;
         case 125:strcat(str,"Franklin");break;
         case 126:strcat(str,"Fred");break;
         case 127:strcat(str,"Frederick");break;
         case 128:strcat(str,"Gabriel");break;
         case 129:strcat(str,"Garett");break;
         case 130:strcat(str,"Garreth");break;
         case 131:strcat(str,"Gary");break;
         case 132:strcat(str,"George");break;
         case 133:strcat(str,"Gerald");break;
         case 134:strcat(str,"Glen");break;
         case 135:strcat(str,"Graham");break;
         case 136:strcat(str,"Greg");break;
         case 137:strcat(str,"Gregory");break;
         case 138:strcat(str,"Gus");break;
         case 139:strcat(str,"Guy");break;
         case 140:strcat(str,"Hank");break;
         case 141:strcat(str,"Hans");break;
         case 142:strcat(str,"Harold");break;
         case 143:strcat(str,"Harry");break;
         case 144:strcat(str,"Harvey");break;
         case 145:strcat(str,"Henry");break;
         case 146:strcat(str,"Herbert");break;
         case 147:strcat(str,"Homer");break;
         case 148:strcat(str,"Howard");break;
         case 149:strcat(str,"Howie");break;
         case 150:strcat(str,"Hugh");break;
         case 151:strcat(str,"Hugo");break;
         case 152:strcat(str,"Ian");break;
         case 153:strcat(str,"Isaac");break;
         case 154:strcat(str,"Issac");break;
         case 155:strcat(str,"Ivan");break;
         case 156:strcat(str,"Jack");break;
         case 157:strcat(str,"Jacob");break;
         case 158:strcat(str,"Jake");break;
         case 159:strcat(str,"Jamel");break;
         case 160:strcat(str,"James");break;
         case 161:strcat(str,"Jared");break;
         case 162:strcat(str,"Jason");break;
         case 163:strcat(str,"Javier");break;
         case 164:strcat(str,"Jay");break;
         case 165:strcat(str,"Jean");break;
         case 166:strcat(str,"Jeff");break;
         case 167:strcat(str,"Jeffrey");break;
         case 168:strcat(str,"Jeremy");break;
         case 169:strcat(str,"Jeroen");break;
         case 170:strcat(str,"Jerome");break;
         case 171:strcat(str,"Jerry");break;
         case 172:strcat(str,"Jesse");break;
         case 173:strcat(str,"Jesus");break;
         case 174:strcat(str,"Jim");break;
         case 175:strcat(str,"Jimmy");break;
         case 176:strcat(str,"Jinyuan");break;
         case 177:strcat(str,"Joe");break;
         case 178:strcat(str,"Joel");break;
         case 179:strcat(str,"Joey");break;
         case 180:strcat(str,"John");break;
         case 181:strcat(str,"Johnny");break;
         case 182:strcat(str,"Jon");break;
         case 183:strcat(str,"Jonathan");break;
         case 184:strcat(str,"Jordan");break;
         case 185:strcat(str,"Jorge");break;
         case 186:strcat(str,"Jose");break;
         case 187:strcat(str,"Joseph");break;
         case 188:strcat(str,"Josh");break;
         case 189:strcat(str,"Joshua");break;
         case 190:strcat(str,"Jowar");break;
         case 191:strcat(str,"Juan");break;
         case 192:strcat(str,"Julian");break;
         case 193:strcat(str,"Justin");break;
         case 194:strcat(str,"Kaelen");break;
         case 195:strcat(str,"Karl");break;
         case 196:strcat(str,"Keith");break;
         case 197:strcat(str,"Ken");break;
         case 198:strcat(str,"Kenji");break;
         case 199:strcat(str,"Kennedy");break;
         case 200:strcat(str,"Kenneth");break;
         case 201:strcat(str,"Kevin");break;
         case 202:strcat(str,"Kirk");break;
         case 203:strcat(str,"Konstantine");break;
         case 204:strcat(str,"Kurt");break;
         case 205:strcat(str,"Kweisi");break;
         case 206:strcat(str,"Kyle");break;
         case 207:strcat(str,"Lance");break;
         case 208:strcat(str,"Larry");break;
         case 209:strcat(str,"Lawrence");break;
         case 210:strcat(str,"Lenny");break;
         case 211:strcat(str,"Leo");break;
         case 212:strcat(str,"Leonard");break;
         case 213:strcat(str,"Leroy");break;
         case 214:strcat(str,"Lex");break;
         case 215:strcat(str,"Liam");break;
         case 216:strcat(str,"Lionel");break;
         case 217:strcat(str,"Louis");break;
         case 218:strcat(str,"Lucas");break;
         case 219:strcat(str,"Luis");break;
         case 220:strcat(str,"Luke");break;
         case 221:strcat(str,"Malcolm");break;
         case 222:strcat(str,"Manny");break;
         case 223:strcat(str,"Manuel");break;
         case 224:strcat(str,"Marcus");break;
         case 225:strcat(str,"Marvin");break;
         case 226:strcat(str,"Mark");break;
         case 227:strcat(str,"Mario");break;
         case 228:strcat(str,"Martin");break;
         case 229:strcat(str,"Marty");break;
         case 230:strcat(str,"Mason");break;
         case 231:strcat(str,"Matt");break;
         case 232:strcat(str,"Matthew");break;
         case 233:strcat(str,"Maurice");break;
         case 234:strcat(str,"Max");break;
         case 235:strcat(str,"Mel");break;
         case 236:strcat(str,"Michael");break;
         case 237:strcat(str,"Mickey");break;
         case 238:strcat(str,"Miguel");break;
         case 239:strcat(str,"Mike");break;
         case 240:strcat(str,"Miles");break;
         case 241:strcat(str,"Mitchell");break;
         case 242:strcat(str,"Moe");break;
         case 243:strcat(str,"Mumtaz");break;
         case 244:strcat(str,"Murray");break;
         case 245:strcat(str,"Mustafa");break;
         case 246:strcat(str,"Nathan");break;
         case 247:strcat(str,"Ned");break;
         case 248:strcat(str,"Neal");break;
         case 249:strcat(str,"Neil");break;
         case 250:strcat(str,"Nelson");break;
         case 251:strcat(str,"Nicholas");break;
         case 252:strcat(str,"Nick");break;
         case 253:strcat(str,"Noah");break;
         case 254:strcat(str,"Norm");break;
         case 255:strcat(str,"Norman");break;
         case 256:strcat(str,"Oliver");break;
         case 257:strcat(str,"Otto");break;
         case 258:strcat(str,"Owen");break;
         case 259:strcat(str,"Pablo");break;
         case 260:strcat(str,"Patrick");break;
         case 261:strcat(str,"Paul");break;
         case 262:strcat(str,"Pedro");break;
         case 263:strcat(str,"Pete");break;
         case 264:strcat(str,"Peter");break;
         case 265:strcat(str,"Phil");break;
         case 266:strcat(str,"Phillip");break;
         case 267:strcat(str,"Preston");break;
         case 268:strcat(str,"Rafael");break;
         case 269:strcat(str,"Ralf");break;
         case 270:strcat(str,"Ralph");break;
         case 271:strcat(str,"Randy");break;
         case 272:strcat(str,"Rane");break;
         case 273:strcat(str,"Ransom");break;
         case 274:strcat(str,"Raphael");break;
         case 275:strcat(str,"Raul");break;
         case 276:strcat(str,"Ray");break;
         case 277:strcat(str,"Raymond");break;
         case 278:strcat(str,"Reginald");break;
         case 279:strcat(str,"Ricardo");break;
         case 280:strcat(str,"Richard");break;
         case 281:strcat(str,"Rick");break;
         case 282:strcat(str,"Robert");break;
         case 283:strcat(str,"Rod");break;
         case 284:strcat(str,"Rodney");break;
         case 285:strcat(str,"Roger");break;
         case 286:strcat(str,"Ron");break;
         case 287:strcat(str,"Ronald");break;
         case 288:strcat(str,"Rory");break;
         case 289:strcat(str,"Roy");break;
         case 290:strcat(str,"Rubin");break;
         case 291:strcat(str,"Rudy");break;
         case 292:strcat(str,"Rupert");break;
         case 293:strcat(str,"Russ");break;
         case 294:strcat(str,"Russell");break;
         case 295:strcat(str,"Ryan");break;
         case 296:strcat(str,"Samuel");break;
         case 297:strcat(str,"Scott");break;
         case 298:strcat(str,"Sean");break;
         case 299:strcat(str,"Sebastian");break;
         case 300:strcat(str,"Serge");break;
         case 301:strcat(str,"Sergio");break;
         case 302:strcat(str,"Seth");break;
         case 303:strcat(str,"Shane");break;
         case 304:strcat(str,"Shaun");break;
         case 305:strcat(str,"Shawn");break;
         case 306:strcat(str,"Sid");break;
         case 307:strcat(str,"Simon");break;
         case 308:strcat(str,"Sonny");break;
         case 309:strcat(str,"Stan");break;
         case 310:strcat(str,"Stanley");break;
         case 311:strcat(str,"Stephen");break;
         case 312:strcat(str,"Steve");break;
         case 313:strcat(str,"Steven");break;
         case 314:strcat(str,"Stewart");break;
         case 315:strcat(str,"Stu");break;
         case 316:strcat(str,"Stuart");break;
         case 317:strcat(str,"Ted");break;
         case 318:strcat(str,"Tetsuo");break;
         case 319:strcat(str,"Theodore");break;
         case 320:strcat(str,"Thomas");break;
         case 321:strcat(str,"Thor");break;
         case 322:strcat(str,"Tim");break;
         case 323:strcat(str,"Timothy");break;
         case 324:strcat(str,"Toby");break;
         case 325:strcat(str,"Tom");break;
         case 326:strcat(str,"Tony");break;
         case 327:strcat(str,"Toshiro");break;
         case 328:strcat(str,"Travis");break;
         case 329:strcat(str,"Trevor");break;
         case 330:strcat(str,"Tyler");break;
         case 331:strcat(str,"Tyrone");break;
         case 332:strcat(str,"Victor");break;
         case 333:strcat(str,"Vincent");break;
         case 334:strcat(str,"Wade");break;
         case 335:strcat(str,"Wally");break;
         case 336:strcat(str,"Walter");break;
         case 337:strcat(str,"Wayne");break;
         case 338:strcat(str,"William");break;
         case 339:strcat(str,"Willy");break;
         case 340:strcat(str,"Winston");break;
         case 341:strcat(str,"Wolf");break;
         case 342:strcat(str,"Woody");break;
         case 343:strcat(str,"Xavier");break;
         case 344:strcat(str,"Zachary");break;
         case 345:strcat(str,"Zeke");break;
         case 346:strcat(str,"Quentin");break;
//}}}


      default:strcat(str,"Defaulto");break;
      }
   }
//}}}
   else if(nametable == GENDER_FEMALE)
//{{{ Female
   {
      switch(roll)
      {
         // {{{Female name table
      case 0:strcat(str,"Abigail");break;
      case 1:strcat(str,"Ada");break;
      case 2:strcat(str,"Adriana");break;
      case 3:strcat(str,"Adrianna");break;
      case 4:strcat(str,"Adrienne");break;
      case 5:strcat(str,"Agatha");break;
      case 6:strcat(str,"Aiko");break;
      case 7:strcat(str,"Aileen");break;
      case 8:strcat(str,"Alene");break;
      case 9:strcat(str,"Alexandra");break;
      case 10:strcat(str,"Alice");break;
      case 11:strcat(str,"Alison");break;
      case 12:strcat(str,"Allison");break;
      case 13:strcat(str,"Alora");break;
      case 14:strcat(str,"Alyson");break;
      case 15:strcat(str,"Amanda");break;
      case 16:strcat(str,"Amber");break;
      case 17:strcat(str,"Amelia");break;
      case 18:strcat(str,"Amy");break;
      case 19:strcat(str,"Andrea");break;
      case 20:strcat(str,"Angela");break;
      case 21:strcat(str,"Angelica");break;
      case 22:strcat(str,"Anita");break;
      case 23:strcat(str,"Ann");break;
      case 24:strcat(str,"Anna");break;
      case 25:strcat(str,"Anne");break;
      case 26:strcat(str,"Annie");break;
      case 27:strcat(str,"April");break;
      case 28:strcat(str,"Autumn");break;
      case 29:strcat(str,"Barbara");break;
      case 30:strcat(str,"Bea");break;
      case 31:strcat(str,"Beatrice");break;
      case 32:strcat(str,"Bebe");break;
      case 33:strcat(str,"Becky");break;
      case 34:strcat(str,"Belle");break;
      case 35:strcat(str,"Beth");break;
      case 36:strcat(str,"Beth Ann");break;
      case 37:strcat(str,"Bethany");break;
      case 38:strcat(str,"Betty");break;
      case 39:strcat(str,"Bianca Maria");break;
      case 40:strcat(str,"Blanche");break;
      case 41:strcat(str,"Bobbie");break;
      case 42:strcat(str,"Bonita");break;
      case 43:strcat(str,"Bonnie");break;
      case 44:strcat(str,"Brenda");break;
      case 45:strcat(str,"Brittany");break;
      case 46:strcat(str,"Brooke");break;
      case 47:strcat(str,"Brooklyn");break;
      case 48:strcat(str,"Camilia");break;
      case 49:strcat(str,"Carla");break;
      case 50:strcat(str,"Carmen");break;
      case 51:strcat(str,"Carol");break;
      case 52:strcat(str,"Caroline");break;
      case 53:strcat(str,"Cassandra");break;
      case 54:strcat(str,"Catherine");break;
      case 55:strcat(str,"Cecilia");break;
      case 56:strcat(str,"Celine");break;
      case 57:strcat(str,"Charlotte");break;
      case 58:strcat(str,"Chelsea");break;
      case 59:strcat(str,"Cheryl");break;
      case 60:strcat(str,"Chloe");break;
      case 61:strcat(str,"Christine");break;
      case 62:strcat(str,"Cindi");break;
      case 63:strcat(str,"Cindy");break;
      case 64:strcat(str,"Clara");break;
      case 65:strcat(str,"Clarity");break;
      case 66:strcat(str,"Claudette");break;
      case 67:strcat(str,"Claudia");break;
      case 68:strcat(str,"Colette");break;
      case 69:strcat(str,"Colleen");break;
      case 70:strcat(str,"Consuela");break;
      case 71:strcat(str,"Courtney");break;
      case 72:strcat(str,"Crystal");break;
      case 73:strcat(str,"Cybill");break;
      case 74:strcat(str,"Dakota");break;
      case 75:strcat(str,"Dana");break;
      case 76:strcat(str,"Daniela");break;
      case 77:strcat(str,"Danielle");break;
      case 78:strcat(str,"Daphne");break;
      case 79:strcat(str,"Dawn");break;
      case 80:strcat(str,"Debbie");break;
      case 81:strcat(str,"Denise");break;
      case 82:strcat(str,"Desiree");break;
      case 83:strcat(str,"Diane");break;
      case 84:strcat(str,"Dimitra");break;
      case 85:strcat(str,"Donna");break;
      case 86:strcat(str,"Dora");break;
      case 87:strcat(str,"Doreen");break;
      case 88:strcat(str,"Edna");break;
      case 89:strcat(str,"Elaine");break;
      case 90:strcat(str,"Elinor");break;
      case 91:strcat(str,"Elizabeth");break;
      case 92:strcat(str,"Ellen");break;
      case 93:strcat(str,"Elsie");break;
      case 94:strcat(str,"Emily");break;
      case 95:strcat(str,"Emma");break;
      case 96:strcat(str,"Erica");break;
      case 97:strcat(str,"Erika");break;
      case 98:strcat(str,"Esmerelda");break;
      case 99:strcat(str,"Eve");break;
      case 100:strcat(str,"Faith");break;
      case 101:strcat(str,"Fatima");break;
      case 102:strcat(str,"Felicia");break;
      case 103:strcat(str,"Felicity");break;
      case 104:strcat(str,"Fiona");break;
      case 105:strcat(str,"Florence");break;
      case 106:strcat(str,"Florida");break;
      case 107:strcat(str,"Fran");break;
      case 108:strcat(str,"Francine");break;
      case 109:strcat(str,"Gabrielle");break;
      case 110:strcat(str,"Georgia");break;
      case 111:strcat(str,"Gina");break;
      case 112:strcat(str,"Giovanna");break;
      case 113:strcat(str,"Gloria");break;
      case 114:strcat(str,"Grace");break;
      case 115:strcat(str,"Gwen");break;
      case 116:strcat(str,"Gwendolyn");break;
      case 117:strcat(str,"Hailey");break;
      case 118:strcat(str,"Haley");break;
      case 119:strcat(str,"Hannah");break;
      case 120:strcat(str,"Harmony");break;
      case 121:strcat(str,"Hayley");break;
      case 122:strcat(str,"Hazel");break;
      case 123:strcat(str,"Heather");break;
      case 124:strcat(str,"Helen");break;
      case 125:strcat(str,"Helga");break;
      case 126:strcat(str,"Holly");break;
      case 127:strcat(str,"Honor");break;
      case 128:strcat(str,"Ida");break;
      case 129:strcat(str,"Ingrid");break;
      case 130:strcat(str,"Irene");break;
      case 131:strcat(str,"Iris");break;
      case 132:strcat(str,"Isabel");break;
      case 133:strcat(str,"Isabella");break;
      case 134:strcat(str,"Isabelle");break;
      case 135:strcat(str,"Ivy");break;
      case 136:strcat(str,"Jaclyn");break;
      case 137:strcat(str,"Jade");break;
      case 138:strcat(str,"Jane");break;
      case 139:strcat(str,"Janet");break;
      case 140:strcat(str,"Janette");break;
      case 141:strcat(str,"January");break;
      case 142:strcat(str,"Jaqueline");break;
      case 143:strcat(str,"Jasmin");break;
      case 144:strcat(str,"Jasmine");break;
      case 145:strcat(str,"Jennifer");break;
      case 146:strcat(str,"Jenny");break;
      case 147:strcat(str,"Jessica");break;
      case 148:strcat(str,"Jill");break;
      case 149:strcat(str,"Jillian");break;
      case 150:strcat(str,"Joan");break;
      case 151:strcat(str,"Joann");break;
      case 152:strcat(str,"Josephine");break;
      case 153:strcat(str,"Judy");break;
      case 154:strcat(str,"Juliana");break;
      case 155:strcat(str,"Julia");break;
      case 156:strcat(str,"Julie");break;
      case 157:strcat(str,"Juliette");break;
      case 158:strcat(str,"June");break;
      case 159:strcat(str,"Kaitlyn");break;
      case 160:strcat(str,"Kaley");break;
      case 161:strcat(str,"Karen");break;
      case 162:strcat(str,"Karla");break;
      case 163:strcat(str,"Kate");break;
      case 164:strcat(str,"Katelin");break;
      case 165:strcat(str,"Katherine");break;
      case 166:strcat(str,"Kathleen");break;
      case 167:strcat(str,"Kathy");break;
      case 168:strcat(str,"Katie");break;
      case 169:strcat(str,"Kay");break;
      case 170:strcat(str,"Kayla");break;
      case 171:strcat(str,"Kaylee");break;
      case 172:strcat(str,"Keely");break;
      case 173:strcat(str,"Kiki");break;
      case 174:strcat(str,"Kristal");break;
      case 175:strcat(str,"Kristie");break;
      case 176:strcat(str,"Kristin");break;
      case 177:strcat(str,"Krystal");break;
      case 178:strcat(str,"Lacey");break;
      case 179:strcat(str,"Lara");break;
      case 180:strcat(str,"Larissa");break;
      case 181:strcat(str,"Latoya");break;
      case 182:strcat(str,"Laura");break;
      case 183:strcat(str,"Lauren");break;
      case 184:strcat(str,"Lavender");break;
      case 185:strcat(str,"Leah");break;
      case 186:strcat(str,"Leila");break;
      case 187:strcat(str,"Leyna");break;
      case 188:strcat(str,"Liliana");break;
      case 189:strcat(str,"Lilly");break;
      case 190:strcat(str,"Lily");break;
      case 191:strcat(str,"Lina");break;
      case 192:strcat(str,"Linda");break;
      case 193:strcat(str,"Lindsay");break;
      case 194:strcat(str,"Lindsey");break;
      case 195:strcat(str,"Lisa");break;
      case 196:strcat(str,"Liz");break;
      case 197:strcat(str,"Lizabeth");break;
      case 198:strcat(str,"Lizzie");break;
      case 199:strcat(str,"Lois");break;
      case 200:strcat(str,"Loretta");break;
      case 201:strcat(str,"Louane");break;
      case 202:strcat(str,"Louanne");break;
      case 203:strcat(str,"Louise");break;
      case 204:strcat(str,"Lucia");break;
      case 205:strcat(str,"Lynn");break;
      case 206:strcat(str,"Lynnette");break;
      case 207:strcat(str,"Madison");break;
      case 208:strcat(str,"Madonna");break;
      case 209:strcat(str,"Manuela");break;
      case 210:strcat(str,"Margaret");break;
      case 211:strcat(str,"Marge");break;
      case 212:strcat(str,"Maria");break;
      case 213:strcat(str,"Mariana");break;
      case 214:strcat(str,"Marianne");break;
      case 215:strcat(str,"Marie");break;
      case 216:strcat(str,"Marion");break;
      case 217:strcat(str,"Marlene");break;
      case 218:strcat(str,"Martha");break;
      case 219:strcat(str,"Martina");break;
      case 220:strcat(str,"Mary");break;
      case 221:strcat(str,"Mary Ann");break;
      case 222:strcat(str,"Matilda");break;
      case 223:strcat(str,"Maureen");break;
      case 224:strcat(str,"Mayumi");break;
      case 225:strcat(str,"Megan");break;
      case 226:strcat(str,"Meghan");break;
      case 227:strcat(str,"Melanie");break;
      case 228:strcat(str,"Melissa");break;
      case 229:strcat(str,"Mercedes");break;
      case 230:strcat(str,"Merissa");break;
      case 231:strcat(str,"Mia");break;
      case 232:strcat(str,"Michelle");break;
      case 233:strcat(str,"Minal");break;
      case 234:strcat(str,"Mindy");break;
      case 235:strcat(str,"Miranda");break;
      case 236:strcat(str,"Molly");break;
      case 237:strcat(str,"Monica");break;
      case 238:strcat(str,"Nadia");break;
      case 239:strcat(str,"Nancy");break;
      case 240:strcat(str,"Natalie");break;
      case 241:strcat(str,"Natasha");break;
      case 242:strcat(str,"Nellie");break;
      case 243:strcat(str,"Nicole");break;
      case 244:strcat(str,"Nicolette");break;
      case 245:strcat(str,"Nina");break;
      case 246:strcat(str,"Norma");break;
      case 247:strcat(str,"October");break;
      case 248:strcat(str,"Olivia");break;
      case 249:strcat(str,"Pam");break;
      case 250:strcat(str,"Patricia");break;
      case 251:strcat(str,"Patty");break;
      case 252:strcat(str,"Paula");break;
      case 253:strcat(str,"Paulette");break;
      case 254:strcat(str,"Peggy");break;
      case 255:strcat(str,"Petunia");break;
      case 256:strcat(str,"Phoebe");break;
      case 257:strcat(str,"Priscilla");break;
      case 258:strcat(str,"Rachael");break;
      case 259:strcat(str,"Racheal");break;
      case 260:strcat(str,"Rachel");break;
      case 261:strcat(str,"Rachelle");break;
      case 262:strcat(str,"Rania");break;
      case 263:strcat(str,"Raphaela");break;
      case 264:strcat(str,"Raquel");break;
      case 265:strcat(str,"Rebecca");break;
      case 266:strcat(str,"Renee");break;
      case 267:strcat(str,"Rita");break;
      case 268:strcat(str,"Rosalie");break;
      case 269:strcat(str,"Rosalinda");break;
      case 270:strcat(str,"Rosanna");break;
      case 271:strcat(str,"Roberta");break;
      case 272:strcat(str,"Rose");break;
      case 273:strcat(str,"Rosemary");break;
      case 274:strcat(str,"Roxanne");break;
      case 275:strcat(str,"Roz");break;
      case 276:strcat(str,"Ruth");break;
      case 277:strcat(str,"Ruthanne");break;
      case 278:strcat(str,"Sabrina");break;
      case 279:strcat(str,"Sally");break;
      case 280:strcat(str,"Samantha");break;
      case 281:strcat(str,"Sandra");break;
      case 282:strcat(str,"Sara");break;
      case 283:strcat(str,"Sarah");break;
      case 284:strcat(str,"Satya");break;
      case 285:strcat(str,"Selma");break;
      case 286:strcat(str,"Shaniqua");break;
      case 287:strcat(str,"Shanna");break;
      case 288:strcat(str,"Shannon");break;
      case 289:strcat(str,"Sharon");break;
      case 290:strcat(str,"Sherry");break;
      case 291:strcat(str,"Shirley");break;
      case 292:strcat(str,"Shyann");break;
      case 293:strcat(str,"Silvia");break;
      case 294:strcat(str,"Sonia");break;
      case 295:strcat(str,"Sophia");break;
      case 296:strcat(str,"Sophie");break;
      case 297:strcat(str,"Stacie");break;
      case 298:strcat(str,"Stacy");break;
      case 299:strcat(str,"Stephanie");break;
      case 300:strcat(str,"Summer");break;
      case 301:strcat(str,"Sue");break;
      case 302:strcat(str,"Susan");break;
      case 303:strcat(str,"Susanna");break;
      case 304:strcat(str,"Suzanne");break;
      case 305:strcat(str,"Suzie");break;
      case 306:strcat(str,"Tabatha");break;
      case 307:strcat(str,"Tabitha");break;
      case 308:strcat(str,"Tamara");break;
      case 309:strcat(str,"Tammy");break;
      case 310:strcat(str,"Tara");break;
      case 311:strcat(str,"Tawanda");break;
      case 312:strcat(str,"Teresa");break;
      case 313:strcat(str,"Terri");break;
      case 314:strcat(str,"Tetiana");break;
      case 315:strcat(str,"Theresa");break;
      case 316:strcat(str,"Tiffanie");break;
      case 317:strcat(str,"Tiffany");break;
      case 318:strcat(str,"Tina");break;
      case 319:strcat(str,"Toni");break;
      case 320:strcat(str,"Tracy");break;
      case 321:strcat(str,"Tricia");break;
      case 322:strcat(str,"Trudy");break;
      case 323:strcat(str,"Tyra");break;
      case 324:strcat(str,"Valentina");break;
      case 325:strcat(str,"Valeria");break;
      case 326:strcat(str,"Valerie");break;
      case 327:strcat(str,"Vanessa");break;
      case 328:strcat(str,"Verena");break;
      case 329:strcat(str,"Veronica");break;
      case 330:strcat(str,"Virginia");break;
      case 331:strcat(str,"Vicki");break;
      case 332:strcat(str,"Vicky");break;
      case 333:strcat(str,"Victoria");break;
      case 334:strcat(str,"Violet");break;
      case 335:strcat(str,"Vithara");break;
      case 336:strcat(str,"Vonnita");break;
      case 337:strcat(str,"Wanda");break;
      case 338:strcat(str,"Wendy");break;
      case 339:strcat(str,"Willow");break;
      case 340:strcat(str,"Wilma");break;
      case 341:strcat(str,"Xenia");break;
      case 342:strcat(str,"Yoko");break;
      case 343:strcat(str,"Yuri");break;
      case 344:strcat(str,"Yvonne");break;
      case 345:strcat(str,"Zoe");break;
//}}}
      default:strcat(str,"Defaulta");break;
      }
   }
//}}}
//{{{ Neutral
   else if(nametable == GENDER_NEUTRAL)
   {
      switch(roll)
      {
         //{{{ Gender-neutral name table
      case 0:strcat(str,"Akira");break;
      case 1:strcat(str,"Alex");break;
      case 2:strcat(str,"Alexis");break;
      case 3:strcat(str,"Angel");break;
      case 4:strcat(str,"Ariel");break;
      case 5:strcat(str,"Ashley");break;
      case 6:strcat(str,"Billy");break;
      case 7:strcat(str,"Frankie");break;
      case 8:strcat(str,"Hillary");break;
      case 9:strcat(str,"Kelly");break;
      case 10:strcat(str,"Jackie");break;
      case 11:strcat(str,"Jamie");break;
      case 12:strcat(str,"Jo");break;
      case 13:strcat(str,"Jun");break;
      case 14:strcat(str,"Kelsey");break;
      case 15:strcat(str,"Kelsie");break;
      case 16:strcat(str,"Kim");break;
      case 17:strcat(str,"Lesley");break;
      case 18:strcat(str,"Leslie");break;
      case 19:strcat(str,"Morgan");break;
      case 20:strcat(str,"Nicky");break;
      case 21:strcat(str,"Noel");break;
      case 22:strcat(str,"Page");break;
      case 23:strcat(str,"Paige");break;
      case 24:strcat(str,"Pat");break;
      case 25:strcat(str,"Raven");break;
      case 26:strcat(str,"Riley");break;
      case 27:strcat(str,"Robin");break;
      case 28:strcat(str,"Sam");break;
      case 29:strcat(str,"Sandy");break;
      case 30:strcat(str,"Sidney");break;
      case 31:strcat(str,"Taylor");break;
      case 32:strcat(str,"Terry");break;
      case 33:strcat(str,"Yanping");break;
//}}}

      default:strcat(str,"Default");break;
      }
   }
//}}}
   else if(nametable == GENDER_WHITEMALEPATRIARCH)
//{{{ White Male Patriarchs
   {
      switch(roll)
      {
      //{{{ White Male Patriarch
      case 0:strcat(str,"Roger");break;
      case 1:strcat(str,"James");break;
      case 2:strcat(str,"John");break;
      case 3:strcat(str,"Bob");break;
      case 4:strcat(str,"Mike");break;
      case 5:strcat(str,"Bill");break;
      case 6:strcat(str,"Dave");break;
      case 7:strcat(str,"Rick");break;
      case 8:strcat(str,"Colin");break;
      case 9:strcat(str,"Joe");break;
      case 10:strcat(str,"Tom");break;
      case 11:strcat(str,"Chris");break;
      case 12:strcat(str,"Dan");break;
      case 13:strcat(str,"Paul");break;
      case 14:strcat(str,"Mark");break;
      case 15:strcat(str,"Donald");break;
      case 16:strcat(str,"Jim");break;
      case 17:strcat(str,"Ken");break;
      case 18:strcat(str,"Steve");break;
      case 19:strcat(str,"Edward");break;
      case 20:strcat(str,"Brian");break;
      case 21:strcat(str,"Ron");break;
      case 22:strcat(str,"Tony");break;
      case 23:strcat(str,"Kevin");break;
      case 24:strcat(str,"Jason");break;
      case 25:strcat(str,"Matt");break;
      case 26:strcat(str,"Gary");break;
      case 27:strcat(str,"Tim");break;
      case 28:strcat(str,"Alan");break;
      case 29:strcat(str,"Larry");break;
      case 30:strcat(str,"Jeff");break;
      case 31:strcat(str,"Frank");break;
      case 32:strcat(str,"Scott");break;
      case 33:strcat(str,"Eric");break;
      case 34:strcat(str,"Steve");break;
      case 35:strcat(str,"Andy");break;
      case 36:strcat(str,"Ray");break;
      case 37:strcat(str,"Greg");break;
      case 38:strcat(str,"Josh");break;
      case 39:strcat(str,"Jerry");break;
      case 40:strcat(str,"Dennis");break;
      case 41:strcat(str,"Walter");break;
      case 42:strcat(str,"Jesse");break;
      case 43:strcat(str,"Peter");break;
      case 44:strcat(str,"Harry");break;
      case 45:strcat(str,"Doug");break;
      case 46:strcat(str,"Henry");break;
      case 47:strcat(str,"Carl");break;
      case 48:strcat(str,"Arthur");break;
      case 49:strcat(str,"Ryan");break;//}}}
      }
   }
//}}}
/*   else if(nametable == GENDER_MALE_IMMIGRANT)
// {{{ Illegal Immigrants
   {
      switch(roll)
      {
         case 0:strcat(str,"Alejandro");break;
         case 1:strcat(str,"Antonio");break;
         case 2:strcat(str,"Beltran");break;
         case 3:strcat(str,"Carlos");break;
         case 4:strcat(str,"Diego");break;
         case 5:strcat(str,"Eduardo");break;
         case 6:strcat(str,"Enrique");break;
         case 7:strcat(str,"Fernando");break;
         case 8:strcat(str,"Jacobo");break;
         case 9:strcat(str,"Javier");break;
         case 10:strcat(str,"Jorge");break;
         case 11:strcat(str,"Juan");break;
         case 12:strcat(str,"Luis");break;
         case 13:strcat(str,"Matteo");break;
         case 14:strcat(str,"Pablo");break;
         case 15:strcat(str,"Pedro");break;
         case 16:strcat(str,"Raul");break;
         case 17:strcat(str,"Ricardo");break;
      }
   }
// }}}
   else if(nametable == GENDER_FEMALE_IMMIGRANT)
// {{{ Illegal Immigrants, Female
   {     
      switch(roll)
      {
         case 0:strcat(str,"Daniela");break;
         case 1:strcat(str,"Denielle");break;
         case 2:strcat(str,"Esmerelda");break;
         case 3:strcat(str,"Gabrielle");break;
         case 4:strcat(str,"Isabel");break;
         case 5:strcat(str,"Isabella");break;
         case 6:strcat(str,"Isabelle");break;
         case 7:strcat(str,"Maria");break;
         case 8:strcat(str,"Natalia");break;
         case 9:strcat(str,"Roberta");break;
      }
   }
// }}}
*/
}
/* gets a random last name */
void lastname(char *str)
//{{{ Last Name
{
   strcpy(str,"");

   switch(LCSrandom(830))
   {
      //{{{ Last name table
      case 0:strcat(str,"Abbey");break;
      case 1:strcat(str,"Abbott");break;
      case 2:strcat(str,"Abbzug");break;
      case 3:strcat(str,"Adamson");break;
      case 4:strcat(str,"Adkins");break;
      case 5:strcat(str,"Africa");break;
      case 6:strcat(str,"Aguilera");break;
      case 7:strcat(str,"Alanson");break;
      case 8:strcat(str,"Alcott");break;
      case 9:strcat(str,"Alda");break;
      case 10:strcat(str,"Alexander");break;
      case 11:strcat(str,"Allanshaw");break;
      case 12:strcat(str,"Allen");break;
      case 13:strcat(str,"Alley");break;
      case 14:strcat(str,"Ames");break;
      case 15:strcat(str,"Anderson");break;
      case 16:strcat(str,"Andress");break;
      case 17:strcat(str,"Antle");break;
      case 18:strcat(str,"Appleton");break;
      case 19:strcat(str,"Armstead");break;
      case 20:strcat(str,"Armstrong");break;
      case 21:strcat(str,"Arnaz");break;
      case 22:strcat(str,"Artfield");break;
      case 23:strcat(str,"Ashmore");break;
      case 24:strcat(str,"Ayers");break;
      case 25:strcat(str,"Aykroyd");break;
      case 26:strcat(str,"Bacall");break;
      case 27:strcat(str,"Bailey");break;
      case 28:strcat(str,"Baird");break;
      case 29:strcat(str,"Baker");break;
      case 30:strcat(str,"Baldwin");break;
      case 31:strcat(str,"Balgos");break;
      case 32:strcat(str,"Barr");break;
      case 33:strcat(str,"Baranyi");break;
      case 34:strcat(str,"Barrow");break;
      case 35:strcat(str,"Barwick");break;
      case 36:strcat(str,"Bates");break;
      case 37:strcat(str,"Baxter");break;
      case 38:strcat(str,"Beaumont");break;
      case 39:strcat(str,"Bendix");break;
      case 40:strcat(str,"Bennett");break;
      case 41:strcat(str,"Bezos");break;
      case 42:strcat(str,"Birkin");break;
      case 43:strcat(str,"Black");break;
      case 44:strcat(str,"Blackenship");break;
      case 45:strcat(str,"Blanchard");break;
      case 46:strcat(str,"Blitzer");break;
      case 47:strcat(str,"Blum");break;
      case 48:strcat(str,"Bogart");break;
      case 49:strcat(str,"Boggs");break;
      case 50:strcat(str,"Bolger");break;
      case 51:strcat(str,"Booker");break;
      case 52:strcat(str,"Bosanquet");break;
      case 53:strcat(str,"Boyd");break;
      case 54:strcat(str,"Bradbury");break;
      case 55:strcat(str,"Bradley");break;
      case 56:strcat(str,"Bradshaw");break;
      case 57:strcat(str,"Brandis");break;
      case 58:strcat(str,"Bremer");break;
      case 59:strcat(str,"Brewster");break;
      case 60:strcat(str,"Brightman");break;
      case 61:strcat(str,"Briscoe");break;
      case 62:strcat(str,"Brooks");break;
      case 63:strcat(str,"Brown");break;
      case 64:strcat(str,"Brownlee");break;
      case 65:strcat(str,"Bryant");break;
      case 66:strcat(str,"Buchanan");break;
      case 67:strcat(str,"Buckley");break;
      case 68:strcat(str,"Buckman");break;
      case 69:strcat(str,"Buckner");break;
      case 70:strcat(str,"Bugbee");break;
      case 71:strcat(str,"Bump");break;
      case 72:strcat(str,"Bundy");break;
      case 73:strcat(str,"Bunton");break;
      case 74:strcat(str,"Burghoff");break;
      case 75:strcat(str,"Burton");break;
      case 76:strcat(str,"Bush");break;
      case 77:strcat(str,"Butcher");break;
      case 78:strcat(str,"Butler");break;
      case 79:strcat(str,"Butt");break;
      case 80:strcat(str,"Butterman");break;
      case 81:strcat(str,"Buttman");break;
      case 82:strcat(str,"Byrd");break;
      case 83:strcat(str,"Callahan");break;
      case 84:strcat(str,"Campbell");break;
      case 85:strcat(str,"Carberry");break;
      case 86:strcat(str,"Carey");break;
      case 87:strcat(str,"Carpenter");break;
      case 88:strcat(str,"Carr");break;
      case 89:strcat(str,"Carson");break;
      case 90:strcat(str,"Cartwright");break;
      case 91:strcat(str,"Cavallero");break;
      case 92:strcat(str,"Cavill");break;
      case 93:strcat(str,"Chaffee");break;
      case 94:strcat(str,"Chamberlain");break;
      case 95:strcat(str,"Chambers");break;
      case 96:strcat(str,"Chandler");break;
      case 97:strcat(str,"Channing");break;
      case 98:strcat(str,"Cheney");break;
      case 99:strcat(str,"Cheng");break;
      case 100:strcat(str,"Childress");break;
      case 101:strcat(str,"Childs");break;
      case 102:strcat(str,"Chilton");break;
      case 103:strcat(str,"Cho");break;
      case 104:strcat(str,"Chubb");break;
      case 105:strcat(str,"Churchill");break;
      case 106:strcat(str,"Clavin");break;
      case 107:strcat(str,"Clay");break;
      case 108:strcat(str,"Clinton");break;
      case 109:strcat(str,"Cobb");break;
      case 110:strcat(str,"Coffey");break;
      case 111:strcat(str,"Cohen");break;
      case 112:strcat(str,"Colcord");break;
      case 113:strcat(str,"Cole");break;
      case 114:strcat(str,"Coleman");break;
      case 115:strcat(str,"Collins");break;
      case 116:strcat(str,"Colombe");break;
      case 117:strcat(str,"Colt");break;
      case 118:strcat(str,"Conner");break;
      case 119:strcat(str,"Cook");break;
      case 120:strcat(str,"Cooper");break;
      case 121:strcat(str,"Coopersmith");break;
      case 122:strcat(str,"Copeland");break;
      case 123:strcat(str,"Coppola");break;
      case 124:strcat(str,"Cordero");break;
      case 125:strcat(str,"Cosgrove");break;
      case 126:strcat(str,"Cottrell");break;
      case 127:strcat(str,"Court");break;
      case 128:strcat(str,"Cox");break;
      case 129:strcat(str,"Craft");break;
      case 130:strcat(str,"Crane");break;
      case 131:strcat(str,"Critchley");break;
      case 132:strcat(str,"Crockett");break;
      case 133:strcat(str,"Croft");break;
      case 134:strcat(str,"Cromwell");break;
      case 135:strcat(str,"Cross");break;
      case 136:strcat(str,"Crowe");break;
      case 137:strcat(str,"Crowson");break;
      case 138:strcat(str,"de la Cruz");break;
      case 139:strcat(str,"Cunningham");break;
      case 140:strcat(str,"Curnew");break;
      case 141:strcat(str,"Cutlass");break;
      case 142:strcat(str,"Cutler");break;
      case 143:strcat(str,"Dahmer");break;
      case 144:strcat(str,"Danes");break;
      case 145:strcat(str,"Danson");break;
      case 146:strcat(str,"Dante");break;
      case 147:strcat(str,"Darby");break;
      case 148:strcat(str,"Darnand");break;
      case 149:strcat(str,"Dash");break;
      case 150:strcat(str,"Daveson");break;
      case 151:strcat(str,"Davidson");break;
      case 152:strcat(str,"Davis");break;
      case 153:strcat(str,"Day");break;
      case 154:strcat(str,"Decker");break;
      case 155:strcat(str,"Deere");break;
      case 156:strcat(str,"Delaney");break;
      case 157:strcat(str,"Delgado");break;
      case 158:strcat(str,"DeLorean");break;
      case 159:strcat(str,"Dench");break;
      case 160:strcat(str,"Dent");break;
      case 161:strcat(str,"Dentz");break;
      case 162:strcat(str,"Diaz");break;
      case 163:strcat(str,"Diehl");break;
      case 164:strcat(str,"DiMeo");break;
      case 165:strcat(str,"Dole");break;
      case 166:strcat(str,"Dorgan");break;
      case 167:strcat(str,"Dorsey");break;
      case 168:strcat(str,"Doucette");break;
      case 169:strcat(str,"Downey");break;
      case 170:strcat(str,"Downing");break;
      case 171:strcat(str,"Doyle");break;
      case 172:strcat(str,"Drake");break;
      case 173:strcat(str,"Duell");break;
      case 174:strcat(str,"Duffield");break;
      case 175:strcat(str,"Duke");break;
      case 176:strcat(str,"Dunham");break;
      case 177:strcat(str,"Dunlap");break;
      case 178:strcat(str,"Duval");break;
      case 179:strcat(str,"Earle");break;
      case 180:strcat(str,"English");break;
      case 181:strcat(str,"Escobar");break;
      case 182:strcat(str,"Ericson");break;
      case 183:strcat(str,"Eubanks");break;
      case 184:strcat(str,"Evans");break;
      case 185:strcat(str,"al Fadil");break;
      case 186:strcat(str,"Fairbanks");break;
      case 187:strcat(str,"Fairchild");break;
      case 188:strcat(str,"Falco");break;
      case 189:strcat(str,"Farnsworth");break;
      case 190:strcat(str,"Farr");break;
      case 191:strcat(str,"Faulkner");break;
      case 192:strcat(str,"Fenoglio");break;
      case 193:strcat(str,"Fiddlebottom");break;
      case 194:strcat(str,"Fields");break;
      case 195:strcat(str,"Filler");break;
      case 196:strcat(str,"Fimple");break;
      case 197:strcat(str,"Fingleton");break;
      case 198:strcat(str,"Finn");break;
      case 199:strcat(str,"Fisher");break;
      case 200:strcat(str,"Fitzgerald");break;
      case 201:strcat(str,"Fitzpatrick");break;
      case 202:strcat(str,"Flanders");break;
      case 203:strcat(str,"Fletcher");break;
      case 204:strcat(str,"Florez");break;
      case 205:strcat(str,"Fortmuller");break;
      case 206:strcat(str,"Ford");break;
      case 207:strcat(str,"Foster");break;
      case 208:strcat(str,"Fox");break;
      case 209:strcat(str,"France");break;
      case 210:strcat(str,"Franklin");break;
      case 211:strcat(str,"Frost");break;
      case 212:strcat(str,"Friend");break;
      case 213:strcat(str,"Fudge");break;
      case 214:strcat(str,"Fulsom");break;
      case 215:strcat(str,"Furley");break;
      case 216:strcat(str,"Fushimi");break;
      case 217:strcat(str,"Gacy");break;
      case 218:strcat(str,"Galindo");break;
      case 219:strcat(str,"Garcia");break;
      case 220:strcat(str,"Garnier");break;
      case 221:strcat(str,"Gates");break;
      case 222:strcat(str,"Gatien");break;
      case 223:strcat(str,"Gelbart");break;
      case 224:strcat(str,"Getty");break;
      case 225:strcat(str,"Gilbert");break;
      case 226:strcat(str,"Gillmouth");break;
      case 227:strcat(str,"Gilpin");break;
      case 228:strcat(str,"Godwin");break;
      case 229:strcat(str,"Gleaves");break;
      case 230:strcat(str,"Goldberg");break;
      case 231:strcat(str,"Goldstein");break;
      case 232:strcat(str,"Goode");break;
      case 233:strcat(str,"Goodyear");break;
      case 234:strcat(str,"Gore");break;
      case 235:strcat(str,"Govorov");break;
      case 236:strcat(str,"Grammer");break;
      case 237:strcat(str,"Grant");break;
      case 238:strcat(str,"Gray");break;
      case 239:strcat(str,"Green");break;
      case 240:strcat(str,"Greenberg");break;
      case 241:strcat(str,"Gregg");break;
      case 242:strcat(str,"Grover");break;
      case 243:strcat(str,"Gu");break;
      case 244:strcat(str,"Guy");break;
      case 245:strcat(str,"Hall");break;
      case 246:strcat(str,"Hamilton");break;
      case 247:strcat(str,"Hammond");break;
      case 248:strcat(str,"Hann");break;
      case 249:strcat(str,"Hannemann");break;
      case 250:strcat(str,"Hapsburg");break;
      case 251:strcat(str,"Harper");break;
      case 252:strcat(str,"Harris");break;
      case 253:strcat(str,"Hatcher");break;
      case 254:strcat(str,"Hawking");break;
      case 255:strcat(str,"Haymer");break;
      case 256:strcat(str,"Headley");break;
      case 257:strcat(str,"Heath");break;
      case 258:strcat(str,"Heller");break;
      case 259:strcat(str,"Hellmann");break;
      case 260:strcat(str,"Helton");break;
      case 261:strcat(str,"Hemingway");break;
      case 262:strcat(str,"Henderson");break;
      case 263:strcat(str,"Hendren");break;
      case 264:strcat(str,"Hendrix");break;
      case 265:strcat(str,"Hepburn");break;
      case 266:strcat(str,"Hepditch");break;
      case 267:strcat(str,"Hewson");break;
      case 268:strcat(str,"Heyduke");break;
      case 269:strcat(str,"Hiaasen");break;
      case 270:strcat(str,"Hill");break;
      case 271:strcat(str,"Hilliard");break;
      case 272:strcat(str,"Himelstein");break;
      case 273:strcat(str,"Hoddinott");break;
      case 274:strcat(str,"Hoffmann");break;
      case 275:strcat(str,"Hogan");break;
      case 276:strcat(str,"Holder");break;
      case 277:strcat(str,"Hooker");break;
      case 278:strcat(str,"Hoover");break;
      case 279:strcat(str,"Hope");break;
      case 280:strcat(str,"Hopkins");break;
      case 281:strcat(str,"Hopper");break;
      case 282:strcat(str,"Hornberger");break;
      case 283:strcat(str,"Houghton");break;
      case 284:strcat(str,"Houseman");break;
      case 285:strcat(str,"Howard");break;
      case 286:strcat(str,"Howe");break;
      case 287:strcat(str,"Hudson");break;
      case 288:strcat(str,"Hughes");break;
      case 289:strcat(str,"Hunnicutt");break;
      case 290:strcat(str,"Hutchison");break;
      case 291:strcat(str,"Ibarra");break;
      case 292:strcat(str,"Incledon");break;
      case 293:strcat(str,"Inking");break;
      case 294:strcat(str,"Irvin");break;
      case 295:strcat(str,"Irving");break;
      case 296:strcat(str,"Issacson");break;
      case 297:strcat(str,"Ivanson");break;
      case 298:strcat(str,"Ives");break;
      case 299:strcat(str,"Jackson");break;
      case 300:strcat(str,"Jameson");break;
      case 301:strcat(str,"Jefferson");break;
      case 302:strcat(str,"Jenkins");break;
      case 303:strcat(str,"Jimison");break;
      case 304:strcat(str,"Johnson");break;
      case 305:strcat(str,"Jones");break;
      case 306:strcat(str,"Jordan");break;
      case 307:strcat(str,"Judge");break;
      case 308:strcat(str,"Justice");break;
      case 309:strcat(str,"Kaltenbrunner");break;
      case 310:strcat(str,"Keaton");break;
      case 311:strcat(str,"Keats");break;
      case 312:strcat(str,"Keene");break;
      case 313:strcat(str,"Keitel");break;
      case 314:strcat(str,"Kent");break;
      case 315:strcat(str,"Kershaw");break;
      case 316:strcat(str,"Kesten");break;
      case 317:strcat(str,"Kilbourne");break;
      case 318:strcat(str,"Kindale");break;
      case 319:strcat(str,"King");break;
      case 320:strcat(str,"Kinslow");break;
      case 321:strcat(str,"Kitchen");break;
      case 322:strcat(str,"Kokernot");break;
      case 323:strcat(str,"Koprowski");break;
      case 324:strcat(str,"Krasow");break;
      case 325:strcat(str,"Krieger");break;
      case 326:strcat(str,"Krishna");break;
      case 327:strcat(str,"Kunstler");break;
      case 328:strcat(str,"Kurosawa");break;
      case 329:strcat(str,"Langley");break;
      case 330:strcat(str,"LaSaga");break;
      case 331:strcat(str,"Lauder");break;
      case 332:strcat(str,"Lee");break;
      case 333:strcat(str,"Leeves");break;
      case 334:strcat(str,"Lewis");break;
      case 335:strcat(str,"Leyden");break;
      case 336:strcat(str,"Li");break;
      case 337:strcat(str,"Lincoln");break;
      case 338:strcat(str,"Linville");break;
      case 339:strcat(str,"Lipman");break;
      case 340:strcat(str,"Little");break;
      case 341:strcat(str,"Loeb");break;
      case 342:strcat(str,"Logan");break;
      case 343:strcat(str,"Logsdon");break;
      case 344:strcat(str,"Lombard");break;
      case 345:strcat(str,"London");break;
      case 346:strcat(str,"Lopez");break;
      case 347:strcat(str,"Lovecraft");break;
      case 348:strcat(str,"Lowcourt");break;
      case 349:strcat(str,"Lowe");break;
      case 350:strcat(str,"Lowerly");break;
      case 351:strcat(str,"Lucas");break;
      case 352:strcat(str,"Luna");break;
      case 353:strcat(str,"Lushington");break;
      case 354:strcat(str,"Luzinski");break;
      case 355:strcat(str,"Lyles");break;
      case 356:strcat(str,"Lynam");break;
      case 357:strcat(str,"Lynch");break;
      case 358:strcat(str,"Van Lynden");break;
      case 359:strcat(str,"Lyons");break;
      case 360:strcat(str,"MacGyver");break;
      case 361:strcat(str,"MacKinley");break;
      case 362:strcat(str,"MacKinnon");break;
      case 363:strcat(str,"MacLeod");break;
      case 364:strcat(str,"MacNeil");break;
      case 365:strcat(str,"Macy");break;
      case 366:strcat(str,"Mahoney");break;
      case 367:strcat(str,"Malone");break;
      case 368:strcat(str,"Mann");break;
      case 369:strcat(str,"Manning");break;
      case 370:strcat(str,"Mansfield");break;
      case 371:strcat(str,"March");break;
      case 372:strcat(str,"Marsden");break;
      case 373:strcat(str,"Marsh");break;
      case 374:strcat(str,"Marshall");break;
      case 375:strcat(str,"Matheson");break;
      case 376:strcat(str,"Mathewson");break;
      case 377:strcat(str,"Maxwell");break;
      case 378:strcat(str,"McAdams");break;
      case 379:strcat(str,"McAllister");break;
      case 380:strcat(str,"McArthur");break;
      case 381:strcat(str,"McBroom");break;
      case 382:strcat(str,"McCain");break;
      case 383:strcat(str,"McCarthy");break;
      case 384:strcat(str,"McCorkell");break;
      case 385:strcat(str,"McDonald");break;
      case 386:strcat(str,"McFadden");break;
      case 387:strcat(str,"McFatridge");break;
      case 388:strcat(str,"McFaul");break;
      case 389:strcat(str,"McGee");break;
      case 390:strcat(str,"McGovern");break;
      case 391:strcat(str,"McGrath");break;
      case 392:strcat(str,"McGraw");break;
      case 393:strcat(str,"McGuinness");break;
      case 394:strcat(str,"McIntosh");break;
      case 395:strcat(str,"McIntyre");break;
      case 396:strcat(str,"McKenzie");break;
      case 397:strcat(str,"McLaughlin");break;
      case 398:strcat(str,"McLeod");break;
      case 399:strcat(str,"McMurray");break;
      case 400:strcat(str,"McNabb");break;
      case 401:strcat(str,"McPhail");break;
      case 402:strcat(str,"McPherson");break;
      case 403:strcat(str,"McQueen");break;
      case 404:strcat(str,"McVeigh");break;
      case 405:strcat(str,"Meek");break;
      case 406:strcat(str,"Meffert");break;
      case 407:strcat(str,"Melendez");break;
      case 408:strcat(str,"Metzger");break;
      case 409:strcat(str,"Mifune");break;
      case 410:strcat(str,"Milburn");break;
      case 411:strcat(str,"Miller");break;
      case 412:strcat(str,"Mitchell");break;
      case 413:strcat(str,"Miyamoto");break;
      case 414:strcat(str,"Monroe");break;
      case 415:strcat(str,"Montag");break;
      case 416:strcat(str,"Montalvo");break;
      case 417:strcat(str,"Montana");break;
      case 418:strcat(str,"Moon");break;
      case 419:strcat(str,"Morris");break;
      case 420:strcat(str,"Morrow");break;
      case 421:strcat(str,"Morton");break;
      case 422:strcat(str,"Mosley");break;
      case 423:strcat(str,"Muhammed");break;
      case 424:strcat(str,"Murphy");break;
      case 425:strcat(str,"Murray");break;
      case 426:strcat(str,"Murrell");break;
      case 427:strcat(str,"Muscat");break;
      case 428:strcat(str,"Muskhelishvili");break;
      case 429:strcat(str,"Mussa");break;
      case 430:strcat(str,"Myatt");break;
      case 431:strcat(str,"Myers");break;
      case 432:strcat(str,"Nagel");break;
      case 433:strcat(str,"Nagelberg");break;
      case 434:strcat(str,"Nakagawa");break;
      case 435:strcat(str,"Nakahara");break;
      case 436:strcat(str,"Nallet");break;
      case 437:strcat(str,"Nance");break;
      case 438:strcat(str,"Nash");break;
      case 439:strcat(str,"Nathanson");break;
      case 440:strcat(str,"Necker");break;
      case 441:strcat(str,"Nelson");break;
      case 442:strcat(str,"Ness");break;
      case 443:strcat(str,"Nettles");break;
      case 444:strcat(str,"Neuwirth");break;
      case 445:strcat(str,"Nevinson");break;
      case 446:strcat(str,"Newberry");break;
      case 447:strcat(str,"Newhook");break;
      case 448:strcat(str,"Newman");break;
      case 449:strcat(str,"Ng");break;
      case 450:strcat(str,"Nicolle");break;
      case 451:strcat(str,"Nickson");break;
      case 452:strcat(str,"Nielson");break;
      case 453:strcat(str,"Nixon");break;
      case 454:strcat(str,"North");break;
      case 455:strcat(str,"Oakley");break;
      case 456:strcat(str,"Obama");break;
      case 457:strcat(str,"Obeid");break;
      case 458:strcat(str,"Oberlander");break;
      case 459:strcat(str,"Ochs");break;
      case 460:strcat(str,"Ogden");break;
      case 461:strcat(str,"Olde");break;
      case 462:strcat(str,"Olds");break;
      case 463:strcat(str,"Oldsmar");break;
      case 464:strcat(str,"Ollerenshaw");break;
      case 465:strcat(str,"Orlando");break;
      case 466:strcat(str,"Ortiz");break;
      case 467:strcat(str,"Paoletti");break;
      case 468:strcat(str,"Palm");break;
      case 469:strcat(str,"Palmer");break;
      case 470:strcat(str,"Parker");break;
      case 471:strcat(str,"Parking");break;
      case 472:strcat(str,"Parr");break;
      case 473:strcat(str,"Patterson");break;
      case 474:strcat(str,"Pearson");break;
      case 475:strcat(str,"Peck");break;
      case 476:strcat(str,"Pegg");break;
      case 477:strcat(str,"Pelton");break;
      case 478:strcat(str,"Pendergrass");break;
      case 479:strcat(str,"Pendleton");break;
      case 480:strcat(str,"Perez");break;
      case 481:strcat(str,"Pert");break;
      case 482:strcat(str,"Peterson");break;
      case 483:strcat(str,"Petermann");break;
      case 484:strcat(str,"Pickett");break;
      case 485:strcat(str,"Pierce");break;
      case 486:strcat(str,"Piercey");break;
      case 487:strcat(str,"Pommerencke");break;
      case 488:strcat(str,"Pomper");break;
      case 489:strcat(str,"Porcaro");break;
      case 490:strcat(str,"Porter");break;
      case 491:strcat(str,"Postman");break;
      case 492:strcat(str,"Potter");break;
      case 493:strcat(str,"Pound");break;
      case 494:strcat(str,"Powers");break;
      case 495:strcat(str,"Presley");break;
      case 496:strcat(str,"Probst");break;
      case 497:strcat(str,"Proudfoot");break;
      case 498:strcat(str,"Pryor");break;
      case 499:strcat(str,"Puente");break;
      case 500:strcat(str,"Purcell");break;
      case 501:strcat(str,"Queen");break;
      case 502:strcat(str,"Quennell");break;
      case 503:strcat(str,"Quick");break;
      case 504:strcat(str,"Quilico");break;
      case 505:strcat(str,"Quilliam");break;
      case 506:strcat(str,"Quilty");break;
      case 507:strcat(str,"Quincey");break;
      case 508:strcat(str,"Quinlivan");break;
      case 509:strcat(str,"Quinn");break;
      case 510:strcat(str,"Quirk");break;
      case 511:strcat(str,"Rabban");break;
      case 512:strcat(str,"Rackard");break;
      case 513:strcat(str,"Radman");break;
      case 514:strcat(str,"Rainey");break;
      case 515:strcat(str,"Ramirez");break;
      case 516:strcat(str,"Rand");break;
      case 517:strcat(str,"Randell");break;
      case 518:strcat(str,"Ransom");break;
      case 519:strcat(str,"Rappaport");break;
      case 520:strcat(str,"Raskin");break;
      case 521:strcat(str,"Rastrelli");break;
      case 522:strcat(str,"Rather");break;
      case 523:strcat(str,"Ratzenberger");break;
      case 524:strcat(str,"Ravenhill");break;
      case 525:strcat(str,"Rawls");break;
      case 526:strcat(str,"Read");break;
      case 527:strcat(str,"Reading");break;
      case 528:strcat(str,"Reagan");break;
      case 529:strcat(str,"Reasoner");break;
      case 530:strcat(str,"Van Rechteren");break;
      case 531:strcat(str,"Redford");break;
      case 532:strcat(str,"Redman");break;
      case 533:strcat(str,"Redwine");break;
      case 534:strcat(str,"Reed");break;
      case 535:strcat(str,"Reekers");break;
      case 536:strcat(str,"Rendell");break;
      case 537:strcat(str,"Rexford");break;
      case 538:strcat(str,"Reynolds");break;
      case 539:strcat(str,"Ricci");break;
      case 540:strcat(str,"Richardson");break;
      case 541:strcat(str,"Richter");break;
      case 542:strcat(str,"Rideout");break;
      case 543:strcat(str,"Riffle");break;
      case 544:strcat(str,"Robinson");break;
      case 545:strcat(str,"Rodham");break;
      case 546:strcat(str,"Rojo");break;
      case 547:strcat(str,"Roland");break;
      case 548:strcat(str,"Roosevelt");break;
      case 549:strcat(str,"Rose");break;
      case 550:strcat(str,"Rosenberg");break;
      case 551:strcat(str,"Ross");break;
      case 552:strcat(str,"Rota");break;
      case 553:strcat(str,"Rothstein");break;
      case 554:strcat(str,"Roy");break;
      case 555:strcat(str,"Roylance");break;
      case 556:strcat(str,"Rudkin");break;
      case 557:strcat(str,"Rush");break;
      case 558:strcat(str,"Rushworth");break;
      case 559:strcat(str,"la Russa");break;
      case 560:strcat(str,"Russell");break;
      case 561:strcat(str,"Rutherford");break;
      case 562:strcat(str,"Ryman");break;
      case 563:strcat(str,"Sabella");break;
      case 564:strcat(str,"Saddler");break;
      case 565:strcat(str,"Sadler");break;
      case 566:strcat(str,"Sansome");break;
      case 567:strcat(str,"Santiago");break;
      case 568:strcat(str,"Santos");break;
      case 569:strcat(str,"Savedra");break;
      case 570:strcat(str,"Sawyer");break;
      case 571:strcat(str,"Saxton");break;
      case 572:strcat(str,"Scales");break;
      case 573:strcat(str,"Scardino");break;
      case 574:strcat(str,"Schmitt");break;
      case 575:strcat(str,"Schumacher");break;
      case 576:strcat(str,"Schuster");break;
      case 577:strcat(str,"Scott");break;
      case 578:strcat(str,"Scully");break;
      case 579:strcat(str,"Scurfield");break;
      case 580:strcat(str,"Sealock");break;
      case 581:strcat(str,"Seay");break;
      case 582:strcat(str,"Sellers");break;
      case 583:strcat(str,"Semin");break;
      case 584:strcat(str,"Serling");break;
      case 585:strcat(str,"Sewall");break;
      case 586:strcat(str,"Sexton");break;
      case 587:strcat(str,"Shackleton");break;
      case 588:strcat(str,"Shagwell");break;
      case 589:strcat(str,"al Shamie");break;
      case 590:strcat(str,"Shanahan");break;
      case 591:strcat(str,"Sharpe");break;
      case 592:strcat(str,"Shaw");break;
      case 593:strcat(str,"Shedd");break;
      case 594:strcat(str,"Shelby");break;
      case 595:strcat(str,"Shelton");break;
      case 596:strcat(str,"Shengde");break;
      case 597:strcat(str,"Shepard");break;
      case 598:strcat(str,"Shepardson");break;
      case 599:strcat(str,"Sheppard");break;
      case 600:strcat(str,"Sherman");break;
      case 601:strcat(str,"Shew");break;
      case 602:strcat(str,"Shields");break;
      case 603:strcat(str,"Shiller");break;
      case 604:strcat(str,"Shimazu");break;
      case 605:strcat(str,"Shipman");break;
      case 606:strcat(str,"Shipp");break;
      case 607:strcat(str,"Sho");break;
      case 608:strcat(str,"Short");break;
      case 609:strcat(str,"Shrapnal");break;
      case 610:strcat(str,"Shrum");break;
      case 611:strcat(str,"Shumway");break;
      case 612:strcat(str,"Shurin");break;
      case 613:strcat(str,"Shuttleworth");break;
      case 614:strcat(str,"Sidebottom");break;
      case 615:strcat(str,"Siegel");break;
      case 616:strcat(str,"Siever");break;
      case 617:strcat(str,"da Silva");break;
      case 618:strcat(str,"Silverman");break;
      case 619:strcat(str,"Silverstein");break;
      case 620:strcat(str,"Simmons");break;
      case 621:strcat(str,"Simms");break;
      case 622:strcat(str,"Simon");break;
      case 623:strcat(str,"Simpson");break;
      case 624:strcat(str,"Skidmore");break;
      case 625:strcat(str,"Skinner");break;
      case 626:strcat(str,"Skirrow");break;
      case 627:strcat(str,"Skutnik");break;
      case 628:strcat(str,"Skye");break;
      case 629:strcat(str,"Skyler");break;
      case 630:strcat(str,"Slaten");break;
      case 631:strcat(str,"Smalley");break;
      case 632:strcat(str,"Smallwood");break;
      case 633:strcat(str,"Smart");break;
      case 634:strcat(str,"Smith");break;
      case 635:strcat(str,"Smithers");break;
      case 636:strcat(str,"Smyth");break;
      case 637:strcat(str,"Snead");break;
      case 638:strcat(str,"Snook");break;
      case 639:strcat(str,"Snow");break;
      case 640:strcat(str,"Snyder");break;
      case 641:strcat(str,"Sommer");break;
      case 642:strcat(str,"Somner");break;
      case 643:strcat(str,"Soren");break;
      case 644:strcat(str,"Spasov");break;
      case 645:strcat(str,"Spears");break;
      case 646:strcat(str,"Spencer");break;
      case 647:strcat(str,"Stark");break;
      case 648:strcat(str,"Starkweather");break;
      case 649:strcat(str,"Stelling");break;
      case 650:strcat(str,"Stephenson");break;
      case 651:strcat(str,"Sterling");break;
      case 652:strcat(str,"Sternin");break;
      case 653:strcat(str,"Stevenson");break;
      case 654:strcat(str,"Stockton");break;
      case 655:strcat(str,"Stone");break;
      case 656:strcat(str,"Storm");break;
      case 657:strcat(str,"Storms");break;
      case 658:strcat(str,"Stiver");break;
      case 659:strcat(str,"Strain");break;
      case 660:strcat(str,"Straley");break;
      case 661:strcat(str,"Straub");break;
      case 662:strcat(str,"Strauss");break;
      case 663:strcat(str,"Stripe");break;
      case 664:strcat(str,"Strossen");break;
      case 665:strcat(str,"Suave");break;
      case 666:strcat(str,"Suiter");break;
      case 667:strcat(str,"Sulaiman");break;
      case 668:strcat(str,"Sullivan");break;
      case 669:strcat(str,"Surnow");break;
      case 670:strcat(str,"Susman");break;
      case 671:strcat(str,"Swain");break;
      case 672:strcat(str,"Swaine");break;
      case 673:strcat(str,"Swanson");break;
      case 674:strcat(str,"Sweeney");break;
      case 675:strcat(str,"Swift");break;
      case 676:strcat(str,"Swit");break;
      case 677:strcat(str,"Symington");break;
      case 678:strcat(str,"Symonds");break;
      case 679:strcat(str,"Tabb");break;
      case 680:strcat(str,"Tailboys");break;
      case 681:strcat(str,"Takayoshi");break;
      case 682:strcat(str,"Talbert");break;
      case 683:strcat(str,"Talbot");break;
      case 684:strcat(str,"Talbott");break;
      case 685:strcat(str,"Talty");break;
      case 686:strcat(str,"Tanner");break;
      case 687:strcat(str,"Tatters");break;
      case 688:strcat(str,"Taubman");break;
      case 689:strcat(str,"Taylor");break;
      case 690:strcat(str,"Tayo");break;
      case 691:strcat(str,"Teige");break;
      case 692:strcat(str,"Tell");break;
      case 693:strcat(str,"Templeton");break;
      case 694:strcat(str,"Tennent");break;
      case 695:strcat(str,"Tenney");break;
      case 696:strcat(str,"Tenpenny");break;
      case 697:strcat(str,"Terrill");break;
      case 698:strcat(str,"Testore");break;
      case 699:strcat(str,"Tetley");break;
      case 700:strcat(str,"Thalberg");break;
      case 701:strcat(str,"Thatcher");break;
      case 702:strcat(str,"Thomaz");break;
      case 703:strcat(str,"Thompson");break;
      case 704:strcat(str,"Thomson");break;
      case 705:strcat(str,"Thorne");break;
      case 706:strcat(str,"Threepwood");break;
      case 707:strcat(str,"Thurgood");break;
      case 708:strcat(str,"Thurlow");break;
      case 709:strcat(str,"Tickell");break;
      case 710:strcat(str,"Tillett");break;
      case 711:strcat(str,"Tillinghast");break;
      case 712:strcat(str,"Tillson");break;
      case 713:strcat(str,"Tillsley");break;
      case 714:strcat(str,"Timmonds");break;
      case 715:strcat(str,"Tippett");break;
      case 716:strcat(str,"Tisdall");break;
      case 717:strcat(str,"Tishman");break;
      case 718:strcat(str,"Titcomb");break;
      case 719:strcat(str,"Tobin");break;
      case 720:strcat(str,"Todd");break;
      case 721:strcat(str,"Todhunter");break;
      case 722:strcat(str,"Toft");break;
      case 723:strcat(str,"Tolbert");break;
      case 724:strcat(str,"Tolkien");break;
      case 725:strcat(str,"Tolson");break;
      case 726:strcat(str,"Tonelli");break;
      case 727:strcat(str,"Toogood");break;
      case 728:strcat(str,"Tooke");break;
      case 729:strcat(str,"Toole");break;
      case 730:strcat(str,"Toth");break;
      case 731:strcat(str,"Towne");break;
      case 732:strcat(str,"Townsend");break;
      case 733:strcat(str,"Trafford");break;
      case 734:strcat(str,"Trebek");break;
      case 735:strcat(str,"Truman");break;
      case 736:strcat(str,"Tubbs");break;
      case 737:strcat(str,"Tubman");break;
      case 738:strcat(str,"Tucker");break;
      case 739:strcat(str,"Turner");break;
      case 740:strcat(str,"Tyler");break;
      case 741:strcat(str,"Tymchyshyn");break;
      case 742:strcat(str,"Ulmer");break;
      case 743:strcat(str,"Underhill");break;
      case 744:strcat(str,"Underdown");break;
      case 745:strcat(str,"Underwood");break;
      case 746:strcat(str,"Updike");break;
      case 747:strcat(str,"Upton");break;
      case 748:strcat(str,"Usher");break;
      case 749:strcat(str,"Ussher");break;
      case 750:strcat(str,"Valdez");break;
      case 751:strcat(str,"Vallance");break;
      case 752:strcat(str,"Vance");break;
      case 753:strcat(str,"Vasilevsky");break;
      case 754:strcat(str,"Venus");break;
      case 755:strcat(str,"Villa");break;
      case 756:strcat(str,"Villanueva");break;
      case 757:strcat(str,"Viscuso");break;
      case 758:strcat(str,"Voland");break;
      case 759:strcat(str,"Vulcar");break;
      case 760:strcat(str,"Wade");break;
      case 761:strcat(str,"Wadsworth");break;
      case 762:strcat(str,"Walden");break;
      case 763:strcat(str,"Walker");break;
      case 764:strcat(str,"Wallace");break;
      case 765:strcat(str,"Walsh");break;
      case 766:strcat(str,"Walton");break;
      case 767:strcat(str,"Walwyn");break;
      case 768:strcat(str,"Wang");break;
      case 769:strcat(str,"Ward");break;
      case 770:strcat(str,"Warman");break;
      case 771:strcat(str,"Warner");break;
      case 772:strcat(str,"Warr");break;
      case 773:strcat(str,"Washington");break;
      case 774:strcat(str,"Weathers");break;
      case 775:strcat(str,"Webber");break;
      case 776:strcat(str,"Webster");break;
      case 777:strcat(str,"Weeks");break;
      case 778:strcat(str,"Weller");break;
      case 779:strcat(str,"Wendt");break;
      case 780:strcat(str,"West");break;
      case 781:strcat(str,"Westlake");break;
      case 782:strcat(str,"Weston");break;
      case 783:strcat(str,"Weygand");break;
      case 784:strcat(str,"White");break;
      case 785:strcat(str,"Whitehead");break;
      case 786:strcat(str,"Whitley");break;
      case 787:strcat(str,"Wickes");break;
      case 788:strcat(str,"Wilcox");break;
      case 789:strcat(str,"Willett");break;
      case 790:strcat(str,"Williams");break;
      case 791:strcat(str,"Williamson");break;
      case 792:strcat(str,"Willman");break;
      case 793:strcat(str,"Wilson");break;
      case 794:strcat(str,"Winchester");break;
      case 795:strcat(str,"Winkelman");break;
      case 796:strcat(str,"Winslow");break;
      case 797:strcat(str,"Winter");break;
      case 798:strcat(str,"Wiseman");break;
      case 799:strcat(str,"Wolfe");break;
      case 800:strcat(str,"Wong");break;
      case 801:strcat(str,"Wood");break;
      case 802:strcat(str,"Woodrow");break;
      case 803:strcat(str,"Wright");break;
      case 804:strcat(str,"Wuornos");break;
      case 805:strcat(str,"Stassen");break;
      case 806:strcat(str,"Xue");break;
      case 807:strcat(str,"Yamaguchi");break;
      case 808:strcat(str,"Yates");break;
      case 809:strcat(str,"Yee");break;
      case 810:strcat(str,"Yerkovich");break;
      case 811:strcat(str,"Yim");break;
      case 812:strcat(str,"Young");break;
      case 813:strcat(str,"Youngblood");break;
      case 814:strcat(str,"Yue");break;
      case 815:strcat(str,"Zachary");break;
      case 816:strcat(str,"Zadora");break;
      case 817:strcat(str,"Zakharov");break;
      case 818:strcat(str,"Zale");break;
      case 819:strcat(str,"Zedner");break;
      case 820:strcat(str,"Zhang");break;
      case 821:strcat(str,"Zicree");break;
      case 822:strcat(str,"Zimmermann");break;
      case 823:strcat(str,"Zito");break;
      case 824:strcat(str,"Zlotoff");break;
      case 825:strcat(str,"Zondervan");break;
      case 826:strcat(str,"Zucker");break;
      case 827:strcat(str,"Zumbach");break;
      case 828:strcat(str,"Starr");break;
      case 829:strcat(str,"Falstaff");break;

      default:strcat(str,"Errorman");break;
   }
}
===== Age Macros ===== These determine basic age categories for characters. #define AGE_DOGYEARS 2+LCSrandom(5) /* for the animals */ #define AGE_CHILD 7+LCSrandom(4) /* child laborer */ #define AGE_TEENAGER 14+LCSrandom(4) /* HS dropout, teenager, some fast food workers */ #define AGE_YOUNGADULT 18+LCSrandom(18) /* young lads and ladies */ #define AGE_MATURE 20+LCSrandom(40) /* most folks */ #define AGE_GRADUATE 26+LCSrandom(34) /* most folks, with 6-8 years college */ #define AGE_MIDDLEAGED 35+LCSrandom(25) /* for the more experienced types */ #define AGE_SENIOR 65+LCSrandom(30) /* ah, social security */ ===== Civilian Weapon Assignment =====
/* Weapon assignment macros */
#define GIVE_WEAPON_CIVILIAN                                   \
         if(law[LAW_GUNCONTROL]==-1 && !LCSrandom(30)) {       \
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_38")]); \
            cr.give_weapon(w,NULL);                            \
            Clip c=Clip(*cliptype[getcliptype("CLIP_38")],4);  \
            cr.take_clips(c,4);                                \
            cr.reload(false);                                  \
         } else if(law[LAW_GUNCONTROL]==-2) {                  \
            if(!LCSrandom(10)) {                               \
               Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_9MM")]); \
               cr.give_weapon(w,NULL);                         \
               Clip c=Clip(*cliptype[getcliptype("CLIP_9")],4);\
               cr.take_clips(c,4);                             \
               cr.reload(false);                               \
            } else if(!LCSrandom(9)) {                         \
               Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_45")]); \
               cr.give_weapon(w,NULL);                         \
               Clip c=Clip(*cliptype[getcliptype("CLIP_45")],4); \
               cr.take_clips(c,4);                             \
               cr.reload(false);                               \
            }                                                  \
         }
===== Gender Macros =====
/* Gender macros */
#define GIVE_GENDER_MALE                                       \
   if(law[LAW_WOMEN]==-2 ||                              \
   (law[LAW_WOMEN]==-1 && LCSrandom(25)) ||           \
   (law[LAW_WOMEN]==0 && LCSrandom(10)) ||            \
   (law[LAW_WOMEN]==1 && LCSrandom(4))) {             \
   cr.gender_conservative=cr.gender_liberal=GENDER_MALE; \
         }

#define GIVE_GENDER_FEMALE                                     \
   if(law[LAW_WOMEN]==-2 ||                              \
   (law[LAW_WOMEN]==-1 && LCSrandom(25)) ||           \
   (law[LAW_WOMEN]==0 && LCSrandom(10)) ||            \
   (law[LAW_WOMEN]==1 && LCSrandom(4))) {             \
   cr.gender_conservative=cr.gender_liberal=GENDER_FEMALE; \
   }
===== Creature Sheet Creation =====
/* rolls up a creature's stats and equipment */
void makecreature(Creature &cr,short type) //Lots of temporary solution in this function. -XML
{
   Weapon* weapon = NULL;
   Armor* armor = NULL;
   Clip* clips = NULL;
   
   int a = 0;
   cr.creatureinit();

   cr.exists=1;
   cr.squadid=-1;
   cr.type=type;
   cr.infiltration=0;
   getrecruitcreature(cr.name,type);
   {
   Armor a=Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
   cr.give_armor(a,NULL);
   }
   cr.money=LCSrandom(21)+20;
   {
      int mood=publicmood(-1);
      conservatise(cr);
      if(LCSrandom(100)<mood)cr.align++;
      if(LCSrandom(100)<mood)cr.align++;
   }
   //cr.align=LCSrandom(3)-1;
   cr.worklocation=cursite;
   verifyworklocation(cr);

   int attcap[ATTNUM];
   for(a=0;a<ATTNUM;a++)
   {
      attcap[a]=10;
      cr.set_attribute(a,1);
   }
   int attnum=40;
   switch(type)
   {
      case CREATURE_BOUNCER:
         GIVE_GENDER_MALE;
         if(mode==GAMEMODE_SITE && location[cursite]->highsecurity)
         {
            strcpy(cr.name,"Enforcer");
            cr.set_skill(SKILL_CLUB,LCSrandom(3)+3);
         }

         if(law[LAW_GUNCONTROL]==-2)
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_SMG")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(law[LAW_GUNCONTROL]==-1)
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_44")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_44")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(law[LAW_GUNCONTROL]==0)
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_38")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_38")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_NIGHTSTICK")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_CHEAPSUIT")]);
         cr.give_armor(*armor,NULL);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(3)+1);
         if(disguisesite(sitetype))
         {
                 cr.align=-1;
                 cr.infiltration=0.1f*LCSrandom(4);
         }
         else cr.align=0;
         cr.age=AGE_MATURE;

         cr.set_attribute(ATTRIBUTE_HEALTH,3);
         cr.set_attribute(ATTRIBUTE_AGILITY,3);
         cr.set_attribute(ATTRIBUTE_STRENGTH,4);
         break;
      case CREATURE_SECURITYGUARD:
         GIVE_GENDER_MALE;
         if(law[LAW_GUNCONTROL]==-2)
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_SMG")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(law[LAW_GUNCONTROL]!=2)
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_38")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_38")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_NIGHTSTICK")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_SECURITYUNIFORM")]);
         cr.give_armor(*armor,NULL);
         cr.set_skill(SKILL_PISTOL,LCSrandom(3)+1);
         cr.align=-1;
         cr.infiltration=0.1f*LCSrandom(3);
         cr.age=AGE_MATURE;
         cr.set_attribute(ATTRIBUTE_HEALTH,3);
         cr.set_attribute(ATTRIBUTE_AGILITY,3);
         cr.set_attribute(ATTRIBUTE_STRENGTH,2);
         break;
      case CREATURE_SCIENTIST_LABTECH:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         if(!cr.is_armed() && !LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SYRINGE")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_LABCOAT")]);
         cr.give_armor(*armor,NULL);
         cr.align=-1;
         cr.infiltration=0.1f*LCSrandom(4);
         cr.age=AGE_MATURE;
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,5);
         cr.set_skill(SKILL_COMPUTERS,LCSrandom(2)+1);
         cr.set_skill(SKILL_SCIENCE,LCSrandom(4)+3);
         break;
      case CREATURE_JUDGE_CONSERVATIVE:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Hangin' Judge");
         if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_44")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_44")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(!LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_GAVEL")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_BLACKROBE")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(41)+20;
         cr.align=-1;
         cr.infiltration=0.5f + 0.1f*LCSrandom(4);
         cr.juice=100+LCSrandom(50);
         cr.age=AGE_MIDDLEAGED;

         cr.set_skill(SKILL_LAW,LCSrandom(6)+5);
         cr.set_skill(SKILL_WRITING,LCSrandom(3)+1);
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,5);
         cr.set_attribute(ATTRIBUTE_WISDOM,10);
         attcap[ATTRIBUTE_HEART]=1;
         break;
      case CREATURE_JUDGE_LIBERAL:
         strcpy(cr.name,"Liberal Judge");
         if(!LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_GAVEL")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_BLACKROBE")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(41)+20;
         cr.align=1;
         cr.age=AGE_MIDDLEAGED;

         cr.set_skill(SKILL_LAW,LCSrandom(6)+5);
         cr.set_skill(SKILL_WRITING,LCSrandom(3)+1);
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,5);
         cr.set_attribute(ATTRIBUTE_HEART,10);
         break;
      case CREATURE_SCIENTIST_EMINENT:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         if(!cr.is_armed() && !LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SYRINGE")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_LABCOAT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(41)+20;
         cr.align=-1;
         cr.infiltration=0.5f + 0.1f*LCSrandom(4);
         cr.juice=100+LCSrandom(50);
         cr.age=AGE_MIDDLEAGED;

         cr.set_skill(SKILL_WRITING,LCSrandom(3)+1);
         cr.set_skill(SKILL_SCIENCE,LCSrandom(6)+6);
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,10);
         cr.set_attribute(ATTRIBUTE_WISDOM,6);
         break;
      case CREATURE_CORPORATE_MANAGER:
         GIVE_WEAPON_CIVILIAN;
         armor=new Armor(*armortype[getarmortype("ARMOR_CHEAPSUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(41)+40;
         cr.align=-1;
         cr.infiltration=0.1f*LCSrandom(6);
         cr.age=AGE_MATURE;
         GIVE_GENDER_MALE;
         cr.set_skill(SKILL_BUSINESS,LCSrandom(4)+3);

         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,4);
         cr.set_attribute(ATTRIBUTE_CHARISMA,5);
         cr.set_attribute(ATTRIBUTE_WISDOM,5);
         break;
      case CREATURE_CORPORATE_CEO:
         GIVE_GENDER_MALE;
         //if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_DESERT_EAGLE")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_50AE")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_EXPENSIVESUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(1001)+1000;
         cr.align=-1;
         cr.infiltration=1.0f;
         cr.juice=1000;
         cr.age=AGE_MIDDLEAGED;
         generate_name(cr.propername, GENDER_WHITEMALEPATRIARCH);
         strcpy(cr.name,"CEO ");
         strcat(cr.name,cr.propername);
         cr.dontname = true;

         cr.set_skill(SKILL_BUSINESS,LCSrandom(6)+10);
         cr.set_skill(SKILL_DODGE,LCSrandom(6)+10);
         cr.set_skill(SKILL_PISTOL,LCSrandom(6)+10);
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,7);
         cr.set_attribute(ATTRIBUTE_CHARISMA,7);
         cr.set_attribute(ATTRIBUTE_WISDOM,12);
         break;
      case CREATURE_WORKER_SERVANT:
         cr.money=0;
         cr.align=1;
         armor=new Armor(*armortype[getarmortype("ARMOR_SERVANTUNIFORM")]);
         cr.give_armor(*armor,NULL);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_WORKER_JANITOR:
         GIVE_WEAPON_CIVILIAN;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_WORKER_SWEATSHOP:
         cr.strip(NULL);
         cr.align=1;
         cr.age=AGE_MATURE;
         cr.juice=-20;
         cr.flag|=CREATUREFLAG_ILLEGALALIEN;
         cr.set_skill(SKILL_TAILORING,LCSrandom(5)+1);
         break;
      case CREATURE_WORKER_FACTORY_NONUNION:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Nonunion Worker");
         weapon=new Weapon(*weapontype[getweapontype("WEAPON_CHAIN")]);
         cr.give_weapon(*weapon,NULL);
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         if(cr.align==1)
            cr.align=LCSrandom(2)-1;
         cr.age=AGE_MATURE;
         
         cr.set_attribute(ATTRIBUTE_STRENGTH,5);
         break;
      case CREATURE_WORKER_SECRETARY:
         GIVE_WEAPON_CIVILIAN;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         cr.set_skill(SKILL_WRITING,LCSrandom(2)+1);
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,2);
         break;
      case CREATURE_LANDLORD:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Landlord");
         cr.money=LCSrandom(121)+120;
         cr.align=0;
         cr.age=AGE_MATURE;
         cr.set_skill(SKILL_BUSINESS,LCSrandom(4)+3);
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,4);
         cr.set_attribute(ATTRIBUTE_WISDOM,4);
         break;
      case CREATURE_TEENAGER:
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_TEENAGER;
         break;
      case CREATURE_LAWYER:
         if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_38")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_38")],1);
            cr.take_clips(c,1);
            cr.reload(false);
         }
         strcpy(cr.name,"Lawyer");
         armor=new Armor(*armortype[getarmortype("ARMOR_CHEAPSUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(51)+50;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_GRADUATE;

         cr.set_skill(SKILL_LAW,LCSrandom(4)+4);
         cr.set_skill(SKILL_PERSUASION,LCSrandom(4)+2);

         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,6);
         cr.set_attribute(ATTRIBUTE_CHARISMA,4);
         break;
      case CREATURE_DOCTOR:
         GIVE_GENDER_MALE;
         if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_38")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_38")],1);
            cr.take_clips(c,1);
            cr.reload(false);
         }
         strcpy(cr.name,"Doctor");
         armor=new Armor(*armortype[getarmortype("ARMOR_LABCOAT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(21)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_GRADUATE;

         cr.set_skill(SKILL_FIRSTAID,LCSrandom(4)+4);
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,6);
         break;
      case CREATURE_PSYCHOLOGIST:
         GIVE_GENDER_MALE;
         if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_38")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_38")],1);
            cr.take_clips(c,1);
            cr.reload(false);
         }
         strcpy(cr.name,"Psychologist");
         if(cr.gender_liberal==GENDER_MALE||LCSrandom(2))
         {
            Armor a=Armor(*armortype[getarmortype("ARMOR_CHEAPSUIT")]);
            cr.give_armor(a,NULL);
         }
         else
         {
            Armor a=Armor(*armortype[getarmortype("ARMOR_CHEAPDRESS")]);
            cr.give_armor(a,NULL);
         }
         cr.money=LCSrandom(21)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_GRADUATE;

         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(4)+4);
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,6);
         cr.set_attribute(ATTRIBUTE_HEART,6);
         break;
      case CREATURE_NURSE:
         GIVE_GENDER_FEMALE;
         if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_38")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_38")],1);
            cr.take_clips(c,1);
            cr.reload(false);
         }
         strcpy(cr.name,"Nurse");
         armor=new Armor(*armortype[getarmortype("ARMOR_LABCOAT")]);
         cr.give_armor(*armor,NULL);
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_GRADUATE;

         cr.set_skill(SKILL_FIRSTAID,LCSrandom(4)+1);
         break;
      case CREATURE_WORKER_FACTORY_UNION:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Union Worker");
         weapon=new Weapon(*weapontype[getweapontype("WEAPON_CHAIN")]);
         cr.give_weapon(*weapon,NULL);
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.align=1;
         cr.age=AGE_MATURE;
         
         cr.set_attribute(ATTRIBUTE_STRENGTH,5);
         break;
      case CREATURE_TANK:
         strcpy(cr.name,"M1 Abrams Tank");
         cr.animalgloss=ANIMALGLOSS_TANK;
         cr.strip(NULL);
         cr.specialattack=ATTACK_CANNON;
         cr.align=-1;
         cr.set_skill(SKILL_HANDTOHAND,20);
         cr.age=AGE_TEENAGER; // wut?
         break;
      case CREATURE_MERC:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Mercenary");
         if(law[LAW_GUNCONTROL]==-2)
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_M16")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
            cr.take_clips(c,7);
            cr.reload(false);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIRIFLE_AR15")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
            cr.take_clips(c,7);
            cr.reload(false);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_CIVILLIANARMOR")]);
         cr.give_armor(*armor,NULL);
         cr.money=0;
         cr.align=-1;
         cr.infiltration=0.1f*LCSrandom(4);
         cr.juice=LCSrandom(50);
         cr.age=AGE_YOUNGADULT;

         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+1);
         cr.set_skill(SKILL_SECURITY,LCSrandom(3));
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(3));
         cr.set_skill(SKILL_PISTOL,LCSrandom(3));
         cr.set_skill(SKILL_DRIVING,LCSrandom(2));
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(2));
         break;
      case CREATURE_HICK:
         switch(LCSrandom(5))
         {
            case 0:strcpy(cr.name,"Country Boy");break;
            case 1:strcpy(cr.name,"Hick");break;
            case 2:strcpy(cr.name,"Redneck");break;
            case 3:strcpy(cr.name,"Rube");break;
            case 4:strcpy(cr.name,"Yokel");break;
         }
         if((law[LAW_GUNCONTROL]==-2 && !LCSrandom(2)) || !LCSrandom(10))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SHOTGUN_PUMP")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_BUCKSHOT")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(!LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_TORCH")]);
            cr.give_weapon(w,NULL);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_PITCHFORK")]);
            cr.give_weapon(w,NULL);
         }

         if(!LCSrandom(2))
         {
            Armor a=Armor(*armortype[getarmortype("ARMOR_OVERALLS")]);
            cr.give_armor(a,NULL);
         }
         else
         {
            Armor a=Armor(*armortype[getarmortype("ARMOR_WIFEBEATER")]);
            cr.give_armor(a,NULL);
         }
         cr.gender_conservative=cr.gender_liberal=GENDER_MALE;
         cr.money=LCSrandom(6)+6;
         cr.align=-1;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_SOLDIER:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Soldier");
         weapon=new Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_M16")]);
         cr.give_weapon(*weapon,NULL);
         clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
         cr.take_clips(*clips,7);
         cr.reload(false);
         armor=new Armor(*armortype[getarmortype("ARMOR_ARMYARMOR")]);
         cr.give_armor(*armor,NULL);
         cr.money=0;
         cr.align=-1;
         cr.infiltration=0.1f*LCSrandom(4);
         cr.juice=LCSrandom(100);
         cr.age=AGE_YOUNGADULT;

         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+1);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(3)+1);
         cr.set_skill(SKILL_PISTOL,LCSrandom(3)+1);
         cr.set_skill(SKILL_DRIVING,LCSrandom(3)+1);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(3)+1);

         cr.set_attribute(ATTRIBUTE_STRENGTH,5);
         cr.set_attribute(ATTRIBUTE_AGILITY,5);
         cr.set_attribute(ATTRIBUTE_HEALTH,5);
         cr.set_attribute(ATTRIBUTE_WISDOM,5);
         break;
      case CREATURE_VETERAN:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Army Veteran");
         cr.money=LCSrandom(21)+20;
         cr.infiltration=0.1f*LCSrandom(4);
         cr.juice=LCSrandom(100);
         cr.age=AGE_MIDDLEAGED;

         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+1);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(3)+1);
         cr.set_skill(SKILL_PISTOL,LCSrandom(3)+1);
         cr.set_skill(SKILL_DRIVING,LCSrandom(3)+1);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(3)+1);

         cr.set_attribute(ATTRIBUTE_STRENGTH,5);
         cr.set_attribute(ATTRIBUTE_AGILITY,5);
         cr.set_attribute(ATTRIBUTE_HEALTH,5);
         break;
      case CREATURE_HARDENED_VETERAN:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Hardened Veteran");
         weapon=new Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_M16")]);
         cr.give_weapon(*weapon,NULL);
         clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
         cr.take_clips(*clips,7);
         cr.reload(false);
         armor=new Armor(*armortype[getarmortype("ARMOR_ARMYARMOR")]);
         cr.give_armor(*armor,NULL);
         cr.money=0;
         cr.align=-1;
         cr.infiltration=0.1f*LCSrandom(4);
         cr.juice=LCSrandom(100);
         cr.age=AGE_MIDDLEAGED;

         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+4);
         cr.set_skill(SKILL_SECURITY,LCSrandom(3));
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(3)+2);
         cr.set_skill(SKILL_PISTOL,LCSrandom(3)+2);
         cr.set_skill(SKILL_DRIVING,LCSrandom(3)+2);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(3)+1);

         cr.set_attribute(ATTRIBUTE_STRENGTH,7);
         cr.set_attribute(ATTRIBUTE_AGILITY,7);
         cr.set_attribute(ATTRIBUTE_HEALTH,7);
         break;
      case CREATURE_COP:
         if(law[LAW_POLICEBEHAVIOR]==2 && cr.align==ALIGN_LIBERAL && !LCSrandom(3)) // Peace Officer
         {
            GIVE_GENDER_MALE;
            cr.align=ALIGN_MODERATE;
            strcpy(cr.name,"Police Negotiator");
            Armor a=Armor(*armortype[getarmortype("ARMOR_POLICEARMOR")]);
            cr.give_armor(a,NULL);
            cr.money=LCSrandom(21)+20;
            cr.juice=10+LCSrandom(50);
            cr.age=AGE_MATURE;

            cr.set_skill(SKILL_PERSUASION,LCSrandom(4)+1);
            cr.set_skill(SKILL_PISTOL,LCSrandom(3)+1);
            cr.set_skill(SKILL_DRIVING,LCSrandom(2)+1);
            cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(3)+1);
   
            cr.set_attribute(ATTRIBUTE_STRENGTH,3);
            cr.set_attribute(ATTRIBUTE_AGILITY,3);
            cr.set_attribute(ATTRIBUTE_HEALTH,3);
            cr.set_attribute(ATTRIBUTE_HEART,4);
         }
         else
         {
            GIVE_GENDER_MALE;
            if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
            {
               Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
               cr.give_weapon(w,NULL);
               Clip c=Clip(*cliptype[getcliptype("CLIP_SMG")],4);
               cr.take_clips(c,4);
               cr.reload(false);
            }
            else if(!LCSrandom(3))
            {
               Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_9MM")]);
               cr.give_weapon(w,NULL);
               Clip c=Clip(*cliptype[getcliptype("CLIP_9")],6);
               cr.take_clips(c,6);
               cr.reload(false);
            }
            else if(!LCSrandom(2))
            {
               Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SHOTGUN_PUMP")]);
               cr.give_weapon(w,NULL);
               Clip c=Clip(*cliptype[getcliptype("CLIP_BUCKSHOT")],4);
               cr.take_clips(c,4);
               cr.reload(false);
            }
            else
            {
               Weapon w=Weapon(*weapontype[getweapontype("WEAPON_NIGHTSTICK")]);
               cr.give_weapon(w,NULL);
            }
            armor=new Armor(*armortype[getarmortype("ARMOR_POLICEARMOR")]);
            cr.give_armor(*armor,NULL);
            cr.money=LCSrandom(21)+20;
            cr.align=-1;
            cr.infiltration=0.3f + 0.1f*LCSrandom(4);
            cr.juice=10+LCSrandom(50);
            cr.age=AGE_MATURE;

            cr.set_skill(SKILL_PISTOL,LCSrandom(4)+1);
            cr.set_skill(SKILL_SHOTGUN,LCSrandom(3)+1);
            cr.set_skill(SKILL_CLUB,LCSrandom(2)+1);
            cr.set_skill(SKILL_HANDTOHAND,LCSrandom(2)+1);
            cr.set_skill(SKILL_DRIVING,LCSrandom(2)+1);
            cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(3)+1);
   
            cr.set_attribute(ATTRIBUTE_STRENGTH,3);
            cr.set_attribute(ATTRIBUTE_AGILITY,3);
            cr.set_attribute(ATTRIBUTE_HEALTH,3);
            cr.set_attribute(ATTRIBUTE_WISDOM,4);
         }
         break;
      case CREATURE_SWAT:
         GIVE_GENDER_MALE;
         if(LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_SMG")],6);
            cr.take_clips(c,6);
            cr.reload(false);
         }
         else if(!LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SHOTGUN_PUMP")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_BUCKSHOT")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_CARBINE_M4")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_ASSAULT")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_SWATARMOR")]);
         cr.give_armor(*armor,NULL);
         cr.align=-1;
         cr.infiltration=0.3f + 0.1f*LCSrandom(4);
         cr.juice=40+LCSrandom(50);
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+1);
         cr.set_skill(SKILL_PISTOL,LCSrandom(4)+1);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(4)+1);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(2)+1);
         cr.set_skill(SKILL_DRIVING,LCSrandom(2)+1);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(4)+1);

         cr.set_attribute(ATTRIBUTE_STRENGTH,3);
         cr.set_attribute(ATTRIBUTE_AGILITY,3);
         cr.set_attribute(ATTRIBUTE_HEALTH,3);
         cr.set_attribute(ATTRIBUTE_WISDOM,4);
         break;
      case CREATURE_DEATHSQUAD:
         GIVE_GENDER_MALE;
         weapon=new Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_M16")]);
         cr.give_weapon(*weapon,NULL);
         clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
         cr.take_clips(*clips,7);
         cr.reload(false);
         armor=new Armor(*armortype[getarmortype("ARMOR_DEATHSQUADUNIFORM")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(21)+20;
         cr.align=-1;
         cr.infiltration=0.5f + 0.1f*LCSrandom(4);
         cr.juice=90+LCSrandom(50);
         cr.age=AGE_YOUNGADULT;

         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+2);
         cr.set_skill(SKILL_PISTOL,LCSrandom(2)+1);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(2)+1);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(2)+1);
         cr.set_skill(SKILL_DRIVING,LCSrandom(2)+1);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(4)+2);

         cr.set_attribute(ATTRIBUTE_STRENGTH,3);
         cr.set_attribute(ATTRIBUTE_AGILITY,3);
         cr.set_attribute(ATTRIBUTE_HEALTH,3);
         cr.set_attribute(ATTRIBUTE_WISDOM,6);
         break;
      case CREATURE_FIREFIGHTER:
         GIVE_GENDER_MALE;
         if(law[LAW_FREESPEECH]==-2)
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_FLAMETHROWER")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_GASOLINE")],4);
            cr.take_clips(c,4);
            cr.reload(false);
            cr.set_skill(SKILL_HEAVYWEAPONS,LCSrandom(3)+2);
            strcpy(cr.name,"Fireman");
            cr.align=-1;
         } else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_AXE")]);
            cr.give_weapon(w,NULL);
            cr.set_skill(SKILL_AXE,LCSrandom(3)+2);
            strcpy(cr.name,"Firefighter");
         }
         
         if(sitealarm)
         {
            // Respond to emergencies in bunker gear
            Armor a=Armor(*armortype[getarmortype("ARMOR_BUNKERGEAR")]);
            cr.give_armor(a,NULL);
         }
         else
         {
            // Other situations have various clothes
            switch(LCSrandom(3))
            {
            case 0:
               armor=new Armor(*armortype[getarmortype("ARMOR_OVERALLS")]);
               cr.give_armor(*armor,NULL);
               break;
            case 1:
               armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
               cr.give_armor(*armor,NULL);
               break;
            case 2:
               armor=new Armor(*armortype[getarmortype("ARMOR_BUNKERGEAR")]);
               cr.give_armor(*armor,NULL);
            }
         }

         cr.infiltration=0.1f*LCSrandom(4);
         cr.age=AGE_MATURE;
         
         cr.set_attribute(ATTRIBUTE_HEALTH,3);
         cr.set_attribute(ATTRIBUTE_AGILITY,3);
         cr.set_attribute(ATTRIBUTE_STRENGTH,3);
         break;
      case CREATURE_CCS_MOLOTOV:
      {
         GIVE_GENDER_MALE;
         armor=new Armor(*armortype[getarmortype("ARMOR_TRENCHCOAT")]);
         cr.give_armor(*armor,NULL);
         weapon=new Weapon(*weapontype[getweapontype("WEAPON_MOLOTOV")],5);
         while (!weapon->empty())
            cr.give_weapon(*weapon,NULL);
         cr.money=LCSrandom(21)+20;
         cr.align=-1;
         cr.infiltration=0.5f + 0.1f*LCSrandom(4);
         cr.juice=90+LCSrandom(120);
         cr.age=AGE_MATURE;

         if(mode==GAMEMODE_SITE/* && sitealarm>0*/)
         {
            nameCCSMember(cr);
         }

         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(4)+2);
         cr.set_skill(SKILL_THROWING,LCSrandom(4)+2);
         cr.set_skill(SKILL_DRIVING,LCSrandom(4)+2);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(3));
         cr.set_skill(SKILL_BUSINESS,LCSrandom(3));
         cr.set_skill(SKILL_RELIGION,LCSrandom(3)+1);

         for(a=0;a<ATTNUM;a++)
         {
            cr.set_attribute(a,1);
            attcap[a]=20;
         }
         attcap[ATTRIBUTE_HEART]=4;
         cr.set_attribute(ATTRIBUTE_STRENGTH,6);
         cr.set_attribute(ATTRIBUTE_AGILITY,6);
         cr.set_attribute(ATTRIBUTE_HEALTH,6);
         cr.set_attribute(ATTRIBUTE_WISDOM,8);
         break;
      }
      case CREATURE_CCS_SNIPER:
      {
         GIVE_GENDER_MALE;
         armor=new Armor(*armortype[getarmortype("ARMOR_TRENCHCOAT")]);
         cr.give_armor(*armor,NULL);
         Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIRIFLE_AR15")]);
         cr.give_weapon(w,NULL);
         Clip c=Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
         cr.take_clips(c,7);
         cr.reload(false);

         cr.money=LCSrandom(21)+20;
         cr.align=-1;
         cr.infiltration=0.5f + 0.1f*LCSrandom(4);
         cr.juice=90+LCSrandom(120);
         cr.age=AGE_MATURE;

         if(mode==GAMEMODE_SITE/* && sitealarm>0*/)
         {
            nameCCSMember(cr);
         }

         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(4)+2);
         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+6);
         cr.set_skill(SKILL_DRIVING,LCSrandom(4)+2);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(3));
         cr.set_skill(SKILL_BUSINESS,LCSrandom(3));
         cr.set_skill(SKILL_RELIGION,LCSrandom(3)+1);

         for(a=0;a<ATTNUM;a++)
         {
            cr.set_attribute(a,1);
            attcap[a]=20;
         }
         attcap[ATTRIBUTE_HEART]=4;
         cr.set_attribute(ATTRIBUTE_STRENGTH,6);
         cr.set_attribute(ATTRIBUTE_AGILITY,6);
         cr.set_attribute(ATTRIBUTE_HEALTH,6);
         cr.set_attribute(ATTRIBUTE_WISDOM,8);
         break;
      }
      case CREATURE_CCS_VIGILANTE:
      {
         GIVE_GENDER_MALE;
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         switch(LCSrandom(5)+endgamestate)
         {
         case 0:
         case 1:
            break;
         case 2:
            weapon=new Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_9MM")]);
            cr.give_weapon(*weapon,NULL);
            clips=new Clip(*cliptype[getcliptype("CLIP_9")],7);
            cr.take_clips(*clips,7);
            cr.reload(false);
            break;
         case 3:
            weapon=new Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_44")]);
            cr.give_weapon(*weapon,NULL);
            clips=new Clip(*cliptype[getcliptype("CLIP_44")],7);
            cr.take_clips(*clips,7);
            cr.reload(false);
            break;
         case 4:
            weapon=new Weapon(*weapontype[getweapontype("WEAPON_SHOTGUN_PUMP")]);
            cr.give_weapon(*weapon,NULL);
            clips=new Clip(*cliptype[getcliptype("CLIP_BUCKSHOT")],7);
            cr.take_clips(*clips,7);
            cr.reload(false);
            break;
         case 5:
            weapon=new Weapon(*weapontype[getweapontype("WEAPON_SEMIRIFLE_AR15")]);
            cr.give_weapon(*weapon,NULL);
            clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
            cr.take_clips(*clips,7);
            cr.reload(false);
            armor=new Armor(*armortype[getarmortype("ARMOR_CIVILLIANARMOR")]);
            cr.give_armor(*armor,NULL);
            break;
         case 6:
            weapon=new Weapon(*weapontype[getweapontype("WEAPON_SEMIRIFLE_AR15")]);
            cr.give_weapon(*weapon,NULL);
            clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
            cr.take_clips(*clips,7);
            cr.reload(false);
            armor=new Armor(*armortype[getarmortype("ARMOR_ARMYARMOR")]);
            cr.give_armor(*armor,NULL);
            break;
         case 7:
            weapon=new Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_M16")]);
            cr.give_weapon(*weapon,NULL);
            clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],7);
            cr.take_clips(*clips,7);
            cr.reload(false);
            armor=new Armor(*armortype[getarmortype("ARMOR_ARMYARMOR")]);
            cr.give_armor(*armor,NULL);
            break;
         }
         if(mode==GAMEMODE_SITE/* && sitealarm>0*/)
         {
            nameCCSMember(cr);
         }
         cr.money=LCSrandom(21)+20;
         cr.align=-1;
         cr.infiltration=0.5f + 0.1f*LCSrandom(4);
         cr.juice=90+LCSrandom(120);
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+3);
         cr.set_skill(SKILL_PISTOL,LCSrandom(4)+3);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(4)+3);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(4)+2);
         cr.set_skill(SKILL_DRIVING,LCSrandom(4)+2);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(3));
         cr.set_skill(SKILL_BUSINESS,LCSrandom(3));
         cr.set_skill(SKILL_RELIGION,LCSrandom(3)+1);

         for(a=0;a<ATTNUM;a++)
         {
            cr.set_attribute(a,1);
            attcap[a]=20;
         }
         attcap[ATTRIBUTE_HEART]=4;
         cr.set_attribute(ATTRIBUTE_STRENGTH,4);
         cr.set_attribute(ATTRIBUTE_AGILITY,4);
         cr.set_attribute(ATTRIBUTE_HEALTH,4);
         cr.set_attribute(ATTRIBUTE_WISDOM,8);
         break;
      }
      case CREATURE_CCS_ARCHCONSERVATIVE:
         GIVE_GENDER_MALE;
         weapon=new Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_M16")]);
         cr.give_weapon(*weapon,NULL);
         clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],9);
         cr.take_clips(*clips,9);
         cr.reload(false);
         armor=new Armor(*armortype[getarmortype("ARMOR_HEAVYARMOR")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(51)+150;
         cr.align=-1;
         cr.infiltration=0.9f + 0.01f*LCSrandom(11);
         cr.juice=500+LCSrandom(250);
         cr.age=AGE_MIDDLEAGED;

         if(mode==GAMEMODE_SITE/* && sitealarm>0*/)
         {
            nameCCSMember(cr);
         }

         cr.set_skill(SKILL_RIFLE,LCSrandom(4)+6);
         cr.set_skill(SKILL_PISTOL,LCSrandom(4)+6);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(4)+6);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(4)+4);
         cr.set_skill(SKILL_DRIVING,LCSrandom(4)+4);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(6));
         cr.set_skill(SKILL_BUSINESS,LCSrandom(6));
         cr.set_skill(SKILL_RELIGION,LCSrandom(6)+2);

         for(a=0;a<ATTNUM;a++)
         {
            cr.set_attribute(a,1);
            attcap[a]=25;
         }
         attcap[ATTRIBUTE_HEART]=1;
         cr.set_attribute(ATTRIBUTE_STRENGTH,4);
         cr.set_attribute(ATTRIBUTE_AGILITY,4);
         cr.set_attribute(ATTRIBUTE_HEALTH,4);
         cr.set_attribute(ATTRIBUTE_WISDOM,10);
         break;
      case CREATURE_GANGUNIT:
         GIVE_GENDER_MALE;
         if(!LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_SMG")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SHOTGUN_PUMP")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_BUCKSHOT")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_9MM")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_9")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_POLICEARMOR")]);
         cr.give_armor(*armor,NULL);
         cr.align=-1;
         cr.infiltration=0.3f + 0.1f*LCSrandom(4);
         cr.juice=40+LCSrandom(50);
         cr.age=AGE_YOUNGADULT;

         cr.set_skill(SKILL_RIFLE,LCSrandom(3)+1);
         cr.set_skill(SKILL_PISTOL,LCSrandom(4)+1);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(3)+1);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(2)+1);
         cr.set_skill(SKILL_DRIVING,LCSrandom(2)+1);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(4)+2);

         cr.set_attribute(ATTRIBUTE_STRENGTH,3);
         cr.set_attribute(ATTRIBUTE_AGILITY,3);
         cr.set_attribute(ATTRIBUTE_HEALTH,3);
         cr.set_attribute(ATTRIBUTE_WISDOM,5);
         break;
      case CREATURE_PRISONGUARD:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Prison Guard");
         if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_SMG")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(!LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SHOTGUN_PUMP")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_BUCKSHOT")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_NIGHTSTICK")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_PRISONGUARD")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(21)+20;
         cr.align=-1;
         cr.infiltration=0.1f*LCSrandom(4);
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_PISTOL,LCSrandom(2)+1);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(3)+1);
         cr.set_skill(SKILL_CLUB,LCSrandom(3)+2);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(2)+1);
         cr.set_skill(SKILL_DRIVING,LCSrandom(2));

         cr.set_attribute(ATTRIBUTE_STRENGTH,3);
         cr.set_attribute(ATTRIBUTE_AGILITY,3);
         cr.set_attribute(ATTRIBUTE_HEALTH,3);
         break;
      case CREATURE_EDUCATOR:
         strcpy(cr.name,"Educator");
         if(law[LAW_GUNCONTROL]==-2 && !LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_SMG")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(!LCSrandom(3))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_9MM")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_9")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SYRINGE")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_LABCOAT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(21)+20;
         cr.align=-1;
         cr.infiltration=0.1f*LCSrandom(4);
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_RIFLE,LCSrandom(3)+1);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(3)+1);
         cr.set_skill(SKILL_CLUB,LCSrandom(2)+1);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(2)+1);
         cr.set_skill(SKILL_DRIVING,LCSrandom(2));
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(4)+3);

         cr.set_attribute(ATTRIBUTE_STRENGTH,3);
         cr.set_attribute(ATTRIBUTE_AGILITY,3);
         cr.set_attribute(ATTRIBUTE_HEALTH,3);
         cr.set_attribute(ATTRIBUTE_WISDOM,4);
         break;
      case CREATURE_AGENT:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Agent");
         switch(LCSrandom(7))
         {
            case 0:
               weapon=new Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_44")]);
               cr.give_weapon(*weapon,NULL);
               clips=new Clip(*cliptype[getcliptype("CLIP_44")],4);
               cr.take_clips(*clips,4);
               cr.reload(false);
               break;
            case 1:
               weapon=new Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_9MM")]);
               cr.give_weapon(*weapon,NULL);
               clips=new Clip(*cliptype[getcliptype("CLIP_9")],4);
               cr.take_clips(*clips,4);
               cr.reload(false);
               break;
            case 2:
               weapon=new Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_M16")]);
               cr.give_weapon(*weapon,NULL);
               clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],4);
               cr.take_clips(*clips,4);
               cr.reload(false);
               break;
            case 3:
               weapon=new Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_AK47")]);
               cr.give_weapon(*weapon,NULL);
               clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],4);
               cr.take_clips(*clips,4);
               cr.reload(false);
               break;
            case 4:
               weapon=new Weapon(*weapontype[getweapontype("WEAPON_SHOTGUN_PUMP")]);
               cr.give_weapon(*weapon,NULL);
               clips=new Clip(*cliptype[getcliptype("CLIP_BUCKSHOT")],4);
               cr.take_clips(*clips,4);
               cr.reload(false);
               break;
            case 5:
               weapon=new Weapon(*weapontype[getweapontype("WEAPON_CARBINE_M4")]);
               cr.give_weapon(*weapon,NULL);
               clips=new Clip(*cliptype[getcliptype("CLIP_ASSAULT")],4);
               cr.take_clips(*clips,4);
               cr.reload(false);
               break;
            case 6:
               weapon=new Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
               cr.give_weapon(*weapon,NULL);
               clips=new Clip(*cliptype[getcliptype("CLIP_SMG")],4);
               cr.take_clips(*clips,4);
               cr.reload(false);
               break;
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_BLACKSUIT")]);
         cr.give_armor(*armor,NULL);
         cr.align=-1;
         cr.infiltration=0.5f*LCSrandom(4);
         cr.juice=200+LCSrandom(150);
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_PISTOL,LCSrandom(8)+2);
         cr.set_skill(SKILL_RIFLE,LCSrandom(8)+2);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(8)+2);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(8)+2);
         cr.set_skill(SKILL_CLUB,LCSrandom(8)+2);
         cr.set_skill(SKILL_DRIVING,LCSrandom(6)+4);
         cr.set_skill(SKILL_PSYCHOLOGY,LCSrandom(6)+4);
         cr.set_skill(SKILL_DODGE,LCSrandom(4)+4);
         
         cr.set_attribute(ATTRIBUTE_STRENGTH,5);
         cr.set_attribute(ATTRIBUTE_AGILITY,7);
         cr.set_attribute(ATTRIBUTE_HEALTH,5);
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,4);
         cr.set_attribute(ATTRIBUTE_WISDOM,5);
         break;
      case CREATURE_RADIOPERSONALITY:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Radio Personality");
         armor=new Armor(*armortype[getarmortype("ARMOR_EXPENSIVESUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(51)+50;
         cr.align=-1;
         cr.infiltration=0.6f + 0.1f*LCSrandom(4);
         cr.juice=100+LCSrandom(50);
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_PERSUASION,LCSrandom(8)+1);
         
         cr.set_attribute(ATTRIBUTE_CHARISMA,10);
         cr.set_attribute(ATTRIBUTE_WISDOM,8);
         break;
      case CREATURE_NEWSANCHOR:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"News Anchor");
         armor=new Armor(*armortype[getarmortype("ARMOR_EXPENSIVESUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(51)+50;
         
         cr.set_attribute(ATTRIBUTE_CHARISMA,10);
         cr.set_attribute(ATTRIBUTE_WISDOM,8);
         cr.align=-1;
         cr.infiltration=0.6f + 0.1f*LCSrandom(4);
         cr.juice=100+LCSrandom(50);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_GENETIC:
         if(location[cursite]->type==SITE_CORPORATE_HOUSE)
            strcpy(cr.name,"Pet ");
         else
            strcpy(cr.name,"");

         switch(LCSrandom(11))
         {
            case 0:strcat(cr.name,"Genetic Monster");break;
            case 1:
            {
               strcat(cr.name,"Flaming Rabbit");
               cr.specialattack=ATTACK_FLAME;
               break;
            }
            case 2:strcat(cr.name,"Genetic Nightmare");break;
            case 3:strcat(cr.name,"Mad Cow");break;
            case 4:
            {
               strcat(cr.name,"Giant Mosquito");
               cr.specialattack=ATTACK_SUCK;
               break;
            }
            case 5:strcat(cr.name,"Six-legged Pig");break;
            case 6:strcat(cr.name,"Purple Gorilla");break;
            case 7:strcat(cr.name,"Warped Bear");break;
            case 8:strcat(cr.name,"Writhing Mass");break;
            case 9:strcat(cr.name,"Something Bad");break;
            case 10:strcat(cr.name,"Pink Elephant");break;
         }
         cr.animalgloss=ANIMALGLOSS_ANIMAL;
         cr.strip(NULL);
         cr.align=-1;
         if(location[cursite]->type==SITE_CORPORATE_HOUSE)
            attcap[ATTRIBUTE_CHARISMA]=10;
         else
            attcap[ATTRIBUTE_CHARISMA]=2;
         attcap[ATTRIBUTE_INTELLIGENCE]=1;
         attcap[ATTRIBUTE_HEART]=6;
         attcap[ATTRIBUTE_WISDOM]=6;
         attcap[ATTRIBUTE_STRENGTH]=20;
         attcap[ATTRIBUTE_AGILITY]=20;
         cr.age=AGE_DOGYEARS;
         break;
      case CREATURE_GUARDDOG:
         strcpy(cr.name,"Guard Dog");
         cr.animalgloss=ANIMALGLOSS_ANIMAL;
         cr.strip(NULL);
         cr.align=-1;
         attcap[ATTRIBUTE_INTELLIGENCE]=1;
         attcap[ATTRIBUTE_HEART]=6;
         attcap[ATTRIBUTE_WISDOM]=6;
         cr.set_attribute(ATTRIBUTE_STRENGTH,7);
         attcap[ATTRIBUTE_STRENGTH]=12;
         cr.set_attribute(ATTRIBUTE_AGILITY,9);
         attcap[ATTRIBUTE_AGILITY]=15;
         cr.age=AGE_DOGYEARS;
         break;
      case CREATURE_PRISONER:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Prisoner");
         if(!LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SHANK")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_PRISONER")]);
         cr.give_armor(*armor,NULL);
         cr.money=0;
         cr.juice=-5;
         if(cr.align==-1)
            cr.align=LCSrandom(2);

         // Prisoners should not be "prisoners" after recruiting them -- they should
         // be some brand of criminal
         if(!LCSrandom(10))
         {
            // Thief
            cr.set_skill(SKILL_SECURITY,LCSrandom(5)+3);
            cr.set_skill(SKILL_DISGUISE,LCSrandom(5)+3);
            cr.set_skill(SKILL_STEALTH,LCSrandom(5)+3);
            //cr.set_skill(SKILL_THEFT,LCSrandom(5)+3);
            cr.type=CREATURE_THIEF;
            cr.age=AGE_MATURE;
         }
         else
         {
            switch(LCSrandom(5))
            {
            case 0:
               // Gang member
               cr.set_skill(SKILL_PISTOL,LCSrandom(2)+1);
               cr.set_skill(SKILL_SHOTGUN,LCSrandom(2)+1);
               cr.set_skill(SKILL_RIFLE,LCSrandom(2)+1);
               cr.type=CREATURE_GANGMEMBER;
               cr.age=AGE_YOUNGADULT;
               break;
            case 1:
               // Prostitute
               cr.set_skill(SKILL_PERSUASION,LCSrandom(4)+2);
               cr.set_skill(SKILL_SEDUCTION,LCSrandom(4)+2);
               cr.type=CREATURE_PROSTITUTE;
               cr.age=AGE_YOUNGADULT;
               break;
            case 2:
               // Crack head
               attcap[ATTRIBUTE_INTELLIGENCE]=1;
               attcap[ATTRIBUTE_HEALTH]=1+LCSrandom(5);
               attnum-=10;
               cr.type=CREATURE_CRACKHEAD;
               cr.age=AGE_YOUNGADULT;
               break;
            case 3:
               // Teenager
               cr.age=AGE_TEENAGER;
               cr.type=CREATURE_TEENAGER;
               break;
            case 4:
               // HS Dropout
               cr.age=AGE_TEENAGER;
               cr.type=CREATURE_HSDROPOUT;
               break;
            }
         }
         break;
      case CREATURE_JUROR:
         strcpy(cr.name,"Angry Juror");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=0;
         cr.align=-1;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_WORKER_FACTORY_CHILD:
         strcpy(cr.name,"Child Worker");
         weapon=new Weapon(*weapontype[getweapontype("WEAPON_CHAIN")]);
         cr.give_weapon(*weapon,NULL);
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=0;
         cr.align=1;
         cr.age=AGE_CHILD;
         
         cr.set_attribute(ATTRIBUTE_HEART,8);
         break;
      case CREATURE_SEWERWORKER:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Sewer Worker");
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_COLLEGESTUDENT:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"College Student");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=18+LCSrandom(6); // no macro

         cr.set_skill(SKILL_COMPUTERS,LCSrandom(2));
         cr.set_skill(SKILL_WRITING,LCSrandom(2)+1);
         cr.set_skill(SKILL_SCIENCE,LCSrandom(3));
         cr.set_skill(SKILL_ART,LCSrandom(3));
         cr.set_skill(SKILL_MUSIC,LCSrandom(3));
         break;
      case CREATURE_MUSICIAN:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Musician");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(11);
         cr.age=AGE_MATURE;
         cr.set_skill(SKILL_MUSIC,LCSrandom(4)+2);
         cr.set_skill(SKILL_SEDUCTION,LCSrandom(2));
         //cr.align=LCSrandom(3)-1;
         break;
      case CREATURE_MATHEMATICIAN:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Mathematician");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_COMPUTERS,LCSrandom(3));
         cr.set_skill(SKILL_SCIENCE,LCSrandom(3)+1);
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,7);
         break;
      case CREATURE_TEACHER:
         GIVE_GENDER_FEMALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Teacher");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.set_skill(SKILL_TEACHING,LCSrandom(4)+3);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_HSDROPOUT:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Highschool Dropout");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_TEENAGER;
         break;
      case CREATURE_BUM:
         strcpy(cr.name,"Transient");
         GIVE_WEAPON_CIVILIAN;
         if(!cr.is_armed() && !LCSrandom(5))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_KNIFE")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         if(cr.align==-1)
            cr.align=LCSrandom(2);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_MUTANT:
         strcpy(cr.name,"Mutant");
         GIVE_WEAPON_CIVILIAN;
         if(!cr.is_armed() && !LCSrandom(5))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_KNIFE")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         cr.align=1;
         //cr.set_skill(SKILL_SURVIVAL,LCSrandom(3)+1);
         for(a=0;a<ATTNUM;a++)
         {
            attcap[a]=50;
         }
         cr.age=AGE_MATURE;
         break;
      case CREATURE_GANGMEMBER:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Gang Member");

         if(!LCSrandom(20) || (law[LAW_GUNCONTROL]==-2 && !LCSrandom(5)))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_AUTORIFLE_AK47")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_ASSAULT")],3);
            cr.take_clips(c,3);
            cr.reload(false);
         }
         else if(!LCSrandom(16) || (law[LAW_GUNCONTROL]==-2 && !LCSrandom(5)))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SMG_MP5")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_SMG")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(!LCSrandom(15))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_45")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_45")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(!LCSrandom(10))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SHOTGUN_PUMP")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_BUCKSHOT")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(!LCSrandom(4))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_SEMIPISTOL_9MM")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_9")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else if(!LCSrandom(2))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_REVOLVER_38")]);
            cr.give_weapon(w,NULL);
            Clip c=Clip(*cliptype[getcliptype("CLIP_38")],4);
            cr.take_clips(c,4);
            cr.reload(false);
         }
         else
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_KNIFE")]);
            cr.give_weapon(w,NULL);
         }

         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         cr.juice=-5;
         // We'll make the crack house a bit dicey
         if(location[cursite]->type == SITE_BUSINESS_CRACKHOUSE)
            cr.align=-1;
         cr.age=AGE_YOUNGADULT;

         cr.set_skill(SKILL_PISTOL,LCSrandom(2)+1);
         cr.set_skill(SKILL_SHOTGUN,LCSrandom(2)+1);
         cr.set_skill(SKILL_RIFLE,LCSrandom(2)+1);

         if(!LCSrandom(2))
         {
            switch(LCSrandom(3))
            {
            case 0://cr.crimes_committed[LAWFLAG_BROWNIES]++;
                   cr.crimes_suspected[LAWFLAG_BROWNIES]++;break;
            case 1://cr.crimes_committed[LAWFLAG_ASSAULT]++;
                   cr.crimes_suspected[LAWFLAG_ASSAULT]++;break;
            case 2://cr.crimes_committed[LAWFLAG_MURDER]++;
                   cr.crimes_suspected[LAWFLAG_MURDER]++;break;
            }
         }
         break;
      case CREATURE_CRACKHEAD:
         strcpy(cr.name,"Crack Head");
         GIVE_WEAPON_CIVILIAN;
         if(!LCSrandom(5))
         {
            Weapon w=Weapon(*weapontype[getweapontype("WEAPON_KNIFE")]);
            cr.give_weapon(w,NULL);
         }
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         cr.juice=-20;
         if(cr.align==-1)
            cr.align=LCSrandom(2);
         cr.age=AGE_YOUNGADULT;

         attcap[ATTRIBUTE_INTELLIGENCE]=1;
         attcap[ATTRIBUTE_HEALTH]=1+LCSrandom(5);
         attnum-=10;
         break;
      case CREATURE_PRIEST:
         GIVE_GENDER_MALE;
         strcpy(cr.name,"Priest");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         cr.set_skill(SKILL_RELIGION,LCSrandom(5)+3);
         break;
      case CREATURE_ENGINEER:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Engineer");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_COMPUTERS,LCSrandom(2)+1);
         cr.set_skill(SKILL_SCIENCE,LCSrandom(3)+1);
         break;
      case CREATURE_FASTFOODWORKER:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Fast Food Worker");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         //cr.set_skill(SKILL_COOKING,LCSrandom(3));
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         if(LCSrandom(2))
            cr.age=AGE_TEENAGER;
         else
            cr.age=AGE_YOUNGADULT;
         break;
      case CREATURE_TELEMARKETER:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Telemarketer");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_YOUNGADULT;

         cr.set_skill(SKILL_PERSUASION,LCSrandom(3)+1);
         break;
      case CREATURE_OFFICEWORKER:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Office Worker");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.set_skill(SKILL_BUSINESS,LCSrandom(3));
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_FOOTBALLCOACH:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Football Coach");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.set_skill(SKILL_TEACHING,LCSrandom(3)+2);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MIDDLEAGED;

         if(LCSrandom(2))
         {
            
            cr.set_attribute(ATTRIBUTE_HEALTH,5);
            cr.set_attribute(ATTRIBUTE_AGILITY,5);
            cr.set_attribute(ATTRIBUTE_STRENGTH,5);
         }
         cr.set_skill(SKILL_PERSUASION,LCSrandom(4)+2);
         break;
      case CREATURE_PROSTITUTE:
         GIVE_WEAPON_CIVILIAN;
         if(LCSrandom(7))
            cr.gender_conservative=cr.gender_liberal=GENDER_FEMALE;
         else if(!LCSrandom(3))
            cr.gender_liberal=GENDER_FEMALE;
         strcpy(cr.name,"Prostitute");
         if(LCSrandom(2))
         {
            Armor a=Armor(*armortype[getarmortype("ARMOR_CHEAPDRESS")]);
            cr.give_armor(a,NULL);
         }
         else
         {
            Armor a=Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
            cr.give_armor(a,NULL);
         }
         cr.money=LCSrandom(31)+20;
         cr.juice=-5;
         if(cr.align==-1)
            cr.align=LCSrandom(2);
         cr.age=AGE_YOUNGADULT;
         cr.set_skill(SKILL_PERSUASION,LCSrandom(4)+2);
         cr.set_skill(SKILL_SEDUCTION,LCSrandom(4)+2);

         //cr.crimes_committed[LAWFLAG_PROSTITUTION]++;
         if(!LCSrandom(3))
         {
            cr.crimes_suspected[LAWFLAG_PROSTITUTION]++;
         }
         break;
      case CREATURE_MAILMAN:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Mail Carrier");
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_GARBAGEMAN:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Garbage Collector");
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         cr.set_skill(SKILL_DRIVING,LCSrandom(2)+1);
         break;
      case CREATURE_PLUMBER:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Plumber");
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_CHEF:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Chef");
         //cr.set_skill(SKILL_COOKING,LCSrandom(5)+3);
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_CONSTRUCTIONWORKER:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Construction Worker");
         armor=new Armor(*armortype[getarmortype("ARMOR_WORKCLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         
         cr.set_attribute(ATTRIBUTE_STRENGTH,7);
         cr.set_attribute(ATTRIBUTE_HEALTH,7);
         cr.set_skill(SKILL_DRIVING,LCSrandom(2)+1);
         break;
      case CREATURE_AMATEURMAGICIAN:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Amateur Magician");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         //cr.set_skill(SKILL_THEFT,LCSrandom(3)+2);
         break;
      case CREATURE_HIPPIE:
         strcpy(cr.name,"Hippie");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         cr.align=1;
         
         cr.set_attribute(ATTRIBUTE_HEART,6);
         attcap[ATTRIBUTE_HEART]=15;
         attcap[ATTRIBUTE_WISDOM]=1;
         attnum-=5;
         //cr.set_skill(SKILL_COOKING,LCSrandom(2));
         cr.set_skill(SKILL_MUSIC,LCSrandom(2));
         cr.set_skill(SKILL_ART,LCSrandom(2));
         cr.set_skill(SKILL_TAILORING,LCSrandom(2));

         if(!LCSrandom(10))
         {
            //cr.crimes_committed[LAWFLAG_BROWNIES]++;
            cr.crimes_suspected[LAWFLAG_BROWNIES]++;
         }
         break;
      case CREATURE_AUTHOR:
         GIVE_WEAPON_CIVILIAN;
         armor=new Armor(*armortype[getarmortype("ARMOR_CHEAPSUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(131)+100;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_PERSUASION,LCSrandom(4));
         cr.set_skill(SKILL_WRITING,LCSrandom(4)+4);
         break;
      case CREATURE_JOURNALIST:
         GIVE_WEAPON_CIVILIAN;
         armor=new Armor(*armortype[getarmortype("ARMOR_CHEAPSUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(131)+100;
         //cr.align=LCSrandom(3)-1;
         cr.juice=LCSrandom(25);
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_PERSUASION,LCSrandom(4)+2);
         cr.set_skill(SKILL_WRITING,LCSrandom(4)+2);
         break;
      case CREATURE_CRITIC_ART:
         GIVE_WEAPON_CIVILIAN;
         armor=new Armor(*armortype[getarmortype("ARMOR_CHEAPSUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(131)+100;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_PERSUASION,LCSrandom(4)+2);
         cr.set_skill(SKILL_WRITING,LCSrandom(4)+2);
         cr.set_skill(SKILL_ART,LCSrandom(4)+1);
         break;
      case CREATURE_CRITIC_MUSIC:
         GIVE_WEAPON_CIVILIAN;
         armor=new Armor(*armortype[getarmortype("ARMOR_CHEAPSUIT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(131)+100;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_PERSUASION,LCSrandom(4)+2);
         cr.set_skill(SKILL_WRITING,LCSrandom(4)+2);
         cr.set_skill(SKILL_MUSIC,LCSrandom(4)+1);
         break;
      case CREATURE_SOCIALITE:
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Socialite");
         if(LCSrandom(2))
         {
            Armor a=Armor(*armortype[getarmortype("ARMOR_EXPENSIVEDRESS")]);
            cr.give_armor(a,NULL);
         }
         else
         {
            Armor a=Armor(*armortype[getarmortype("ARMOR_EXPENSIVESUIT")]);
            cr.give_armor(a,NULL);
         }
         cr.money=LCSrandom(131)+100;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_PERSUASION,LCSrandom(3)+1);
         cr.set_skill(SKILL_ART,LCSrandom(3));
         cr.set_skill(SKILL_MUSIC,LCSrandom(3));
         break;
      case CREATURE_BIKER:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Biker");
         armor=new Armor(*armortype[getarmortype("ARMOR_TRENCHCOAT")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         cr.align=-1;
         cr.age=AGE_MATURE;
         cr.set_skill(SKILL_DRIVING,LCSrandom(3)+3);
         break;
      case CREATURE_TRUCKER:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Truck Driver");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         cr.set_skill(SKILL_DRIVING,LCSrandom(3)+3);
         break;
      case CREATURE_TAXIDRIVER:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Taxi Driver");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;
         cr.set_skill(SKILL_DRIVING,LCSrandom(3)+3);
         break;
      case CREATURE_PROGRAMMER:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         strcpy(cr.name,"Programmer");
         armor=new Armor(*armortype[getarmortype("ARMOR_CLOTHES")]);
         cr.give_armor(*armor,NULL);
         cr.money=LCSrandom(31)+20;
         //cr.align=LCSrandom(3)-1;
         cr.age=AGE_MATURE;

         cr.set_skill(SKILL_COMPUTERS,LCSrandom(5)+4);
         
         cr.set_attribute(ATTRIBUTE_INTELLIGENCE,3);
         break;
      case CREATURE_NUN:
         cr.gender_conservative=cr.gender_liberal=GENDER_FEMALE;
         cr.set_skill(SKILL_RELIGION,LCSrandom(3)+5);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_RETIREE:
         GIVE_WEAPON_CIVILIAN;
         cr.age=AGE_SENIOR;
         break;
      case CREATURE_PAINTER:
         GIVE_WEAPON_CIVILIAN;
         cr.set_skill(SKILL_ART,LCSrandom(4)+3);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_SCULPTOR:
         GIVE_WEAPON_CIVILIAN;
         cr.set_skill(SKILL_ART,LCSrandom(4)+3);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_DANCER:
         cr.set_attribute(ATTRIBUTE_AGILITY,10);
         cr.set_attribute(ATTRIBUTE_STRENGTH,4);
         cr.set_attribute(ATTRIBUTE_HEALTH,10);
         cr.set_skill(SKILL_ART,LCSrandom(2)+1);
         cr.set_skill(SKILL_MUSIC,LCSrandom(2)+1);
         cr.age=AGE_YOUNGADULT;
         break;
      case CREATURE_PHOTOGRAPHER:
         GIVE_WEAPON_CIVILIAN;
         cr.set_skill(SKILL_ART,LCSrandom(2)+2);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_CAMERAMAN:
         GIVE_WEAPON_CIVILIAN;
         cr.set_skill(SKILL_ART,LCSrandom(2)+1);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_HAIRSTYLIST:
         GIVE_GENDER_FEMALE;
         GIVE_WEAPON_CIVILIAN;
         cr.set_skill(SKILL_ART,LCSrandom(2)+1);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_FASHIONDESIGNER:
         GIVE_GENDER_FEMALE;
         GIVE_WEAPON_CIVILIAN;
         cr.set_skill(SKILL_TAILORING,LCSrandom(3)+8);
         cr.set_skill(SKILL_ART,LCSrandom(3)+2);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_CLERK:
         GIVE_WEAPON_CIVILIAN;
         cr.age=AGE_MATURE;
         break;
      case CREATURE_THIEF:
         GIVE_WEAPON_CIVILIAN;
         switch(LCSrandom(5))
         {
            case 0:getrecruitcreature(cr.name,CREATURE_SOCIALITE);break;
            case 1:getrecruitcreature(cr.name,CREATURE_CLERK);break;
            case 2:getrecruitcreature(cr.name,CREATURE_OFFICEWORKER);break;
            case 3:getrecruitcreature(cr.name,CREATURE_CRITIC_ART);break;
            case 4:getrecruitcreature(cr.name,CREATURE_CRITIC_MUSIC);break;
         }
         cr.set_skill(SKILL_SECURITY,LCSrandom(5)+3);
         cr.set_skill(SKILL_DISGUISE,LCSrandom(5)+3);
         cr.set_skill(SKILL_STEALTH,LCSrandom(5)+3);
         //cr.set_skill(SKILL_THEFT,LCSrandom(5)+3);
         cr.age=AGE_MATURE;

	 {
	    Armor to_give = Armor(*armortype[getarmortype("ARMOR_BLACKCLOTHES")]);
	    cr.give_armor(to_give,NULL);
	 }

         //cr.crimes_committed[LAWFLAG_BREAKING]++;
         //cr.crimes_committed[LAWFLAG_THEFT]++;
         if(!LCSrandom(10))
         {
            switch(LCSrandom(2))
            {
            case 0:cr.crimes_suspected[LAWFLAG_BREAKING]++;
            case 1:cr.crimes_suspected[LAWFLAG_THEFT]++;
            }
         }
         break;
      case CREATURE_ACTOR:
         GIVE_WEAPON_CIVILIAN;
         cr.set_skill(SKILL_PERSUASION,LCSrandom(5));
         cr.set_skill(SKILL_SEDUCTION,LCSrandom(5));
         cr.set_skill(SKILL_DISGUISE,LCSrandom(5)+3);
         
         cr.set_attribute(ATTRIBUTE_WISDOM,9);
         cr.set_attribute(ATTRIBUTE_CHARISMA,5);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_YOGAINSTRUCTOR:
         GIVE_GENDER_FEMALE;
         cr.set_skill(SKILL_TEACHING,LCSrandom(4)+2);
         cr.set_attribute(ATTRIBUTE_AGILITY,10);
         cr.set_attribute(ATTRIBUTE_STRENGTH,4);
         cr.set_attribute(ATTRIBUTE_HEALTH,10);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_MARTIALARTIST:
         GIVE_GENDER_MALE;
         cr.set_skill(SKILL_TEACHING,LCSrandom(3)+1);
         cr.set_skill(SKILL_HANDTOHAND,LCSrandom(4)+4);
         cr.set_attribute(ATTRIBUTE_AGILITY,8);
         cr.set_attribute(ATTRIBUTE_STRENGTH,6);
         cr.set_attribute(ATTRIBUTE_HEALTH,6);
         cr.age=AGE_MATURE;
         break;
      case CREATURE_ATHLETE:
         GIVE_GENDER_MALE;
         GIVE_WEAPON_CIVILIAN;
         cr.set_attribute(ATTRIBUTE_AGILITY,8);
         cr.set_attribute(ATTRIBUTE_STRENGTH,8);
         cr.set_attribute(ATTRIBUTE_HEALTH,8);
         cr.age=AGE_YOUNGADULT;
         break;
   }
   
   delete weapon;
   delete armor;
   delete clips;

   if(cr.type==CREATURE_MUTANT)attnum=LCSrandom(60)+7;
   for(int a=0;a<ATTNUM;a++)
   {
      attnum-=min(4,cr.get_attribute(a,false));
   }
   while(attnum>0)
   {
      int a=LCSrandom(ATTNUM);
      if(a==ATTRIBUTE_WISDOM && cr.align==1 && LCSrandom(4))
         a=ATTRIBUTE_HEART;
      if(a==ATTRIBUTE_HEART && cr.align==-1 && LCSrandom(4))
         a=ATTRIBUTE_WISDOM;
      if(cr.get_attribute(a,false)<attcap[a])
      {
         cr.adjust_attribute(a,+1);
         attnum--;
      }
   }

   if(cr.align==1)
   {
      cr.infiltration = 0.15f+(LCSrandom(10)-5)*0.01f;
   }
   else if(cr.align==0)
   {
      cr.infiltration = 0.25f+(LCSrandom(10)-5)*0.01f;
   }
   else
   {
      cr.infiltration += 0.35f * (1-cr.infiltration)+(LCSrandom(10)-5)*0.01f;
   }
   if(cr.infiltration < 0) cr.infiltration = 0;
   if(cr.infiltration > 1) cr.infiltration = 1;

   int randomskills=LCSrandom(4)+4;

   if(cr.age>20)
   {
      randomskills+=static_cast<int>(randomskills*((cr.age-20.0)/20.0));
   }
   else
   {
      randomskills-=(20-cr.age)/2;
   }

   /*for(int s=0;s<SKILLNUM;s++)
   {
      randomskills-=cr.get_skill(s);
   }*/

   //RANDOM STARTING SKILLS
   while(randomskills>0)
   {
      int randomskill = LCSrandom(SKILLNUM);
      // 95% chance of not allowing some skills for anybody...
      if(LCSrandom(20))
      {
         if(randomskill == SKILL_HEAVYWEAPONS)continue;
         if(randomskill == SKILL_SMG)continue;
         if(randomskill == SKILL_SWORD)continue;
         if(randomskill == SKILL_RIFLE)continue;
         if(randomskill == SKILL_AXE)continue;
         if(randomskill == SKILL_CLUB)continue;
         if(randomskill == SKILL_PSYCHOLOGY)continue;
      }

      // 90% chance of not allowing some skills, other than      
      //   for conservatives      
      if(LCSrandom(10) && cr.align!=ALIGN_CONSERVATIVE)      
      {
         if(randomskill == SKILL_SHOTGUN)continue;
         if(randomskill == SKILL_PISTOL)continue;
      }

      if(cr.skill_cap(randomskill,true)>cr.get_skill(randomskill))
      {
         cr.set_skill(randomskill,cr.get_skill(randomskill)+1);
         randomskills--;
      }

      while(1)
      {
         if(randomskills&&LCSrandom(2) &&
            cr.skill_cap(randomskill,true)>cr.get_skill(randomskill) &&
            cr.get_skill(randomskill) < 4)
         {
            cr.set_skill(randomskill,cr.get_skill(randomskill)+1);
            randomskills--;
         }
         else break;
      }
   }

   //ALIENATION
   if(sitealienate>=1&&cr.align==0)conservatise(cr);
   if(sitealienate==2&&cr.align==1)conservatise(cr);
}
===== Hospitalization Time Estimates =====
/* common - determines how long a creature's injuries will take to heal */
int clinictime(Creature &g)
{
   int time=0;

   for(int w=0;w<BODYPARTNUM;w++)
   {
      if(((g.wound[w] & WOUND_NASTYOFF))&&
          (g.blood < 100))
      {
         time++;
      }
   }
   if(g.blood<=10)time++;
   if(g.blood<=50)time++;
   if(g.blood<100)time++;
   if(!g.special[SPECIALWOUND_RIGHTLUNG])time++;
   if(!g.special[SPECIALWOUND_LEFTLUNG])time++;
   if(!g.special[SPECIALWOUND_HEART])time+=2;
   if(!g.special[SPECIALWOUND_LIVER])time++;
   if(!g.special[SPECIALWOUND_STOMACH])time++;
   if(!g.special[SPECIALWOUND_RIGHTKIDNEY])time++;
   if(!g.special[SPECIALWOUND_LEFTKIDNEY])time++;
   if(!g.special[SPECIALWOUND_SPLEEN])time++;
   if(g.special[SPECIALWOUND_RIBS]<RIBNUM)time++;
   if(!g.special[SPECIALWOUND_NECK])time++;
   if(!g.special[SPECIALWOUND_UPPERSPINE])time++;
   if(!g.special[SPECIALWOUND_LOWERSPINE])time++;

   return time;
}
===== Criminalization ===== /* common - applies a crime to everyone in the active party */ void criminalizeparty(short crime) {
 if(activesquad==NULL)return;
 for(int p=0;p<6;p++)
 {
    if(activesquad->squad[p]!=NULL)
    {
       if(!activesquad->squad[p]->alive)continue;
       criminalize(*(activesquad->squad[p]),crime);
    }
 }
} /* common - applies a crime to everyone in a location, or the entire LCS */ void criminalizepool(short crime,long exclude,short loc) {
 for(int p=0;p<pool.size();p++)
 {
    if(p==exclude)continue;
    if(loc!=-1&&pool[p]->location!=loc)continue;
    criminalize(*pool[p], crime);
 }
} /* common - applies a crime to a person */ void criminalize(Creature &cr,short crime) {
 if(mode==GAMEMODE_SITE)
 {
    if(location[cursite]->siege.siege)
    {
       // Do not criminalize the LCS for self-defense against
       // extrajudicial raids
       if(location[cursite]->siege.siegetype!=SIEGE_POLICE)
          return;
    }
    else if(location[cursite]->renting==RENTING_CCS)
    {
       // Do not criminalize the LCS for crimes against the CCS
       return;
    }
 }
 cr.crimes_suspected[crime]++;
 cr.heat+=lawflagheat(crime);
} ===== Juicing Up ===== /* common - gives juice to everyone in the active party */ void juiceparty(long juice, long cap) {
 if(activesquad!=NULL)
 {
    for(int p=0;p<6;p++)
    {
       if(activesquad->squad[p]!=NULL)
       {
          if(activesquad->squad[p]->alive)
          {
             addjuice(*activesquad->squad[p],juice, cap);
          }
       }
    }
 }
} /* common - gives juice to a given creature */ void addjuice(Creature &cr,long juice,long cap) {
 // Ignore zero changes
 if(juice==0) return;
 // Check against cap
 if((juice>0 && cr.juice>=cap) ||
    (juice<0 && cr.juice<=cap))
 {
    return;
 }
 
 // Apply juice gain
 cr.juice+=juice;
 
 // Pyramid scheme of juice trickling up the chain
 if(cr.hireid!=-1)
 {
    for(int i=0;i<pool.size();i++)
    {
       if(pool[i]->id==cr.hireid)
       {
          addjuice(*pool[i],juice/5,cr.juice);
          break;
       }
    }
 }
 // Bounds check
 if(cr.juice>1000)cr.juice=1000;
 if(cr.juice<-50)cr.juice=-50;
} ===== Public Opinion Changes ===== /* common - shifts public opinion on an issue */ void change_public_opinion(int v,int power,char affect,char cap) {
 // First note this in the liberal influence -- mostly for the
 // sake of the nice visual intelligence report entry
 if(v<VIEWNUM-5)
 {
    background_liberal_influence[v]+=power*10;
 }
 if(v==VIEW_LIBERALCRIMESQUAD)affect=0;
 if(v==VIEW_LIBERALCRIMESQUADPOS)affect=0;
 if(v==VIEW_LIBERALCRIMESQUADPOS)
 {
    int mood = publicmood(-1);
    if(cap>mood+40)cap=mood+40;
 }
 int effpower=power;
 // Affect is whether the LCS is publically known to be behind
 // the circumstances creating the public opinion change
 if(affect==1)
 {
    // Aff is the % of people who know/care about the LCS
    int aff=attitude[VIEW_LIBERALCRIMESQUAD];
    // Rawpower is the amount of the action proportional
    // to the people who, not having heard of the LCS,
    // do not allow the LCS' reputation to affect their
    // opinions
    int rawpower=(int)((float)power * (float)(100-aff)/100.0f);
    // Affected power is the remainder of the action besides
    // rawpower, the amount of the people who know of the LCS
    // and have it alter their opinion
    int affectedpower=power-rawpower;
    if(affectedpower>0)
    {
       // Dist is a combination of the relative popularity of the LCS
       // to the issue and the absolute popularity of the LCS. Very
       // popular LCS on a very unpopular issue is very influential.
       // Very unpopular LCS on a very popular issue has the ability
       // to actually have a reverse effect.
       int dist=attitude[VIEW_LIBERALCRIMESQUADPOS]-attitude[v] +
                attitude[VIEW_LIBERALCRIMESQUADPOS]-50;
       // Affected power is then scaled by dist -- if the LCS is
       // equally popular as the issue, it's equally powerful as
       // the rawpower. For every 10% up or down past there, it's
       // 10% more or less powerful.
       affectedpower=(int)(((float)affectedpower*(100.0+(float)dist))/100.0f);
    }
    // Effpower is then the sum of the rawpower (people who don't know
    // about the LCS) and the affectedpower (people who do know
    // about the LCS and had their judgment swayed by their opinion
    // of it).
    effpower=rawpower+affectedpower;
 }
 else if(affect==-1)
 {
    // Simplifed algorithm for affect by CCS respect
    effpower=power*(100-attitude[VIEW_CONSERVATIVECRIMESQUAD])/100;
 }
 if(v==VIEW_LIBERALCRIMESQUAD)
 {
    //Only half the country will ever hear about the LCS at one time,
    //and people will only grudgingly lose fear of it
    if(effpower<-5)effpower=5;
    if(effpower>50)effpower=50;
 }
 else if(v==VIEW_LIBERALCRIMESQUADPOS)
 {
    //Only 50% of the country can be swayed at once in their views
    //of the LCS negatively, 5% positively
    if(effpower<-50)effpower=-50;
    if(effpower>5)effpower=5;
 }
 
 //Scale the magnitude of the effect based on how much
 //people are paying attention to the issue
 effpower=(int)(effpower*(1+(float)public_interest[v]/50));
 //Then affect public interest
 if(public_interest[v]<cap || (v==VIEW_LIBERALCRIMESQUADPOS && public_interest[v]<100))
    public_interest[v]+=abs(effpower);
 if(effpower>0)
 {
    //Some things will never persuade the last x% of the population.
    //If there's a cap on how many people will be impressed, this
    //is where that's handled.
    if(attitude[v]+effpower>cap)
    {
       if(attitude[v]>cap)effpower=0;
       else effpower = cap - attitude[v];
    }
 }
 //Finally, apply the effect.
 attitude[v]+=effpower;
 
 if(attitude[v]<0)attitude[v]=0;
 if(attitude[v]>100)attitude[v]=100;
} ===== Subordinate Counts ===== Determines the number of subordinates a creature may command int maxsubordinates(const Creature& cr) { brainwashed recruits can't recruit normally
 if(cr.flag & CREATUREFLAG_BRAINWASHED)return 0;
 int recruitcap = 0;
 //Cap based on juice
 if(cr.juice >= 500)      recruitcap += 6;
 else if(cr.juice >= 200) recruitcap += 5;
 else if(cr.juice >= 100) recruitcap += 3;
 else if(cr.juice >= 50)  recruitcap += 1;
 //Cap for founder
 if(cr.hireid == -1 && cr.align == 1) recruitcap += 6;
 return recruitcap;
} Determines the number of subordinates a creature may recruit, based on their max and the number they already command int subordinatesleft(const Creature& cr) {
 int recruitcap = maxsubordinates(cr);
 for(int p=0; p<pool.size(); p++)
 {
    // ignore seduced and brainwashed characters
    if(pool[p]->hireid == cr.id && pool[p]->alive && !(pool[p]->flag&(CREATUREFLAG_LOVESLAVE|CREATUREFLAG_BRAINWASHED)))
       recruitcap--;
 }
 if(recruitcap > 0) return recruitcap;
 else return 0;
} Determines the number of love slaves a creature has int loveslaves(const Creature& cr) { int loveslaves=0; for(int p=0; p<pool.size(); p++) { If subordinate and a love slave
    if(pool[p]->hireid == cr.id && pool[p]->alive && pool[p]->flag & CREATUREFLAG_LOVESLAVE)
       loveslaves++;
 }
 return loveslaves;
} Determines the number of love slaves a creature may recruit, based on max minus number they already command int loveslavesleft(const Creature& cr) {
 // Get maximum lovers
 int loveslavecap = cr.get_skill(SKILL_SEDUCTION)/2+1;
 // -1 if they're a love slave (their boss is a lover)
 if(cr.flag & CREATUREFLAG_LOVESLAVE)loveslavecap--;
 // Subtract number of love slaves they have
 loveslavecap -= loveslaves(cr);
 // If they can have more, return that number
 if(loveslavecap > 0) return loveslavecap;
 // If they're at 0 or less, return 0
 else return 0;
} Determines the number of recruitment meetings a creature has scheduled int scheduledmeetings(const Creature& cr) { int meetings=0; for(int p=recruit.size()-1;p>=0;p–) { If meeting is with this creature
    if(recruit[p]->recruiter_id == cr.id)
       meetings++;
 }
 return meetings;
} Determines the number of dates a creature has scheduled int scheduleddates(const Creature& cr) { int dates=0; for(int p=date.size()-1;p>=0;p–) { Does this creature have a list of dates scheduled?
    if(date[p]->mac_id == cr.id)
    {
       dates = date[p]->date.size();
	 break;
    }
 }
 return dates;
} ===== Alignment Color ===== Sets the text color to the thematic color for the given alignment extended_range forces colors to be set on a 5 point scale instead of just basic liberal-moderate-conservative void set_alignment_color(signed char alignment, bool extended_range) { switch(alignment) { case ALIGN_ARCHCONSERVATIVE: set_color(COLOR_RED,COLOR_BLACK,1); break; case ALIGN_CONSERVATIVE: if(extended_range) set_color(COLOR_MAGENTA,COLOR_BLACK,1); else set_color(COLOR_RED,COLOR_BLACK,1); break; case ALIGN_MODERATE: set_color(COLOR_YELLOW,COLOR_BLACK,1); break; case ALIGN_LIBERAL: if(extended_range) set_color(COLOR_BLUE,COLOR_BLACK,1); else set_color(COLOR_GREEN,COLOR_BLACK,1); break; case ALIGN_ELITELIBERAL: set_color(COLOR_GREEN,COLOR_BLACK,1); break; } } ===== Activity Color ===== Sets the text color per activity type void set_activity_color(long activity_type) {
 switch(activity_type)
 {
    // Liberal actvism
 case ACTIVITY_SLEEPER_LIBERAL:
 case ACTIVITY_TROUBLE:
 case ACTIVITY_GRAFFITI:
 case ACTIVITY_DOS_ATTACKS:
 case ACTIVITY_HACKING:
 case ACTIVITY_WRITE_LETTERS:
 case ACTIVITY_WRITE_GUARDIAN:
    set_color(COLOR_GREEN,COLOR_BLACK,1);
    break;
    // Less exciting liberal activities
 case ACTIVITY_SLEEPER_SPY:
 case ACTIVITY_COMMUNITYSERVICE:
 case ACTIVITY_POLLS:
    set_color(COLOR_BLUE,COLOR_BLACK,1);
    break;
    // Stealing things
 case ACTIVITY_SLEEPER_STEAL:
 case ACTIVITY_WHEELCHAIR:
 case ACTIVITY_STEALCARS:
    set_color(COLOR_CYAN,COLOR_BLACK,0);
    break;
    // Illegal fundraising
 case ACTIVITY_SLEEPER_EMBEZZLE:
 case ACTIVITY_SELL_DRUGS:
 case ACTIVITY_PROSTITUTION:
 case ACTIVITY_CCFRAUD:
 case ACTIVITY_DOS_RACKET:
    set_color(COLOR_RED,COLOR_BLACK,1);
    break;
    // Legal fundraising
 case ACTIVITY_DONATIONS:
 case ACTIVITY_SELL_TSHIRTS:
 case ACTIVITY_SELL_ART:
 case ACTIVITY_SELL_MUSIC:
    set_color(COLOR_CYAN,COLOR_BLACK,1);
    break;
    // Clothing/garment stuff
 case ACTIVITY_REPAIR_ARMOR:
 case ACTIVITY_MAKE_ARMOR:
    set_color(COLOR_CYAN,COLOR_BLACK,0);
    break;
    // Teaching
 case ACTIVITY_TEACH_POLITICS:
 case ACTIVITY_TEACH_FIGHTING:
 case ACTIVITY_TEACH_COVERT:
 //and studying
 case ACTIVITY_STUDY_DEBATING:
 case ACTIVITY_STUDY_MARTIAL_ARTS:
 case ACTIVITY_STUDY_DRIVING:
 case ACTIVITY_STUDY_PSYCHOLOGY:
 case ACTIVITY_STUDY_FIRST_AID:
 case ACTIVITY_STUDY_LAW:
 case ACTIVITY_STUDY_DISGUISE:
 case ACTIVITY_STUDY_SCIENCE:
 case ACTIVITY_STUDY_BUSINESS:
 //case ACTIVITY_STUDY_COOKING:
 case ACTIVITY_STUDY_GYMNASTICS:
 case ACTIVITY_STUDY_ART:
 case ACTIVITY_STUDY_MUSIC:
 case ACTIVITY_STUDY_TEACHING:
 case ACTIVITY_STUDY_WRITING:
    set_color(COLOR_MAGENTA,COLOR_BLACK,1);
    break;
    // Interrogating
 case ACTIVITY_HOSTAGETENDING:
    set_color(COLOR_YELLOW,COLOR_BLACK,1);
    break;
    // Dealing with your injuries
 case ACTIVITY_CLINIC:
    set_color(COLOR_RED,COLOR_BLACK,0);
    break;
    // Doing something Conservative
 case ACTIVITY_SLEEPER_CONSERVATIVE:
    set_color(COLOR_RED,COLOR_BLACK,1);
    break;
    // Dealing with the dead
 case ACTIVITY_BURY:
    set_color(COLOR_BLACK,COLOR_BLACK,1);
    break;
    // Nothing terribly important
 case ACTIVITY_HEAL: // Identical to none in practice
 case ACTIVITY_NONE:
 case ACTIVITY_VISIT: // Shouldn't show on activate screens at all
    set_color(COLOR_WHITE,COLOR_BLACK,0);
    break;
 }
} ===== Character Sheet ==== /* character info at top of screen */ void printcreatureinfo(Creature *cr, unsigned char knowledge) {
 char num[20],str[200];
 makedelimiter(1,0);
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 move(1,2);
 addstr(cr->name);
 addstr(", ");
 gettitle(str,*cr);
 addstr(str);
 if(cr->prisoner!=NULL)
 {
    addstr(", holding ");
    switch(cr->prisoner->type)
    {
    case CREATURE_CORPORATE_CEO:addstr("a squirming CEO");break;
    case CREATURE_RADIOPERSONALITY:addstr("a crying Radio Personality");break;
    case CREATURE_NEWSANCHOR:addstr("smarmy News Anchor");break;
    case CREATURE_SCIENTIST_EMINENT:addstr("a frightened Eminent Scientist");break;
    case CREATURE_JUDGE_CONSERVATIVE:addstr("an angry Hangin' Judge");break;
    default:
       addstr(cr->prisoner->name);
       break;
    }
 }
 move(2,0);addstr("Hrt:    ");
 if(knowledge>0)
 {
    itoa(cr->get_attribute(ATTRIBUTE_HEART,true),num,10);
    addstr(num);
 }
 else addstr("?");
 move(3,0);addstr("Int:    ");
 if(knowledge>0)
 {
    itoa(cr->get_attribute(ATTRIBUTE_INTELLIGENCE,true),num,10);
    addstr(num);
 }
 else addstr("?");
 move(4,0);addstr("Wis:    ");
 if(knowledge>0)
 {
    itoa(cr->get_attribute(ATTRIBUTE_WISDOM,true),num,10);
    addstr(num);
 }
 else addstr("?");
 move(5,0);addstr("Hlth:   ");
 if(knowledge>1)
 {
    itoa(cr->get_attribute(ATTRIBUTE_HEALTH,true),num,10);
    addstr(num);
 }
 else addstr("?");
 move(2,11);addstr("Agi:    ");
 if(knowledge>1)
 {
    itoa(cr->get_attribute(ATTRIBUTE_AGILITY,true),num,10);
    addstr(num);
 }
 else addstr("?");
 move(3,11);addstr("Str:    ");
 if(knowledge>1)
 {
    itoa(cr->get_attribute(ATTRIBUTE_STRENGTH,true),num,10);
    addstr(num);
 }
 else addstr("?");
 move(4,11);addstr("Char:   ");
 if(knowledge>0)
 {
    itoa(cr->get_attribute(ATTRIBUTE_CHARISMA,true),num,10);
    addstr(num);
 }
 else addstr("?");
 move(5,11);
 addstr("Trans: ");
 long v=-1;
 if(showcarprefs==1)v=id_getcar(cr->pref_carid);
 else v=id_getcar(cr->carid);
 if(v!=-1&&showcarprefs!=-1)
 {
    strcpy(str,vehicle[v]->shortname().c_str());
    char d;
    if(showcarprefs==1)d=cr->pref_is_driver;
    else d=cr->is_driver;
    if(d)strcat(str,"-D");
 }
 else
 {
    int legok=2;
    if((cr->wound[BODYPART_LEG_RIGHT] & WOUND_NASTYOFF)||
       (cr->wound[BODYPART_LEG_RIGHT] & WOUND_CLEANOFF))legok--;
    if((cr->wound[BODYPART_LEG_LEFT] & WOUND_NASTYOFF)||
       (cr->wound[BODYPART_LEG_LEFT] & WOUND_CLEANOFF))legok--;
    if(cr->flag & CREATUREFLAG_WHEELCHAIR)strcpy(str,"Wheelchair");
    else if(legok>=1)strcpy(str,"On Foot");
    else strcpy(str,"On \"Foot\"");
 }
 addstr(str);
 move(6,0);
 if(mode!=GAMEMODE_SITE)set_color(COLOR_WHITE,COLOR_BLACK,0);
 else
    switch(weaponcheck(*cr))
 {
    case -1:
    case 0:set_color(COLOR_GREEN,COLOR_BLACK,1);break;
    case 1:set_color(COLOR_YELLOW,COLOR_BLACK,1);break;
    case 2:set_color(COLOR_RED,COLOR_BLACK,1);break;
 }
 addstr("Weapon: ");
 addstr(cr->get_weapon_string(1).c_str());
 
 if(mode!=GAMEMODE_SITE)set_color(COLOR_WHITE,COLOR_BLACK,0);
 else
 {
    switch(hasdisguise(*cr))
    {
    case 1:set_color(COLOR_GREEN,COLOR_BLACK,1);break;
    case 2:set_color(COLOR_YELLOW,COLOR_BLACK,1);break;
    default:set_color(COLOR_RED,COLOR_BLACK,1);break;
    }
 }
 move(7,0);
 addstr("Clothes: ");
 addstr(cr->get_armor_string(false).c_str());
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 char used[SKILLNUM];
 memset(used,0,sizeof(char)*SKILLNUM);
 int snum=5;
 char printed=1;
 while(snum>0&&printed)
 {
    printed=0;
    int max=0;
    long maxs=-1;
    for(int s=0;s<SKILLNUM;s++)
    {
       if(cr->get_skill(s)>max && !used[s])
       {
          max=cr->get_skill(s);
          maxs=s;
       }
    }
    if(maxs!=-1)
    {
       used[maxs]=1;
       printed=1;
       if(cr->get_skill_ip(maxs)>=100+(10*cr->get_skill(maxs))&&
          cr->get_skill(maxs)<cr->skill_cap(maxs,true))set_color(COLOR_WHITE,COLOR_BLACK,1);
       else set_color(COLOR_WHITE,COLOR_BLACK,0);
       move(3+5-snum,31);
       if(knowledge>5-snum)
          strcpy(str,Skill::get_name(maxs).c_str());
       else
          strcpy(str,"???????");
       strcat(str,": ");
       if(knowledge>7-snum)
          itoa(cr->get_skill(maxs),num,10);
       else
          strcpy(num,"?");
       strcat(str,num);
       addstr(str);
       if(snum==5&&printed)
       {
          set_color(COLOR_WHITE,COLOR_BLACK,0);
          move(2,31);
          addstr("Top Skills:");
       }
    }
    snum--;
 }
 int woundsum=0;
 for(int w=0;w<BODYPARTNUM;w++)
 {
    if(cr->wound[w]!=0)woundsum++;
 }
 printhealthstat(*cr,1,49,FALSE);
 if(woundsum>0)
 {
    for(int w=0;w<BODYPARTNUM;w++)
    {
       if(cr->wound[w] & WOUND_BLEEDING)set_color(COLOR_RED,COLOR_BLACK,1);
       else set_color(COLOR_WHITE,COLOR_BLACK,0);
       move(2+w,49);
       switch(w)
       {
       case BODYPART_HEAD:addstr("Head:");break;
       case BODYPART_BODY:addstr("Body:");break;
       case BODYPART_ARM_RIGHT:addstr("Right Arm:");break;
       case BODYPART_ARM_LEFT:addstr("Left Arm:");break;
       case BODYPART_LEG_RIGHT:addstr("Right Leg:");break;
       case BODYPART_LEG_LEFT:addstr("Left Leg:");break;
       }
       move(2+w,61);
       if(cr->wound[w] & WOUND_NASTYOFF)addstr("Ripped off");
       else if(cr->wound[w] & WOUND_CLEANOFF)addstr("Clean sever");
       else
       {
          int sum=0;
          if(cr->wound[w] & WOUND_SHOT)sum++;
          if(cr->wound[w] & WOUND_CUT)sum++;
          if(cr->wound[w] & WOUND_BRUISED)sum++;
          if(cr->wound[w] & WOUND_BURNED)sum++;
          if(cr->wound[w] & WOUND_TORN)sum++;
          if(sum==0)
          {
             set_color(COLOR_GREEN,COLOR_BLACK,1);
             if(cr->animalgloss==ANIMALGLOSS_ANIMAL)
                addstr("Animal");
             else
                addstr("Liberal");
          }
          if(cr->wound[w] & WOUND_SHOT){addstr("Sht");sum--;if(sum>0)addstr(",");}
          if(cr->wound[w] & WOUND_BRUISED){addstr("Brs");sum--;if(sum>0)addstr(",");}
          if(cr->wound[w] & WOUND_CUT){addstr("Cut");sum--;if(sum>0)addstr(",");}
          if(cr->wound[w] & WOUND_TORN){addstr("Trn");sum--;if(sum>0)addstr(",");}
          if(cr->wound[w] & WOUND_BURNED){addstr("Brn");sum--;if(sum>0)addstr(",");}
       }
    }
    set_color(COLOR_WHITE,COLOR_BLACK,0);
 }
} /* full character sheet (with surrounding interface) */ void fullstatus(int p) {
 if(activesquad==NULL)return;
 const int pagenum=3;
 int page=0;
 do
 {
    erase();
    set_color(COLOR_GREEN,COLOR_BLACK,1);
    move(0,0);
    addstr("Profile of a Liberal");
    if(page==0)
       printliberalstats(*activesquad->squad[p]);
    else if(page==1)
       printliberalskills(*activesquad->squad[p]);
    else if (page == 2)
       printliberalcrimes(*activesquad->squad[p]);
    move(23,0);
    addstr("N - Change Code Name      G - Fix Gender Label");
    if(activesquad->squad[1]!=NULL)
    {
       addstr("    LEFT/RIGHT - Other Liberals");
    }
    move(24,0);
    addstr("Press any other key to continue the Struggle");
    addstr("    UP/DOWN  - More Info");
    refresh();
    int c=getch();
    translategetch(c);
    if(activesquad->squad[1]!=NULL&&((c==KEY_LEFT)||(c==KEY_RIGHT)))
    {
       int sx=1;
       if((c==KEY_LEFT))sx=-1;
       do
       {
          p=(p+6+sx)%6;
       }while(activesquad->squad[p]==NULL);
       continue;
    }
    if(c==KEY_DOWN)
    {
       page++;
       page%=pagenum;
       continue;
    }
    if(c==KEY_UP)
    {
       page--;
       if(page<0)page=pagenum-1;
       page%=pagenum;
       continue;
    }
    if(c=='n')
    {
       move(23,0);
       set_color(COLOR_WHITE,COLOR_BLACK,0);
       addstr("What is the new code name?                                       ");
       move(24,0);
       addstr("                                                                 ");
       keypad(stdscr,FALSE);
       raw_output(FALSE);
       echo();
       curs_set(1);
       move(24,0);
       enter_name(activesquad->squad[p]->name,CREATURE_NAMELEN);
       curs_set(0);
       noecho();
       raw_output(TRUE);
       keypad(stdscr,TRUE);
       continue;
    }
    else if(c=='g')
    {
       activesquad->squad[p]->gender_liberal++;
       if(activesquad->squad[p]->gender_liberal > 2)
          activesquad->squad[p]->gender_liberal = 0;
       continue;
    }
    break;
 }while(1);
} /* Full screen character sheet, skills only edition */ void printliberalskills(Creature &cr) {
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 char str[200];
 char num[5];
 // Add name
 move(2,0);
 if(strcmp(cr.propername,cr.name)!=0)
 {
    addstr("Code name: ");
 }
 else
 {
    addstr("Name: ");
 }
 set_color(COLOR_WHITE,COLOR_BLACK,1);
 addstr(cr.name);
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 addstr(", ");
 gettitle(str,cr);
 addstr(str);
 addstr(" (");
 getrecruitcreature(str,cr.type);
 addstr(str);
 addstr(")");
 // Add all skills
 for(int s=0;s<SKILLNUM;s++)
 {
    if(s%3==0 && s<9)
    {
       set_color(COLOR_WHITE,COLOR_BLACK,0);
       move(4,27*(s/3));
       addstr("SKILL");
       move(4,15+27*(s/3));
       addstr("NOW   MAX");
    }
    // Maxed skills are green
    if(cr.skill_cap(s,true)!=0 && cr.get_skill(s)>=cr.skill_cap(s,true))set_color(COLOR_CYAN,COLOR_BLACK,1);
    // About to level up skills are white
    else if(cr.get_skill_ip(s)>=100+(10*cr.get_skill(s))&&
       cr.get_skill(s)<cr.skill_cap(s,true))set_color(COLOR_WHITE,COLOR_BLACK,1);
    // <1 skills are dark gray
    else if(cr.get_skill(s)<1)set_color(COLOR_BLACK,COLOR_BLACK,1);
    // >=1 skills are light gray
    else set_color(COLOR_WHITE,COLOR_BLACK,0);
    move(5+s/3,27*(s%3));
    strcpy(str,Skill::get_name(s).c_str());
    strcat(str,": ");
    addstr(str);
    move(5+s/3,14+27*(s%3));
    sprintf(num,"%2d.",cr.get_skill(s));
    addstr(num);
    if(cr.get_skill_ip(s)<100+(10*cr.get_skill(s)))
    {
       if ((cr.get_skill_ip(s)*100)/(100+(10*cr.get_skill(s)))!=0)
       {
          itoa((cr.get_skill_ip(s)*100)/(100+(10*cr.get_skill(s))),num,10);
          if ((cr.get_skill_ip(s)*100)/(100+(10*cr.get_skill(s)))<10)
          {
             addstr("0");
          }
          addstr(num);
       }
       else addstr("00");
    }
    else
    {
       addstr("99+");
    }
    if(cr.skill_cap(s,true)==0 || cr.get_skill(s)<cr.skill_cap(s,true))
       set_color(COLOR_BLACK,COLOR_BLACK,1);
    move(5+s/3,20+27*(s%3));
    sprintf(str,"%2d.00",cr.skill_cap(s,true));
    addstr(str);
 }
 set_color(COLOR_WHITE,COLOR_BLACK,0);
} /* full screen character sheet */ void printliberalstats(Creature &cr) {
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 char num[20],str[200];
 // Add name
 move(2,0);
 addstr("Name: ");
 set_color(COLOR_WHITE,COLOR_BLACK,1);
 addstr(cr.name);
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 if(strcmp(cr.propername,cr.name)!=0)
 {
    //The names do not match, print real name as well
    addstr(" (");
    addstr(cr.propername);
    addstr(")");
 }
 addstr(", ");
 gettitle(str,cr);
 addstr(str);
 addstr(" (");
 getrecruitcreature(str,cr.type);
 addstr(str);
 addstr(")");
 move(3,0);
 // Add birthdate
 addstr("Born ");
 switch(cr.birthday_month)
 {
 case 1:addstr("January");break;
 case 2:addstr("February");break;
 case 3:addstr("March");break;
 case 4:addstr("April");break;
 case 5:addstr("May");break;
 case 6:addstr("June");break;
 case 7:addstr("July");break;
 case 8:addstr("August");break;
 case 9:addstr("September");break;
 case 10:addstr("October");break;
 case 11:addstr("November");break;
 case 12:addstr("December");break;
 }
 addstr(" ");
 itoa(cr.birthday_day,num,10);
 addstr(num);
 addstr(", ");
 if(cr.birthday_month < month ||
    (cr.birthday_month == month && cr.birthday_day <= day))
 {
    itoa(year-cr.age,num,10);
 }
 else
 {
    itoa(year-1-cr.age,num,10);
 }
 addstr(num);
 // Add age
 addstr(" (Age ");
 itoa(cr.age,num,10);
 addstr(num);
 addstr(", ");
 // Add Liberal gender
 if(cr.gender_liberal == GENDER_FEMALE)
    addstr("Female");
 else if(cr.gender_liberal == GENDER_MALE)
    addstr("Male");
 else
    addstr("Androgynous");
 // Note if there's some conflict with Conservative society's perceptions
 //if(cr.gender_liberal != cr.gender_conservative)
 //   addstr("*");
 addstr(")");
 move(3,46);
 statebrokenlaws(cr);
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 // Add juice
 move(10,16);
 addstr("Juice: ");
 itoa(cr.juice,num,10);
 addstr(num);
 if(cr.juice<1000)
 {
    move(11,16);addstr("Next:  ");
    if(cr.juice<0)addstr("0");
    else if(cr.juice<10)addstr("10");
    else if(cr.juice<50)addstr("50");
    else if(cr.juice<100)addstr("100");
    else if(cr.juice<200)addstr("200");
    else if(cr.juice<500)addstr("500");
    else addstr("1000");
 }
 // Add attributes
 move(5,0);addstr("Heart: ");
 itoa(cr.get_attribute(ATTRIBUTE_HEART,true),num,10);
 addstr(num);
 move(6,0);addstr("Intelligence: ");
 itoa(cr.get_attribute(ATTRIBUTE_INTELLIGENCE,true),num,10);
 addstr(num);
 move(7,0);addstr("Wisdom: ");
 itoa(cr.get_attribute(ATTRIBUTE_WISDOM,true),num,10);
 addstr(num);
 move(8,0);addstr("Health: ");
 itoa(cr.get_attribute(ATTRIBUTE_HEALTH,true),num,10);
 addstr(num);
 move(9,0);addstr("Agility: ");
 itoa(cr.get_attribute(ATTRIBUTE_AGILITY,true),num,10);
 addstr(num);
 move(10,0);addstr("Strength: ");
 itoa(cr.get_attribute(ATTRIBUTE_STRENGTH,true),num,10);
 addstr(num);
 move(11,0);addstr("Charisma: ");
 itoa(cr.get_attribute(ATTRIBUTE_CHARISMA,true),num,10);
 addstr(num);
 // Add highest skills
 char used[SKILLNUM];
 memset(used,0,sizeof(char)*SKILLNUM);
 int skills_max=16;
 char printed=1;
 move(5,28);
 addstr("SKILL");
 move(5,43);
 addstr("NOW   MAX");
 for(int skills_shown=0;skills_shown<skills_max&&printed;skills_shown++)
 {
    printed=0;
    int max=0;
    long maxs=-1;
    for(int s=0;s<SKILLNUM;s++)
    {
       if((cr.get_skill(s)*10000+cr.get_skill_ip(s))>max && !used[s])
       {
          max=(cr.get_skill(s)*10000+cr.get_skill_ip(s));
          maxs=s;
       }
    }
    if(maxs!=-1)
    {
       used[maxs]=1;
       printed=1;
       // Maxed skills are green
       if(cr.skill_cap(maxs,true)!=0 && cr.get_skill(maxs)>=cr.skill_cap(maxs,true))set_color(COLOR_CYAN,COLOR_BLACK,1);
       // About to level up skills are white
       else if(cr.get_skill_ip(maxs)>=100+(10*cr.get_skill(maxs))&&
          cr.get_skill(maxs)<cr.skill_cap(maxs,true))set_color(COLOR_WHITE,COLOR_BLACK,1);
       // <1 skills are dark gray
       else if(cr.get_skill(maxs)<1)set_color(COLOR_BLACK,COLOR_BLACK,1);
       // >=1 skills are light gray
       else set_color(COLOR_WHITE,COLOR_BLACK,0);
       move(6+skills_shown,28);
       strcpy(str,Skill::get_name(maxs).c_str());
       strcat(str,": ");
       addstr(str);
       move(6+skills_shown,42);
       sprintf(num,"%2d.",cr.get_skill(maxs));
       addstr(num);
       if(cr.get_skill_ip(maxs)<100+(10*cr.get_skill(maxs)))
       {
          if ((cr.get_skill_ip(maxs)*100)/(100+(10*cr.get_skill(maxs)))!=0)
          {
             itoa((cr.get_skill_ip(maxs)*100)/(100+(10*cr.get_skill(maxs))),num,10);
             if ((cr.get_skill_ip(maxs)*100)/(100+(10*cr.get_skill(maxs)))<10)
             {
                addstr("0");
             }
             addstr(num);
          }
          else addstr("00");
       }
       else
       {
          addstr("99+");
       }
       if(cr.skill_cap(maxs,true)==0 || cr.get_skill(maxs)<cr.skill_cap(maxs,true))
          set_color(COLOR_BLACK,COLOR_BLACK,1);
       move(6+skills_shown,48);
       sprintf(str,"%2d.00",cr.skill_cap(maxs,true));
       addstr(str);
    }
 }
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 // Add weapon
 move(13,0);
 addstr("Weapon: ");
 addstr(cr.get_weapon_string(0).c_str());
 // Add clothing
 move(14,0);
 addstr("Clothes: ");
 addstr(cr.get_armor_string(true).c_str());
 // Add vehicle
 move(15,0);
 addstr("Car: ");
 long v=-1;
 if(showcarprefs==1)v=id_getcar(cr.pref_carid);
 else v=id_getcar(cr.carid);
 if(v!=-1&&showcarprefs!=-1)
 {
    strcpy(str,vehicle[v]->shortname().c_str());
    char d;
    if(showcarprefs==1)d=cr.pref_is_driver;
    else d=cr.is_driver;
    if(d)strcat(str,"-D");
 }
 else
 {
    int legok=2;
    if((cr.wound[BODYPART_LEG_RIGHT] & WOUND_NASTYOFF)||
       (cr.wound[BODYPART_LEG_RIGHT] & WOUND_CLEANOFF))legok--;
    if((cr.wound[BODYPART_LEG_LEFT] & WOUND_NASTYOFF)||
       (cr.wound[BODYPART_LEG_LEFT] & WOUND_CLEANOFF))legok--;
    if(cr.flag & CREATUREFLAG_WHEELCHAIR)strcpy(str,"Wheelchair");
    else if(legok>=1)strcpy(str,"On Foot");
    else strcpy(str,"On \"Foot\"");
 }
 addstr(str);
 // Add recruit stats
 if(cr.flag!=CREATUREFLAG_BRAINWASHED)
 {
    move(18,0);
    itoa(maxsubordinates(cr)-subordinatesleft(cr),num,10);
    addstr(num);
    addstr(" Recruits / ");
    itoa(maxsubordinates(cr),num,10);
    addstr(num);
    addstr(" Max");
 }
 else
 {
    move(18,0);
    addstr("Enlightened ");
    addstr("Can't Recruit");
 }
 // Any meetings with potential recruits scheduled?
 int recruiting = scheduledmeetings(cr);
 if(recruiting)
 {
    move(18,55);
    itoa(recruiting,num,10);
    addstr("Scheduled Meetings: ");
    addstr(num);
 }
 // Add seduction stats
 move(19,0); 
 int lovers = loveslaves(cr);
 if(cr.flag & CREATUREFLAG_LOVESLAVE)
    lovers++;
 if(lovers)
 {
    itoa(lovers,num,10);
    addstr(num);
    addstr(" Romantic Interest");
    if(lovers>1)addstr("s");
 }
 // Any dates with potential love interests scheduled?
 int wooing = scheduleddates(cr);
 if(wooing)
 {
    move(19,55);
    itoa(wooing,num,10);
    addstr("Scheduled Dates:    ");
    addstr(num);
 }
 // Add wound status
 for(int w=0;w<BODYPARTNUM;w++)
 {
    if(cr.wound[w] & WOUND_BLEEDING)set_color(COLOR_RED,COLOR_BLACK,1);
    else set_color(COLOR_WHITE,COLOR_BLACK,0);
    move(5+w,55);
    switch(w)
    {
    case BODYPART_HEAD:addstr("Head:");break;
    case BODYPART_BODY:addstr("Body:");break;
    case BODYPART_ARM_RIGHT:addstr("Right Arm:");break;
    case BODYPART_ARM_LEFT:addstr("Left Arm:");break;
    case BODYPART_LEG_RIGHT:addstr("Right Leg:");break;
    case BODYPART_LEG_LEFT:addstr("Left Leg:");break;
    }
    move(5+w,66);
    if(cr.wound[w] & WOUND_NASTYOFF)addstr("Ripped off");
    else if(cr.wound[w] & WOUND_CLEANOFF)addstr("Severed");
    else
    {
       int sum=0;
       if(cr.wound[w] & WOUND_SHOT)sum++;
       if(cr.wound[w] & WOUND_CUT)sum++;
       if(cr.wound[w] & WOUND_BRUISED)sum++;
       if(cr.wound[w] & WOUND_BURNED)sum++;
       if(cr.wound[w] & WOUND_TORN)sum++;
       if(sum==0)
       {
          set_color(COLOR_GREEN,COLOR_BLACK,1);
          if(cr.animalgloss==ANIMALGLOSS_ANIMAL)
             addstr("Animal");
          else
             addstr("Liberal");
       }
       if(cr.wound[w] & WOUND_SHOT){addstr("Shot");sum--;if(sum>0)addstr(",");}
       if(cr.wound[w] & WOUND_BRUISED){addstr("Bruised");sum--;if(sum>0)addstr(",");}
       if(cr.wound[w] & WOUND_CUT){addstr("Cut");sum--;if(sum>0)addstr(",");}
       if(cr.wound[w] & WOUND_TORN){addstr("Torn");sum--;if(sum>0)addstr(",");}
       if(cr.wound[w] & WOUND_BURNED){addstr("Burned");sum--;if(sum>0)addstr(",");}
    }
 }
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 //SPECIAL WOUNDS
 set_color(COLOR_RED,COLOR_BLACK,0);
 int y=12;
 int x=55;
 if(cr.special[SPECIALWOUND_HEART]!=1)
 {
    move(y++,x);
    addstr("Heart Punctured");
 }
 if(cr.special[SPECIALWOUND_RIGHTLUNG]!=1)
 {
    move(y++,x);
    addstr("R. Lung Collapsed");
 }
 if(cr.special[SPECIALWOUND_LEFTLUNG]!=1)
 {
    move(y++,x);
    addstr("L. Lung Collapsed");
 }
 if(cr.special[SPECIALWOUND_NECK]!=1)
 {
    move(y++,x);
    addstr("Broken Neck");
 }
 if(cr.special[SPECIALWOUND_UPPERSPINE]!=1)
 {
    move(y++,x);
    addstr("Broken Up Spine");
 }
 if(cr.special[SPECIALWOUND_LOWERSPINE]!=1)
 {
    move(y++,x);
    addstr("Broken Lw Spine");
 }
 if(cr.special[SPECIALWOUND_RIGHTEYE]!=1)
 {
    move(y++,x);
    addstr("No Right Eye");
 }
 if(cr.special[SPECIALWOUND_LEFTEYE]!=1)
 {
    move(y++,x);
    addstr("No Left Eye");
 }
 if(cr.special[SPECIALWOUND_NOSE]!=1)
 {
    move(y++,x);
    addstr("No Nose");
 }
 if(cr.special[SPECIALWOUND_TONGUE]!=1)
 {
    move(y++,x);
    addstr("No Tongue");
 }
 if(cr.special[SPECIALWOUND_TEETH]!=TOOTHNUM)
 {
    move(y++,x);
    if(cr.special[SPECIALWOUND_TEETH]==0)addstr("No Teeth");
    else if(cr.special[SPECIALWOUND_TEETH]==TOOTHNUM-1)addstr("Missing a Tooth");
    else if(cr.special[SPECIALWOUND_TEETH]<TOOTHNUM)addstr("Missing Teeth");
 }
 if(cr.special[SPECIALWOUND_LIVER]!=1)
 {
    move(y++,x);
    addstr("Liver Damaged");
 }
 if(cr.special[SPECIALWOUND_RIGHTKIDNEY]!=1)
 {
    move(y++,x);
    addstr("R. Kidney Damaged");
 }
 if(cr.special[SPECIALWOUND_LEFTKIDNEY]!=1)
 {
    move(y++,x);
    addstr("L. Kidney Damaged");
 }
 if(cr.special[SPECIALWOUND_STOMACH]!=1)
 {
    move(y++,x);
    addstr("Stomach Injured");
 }
 if(cr.special[SPECIALWOUND_SPLEEN]!=1)
 {
    move(y++,x);
    addstr("Busted Spleen");
 }
 if(cr.special[SPECIALWOUND_RIBS]!=RIBNUM)
 {
    move(y++,x);
    if(cr.special[SPECIALWOUND_RIBS]==0)addstr("All Ribs Broken");
    else if(cr.special[SPECIALWOUND_RIBS]==RIBNUM-1)addstr("Broken Rib");
    else if(cr.special[SPECIALWOUND_RIBS]<RIBNUM)addstr("Broken Ribs");
 }
 set_color(COLOR_WHITE,COLOR_BLACK,0);
} /* Full screen character sheet, crime sheet */ void printliberalcrimes(Creature &cr) {
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 char str[200];
 char num[5];
 // Add name
 move(2,0);
 if(strcmp(cr.propername,cr.name)!=0)
 {
    addstr("Code name: ");
 }
 else
 {
    addstr("Name: ");
 }
 set_color(COLOR_WHITE,COLOR_BLACK,1);
 addstr(cr.name);
 set_color(COLOR_WHITE,COLOR_BLACK,0);
 addstr(", ");
 gettitle(str,cr);
 addstr(str);
 addstr(" (");
 getrecruitcreature(str,cr.type);
 addstr(str);
 addstr(")");
 // Add all crimes
 for(int i = 0;i < LAWFLAGNUM; i++)
 {
    if(i%2==0 && i<4)
    {
       set_color(COLOR_WHITE,COLOR_BLACK,0);
       move(4,40*(i/2));
       addstr("CRIME");
       move(4,30+40*(i/2));
       addstr("NUM");
    }
    // Commited crimes are yellow
    if(cr.crimes_suspected[i] > 0)
    {
       set_color(COLOR_YELLOW,COLOR_BLACK,1);
    }
    else
    {
       set_color(COLOR_BLACK,COLOR_BLACK,1);
    }
    move(5+i/2,40*(i%2));
    getlawflag(str,i);
    strcat(str,": ");
    addstr(str);
    move(5+i/2,30+40*(i%2));
    sprintf(num,"%2d",cr.crimes_suspected[i]);
    addstr(num);
 }
 set_color(COLOR_WHITE,COLOR_BLACK,0);
} ===== Health Status =====
/* prints a character's health description (One Leg, Liberal, NearDETH...) */
void printhealthstat(Creature &g,int y,int x,char smll)
{
   short woundsum=0;
   char bleeding=0;
   for(int w=0;w<BODYPARTNUM;w++)
   {
      if(g.wound[w]!=0)woundsum++;
      if(g.wound[w] & WOUND_BLEEDING)bleeding=1;
   }

   int armok=2;
   int legok=2;
   if((g.wound[BODYPART_ARM_RIGHT] & WOUND_NASTYOFF)||
      (g.wound[BODYPART_ARM_RIGHT] & WOUND_CLEANOFF))armok--;
   if((g.wound[BODYPART_ARM_LEFT] & WOUND_NASTYOFF)||
      (g.wound[BODYPART_ARM_LEFT] & WOUND_CLEANOFF))armok--;
   if((g.wound[BODYPART_LEG_RIGHT] & WOUND_NASTYOFF)||
      (g.wound[BODYPART_LEG_RIGHT] & WOUND_CLEANOFF))legok--;
   if((g.wound[BODYPART_LEG_LEFT] & WOUND_NASTYOFF)||
      (g.wound[BODYPART_LEG_LEFT] & WOUND_CLEANOFF))legok--;

   move(y,x);
   if(bleeding)set_color(COLOR_RED,COLOR_BLACK,1);
   else set_color(COLOR_WHITE,COLOR_BLACK,1);
   if(!g.alive)
   {
      set_color(COLOR_BLACK,COLOR_BLACK,1);
      addstr("Deceased");
   }
   else if(g.blood<=20)
   {
      if(smll)addstr("NearDETH");
      else addstr("Near Death");
   }
   else if(g.blood<=50)
   {
      if(smll)addstr("BadWound");
      else addstr("Badly Wounded");
   }
   else if(g.blood<=75)
   {
      addstr("Wounded");
   }
   else if(g.blood<100)
   {
      if(smll)addstr("LtWound");
      else addstr("Lightly Wounded");
   }
   else if(g.special[SPECIALWOUND_NECK]==2)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("NckBroke");
      else addstr("Neck Broken");
   }
   else if(g.special[SPECIALWOUND_UPPERSPINE]==2)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("Quadpleg");
      else addstr("Quadraplegic");
   }
   else if(g.special[SPECIALWOUND_LOWERSPINE]==2)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("Parapleg");
      else addstr("Paraplegic");
   }
   else if(g.special[SPECIALWOUND_RIGHTEYE]==0&&
      g.special[SPECIALWOUND_LEFTEYE]==0&&
      g.special[SPECIALWOUND_NOSE]==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("FaceGone");
      else addstr("Face Gone");
   }
   else if(legok==0&&armok==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      addstr("No Limbs");
   }
   else if((legok==1&&armok==0)||(armok==1&&legok==0))
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      addstr("One Limb");
   }
   else if(legok==2&&armok==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      addstr("No Arms");
   }
   else if(legok==0&&armok==2)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      addstr("No Legs");
   }
   else if(legok==1&&armok==1)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("1Arm1Leg");
      else addstr("One Arm, One Leg");
   }
   else if(armok==1)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      addstr("One Arm");
   }
   else if(legok==1)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      addstr("One Leg");
   }
   else if(g.special[SPECIALWOUND_RIGHTEYE]==0&&
      g.special[SPECIALWOUND_LEFTEYE]==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      addstr("Blind");
   }
   else if((g.special[SPECIALWOUND_RIGHTEYE]==0||
      g.special[SPECIALWOUND_LEFTEYE]==0)&&
      g.special[SPECIALWOUND_NOSE]==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("FaceMutl");
      else addstr("Face Mutilated");
   }
   else if(g.special[SPECIALWOUND_NOSE]==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("NoseGone");
      else addstr("Missing Nose");
   }
   else if(g.special[SPECIALWOUND_RIGHTEYE]==0||
      g.special[SPECIALWOUND_LEFTEYE]==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("One Eye");
      else addstr("Missing Eye");
   }
   else if(g.special[SPECIALWOUND_TONGUE]==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("NoTongue");
      else addstr("No Tongue");
   }
   else if(g.special[SPECIALWOUND_TEETH]==0)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      addstr("No Teeth");
   }
   else if(g.special[SPECIALWOUND_TEETH]<TOOTHNUM)
   {
      if(!bleeding)set_color(COLOR_GREEN,COLOR_BLACK,0);
      if(smll)addstr("MisTeeth");
      else addstr("Missing Teeth");
   }
   else
   {
      if(g.align==-1)
      {
         set_color(COLOR_RED,COLOR_BLACK,1);
         if(smll)addstr("Consrvtv");
         else addstr("Conservative");
      }
      else if(g.align==0)
      {
         set_color(COLOR_WHITE,COLOR_BLACK,1);
         addstr("Moderate");
      }
      else
      {
         set_color(COLOR_GREEN,COLOR_BLACK,1);
         if(g.animalgloss==ANIMALGLOSS_ANIMAL)
            addstr("Animal");
         else
            addstr("Liberal");
      }
   }
}
===== Names =====
void getactivity(char *str,activityst &act)
{
   strcpy(str,"");

   switch(act.type)
   {
      case ACTIVITY_HOSTAGETENDING:
      {
         strcat(str,"Tending to ");
         int pl=getpoolcreature(act.arg);
         if(pl!=-1)
         {
            strcat(str,pool[pl]->name);
         }
         break;
      }
      case ACTIVITY_REPAIR_ARMOR:
         strcat(str,"Repairing Clothing");
         break;
      case ACTIVITY_WHEELCHAIR:
         strcat(str,"Procuring a Wheelchair");
         break;
      case ACTIVITY_STEALCARS:
         strcat(str,"Stealing a Car");
         break;
      case ACTIVITY_POLLS:
         strcat(str,"Gathering Opinion Info");
         break;
      case ACTIVITY_MAKE_ARMOR:
      {
         strcat(str,"Making ");
         strcat(str,armortype[act.arg]->get_shortname().c_str());
         break;
      }
      case ACTIVITY_TROUBLE:
         strcat(str,"Causing Trouble");
         break;
      case ACTIVITY_PROSTITUTION:
         strcat(str,"Prostituting");
         break;
      case ACTIVITY_COMMUNITYSERVICE:
         strcat(str,"Volunteering");
         break;
      case ACTIVITY_GRAFFITI:
         strcat(str,"Making Graffiti");
         break;
      case ACTIVITY_CCFRAUD:
         strcat(str,"Credit Card Fraud");
         break;
      case ACTIVITY_DOS_RACKET:
         strcat(str,"Extorting Websites");
         break;
      case ACTIVITY_DOS_ATTACKS:
         strcat(str,"Attacking Websites");
         break;
      case ACTIVITY_HACKING:
         strcat(str,"Hacking Networks");
         break;
      case ACTIVITY_SELL_TSHIRTS:
         strcat(str,"Selling T-Shirts");
         break;
      case ACTIVITY_SELL_ART:
         strcat(str,"Selling Art");
         break;
      case ACTIVITY_TEACH_POLITICS:
         strcat(str,"Teaching Politics");
         break;
      case ACTIVITY_TEACH_FIGHTING:
         strcat(str,"Teaching Fighting");
         break;
      case ACTIVITY_TEACH_COVERT:
         strcat(str,"Teaching Covert Ops");
         break;
      case ACTIVITY_SELL_MUSIC:
         strcat(str,"Selling Music");
         break;
      case ACTIVITY_BURY:
         strcat(str,"Disposing of Bodies");
         break;
      case ACTIVITY_DONATIONS:
         strcat(str,"Soliciting Donations");
         break;
      case ACTIVITY_SELL_DRUGS:
         strcat(str,"Selling Brownies");
         break;
      case ACTIVITY_VISIT:
      {
         strcat(str,"Going to ");
         if (location[act.arg]->front_business==-1)
            strcat(str,location[act.arg]->shortname);
         else
            strcat(str,location[act.arg]->front_shortname);
         break;
      }
      case ACTIVITY_HEAL:
         strcat(str,"Tending to Injuries");
         break;
      case ACTIVITY_NONE:
         strcat(str,"Laying Low");
         break;
      case ACTIVITY_WRITE_LETTERS:
		  strcat(str,"Writing letters");
         break;
      case ACTIVITY_WRITE_GUARDIAN:
         strcat(str,"Writing news");
         break;
      case ACTIVITY_CLINIC:
         strcat(str,"Going to Free CLINIC");
         break;
	   case ACTIVITY_STUDY_DEBATING:
      case ACTIVITY_STUDY_MARTIAL_ARTS:
      case ACTIVITY_STUDY_DRIVING:
      case ACTIVITY_STUDY_PSYCHOLOGY:
      case ACTIVITY_STUDY_FIRST_AID:
      case ACTIVITY_STUDY_LAW:
      case ACTIVITY_STUDY_DISGUISE:
      case ACTIVITY_STUDY_SCIENCE:
      case ACTIVITY_STUDY_BUSINESS:
      //case ACTIVITY_STUDY_COOKING:
      case ACTIVITY_STUDY_GYMNASTICS:
      case ACTIVITY_STUDY_ART:
      case ACTIVITY_STUDY_MUSIC:
      case ACTIVITY_STUDY_TEACHING:
      case ACTIVITY_STUDY_WRITING:
		  strcat(str,"Attending Classes");
		  break;
      case ACTIVITY_SLEEPER_LIBERAL:
         strcat(str,"Promoting Liberalism");
         break;
      case ACTIVITY_SLEEPER_CONSERVATIVE:
         strcat(str,"Spouting Conservatism");
         break;
      case ACTIVITY_SLEEPER_SPY:
         strcat(str,"Snooping Around");
         break;
      case ACTIVITY_SLEEPER_RECRUIT:
         strcat(str,"Recruiting Sleepers");
         break;
      case ACTIVITY_SLEEPER_JOINLCS:
         strcat(str,"Quitting Job");
         break;
      case ACTIVITY_SLEEPER_SCANDAL:
         strcat(str,"Creating a Scandal");
         break;
      case ACTIVITY_SLEEPER_EMBEZZLE:
         strcat(str,"Embezzling Funds");
         break;
      case ACTIVITY_SLEEPER_STEAL:
         strcat(str,"Stealing Equipment");
         break;
      default:
         strcat(str,"Reporting Bugs to the Dev Team");
         break;
   }
}




void gettitle(char *str,Creature &cr)
{
   if(cr.align==-1)
   {
      if(cr.juice<=-50)
      {
         if(law[LAW_FREESPEECH]==-2)strcpy(str,"[Darn] Worthless");
         else strcpy(str,"Damn Worthless");
      }
      else if(cr.juice<=-10)strcpy(str,"Conservative Dregs");
      else if(cr.juice<0)strcpy(str,"Conservative Punk");
      else if(cr.juice<10)strcpy(str,"Mindless Conservative");
      else if(cr.juice<50)strcpy(str,"Wrong-Thinker");
      else if(cr.juice<100)
      {
         if(law[LAW_FREESPEECH]==-2)strcpy(str,"Stubborn as [Heck]");
         else strcpy(str,"Stubborn as Hell");
      }
      else if(cr.juice<200)
      {
         if(law[LAW_FREESPEECH]==-2)strcpy(str,"Heartless [Jerk]");
         else strcpy(str,"Heartless Bastard");
      }
      else if(cr.juice<500)strcpy(str,"Insane Vigilante");
      else if(cr.juice<1000)strcpy(str,"Arch-Conservative");
      else strcpy(str,"Evil Incarnate");
   }
   else if(cr.align==0)
   {
      if(cr.juice<=-50)
      {
         if(law[LAW_FREESPEECH]==-2)strcpy(str,"[Darn] Worthless");
         else strcpy(str,"Damn Worthless");
      }
      else if(cr.juice<=-10)strcpy(str,"Society's Dregs");
      else if(cr.juice<0)strcpy(str,"Non-Liberal Punk");
      else if(cr.juice<10)strcpy(str,"Non-Liberal");
      else if(cr.juice<50)strcpy(str,"Hard Working");
      else if(cr.juice<100)strcpy(str,"Respected");
      else if(cr.juice<200)strcpy(str,"Upstanding Citizen");
      else if(cr.juice<500)strcpy(str,"Great Person");
      else if(cr.juice<1000) strcpy(str,"Peacemaker");
      else strcpy(str,"Peace Prize Winner");
   }
   else
   {
      if(cr.juice<=-50)
      {
         if(law[LAW_FREESPEECH]==-2)strcpy(str,"[Darn] Worthless");
         else strcpy(str,"Damn Worthless");
      }
      else if(cr.juice<=-10)strcpy(str,"Society's Dregs");
      else if(cr.juice<0)strcpy(str,"Punk");
      else if(cr.juice<10)strcpy(str,"Civilian");
      else if(cr.juice<50)strcpy(str,"Activist");
      else if(cr.juice<100)strcpy(str,"Socialist Threat");
      else if(cr.juice<200)strcpy(str,"Revolutionary");
      else if(cr.juice<500)strcpy(str,"Urban Commando");
      else if(cr.juice<1000)strcpy(str,"Liberal Guardian");
      else strcpy(str,"Elite Liberal");
   }
}


void getview(char *str,short view)
{
   strcpy(str,"");

   switch(view)
   {
      case VIEW_GAY:strcat(str,"LGBT Rights");break;
      case VIEW_DEATHPENALTY:strcat(str,"The Death Penalty");break;
      case VIEW_TAXES:strcat(str,"Taxes");break;
      case VIEW_NUCLEARPOWER:strcat(str,"Nuclear Power");break;
      case VIEW_ANIMALRESEARCH:strcat(str,"Animal Cruelty");break;
      case VIEW_POLICEBEHAVIOR:strcat(str,"The Police");break;
      case VIEW_TORTURE:strcat(str,"Torture");break;
      case VIEW_INTELLIGENCE:strcat(str,"Privacy");break;
      case VIEW_FREESPEECH:strcat(str,"Free Speech");break;
      case VIEW_GENETICS:strcat(str,"Genetics");break;
      case VIEW_JUSTICES:strcat(str,"The Judiciary");break;
      case VIEW_GUNCONTROL:strcat(str,"Gun Control");break;
      case VIEW_SWEATSHOPS:strcat(str,"Labor");break;
      case VIEW_POLLUTION:strcat(str,"Pollution");break;
      case VIEW_CORPORATECULTURE:strcat(str,"Corporate Culture");break;
      case VIEW_CEOSALARY:strcat(str,"CEO Compensation");break;
      case VIEW_WOMEN:strcat(str,"Gender Equality");break;
      case VIEW_CIVILRIGHTS:strcat(str,"Racial Equality");break;
      case VIEW_DRUGS:strcat(str,"Drugs");break;
      case VIEW_IMMIGRATION:strcat(str,"Immigration");break;
      case VIEW_MILITARY:strcat(str,"The Military");break;
      case VIEW_AMRADIO:strcat(str,"AM Radio");break;
      case VIEW_CABLENEWS:strcat(str,"Cable News");break;
      //case VIEW_POLITICALVIOLENCE:strcat(str,"The Need For Action");break;
      case VIEW_LIBERALCRIMESQUAD:strcat(str,"Who We Are");break;
      case VIEW_LIBERALCRIMESQUADPOS:strcat(str,"Why We Rock");break;
      case VIEW_CONSERVATIVECRIMESQUAD:strcat(str,"The CCS Criminals");break;
   }
}



void cityname(char *story)
{
   switch(LCSrandom(42))
   {
      case 0:strcpy(story,"San Francisco, CA");break;
      case 1:strcpy(story,"Boston, MA");break;
      case 2:strcpy(story,"Los Angeles, CA");break;
      case 3:strcpy(story,"Detroit, MI");break;
      case 4:strcpy(story,"Cleveland, OH");break;
      case 5:strcpy(story,"Cincinnati, OH");break;
      case 6:strcpy(story,"New York, NY");break;
      case 7:strcpy(story,"Chicago, IL");break;
      case 8:strcpy(story,"Trenton, NJ");break;
      case 9:strcpy(story,"Denver, CO");break;
      case 10:strcpy(story,"Phoenix, AZ");break;
      case 11:strcpy(story,"Little Rock, AR");break;
      case 12:strcpy(story,"Houston, TX");break;
      case 13:strcpy(story,"Dallas, TX");break;
      case 14:strcpy(story,"Hartford, CT");break;
      case 15:strcpy(story,"Miami, FL");break;
      case 16:strcpy(story,"Baton Rouge, LA");break;
      case 17:strcpy(story,"Seattle, WA");break;
      case 18:strcpy(story,"Salt Lake City, UT");break;
      case 19:strcpy(story,"Philadelphia, PA");break;
      case 20:strcpy(story,"San Antonio, TX");break;
      case 21:strcpy(story,"Columbus, OH");break;
      case 22:strcpy(story,"Atlanta, GA");break;
      case 23:strcpy(story,"Buffalo, NY");break;
      case 24:strcpy(story,"Orlando, FL");break;
      case 25:strcpy(story,"Syracuse, NY");break;
      case 26:strcpy(story,"Baltimore, MD");break;
      case 27:strcpy(story,"Washington D.C.");break;
      case 28:strcpy(story,"Memphis, TN");break;
      case 29:strcpy(story,"Brooklyn, NY");break;
      case 30:strcpy(story,"New Orleans, LA");break;
      case 31:strcpy(story,"Albany, NY");break;
      case 32:strcpy(story,"Jackson, MS");break;
      case 33:strcpy(story,"Waco, TX");break;
      case 34:strcpy(story,"Oklahoma, OK");break;
      case 35:strcpy(story,"Austin, TX");break;
      case 36:strcpy(story,"Nashville, TN");break;
      case 37:strcpy(story,"Philadelphia, PA");break;
      case 38:strcpy(story,"Tampa, FL");break;
      case 39:strcpy(story,"San Diego, CA");break;
      case 40:strcpy(story,"El Paso, TX");break;
      case 41:strcpy(story,"Baton Rouge, LA");break;
      default:strcpy(story,"ERROR, AR");break;
   }
}

/* Allow the player to enter a name with an optional default */
void enter_name(char *name, int len, char* defname)
{
   keypad(stdscr,FALSE);
   raw_output(FALSE);
   echo();
   curs_set(1);
   getnstr(name,len-1);//-1 because 'len' is normally the full space available and we need one for a terminator.
   curs_set(0);
   noecho();
   raw_output(TRUE);
   keypad(stdscr,TRUE);

   if((defname!=NULL) && (strncmp(name,"",len-1)==0))
   {
      strncpy(name,defname,len-1);
   }
   name[len-1]='\0';
}

#include <externs.h>

/**
ACTIVITY_VISIT, TODO
ACTIVITY_HOSTAGETENDING, TODO
ACTIVITY_DOS_RACKET, TODO
ACTIVITY_MAKE_ARMOR, TODO
ACTIVITY_STEALCARS, TODO
ACTIVITY_WHEELCHAIR, TODO
ACTIVITY_BURY, TODO
ACTIVITY_WRITE_BLOG, TODO
ACTIVITY_TEACH_GENERALED, TODO
ACTIVITY_TEACH_POLITICS, TODO
ACTIVITY_TEACH_SURVIVAL, TODO
ACTIVITY_TEACH_FIGHTING, TODO
ACTIVITY_TEACH_COVERT, TODO
ACTIVITY_CLINIC, TODO
ACTIVITY_HEAL, TODO
ACTIVITY_SLEEPER_LIBERAL, TODO
ACTIVITY_SLEEPER_CONSERVATIVE, TODO
ACTIVITY_SLEEPER_SPY, TODO
ACTIVITY_SLEEPER_RECRUIT, TODO
ACTIVITY_SLEEPER_SCANDAL, TODO
ACTIVITY_SLEEPER_EMBEZZLE, TODO
ACTIVITY_SLEEPER_STEAL, TODO
ACTIVITY_SLEEPER_JOINLCS, TODO
*/
// {{{ Various voids
// Help pages are drawn here.

// NOTE: This will probably need updating if there are any fundamental code
// changes that will change gameplay.
void help(const char* string)
{
   erase();
}

// Generates help page on activities.
// Just supply Activity type.
void HelpActivities(int activityType)
{
   // I have actually created a screen editor to help me create the code
   // for the help. It can probably be used all over the place for formatting
   // large pieces of text.
   //
   // Could you possibly put this in ../../dev/ ? -- LK

   if(activityType == ACTIVITY_NONE)
   {
      return;
   }

   erase();
   set_color(COLOR_WHITE,COLOR_BLACK,0);
   move(0,0);
   addstr("Liberal help on:");

   switch(activityType)
   {
// }}}
// {{{ Liberal activism
// {{{ ACTIVITY_COMMUNITYSERVICE
   case ACTIVITY_COMMUNITYSERVICE:
      addstr("===Community Service===");
      addstr(" Has a minor effect on public opinion, increases Juice and has the chance of reducing the activists Heat.");
      break;
// }}}
// {{{ ACTIVITY_TROUBLE
   case ACTIVITY_TROUBLE:
      move(2,0);
      addstr("===Liberal Disobedience===");
      addstr(" Liberal Disobedience is an illegal activity and a form of Liberal Activism which has a positive effect on Public Opinion. It has very short prison");
      addstr(" sentences if you get convicted. It also increases juice. Persuasion, Charisma, Agility, Heart, Strength, Intelligence will increase ");
      addstr(" the effect you have on Public Opinion.");
      move(11,0);
      addstr(" There is a chance that someone will phone the police. Agility, intelligence, disguise and street sense will shake them off the scent. There is also a");
      move(13,0);
      addstr(" chance that an angry mob will beat the crap out of you.");
      break;
// }}}
// {{{ ACTIVITY_GRAFFITI
   case ACTIVITY_GRAFFITI:
      move(2,0);
      addstr("===Graffiti==");
      move(4,0);
      addstr(" Spraying political graffiti is a misdemeanor, carrying with it relatively  short jail sentences. This has a positive effect on public opinion. If you ");
      move(6,0);
      addstr(" do not have a can of spray paint, your character will spend a day purchasing one.");
      move(9,0);
      addstr(" A high art skill and heart will enhance the effect this has on public opinion.");
      break;
// }}}
// {{{ ACTIVITY_POLLS
   case ACTIVITY_POLLS:
      move(2,0);
      addstr("===Search Opinion Polls===");
      addstr(" Search Opinion Polls is a legal activity that lets you see what people think about various Issues. Unlike other activities listed as Liberal Activism,  ");
      addstr(" Search Opinion Polls does not have any effect on Public Opinion; it just shows you what Public Opinion is without changing it.");
      addstr(" Skill in computers and intelligence will give better results.");
      break;
// }}}
// {{{ ACTIVITY_DOS_ATTACKS
   case ACTIVITY_DOS_ATTACKS:
      move(2,0);
      addstr("===Harassing Websites===");
      addstr(" Harassing Websites is an illegal activity and a form of Liberal Activism. It is a weaker version of Hacking, resulting in much shorter prison sentences, ");
      addstr(" and is much less likely to provoke a raid by the Police or other law enforcement. Harassing websites only requires a Computers skill of 1.");
      addstr(" Utilizes only the Computers skill.");
      break;
// }}}
// {{{ ACTIVITY_HACKING
   case ACTIVITY_HACKING:
      move(2,0);
      addstr("===Hacking===");
      addstr(" Hacking is a highly illegal form of Liberal Activism, which has a good effect on public opinion. With it, comes very long prison sentences.");
      addstr(" Generally you need a lot of the Computer skill and Intelligence before you can make a successful hacking attempt. You will need a minimum computer skill ");
      addstr(" of 6 to have an effect. The effect of having more hackers will compound the chance of successfully penetrating a network.");
      addstr(" If you are successful there is a chance depending on Computer skill and Intelligence of evading being criminalized. If you are criminalized, heat on ");
      addstr(" the activist increases. Additionally if you have made a successful hack it will increase juice.");
      addstr(" Occasionally instead of effecting public opinion your hacker may find files that can be published in a special edition of the Liberal Guardian.");
      break;
// }}}
// {{{ ACTIVITY_WRITE_LETTERS
   case ACTIVITY_WRITE_LETTERS:
      move(2,0);
      addstr("===Write to Newspapers===");
      move(4,0);
      addstr(" Write to Newspapers is a legal activity and form of Liberal Activism that boosts the Writing skill and is more effective at influencing Public Opinion");
      move(6,0);
      addstr(" the higher the Writing skill is. A main reason for writing to newspapers is developing enough writing skill to effectively Write for the Liberal Guardian,");
      move(8,0);
      addstr(" which has a much bigger influence than Write to Newspapers and is still completely legal.");
      move(11,0);
      addstr(" Unlike writing for the Liberal Guardian, writing to other newspapers does not require you to own your own newspaper that you set up by deciding to Invest in");
      move(13,0);
      addstr(" a location and spending lots of money on the one-time fee for starting up your");
      move(14,0);
      addstr(" own newspaper, plus you can do it from anywhere, and it boosts your Writing");
      move(15,0);
      addstr(" skill much faster than writing for the Liberal Guardian.");
      move(17,0);
      addstr(" To have the option to write for the Liberal Guardian, you need to own your own ");
      move(18,0);
      addstr(" newspaper that you set up by deciding to Invest in a location, by pressing 'Z' ");
      move(19,0);
      addstr(" on the main screen untill you have an option to invest and spending $3,000 on ");
      move(20,0);
      addstr(" a Printing Press. Additionally a character must be physically located at that ");
      move(21,0);
      addstr(" safehouse.");
      break;
// }}}
// {{{ ACTIVITY_WRITE_GUARDIAN
   case ACTIVITY_WRITE_GUARDIAN:
      move(2,0);
      addstr("===Write for the Liberal Guardian ===");
      move(4,0);
      addstr(" Writing for the Liberal Guardian is a legal (or illegal depending on the ");
      move(5,0);
      addstr(" free speech laws) activity and a form of Liberal Activism that boosts the");
      move(6,0);
      addstr(" Writing skill very slowly and is more effective at influencing Public ");
      move(7,0);
      addstr(" Opinion the higher the Writing skill is. Writing for the Liberal Guardian ");
      move(8,0);
      addstr(" has three times the impact on Public Opinion that Write to Newspapers has.");
      move(10,0);
      addstr("Items that prompt a special edition");
      move(11,0);
      addstr(">     Police Records - Found in the Police Station.");
      move(12,0);
      addstr(">     Secret Corporate Files - Found in the Corporate Headquarters, or");
      move(13,0);
      addstr("      obtained through Hacking.");
      move(14,0);
      addstr(">     CEO Photos - Found in the CEO Residence.");
      move(15,0);
      addstr(">     Intel. HQ Data Disk - Found in the Intelligence HQ.");
      move(16,0);
      addstr(">     Cable News Memos - obtained through Hacking.");
      move(17,0);
      addstr(">     Research Papers - obtained through Hacking.");
      move(18,0);
      addstr(">     Judge Corruption Evidence - obtained through Hacking.");
      move(19,0);
      addstr(">     AM Radio Memos - obtained through Hacking.");
      move(20,0);
      addstr(" All of the above items can be delivered to the LCS from sleepers in the ");
      move(21,0);
      addstr(" appropriate location or from hackers.");
      break;
// }}}
// }}}
// {{{ Legal fund raising
// {{{ ACTIVITY_DONATIONS
   case ACTIVITY_DONATIONS:
      addstr("===Soliciting Donations===");
      addstr(" Income depends on persuasion. ");
      addstr(" This activity generates very little income when the country is very ");
      addstr(" Liberal, as people will have little reason to turn to the LCS. ");
      addstr(" This activity trains persuasion.");
      break;
// }}}
// {{{ ACTIVITY_SELL_TSHIRTS
   case ACTIVITY_SELL_TSHIRTS:
      move(2,0);
      addstr("===Sell Shirts===");
      addstr(" The cost of shirt supplies is $4/day. Income depends on tailoring and ");
      addstr(" business skills. Income is lower if the country is very conservative.");
      addstr(" This activity trains tailoring and business.");
      break;
// }}}
// {{{ ACTIVITY_SELL_ART
   case ACTIVITY_SELL_ART:
      move(2,0);
      addstr("===Sell Portrait Sketches===");
      move(4,0);
      addstr(" The cost of art supplies is $1/day. Income depends on art skill. ");
      addstr(" This activity trains art. Income is lower if the country is very conservative.");
// }}}
// {{{ ACTIVITY_SELL_MUSIC
   case ACTIVITY_SELL_MUSIC:
      move(2,0);
      addstr("===Play Street Music===");
      addstr(" There is no overhead for this activity. Income depends on music skill. ");
      addstr(" An equipped guitar will increase income substantially and speed skill gains.");
      addstr(" Income is lower if the country is very conservative.");
      addstr(" This activity trains music.");
      break;
// }}}
// }}}
// {{{ Illegal fund raising
// {{{ ACTIVITY_SELL_DRUGS
   case ACTIVITY_SELL_DRUGS:
      move(2,0);
      addstr("===Selling Brownies===");
      addstr(" Selling brownies on the street is an illegal way to make money. Money earned is ");
      addstr(" based upon the activists persuasion, street sense and business skill.");
      addstr(" It raises persuasion, street sense, and business. Street sense is used ");
      addstr(" to avoid being caught. If caught and tried, the severity of the crime can vary ");
      addstr(" greatly based upon circumstances. ");
      addstr(" The more illegal drugs are in the country, the more money you will make. However, ");
      addstr(" the consequences of being convicted will increase as well. ");
      break;
// }}}
// {{{ ACTIVITY_PROSTITUTION
   case ACTIVITY_PROSTITUTION:
      move(2,0);
      addstr("===Prostitution===");
      move(4,0);
      addstr(" Prostitution is an activity which raises money illegally. The amount of money");
      addstr(" made is based on seduction. The Seduction skill is trained and it also");
      addstr(" decreases your Juice every time you do it. Prostitution is quite lucrative ");
      addstr(" with seduction that is over 10.");
      addstr(" Street sense will help you evade being criminalized and caught.");
      break;
// }}}
// {{{ ACTIVITY_CCFRAUD
   case ACTIVITY_CCFRAUD:
      move(2,0);
      addstr("===Credit Card Fraud===");
      addstr(" To steal credit card numbers you need to have someone who has a computer ");
      addstr(" skill of at least 2. The more computer skill your hacker has the more money ");
      addstr(" you will make. This activity trains computer skill.");
      break;
// }}}
// {{{ ACTIVITY_REPAIR_ARMOR
   case ACTIVITY_REPAIR_ARMOR:
      move(2,0);
      addstr("===Repair Clothing===");
      move(4,0);
      addstr(" Repairing clothing will repair damaged armour and remove blood stains if there ");
      addstr(" are any. ");
      addstr(" The chance of repairing the clothing is dependant on the quality of ");
      addstr(" the clothing and the tailoring skill of the activist.");
      break;
// }}}
// }}}
// {{{ default
   default:
      addstr("===THE GREAT UNKNOWN===");
      move(2,1);
      addstr("There is no help on this topic yet, as the help system is quite new.");
      move(3,1);
      addstr("However, if you want to help us, you could write one, and send it to us!");
      break;
// }}}
   }

   set_color(COLOR_WHITE,COLOR_BLACK,0);
   move(23,0);
   addstr("   Press any key - Return to previous screen");
   getch();
}


//#include "includes.h"
#include "externs.h"

/* pick a descriptor acronym */
void sexdesc(char *str)
{
   strcpy(str,"");

switch(LCSrandom(4))
            { // Descriptors
               case 0:strcat(str,"DTE");break;
               case 1:strcat(str,"ND");break;
               case 2:strcat(str,"NS");break;
               case 3:strcat(str,"VGL");break;

      default:strcat(str,"FOO");break;
   }
}

/* what kind of person? */
void sexwho(char *str)
{
   strcpy(str,"");

switch(LCSrandom(35))
            { // Who
               case 0:strcat(str,"BB");break;
               case 1:strcat(str,"BBC");break;
               case 2:strcat(str,"BF");break;
               case 3:strcat(str,"BHM");break;
               case 4:strcat(str,"BiF");break;
               case 5:strcat(str,"BiM");break;
               case 6:strcat(str,"BBW");break;
               case 7:strcat(str,"BMW");break; // lol big mexican woman
               case 8:strcat(str,"CD");break;
               case 9:strcat(str,"DWF");break;
               case 10:strcat(str,"DWM");break;
               case 11:strcat(str,"FTM");break;
               case 12:strcat(str,"GAM");break;
               case 13:strcat(str,"GBM");break;
               case 14:strcat(str,"GF");break;
               case 15:strcat(str,"GG");break;
               case 16:strcat(str,"GHM");break;
               case 17:strcat(str,"GWC");break;
               case 18:strcat(str,"GWF");break;
               case 19:strcat(str,"GWM");break;
               case 20:strcat(str,"MBC");break;
               case 21:strcat(str,"MBiC");break;
               case 22:strcat(str,"MHC");break;
               case 23:strcat(str,"MTF");break;
               case 24:strcat(str,"MWC");break;
               case 25:strcat(str,"SBF");break;
               case 26:strcat(str,"SBM");break;
               case 27:strcat(str,"SBiF");break;
               case 28:strcat(str,"SBiM");break;
               case 29:strcat(str,"SSBBW");break;
               case 30:strcat(str,"SWF");break;
               case 31:strcat(str,"SWM");break;
               case 32:strcat(str,"TG");break;
               case 33:strcat(str,"TS");break;
               case 34:strcat(str,"TV");break;

        default:strcat(str,"BAR");break;
   }
}

/* seeking acronym */
void sexseek(char *str)
{
   strcpy(str,"");

switch(LCSrandom(2))
            { // ISO
               case 0:strcat(str,"ISO");break;
               case 1:strcat(str,"LF");break;
               default:strcat(str,"BAZ");break;
            }
}

/* what type of sex? */
void sextype(char *str)
{
   strcpy(str,"");

switch(LCSrandom(14))
            { // TYPE
               case 0:strcat(str,"225");break;
               case 1:strcat(str,"ATM");break;
               case 2:strcat(str,"BDSM");break;
               case 3:strcat(str,"CBT");break;
               case 4:strcat(str,"BJ");break;
               case 5:strcat(str,"DP");break;
               case 6:strcat(str,"D/s");break;
               case 7:strcat(str,"GB");break;
               case 8:strcat(str,"HJ");break;
               case 9:strcat(str,"OTK");break;
               case 10:strcat(str,"PNP");break;
               case 11:strcat(str,"TT");break;
               case 12:strcat(str,"SWS");break;
               case 13:strcat(str,"W/S");break;
               default:strcat(str,"LOL");break;
            }
}

/* generate a vanity plate for the squad. */
/*void vanity(char *str)
{
        strcpy(str,"");

        switch(LCSrandom(20))
                {
                        case 0:strcat(str,"ABORTN");break;
                        case 1:strcat(str,"LCS-"LCSrandom(50)+1);break;
                        case 2:strcat(str,"");break;
                        case 3:strcat(str,"");break;
                        case 4:strcat(str,"");break;
                        case 5:strcat(str,"");break;
                        case 6:strcat(str,"");break;
                        case 7:strcat(str,"");break;
                        case 8:strcat(str,"");break;
                        case 9:strcat(str,"");break;
                        case 10:strcat(str,"");break;
                        case 11:strcat(str,"");break;
                        case 12:strcat(str,"");break;
                        case 13:strcat(str,"");break;
                        case 14:strcat(str,"");break;
                        case 15:strcat(str,"");break;
                        case 16:strcat(str,"");break;
                        case 17:strcat(str,"");break;
                        case 18:strcat(str,"");break;
                        case 19:strcat(str,"");break;
                }
}
*/

/* return a letter, number, or one of either. */
void chooseLetterOrNumber(char *str, int type)
{
    strcpy(str,"");

    if(type == 1) // Choose a letter.
    {
        char randChar = 'a' + LCSrandom(26);
        addstr((char *)randChar);
    } else if(type == 2) // Choose a number.
    {
        char randNum = LCSrandom(10);
        addstr((char *)randNum);
    } else if(type == 3) {// Choose one of either.
        if(LCSrandom(36) > 25) {
            char randNum = LCSrandom(10);
            addstr((char *)randNum);
        } else {
        char randChar = 'a' + LCSrandom(26);
        addstr((char *)randChar);
        }
    } else {
        addstr("-ERR-");
    }
}

/* generate a non-vanity plate for the squad. */
void plate(char *str)
{
   strcpy(str,"");

    switch(LCSrandom(8)) // Actual license plate formats.
    {
        case 0: // 123 ABC
                // CT,WA
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               strcat(str," ");
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 1);
               break;
        case 1: // 12A B34
                // CT,MA
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 1);
               strcat(str," ");
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               break;
        case 2: // 123 4567
                // NH
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               strcat(str," ");
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               break;
        case 3: // ABC 1234
                // PA, NY, MI, MD
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 1);
               strcat(str," ");
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               break;
        case 4: // 12A34
                // School Buses.
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               break;
        case 5: // A 12345
                // Trucks, etc.
               chooseLetterOrNumber(str, 1);
               strcat(str," ");
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               break;
        case 6: // 1AB 234
                // CT, MA
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 1);
               strcat(str," ");
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               break;
        case 7: // ABC 123
                // VT, MD
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 1);
               chooseLetterOrNumber(str, 1);
               strcat(str," ");
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               chooseLetterOrNumber(str, 2);
               break;
    }
}

/* pick a random state */
void makestate(char *str)
{
   strcpy(str,"");

   switch(LCSrandom(50))
   {
               case 0:addstr("Alabama");break;
               case 1:addstr("Alaska");break;
               case 2:addstr("Arkansas");break;
               case 3:addstr("Arizona");break;
               case 4:addstr("California");break;
               case 5:addstr("Colorado");break;
               case 6:addstr("Connecticut");break;
               case 7:addstr("Delaware");break;
               case 8:addstr("Florida");break;
               case 9:addstr("Georgia");break;
               case 10:addstr("Hawaii");break;
               case 11:addstr("Idaho");break;
               case 12:addstr("Illinois");break;
               case 13:addstr("Indiana");break;
               case 14:addstr("Iowa");break;
               case 15:addstr("Kansas");break;
               case 16:addstr("Kentucky");break;
               case 17:addstr("Louisiana");break;
               case 18:addstr("Maine");break;
               case 19:addstr("Maryland");break;
               case 20:addstr("Massachusetts");break;
               case 21:addstr("Michigan");break;
               case 22:addstr("Minnesota");break;
               case 23:addstr("Mississippi");break;
               case 24:addstr("Missouri");break;
               case 25:addstr("Montana");break;
               case 26:addstr("Nebraska");break;
               case 27:addstr("Nevada");break;
               case 28:addstr("New Hampshire");break;
               case 29:addstr("New Jersey");break;
               case 30:addstr("New Mexico");break;
               case 31:addstr("New York");break;
               case 32:addstr("North Carolina");break;
               case 33:addstr("North Dakota");break;
               case 34:addstr("Ohio");break;
               case 35:addstr("Oklahoma");break;
               case 36:addstr("Oregon");break;
               case 37:addstr("Pennsylvania");break;
               case 38:addstr("Rhode Island");break;
               case 39:addstr("South Carolina");break;
               case 40:addstr("South Dakota");break;
               case 41:addstr("Tennessee");break;
               case 42:addstr("Texas");break;
               case 43:addstr("Utah");break;
               case 44:addstr("Vermont");break;
               case 45:addstr("Virginia");break;
               case 46:addstr("Washington");break;
               case 47:addstr("West Virginia");break;
               case 48:addstr("Wisconsin");break;
               case 49:addstr("Wyoming");break;

      default:strcat(str,"Hohoq");break; // The Areas of My Expertise -- John Hodgman
   }
}

/* endgame - converts an integer into a roman numeral for amendments */
void romannumeral(int amendnum)
{
   while(amendnum>=1000)
   {
      amendnum-=1000;
      addch('M');
   }
   if(amendnum>=900)
   {
      amendnum-=900;
      addch('C');
      addch('M');
   }
   if(amendnum>=500)
   {
      amendnum-=500;
      addch('D');
   }
   if(amendnum>=400)
   {
      amendnum-=400;
      addch('C');
      addch('D');
   }
   while(amendnum>=100)
   {
      amendnum-=100;
      addch('C');
   }
   if(amendnum>=90)
   {
      amendnum-=90;
      addch('X');
      addch('C');
   }
   if(amendnum>=50)
   {
      amendnum-=50;
      addch('L');
   }
   if(amendnum>=40)
   {
      amendnum-=40;
      addch('X');
      addch('L');
   }
   while(amendnum>=10)
   {
      amendnum-=10;
      addch('X');
   }
   if(amendnum>=9)
   {
      amendnum-=9;
      addch('I');
      addch('X');
   }
   if(amendnum>=5)
   {
      amendnum-=5;
      addch('V');
   }
   if(amendnum>=4)
   {
      amendnum-=4;
      addch('I');
      addch('V');
   }
   while(amendnum>=1)
   {
      amendnum-=1;
      addch('I');
   }
}
===== Need to Know Basis ===== You can assign individual sleepers a specific Drop Point and/or Safehouse to contact, as well as their Recruiter. This means that if the chain of communication is broken, they can still contact the LCS - however, it also means that if they are compromised, the locations they're aware of can also be compromised or targeted. Drop Points: If a Drop Point is compromised, the police will remove anything currently in the Drop Point, and conduct stakeouts for a period of time to see who makes use of it, possibly arresting other members or sleepers in the process. The secrecy of the drop point is permanently compromised (-1% secrecy), and you should abandon it as soon as you figure this out. Safehouses: If a Safehouse is compromised, the police will raid the safehouse as soon as they obtain warrants, attempting to arrest anyone on the premises. The secrecy of the safehouse is permanently compromised (-1% secrecy), and you should probably abandon it as soon as you figure it out. Sleepers: If a sleeper's position is compromised but they manage to escape arrest or are simply forced out of their job, they will go to their assigned Safehouse and wait for future orders, or to the Homeless Shelter if they have no assigned safehouse. ===== Loyalty of the Liberals ===== Maintaining loyalty amongst your revolutionaries is of vital importance - after all, disgruntled rebels may wander off, form splinter groups, or even turn state's evidence against you! As a rule, the better the liberal quality of life and the more confident they are in their cause, the better a liberal's loyalty. Forcing your rebels to live at the homeless shelter, keeping them locked up in jail, and failing to protect or support them can take a nasty toll on loyalty. On the other hand, saving them when they're in a bind can be very inspirational. ===== Government Structure ===== ==== House of Representatives ==== The House of Representatives is a body of people appointed on a population basis and is designed to represent the interests of the people. Each state in the U.S.A. receives a certain number of representatives proportional to its population; California and New York are the most populous states and have the most representatives. All 435 members of the House of Representatives are up for re-election every two years, so the House of Representatives tends to directly represent the current slant of the population from Liberal to Conservative. It is considered the “lower house” of the Congress. ==== Senate ==== The Senate is an elected body designed to represent the interests of the economy and the States themselves; Senators. Each state receives equal representation in the Senate, with two Senators per state. (The District of Columbia is not considered a state and is not represented in the Senate.) Because Senators are elected to six year terms, with one-third of the senate up for re-election every two years, the Senate is generally less responsive to the latest shifts in opinion among the population as a whole. The Senate is considered the “upper house” of the Congress. ==== Supreme Court ==== The Supreme Court is a body of judges who serve until they die, resign, retire, or are forced to resign by scandal. New justices of the Supreme Court are appointed by the President with the approval of the Senate, but existing justices cannot be removed from the Supreme Court except at their own discretion or by impeachment. The Supreme Court interprets the supreme law of the United States, the Constitution and its amendments. It has the power to review and overturn laws if the court determines that they violate the Constitution. The Supreme Court also serves as the highest court of appeals in both criminal and civil cases. ==== President and Cabinet ==== The Executive branch of government is made up of the President and Vice President, and the Cabinet and other offices under the President. The President is both the head of state and the head of government, with the responsibility to enforce laws passed by the House and Senate and to serve as the commander-in-chief of the armed forces. The President signs or vetos all laws passed by the Senate and House. The Vice President serves to advise the President and can break ties in the Senate, but is otherwise mostly powerless. The President and Vice President are elected together by popular vote every four years. The President is limited to a maximum of two terms. The Cabinet is composed of a number of advisors and civilian officers appointed by the President and confirmed or rejected by the Senate. The Secretary of State is the highest ranked member of the Cabinet, and is responsible for advising and executing the President's foreign policy. If both the President and Vice President were to die, the Secretary of State would be be next in line to be President. The Attorney General is the head of the Department of Justice, and serves as the chief law enforcement officer and the President's top legal advisor. In cases of exceptional importance, the Attorney General will personally represent the Government as its lawyer before the Supreme Court. ====== How Laws are Changed ====== ===== Propositions of Congress ===== The House and Senate must both pass legislation before it can become law, and then it must be signed by the President. If the President vetos the law, it can be forced into law only if 2/3 of the Senate votes to overturn the veto, and is otherwise defeated. ===== Propositions before Voters ===== In Liberal Crime Squad, some laws are put before the public instead of the House and Senate. If voters approve the passage of a law, it cannot be vetoed by the President. ===== Decisions of the Supreme Court ===== The Supreme Court cannot make laws, but it can overturn laws and alter its legal interpretation of the Constitution. These legal decisions by the court have significant power to alter the face of the law. ===== Amendments to the Constitution ===== The Constitution of the United States is the supreme law of the land, with power over other laws, treaties, and even the structure of government itself. It is very difficult to pass an amendment to the Constitution, but once an amendment is passed, it is equally difficult to repeal it. Amendments to the Constitution may be proposed by either a 2/3 majority of both the House and the Senate or by a special Constitutional Convention called by the legislatures of 34 of the 50 States. Once an amendment has been proposed, it must be independently ratified by 38 of the 50 States in order for it to take effect. If the required number of States ratify the amendment, it takes effect for the entire country, even for States that have not ratified the Amendment. If the required number of States do not ratify the amendment, it does not take effect anywhere. In Liberal Crime Squad, you may lose the game by allowing an Arch-Conservative Amendment to be passed, thereby allowing Conservatives to permanently remake the country in their image. ===== Miscellaneous notes ===== - Public interest influences the course of elections, especially Presidential elections, as issues with high interest tend to be important issues for voters. Senators and Representatives take a generally broader swath of issues, so it's possible to see the President elected as a Liberal and see the Conservatives make major strides in Congress, just based on the combination of issues and public interest. - The LCS will never be liked by a higher proportion of people than generally advocate Liberal policies. As a result, if you seek higher LCS approval, you must first change the opinions of the populace on the political issues of the day. - When the country's political system is mostly liberal, the Liberal Party is renamed The Progressive Elite Social Liberal Party. When the country's political system is mostly conservative, the Conservative Party is renamed The $$ U.S.A. Flag Eagle $$ Conservative Party. ===== Arrest and Detainment ===== If your Liberals are arrested by the police, they will be taken the police station and placed in the police lock-up. At the end of the month, they will transferred to the courthouse lock-up for trial. During either of these two months, a properly timed raid on the location your Liberal is being held at can free your Liberals from the clutches of the justice system. On the site, must find find the lock-up and have sufficient security skill to free them. If you do not break your Liberals out, the case will proceed to trial. ===== Sweatshop Workers ===== Remember that arrested Sweatshop Workers will be treated differently than other Liberals in most circumstances; when the “Immigration” agenda is rated C, M, or L, after they have been processed by the police, they will be sent to Immigration Services (as opposed to being sent to the courthouse) and then immediately afterwards back to their home country. This effectively removes them from the game. If Immigration is rated as a C+ issue, at the same time Death Penalty is rated C+, then these Liberals will be immediately executed when arrested. If Immigration is rated L+, they will not be deported and will be treated as any other squad member. Trial Sleepers You can improve your chances of getting away with your Liberal crimes by placing strategic sleepers in the Justice system before ever getting to this stage. Sleeper Lawyer Having a sleeper lawyer allows you to ask them to work your defense for a mere $100. While sleeper lawyers begin somewhat weaker than the ace liberal attorney, they are stronger than court-appointed attorneys, and much cheaper. Additionally, the more you use your sleeper, the more experienced they will become. Sleeper Judge You don't get to pick your judge, but if you have a sleeper judge, you might get lucky. It takes 4 sleeper judges to guarantee your case will be heard by a sleeper. Having the judge over your case be a sleeper is a significant advantage. A sleeper judge will have the jury nicely predisposed toward acquittal, will cripple the prosecution's case by sustaining objections against their key evidence and witnesses, and if the jury still votes to convict, a sleeper judge will always be relatively lenient in sentencing. Charges Before the trial begins proper, you will be read off a list of the charges against your Liberal, so that you can determine how good your chances are and what the stakes are. Mass murder will be significantly harder to defend than disturbing the peace, so select your defense appropriately. Additionally at this time, you will be notified if any former Liberal Crime Squad members have agreed to testify against your Liberal. These key witnesses can strengthen the prosecution significantly, and signify that you are facing an unusually difficult case. Jury Selection At the start of the trial the jury will be selected. The political leanings of the nation will affect the leanings of the jury. If you are fortunate, it will be Liberal. If you are unfortunate, it will be Conservative. The more favorable the jury is to your political alignment, the more they will want to believe your defense. Prosecution The strength of the prosecution is determined primarily by the number and type of charges against your Liberal. The more “scary” the charges, the more the Prosecution can exploit them. With the same amount of evidence, they can better get a conviction of terrorism than prostitution. Confessions from former LCS members will also enhance the prosecution. Be careful if you have a lot of charges against you, as not only will they make for a better case, but the government will tend to hire a better prosecutor to argue it. Defense You will have the opportunity to select your defense after the charges are listed. While the defense does not present its arguments until after the jury selection and prosecution, you must choose your strategy now. Court-appointed attorney The court-appointed attorney is a public servant happy to help you plan your defense. This is not the best way to beat the system, but if you don't have any better options, this is the way to go. Defend yourself You may choose to have your Liberal decline to be represented by an attorney and choose to defend herself in court. This is an abysmally bad decision if your Liberal has no knowledge of the law and is unpersuasive, but a skilled Liberal can pull this off gracefully. Plead guilty If you are facing overwhelming odds and a hostile judge, a confession and guilty plea will not prevent a trip to prison, but it may soften the judge enough to get a more lenient sentence. Pay $5000 to hire an ace Liberal attorney The ace Liberal attorney is the best of the best, able to guarantee an impressive showing and even a jury stacked in your favor. The only catch is the cost and that pesky risk of attracting the ace attorney's evil arch-rival prosecutor from hell. Pay $100 to hire a sleeper attorney A bit of nominal expense will allow you to tap one of your own sleepers to mount the defense. Your sleeper will perform based on his or her law and persuasion skills, and has the potential to gain or lose juice based on the outcome of the trial. Verdict Acquittal If the defense is strong enough, your Liberal may be acquitted on all charges and allowed to go free. Congratulations! You now have a clean slate to promptly dirty up with more crimes. Hung jury Rather than acquittal, there is a small chance that the jury will not be able to come to an agreement. If this occurs, the prosecution may decide to try again next month, in which case your Liberal will be held at the courthouse for another month, and the trial repeated. If you're lucky, the government will decline to have the case retried, and you will get to go free as if acquitted. Conviction If you don't manage to persuade the jury of your Liberal's innocence, or decide to plead guilty, your Liberal will be convicted and sentenced. Sentencing Sentencing depends on the number and severity of the crimes, and the current laws of the country. If sentenced to time in prison, your Liberal will be transferred to the Prison at the edge of town. If you want to get a clean slate with that Liberal, you'll have to wait until they are released. Otherwise you can raid the prison to try to free them. Life sentence If your Liberal is sentenced to one or more Life terms in prison, you must free them with a prison raid or they will never be released. Death sentence Depending on how much Conservatism is clouding the country, and how severe the crimes, your Liberal may be sentenced to execution. If this happens, you will have three months to break them out of prison before they are killed. Lenience It is possible for the judge to decide to be lenient in sentencing. A lenient judge will reduce the amount of jail time, number of consecutive life sentences, or even a death sentence to life. Sleeper judges are always lenient. Post-Trial The prison is where Liberals who have been convicted and sentenced are sent. Aside from breaking your own people out of jail, you can also recruit prison guards and prisoners here. If you were lucky enough to be acquitted, your Liberal will instead end up at the homeless shelter, free and ready for new orders.
===== Law References ===== ==== Women's Rights ==== In an Arch-Conservative society, women are subordinate to their fathers and husbands and while employed restricted to menial jobs. In an Elite Liberal society, gender equality is universally respected.
Level Description
C++ Women have been stripped of the right to vote.
C+ Women are regularly treated as second-class citizens.
C Non-discrimination laws do not apply to gender.
M Women are nominally equal under law.
L Women have substantial recourse against discrimination.
L+ Gender equality is universally respected.
==== Civil Rights ==== In an Arch-Conservative society, non-whites are either working in low-wage jobs or fodder for the prison-industrial complex. In an Elite Liberal society, everyone is equal under the law.
Level Description
C++ Segregation has been reintroduced.
C+ Racial discrimination is prohibited in name only.
C Civil rights laws are inconsistently enforced.
M Pervasive racial inequality exists.
L Affirmative action is in place to counteract discrimination.
L+ Racial equality is guaranteed and vigorously enforced.
==== Recreational Drugs ==== In an Arch-Conservative society, drugs are only legal if they provide profits to domestic economic interests and a drug war is fought as a cover to throw unemployed poor people in prison. In an Elite Liberal society, all drugs are legal and treatment is provided on an as needed basis.
Level Description
C++ Recreational drug use is punishable by death, and its discussion is a felony.
C+ Violent criminals are released to make room for drug offenders.
C Prisons are filled with the targets of a war on drugs.
M Recreational drugs are prohibited unless medically prescribed.
L Marijuana is regulated and taxed.
L+ Recreational drugs are regulated and taxed.
==== Immigration ==== In an Arch-Conservative society, huge expense is taken to monitor national borders and “illegals” may be executed. In an Elite Liberal society, the borders are porous and anyone within our borders receives equal rights as a citizen.
Level Description
C++ Border guards shoot suspected foreigners on sight.
C+ Immigration is illegal, and noncitizens are deported at gunpoint.
C The military has been deployed to the borders to slow immigration.
M Great expense is taken to slow immigration, without success.
L The government works to accommodate potential immigrants.
L+ Immigration is unregulated.
==== Religion in Politics ====
Level Description
C++ The world derisively refers to the country as “Jesusland”.
C+ Encouraging religious faith is a major goal of public policy.
C Public schools include organized prayer and study of creation beliefs.
M Religious charities and private schools may compete for public funding.
L Government is prohibited from supporting religious organizations.
L+ Purely faith-based viewpoints are irrelevant to public policy.
==== Election Reform ==== In an Arch-Conservative society, wealthy interests can use any means necessary to get their preferred candidate into office. In an Elite Liberal society, all elections are monitored by international agencies and no funding other than public funding of campaigns is permitted.
Level Description
C++ Political positions are regularly bought and sold by corporate and political entities.
C+ Virtually no ethics restrictions exist on political officeholders.
C Elections are mostly unregulated, but basic ethics restrictions are in place.
M Moderate campaign finance reform is implemented.
L Election financing is transparent and well-regulated.
L+ Election expenses are publicly funded, and voting is by ranked list.
==== Military Spending ==== In an Arch-Conservative society, the military maintains a police state to keep political dissidents in line at home while regularly invading other nations for their resources. In an Elite Liberal society, the military is scaled back to a level sufficient to maintain defenses and much of its research budget is focused on developing inexpensive and non-lethal defenses.
Level Description
C++ The massive military is a tool of political oppression.
C+ Ballooning military boondoggles are utterly out of control.
C Massive investment is put into the military.
M Military spending is growing each year.
L Military strength is not a major priority.
L+ The military has been weakened significantly.
==== Ethics of Torture ==== In an Arch-Conservative society, torture is regularly used to extract information from uncooperative witnesses in police interrogations. In an Elite Liberal society, torture is explicitly forbidden and those who practice it are prosecuted severely.
Level Description
C++: “Torture is a prescribed practice in police interrogations.” C+: “Military and intelligence interrogators regularly engage in torture.” C: “The line between standard interrogation and torture is severely blurred.” M: “Government human rights abuses still occasionally crop up.” L: “The government has a strong reputation on human rights issues.” L+: “The country is respected as an international leader on human rights.” ==== Tax Structure ==== In an Arch-Conservative society, there are no taxes and Conservatives hoard wealth. In an Elite Liberal society, everyone is equal because all money is taxed and spent.
Level Description
C++ There are no taxes, yet most people have no money.
C+ The tax code is a nightmare designed to maintain class structure.
C A flat tax is in effect.
M Taxes are moderate, and the code has loop-holes.
L Taxes are very high and steeply graded.
L+ Rich people are virtually unheard of, due to taxation.
Poll X% were against cutting taxes
==== Abortion Rights ==== In an Arch-Conservative society, abortion is illegal and contraceptives are banned. In an Elite Liberal society, abortion is legal, regardless of trimester.
Level Description
C++: “Use of contraception and abortion are capital offenses.” C+: “Abortion is a felony equal to murder.” C: “Abortion is prohibited except in extreme circumstances.” M: “Abortion is limited to early pregnancy.” L: “Abortion is mostly legal, but discouraged by law.” L+: “Abortion is legal.” ==== Animal Rights ==== In an Arch-Conservative society, animals are property and have no rights. In an Elite Liberal society, animals are given equivalent rights to humans by law.
Level Description
C++ All forms of experimentation on lower-class individuals are encouraged.
C+ Animals are things of inferior existence.
C Animal research is lightly regulated.
M Animal research is moderately regulated.
L Animal research is stiffly regulated.
L+ Animals are people too.
Poll X% deplored animal research
==== Police Regulation ==== In an Arch-Conservative society, police officers are given little oversight and torture poor people and minorities. In an Elite Liberal society, police officers are elected and can be removed from office at any time.
Level Description
C++: “Policing is administered by corporations and has a draft.” C+: “Law enforcement is given free reign.” C: “Law enforcement is lightly regulated.” M: “Law enforcement is moderately regulated.” L: “Law enforcement is strictly controlled.” L+: “All law enforcement positions are subject to election and recall.” ==== Privacy Rights ==== In an Arch-Conservative society, people are monitored at the pleasure of the government and corporations know everything about you. In an Elite Liberal society, the government has no power to watch its citizens and serves only to implement law.
Level Description
C++ Files on each citizen are easily accessible to corporations.
C+ Any corporation requesting private information is granted access.
C Privacy laws are weak.
M Privacy laws are moderate.
L Privacy laws are strong.
L+ Individual privacy is sacred.
Poll X% thought the intelligence community invades privacy
==== Death Penalty ==== In an Arch-Conservative society, all poor lawbreakers are executed. In an Elite Liberal society, the death penalty is forbidden, and even mass-murderers are considered people too.
Level Description
C++ Poor criminals receive mandatory death sentences.
C+ People can be put to death for minor offenses.
C The death penalty is actively enforced in many states.
M The death penalty is in effect but under scrutiny.
L The death penalty is not permitted in many circumstances.
L+ The death penalty is considered barbaric and never practiced.
Poll X% opposed the death penalty
==== Nuclear Power ==== In an Arch-Conservative society, all power is nuclear in origin. In an Elite Liberal society, all power comes from renewable energy sources.
Level Description
C++ Nuclear power plants are ubiquitous.
C+ Nuclear power is proliferating with no controls.
C Nuclear power is a preferred energy source.
M Nuclear power is often an energy source.
L Nuclear power is intensely regulated and seldom used.
L+ Nuclear power is illegal.
Poll X% were terrified of nuclear power
==== Pollution Regulations ==== In an Arch-Conservative society, industrial pollution regularly poisons the water and food supplies. In an Elite Liberal society, all industrial processes must capture and eliminate any pollution created.
Level Description
C++: “Deformed children are the norm in industrial zones.” C+: “Industry may pollute as much as they like.” C: “Industry voluntarily regulates pollution.” M: “Industry is subject to moderate pollution regulations.” L: “Industry is subject to strict pollution regulations.” L+: “Industry is subject to zero-tolerance pollution regulations.” ==== Labor Laws ==== In an Arch-Conservative society, workers consist entirely of slaves, and factories are filled with grimy children who never go to school. In an Elite Liberal society, corporations totally support their employees and ubiquitous unions ensure all get a share in the corporation's profits.
Level Description
C++ The lower classes are regularly farmed out to corporations like beasts.
C+ There is no weekend and children are forced to work.
C Working conditions are miserable and the minimum wage is low.
M Workers still require some benefits.
L Workers are fairly compensated and have benefits.
L+ There are universal workers' rights and high minimum wages.
==== Homosexual Rights ==== In an Arch-Conservative society, homosexuality is illegal and punishable by death. In an Elite Liberal society, gay-lesbian-bisexual-transgendered people are considered perfectly equal to heterosexuals.
Level Description
C++ Homosexuals are executed regularly.
C+ Homosexuals are routinely persecuted with no recourse.
C Homosexuals are not tolerated.
M Homosexuals are grudgingly tolerated but have few equal rights.
L Homosexuals have many rights shared by heterosexuals.
L+ Homosexuals have equal rights.
Poll X% were in favor of equal rights for homosexuals.
==== Corporate Law ==== In an Arch-Conservative society, the economy has regressed to corporate feudalism and a few billionaires control everything in the economy. In an Elite Liberal society, corporations are heavily regulated and employees are guaranteed a living wage.
Level Description
C++ Corporations define the laws within their jurisdictions.
C+ Corporations essentially run the country in a feudal system.
C Corporate culture is corrupt and there is a great disparity in wages.
M Corporations are moderately regulated, although wages are still unfair.
L Corporations are stiffly regulated, and executives are fairly compensated.
L+ Corporations are subject to intense regulation, and there is a maximum wage law.
==== Freedom of Speech ==== In an Arch-Conservative society, police suppress political dissidents and swearing is a crime. In an Elite Liberal society, anyone can say anything they want and openly advocate any behavior, even if against the law, since it's just satire, you know?
Level Description
C++ Unacceptable speech is a capital crime.
C+ Armored squads are tasked with suppressing unacceptable speech.
C Some individuals are harassed because of their speech.
M Free speech is tolerated.
L Free speech is encouraged.
L+ Free speech is universally supported.
==== Flag Burning ==== In an Arch-Conservative society, burning the flag is treasonous and considered on par with murder. In an Elite Liberal society, a flag is just a piece of cloth.
Level Description
C++ Images or words describing flag burning are considered a crime on par with treason.
C+ Burning the flag is a crime on par with murder.
C Burning the flag is a felony.
M Flag-burning is a misdemeanor.
L Flag-burning is legal but stigmatized.
L+ Flag-burning is legal.
==== Gun Control ==== In an Arch-Conservative society, machine guns are bought and sold freely in supermarkets and pawn shops. In an Elite Liberal society, it is illegal to buy, sell, or carry guns except for the military.
Level Description
C++ Gangs of young children carrying AK-47s roam the streets.
C+ Machine guns can be bought and sold freely.
C Military weapons are banned, but similar-looking guns are available.
M A comprehensive ban on military-style weapons is in effect.
L Most guns cannot be sold to anyone outside of law enforcement.
L+ It is illegal to buy, sell, or carry a gun in public.
==== Health Care ==== In an Arch-Conservative society, medicines and medical treatment are reserved for the upper classes only. In an Elite Liberal society, universal health care is available to all citizens at no cost.
Level Description
C++ Professional medical treatment is reserved for corporate executives only, and use of pharmaceuticals by non-corporate entities is considered illegal drug use.
C+ Professional medical treatment is unavailable for the lower classes, and prohibitively expensive for most others.
C Quality of medical treatment scales sharply with wealth level.
M Medical treatment requires significant wealth or health insurance, but is reasonably high-quality.
L Free clinics are available to treat the poor at no cost.
L+ Health care is government-funded and universally available for all citizens at no cost.
==== Education ==== In an Arch-Conservative society, only the wealthy can afford a reasonable education, and most citizens are uneducated or poorly educated. In an Elite Liberal society, citizens can receive as much education as they want for little or no personal cost, and most citizens are highly intelligent.
Level Description
C++ Education is expensive and only accessible to the wealthy.
C+ Quality education is provided only to those who can afford tuition fees, and the average citizen is poorly educated.
C The public education system is routinely underfunded and educational quality suffers as a result.
M Public education is well funded and scholarships exist for those interested in higher learning.
L The average citizen is well-educated and college education is easily achievable.
L+ Education is easily accessible even at college levels, and the average citizen is highly intelligent.
==== Copyright Law ==== In an Arch-Conservative society, prisons are filled with people who failed to purchase a digital copy of a CD they own before transferring it to their MP3 player. In an Elite Liberal society, creative works are meant to be freely shared, and all items fall into the public domain after publication.
Level Description
C++ Copyright infringement is considered a major criminal act equivalent to murder, and is regularly prosecuted by the government on behalf of corporations.
C+ Copyright infringement is considered a minor criminal act equivalent to larceny, and is regularly prosecuted by the government on behalf of corporations.
C Corporations license ideas and concepts into perpetuity and routinely file civil lawsuits against individuals.
M Corporations regularly restrict use of ideas and concepts through copyrights and patents.
L Newly created works are temporarily exclusive to the patent maker before falling into public domain.
L+ Creative works are considered a free commodity that can be shared and distributed without penalty.
==== Public Surveillance ==== In an Arch-Conservative society, your movements are constantly tracked by cameras that routinely build a pattern of your day-to-day behaviors. In an Elite Liberal society, the government maintains no cameras in public places.
Level Description
C++ Cameras are routinely hidden throughout public areas, and people's movements are meticulously tracked and analyzed.
C+ Cameras are hidden throughout public areas, including in 'private' areas such as public restrooms and changing areas.
C Cameras are routinely mounted in public areas to record and monitor people's activities without their knowledge.
M Cameras are typically mounted in visible public areas such as on traffic lights or street corners, ostensibly for public safety only.
L Cameras are generally only mounted in areas where there is a specific need, such as in high-traffic areas to report on traffic flow.
L+ The government does not maintain cameras in public places.
==== Net Neutrality ==== In an Arch-Conservative society, the corporate and government regime dictates what people are allowed to view. In an Elite Liberal society, the Internet is free and open to all.
Level Description
C++ The only sites people can visit on the Internet are those that glorify the current government or corporate regime.
C+ Government and corporate interests dictate what can and cannot be viewed on the Internet.
C Network carriers routinely block or limit traffic to unapproved applications, services, equipment, and sites.
M Network carriers may restrict traffic under certain circumstances, but require a court order to legally do so.
L Network carriers are required to treat all customers as equals when it comes to traffic delivery.
L+ Network carriers act as mere conveyors of information and are not allowed to monitor or limit the flow of information in any way.
View Description
X% were critical of the police
X% wanted stronger measures to prevent torture
X% believed in unfettered free speech
X% abhorred genetically altered food products
X% were for the appointment of Liberal justices
X% would boycott companies that used sweatshops
X% thought industry should lower pollution
X% were disgusted by corporate malfeasance
X% believed that CEO salaries are too great
X% favored doing more for gender equality
X% felt more work was needed for racial equality
X% are concerned about gun violence
X% supported legalizing marijuana
X% condemned unnecessary immigration regulations [if L or higher] OR … wanted amnesty for illegal immigrants
X% opposed increasing military spending
Non-Law-Based Issues
Issue Description
Liberators - Awareness … respected the power of the Liberators
Liberators - Respect … of these held the Liberators in high regard
Guardians - Awareness … were aware of the Guardians of America
Guardians - Respect … of these held the Guardians of America in contempt
Prisons … wanted to end prisoner abuse and torture
AM Radio … do not like AM radio
Cable News … have a negative opinion of cable news programs
Political Violence … thought political violence was justified
===== Special Amendments ===== ==== Remove All Non-Liberal Justices ==== The following former citizen(s) are branded Arch-Conservative: [names]. In particular, the aforementioned former citizens may not serve on the Supreme Court. Said former citizens will be deported to Conservative countries of the President's choosing to be replaced by Proper Justices, also of the President's choosing with the advice and consent of the Senate. If ratified, all non-liberal justices are removed and replaced with liberal justices. ==== Single-Term Limits on Congress ==== In light of the Conservative nature of entrenched politicians, and the corrupting influence of incumbency on the democratic process, all members of the House of Representatives and Senate shall henceforth be limited to one term in office. This shall be immediately enforced by holding elections to replace all members of Congress upon the ratification of this amendment. If ratified, Congress holds re-elections for the entire Senate and House immediately, and all future representatives are limited to a single term. ==== Repeal The Constitution ==== In recognition of the fact that society is degenerating under the pressure of the elite liberal threat, WE THE PEOPLE HEREBY REPEAL THE CONSTITUTION. The former United States are to be reorganized into the CONFEDERATED STATES OF AMERICA, with new territory boundaries to be determined by a panel of Guardians of American Values formed from respected business, religious, and scientific leaders. The Guardians of America are to be promoted to serve as the Moral Guardians of American Values and given full law enforcement powers necessary to carry out these sacred obligations; to obliterate the forces of immoral behavior and wrongful deeds and to ensure the interests of True Americans are protected. If ratified, the game is over – you've lost, and the forces of evil have triumphed. ====== Persistent Mode ====== Persistent mode is played with all available players operating on a worldwide stage, capable of influencing the events of the world. ====== Single-Player Mode ====== Single-player mode is played with one player acting as the guiding force behind the revolutionary movement.