text:
# kindlestrip

A pip install-able conversion of Paul Durrant's kindlestrip library to strip the penultimate record from a Mobipocket file. (http://www.mobileread.com/forums/showthread.php?t=96903)

## Usage

To install:

```shell
pip install kindlestrip
```

To use:

```shell
$ kindlestrip input.mobi output.mobi

$ du -sh *
268K    input.mobi
200K    output.mobi
```


text:
Note: See [**/punkart.spritesheet**](https://github.com/openpunkart/punkart.spritesheet) -
The Unicode-Like Universal Code Page for All Punk Archetypes & Attributes - if you are looking for a free to download single all-in-one sprite sheet (image).

---

[Vol. 1 - Heads](https://github.com/openpunkart/punkart.blocks) ·
[Vol. 2 - Bodies & More](https://github.com/openpunkart/punkart.blocks.bodies) ·
[Vol. 3 - Black & White (1-Bit)](https://github.com/openpunkart/punkart.blocks.black)

# Punk Building Block Series Vol. 1 - Heads

## Basic Punk Series (24×24)

Humans (m/f) - 4 skin tones (albino/light/mid/dark)

![](basic/human-male_lighter.png)
![](basic/human-male_light.png)
![](basic/human-male_dark.png)
![](basic/human-male_darker.png)

![](basic/human-female_lighter.png)
![](basic/human-female_light.png)
![](basic/human-female_dark.png)
![](basic/human-female_darker.png)

Humans (m/f) - 10 (dr. ellis) monk¹ skin tones (01/02/03/04/05/06/07/08/09/10)

![](monk/male_01.png)
![](monk/male_02.png)
![](monk/male_03.png)
![](monk/male_04.png)
![](monk/male_05.png)
![](monk/male_06.png)
![](monk/male_07.png)
![](monk/male_08.png)
![](monk/male_09.png)
![](monk/male_10.png)

![](monk/female_01.png)
![](monk/female_02.png)
![](monk/female_03.png)
![](monk/female_04.png)
![](monk/female_05.png)
![](monk/female_06.png)
![](monk/female_07.png)
![](monk/female_08.png)
![](monk/female_09.png)
![](monk/female_10.png)

¹: See [Skin Tone Research @ Google A.I.](https://skintone.google/) for background reading.

Humans (m/f) - 20 more skin tones

![](united/male_ivory.png)
![](united/male_porcelain.png)
![](united/male_pale_ivory.png)
![](united/male_warm_ivory.png)
![](united/male_sand.png)
![](united/male_rose_beige.png)
![](united/male_limestone.png)
![](united/male_beige.png)
![](united/male_sienna.png)
![](united/male_honey.png)
![](united/male_band.png)
![](united/male_almond.png)
![](united/male_chestnut.png)
![](united/male_bronze.png)
![](united/male_umber.png)
![](united/male_golden.png)
![](united/male_espresso.png)
![](united/male_chocolate.png)

![](united/female_ivory.png)
![](united/female_porcelain.png)
![](united/female_pale_ivory.png)
![](united/female_warm_ivory.png)
![](united/female_sand.png)
![](united/female_rose_beige.png)
![](united/female_limestone.png)
![](united/female_beige.png)
![](united/female_sienna.png)
![](united/female_honey.png)
![](united/female_band.png)
![](united/female_almond.png)
![](united/female_chestnut.png)
![](united/female_bronze.png)
![](united/female_umber.png)
![](united/female_golden.png)
![](united/female_espresso.png)
![](united/female_chocolate.png)

Humans (m/f) - more skin tones (cont.)

![](united/male_yellow.png)
![](united/male_orange.png)
![](united/male_warm_red.png)
![](united/male_red.png)
![](united/male_rubine_red.png)
![](united/male_pink.png)
![](united/male_purple.png)
![](united/male_blue.png)
![](united/male_violet.png)

![](united/female_yellow.png)
![](united/female_orange.png)
![](united/female_warm_red.png)
![](united/female_red.png)
![](united/female_rubine_red.png)
![](united/female_pink.png)
![](united/female_purple.png)
![](united/female_blue.png)
![](united/female_violet.png)

More -
Zombies (m/f)
![](basic/zombie-male.png) ![](basic/zombie-female.png),
Apes (m/f),
![](basic/ape-male.png) ![](basic/ape-female.png),
Aliens (m/f)
![](basic/alien-male.png) ![](basic/alien-female.png).

Bonus: Marcs  -
Human (m) ![](marcs/marc.png),
Zombie (m) ![](marcs/zombie_marc.png),
Apes (m) ![](marcs/ape_marc.png) ![](marcs/pink_ape_marc.png) ![](marcs/golden_ape_marc.png),
Aliens (m)  ![](marcs/alien_marc.png) ![](marcs/green_alien_marc.png),
Demons (m) ![](marcs/demon_marc1.png) ![](marcs/demon_marc2.png),
Orc (m)   ![](marcs/orc_marc.png),
Skeleton (m) ![](marcs/skeleton_marc.png).

Attributes (by category and a-z):
- Hat -
  Bandana (m/f)
  ![](basic/m/bandana.png) ![](basic/f/bandana.png),
  Beanie (m/f)
  ![](basic/m/beanie.png) ![](basic/f/beanie.png),
  Cap (m/f)
  ![](basic/m/cap.png) ![](basic/f/cap.png),
  Cap Forward (m/f)
  ![](basic/m/capforward.png) ![](basic/f/capforward.png),
  Cowboy Hat (m/f)
  ![](basic/m/cowboyhat.png) ![](basic/f/cowboyhat.png),
  Do-rag (m/f)
  ![](basic/m/dorag.png) ![](basic/f/dorag.png) ![](basic/f/dorag2.png),
  Fedora (m/f)
  ![](basic/m/fedora.png) ![](basic/f/fedora.png),
  Headband (m/f)
  ![](basic/m/headband.png) ![](basic/f/headband.png),
  Knitted Cap (m/f)
  ![](basic/m/knittedcap.png) ![](basic/f/knittedcap.png),
  Pilot Helmet (m/f)
  ![](basic/m/pilothelmet.png) ![](basic/m/pilothelmet2.png) ![](basic/f/pilothelmet.png),
  Police Cap (m/f)
  ![](basic/m/policecap.png) ![](basic/f/policecap.png),
  Tassle Hat (m/f)
  ![](basic/m/tasslehat.png) ![](basic/m/tasslehat2.png) ![](basic/f/tasslehat.png),
  Tiara (m/f)
  ![](basic/m/tiara.png) ![](basic/m/tiara2.png) ![](basic/f/tiara.png),
  Top Hat (m/f)
  ![](basic/m/tophat.png) ![](basic/f/tophat.png)
- Hair -
  Blonde Bob (m/f)
  ![](basic/m/blondebob.png) ![](basic/f/blondebob.png),
  Blonde Short (m/f)
  ![](basic/m/blondeshort.png) ![](basic/m/blondeshort2.png) ![](basic/f/blondeshort.png) ![](basic/f/blondeshort2.png),
  Clown Hair Green (m/f)
  ![](basic/m/clownhairgreen.png) ![](basic/f/clownhairgreen.png) ![](basic/f/clownhairgreen2.png),
  Crazy Hair (m/f)
  ![](basic/m/crazyhair.png) ![](basic/f/crazyhair.png),
  Dark Hair (m/f)
  ![](basic/m/darkhair.png) ![](basic/f/darkhair.png) ![](basic/f/darkhair2.png),
  Frumpy Hair (m/f)
  ![](basic/m/frumpyhair.png) ![](basic/f/frumpyhair.png),
  Half Shaved (m/f)
  ![](basic/m/halfshaved.png) ![](basic/m/halfshaved2.png) ![](basic/f/halfshaved.png) ![](basic/f/halfshaved2.png),
  Messy Hair (m/f)
  ![](basic/m/messyhair.png) ![](basic/f/messyhair.png),
  Mohawk (m/f)
  ![](basic/m/mohawk.png) ![](basic/f/mohawk.png),
  Mohawk Dark (m/f)
  ![](basic/m/mohawkdark.png) ![](basic/f/mohawkdark.png),
  Mohawk Thin (m/f)
  ![](basic/m/mohawkthin.png) ![](basic/f/mohawkthin.png),
  Orange Side (m/f)
  ![](basic/m/orangeside.png) ![](basic/m/orangeside2.png) ![](basic/f/orangeside.png) ![](basic/f/orangeside2.png),
  Peak Spike (m/f)
  ![](basic/m/peakspike.png) ![](basic/f/peakspike.png) ![](basic/f/peakspike2.png),
  Pigtails (m/f)
  ![](basic/m/pigtails.png) ![](basic/f/pigtails.png),
  Purple Hair (m/f)
  ![](basic/m/purplehair.png) ![](basic/f/purplehair.png) ![](basic/f/purplehair2.png),
  Red Mohawk (m/f)
  ![](basic/m/redmohawk.png) ![](basic/f/redmohawk.png),
  Shaved Head (m/f)
  ![](basic/m/shavedhead.png) ![](basic/f/shavedhead.png),
  Straight Hair (m/f)
  ![](basic/m/straighthair.png) ![](basic/f/straighthair.png),
  Straight Hair Blonde (m/f)
  ![](basic/m/straighthairblonde.png) ![](basic/f/straighthairblonde.png) ![](basic/f/straighthairblonde2.png),
  Straight Hair Dark (m/f)
  ![](basic/m/straighthairdark.png) ![](basic/f/straighthairdark.png),
  Stringy Hair (m/f)
  ![](basic/m/stringyhair.png) ![](basic/f/stringyhair.png),
  Vampire Hair (m/f)
  ![](basic/m/vampirehair.png) ![](basic/f/vampirehair.png) ![](basic/f/vampirehair2.png),
  Wild Blonde (m/f)
  ![](basic/m/wildblonde.png) ![](basic/m/wildblonde2.png) ![](basic/f/wildblonde.png) ![](basic/f/wildblonde2.png),
  Wild Hair (m/f)
  ![](basic/m/wildhair.png) ![](basic/f/wildhair.png),
  Wild White Hair (m/f)
  ![](basic/m/wildwhitehair.png) ![](basic/m/wildwhitehair2.png) ![](basic/f/wildwhitehair.png) ![](basic/f/wildwhitehair2.png)
- (Hair+Hat) Combo -
  Black With Headband (m/f)
  ![](basic/m/blackwithheadband.png) ![](basic/f/blackwithheadband.png),
  Pink With Hat (m/f)
  ![](basic/m/pinkwithhat.png) ![](basic/f/pinkwithhat.png)
- Eyes -
  3D Glasses (m/f)
   ![](basic/m/3dglasses.png) ![](basic/f/3dglasses.png),
  Big Shades (m/f)
  ![](basic/m/bigshades.png) ![](basic/f/bigshades.png),
  Classic Shades (m/f)
  ![](basic/m/classicshades.png) ![](basic/f/classicshades.png),
  Eye Mask (m/f)
  ![](basic/m/eyemask.png) ![](basic/f/eyemask.png),
  Eye Patch (m/f)
  ![](basic/m/eyepatch.png) ![](basic/f/eyepatch.png),
  Horned Rim Glasses (m/f)
  ![](basic/m/hornedrimglasses.png) ![](basic/f/hornedrimglasses.png),
  Nerd Glasses (m/f)
  ![](basic/m/nerdglasses.png) ![](basic/f/nerdglasses.png),
  Regular Shades (m/f)
  ![](basic/m/regularshades.png)
  ![](basic/m/regularshades-reflective.png)
  ![](basic/f/regularshades.png),
  Small Shades (m/f)
  ![](basic/m/smallshades.png) ![](basic/f/smallshades.png),
  VR (m/f)
  ![](basic/m/vr.png) ![](basic/f/vr.png),
  Welding Goggles (m/f)
  ![](basic/m/weldinggoggles.png) ![](basic/f/weldinggoggles.png)
- Eyes (Makeup) -
  Blue Eye Shadow (f)
  ![](basic/f/blueeyeshadow.png),
  Clown Eyes Blue (m/f)
  ![](basic/m/clowneyesblue.png) ![](basic/f/clowneyesblue.png),
  Clown Eyes Green (m/f)
  ![](basic/m/clowneyesgreen.png) ![](basic/f/clowneyesgreen.png),
  Green Eye Shadow (f)
  ![](basic/f/greeneyeshadow.png),
  Purple Eye Shadow (f)
  ![](basic/f/purpleeyeshadow.png)
- Blemishes -
  Mole (m/f)
   ![](basic/m/mole.png) ![](basic/f/mole.png),
  Rosy Cheeks (m/f)
   ![](basic/m/rosycheeks.png) ![](basic/f/rosycheeks.png),
  Spots (m/f)
   ![](basic/m/spots.png) ![](basic/f/spots.png)
- Nose -
  Clown Nose (m/f)
   ![](basic/m/clownnose.png) ![](basic/f/clownnose.png),
  Piercing (m/f)
   ![](basic/m/piercing.png) ![](basic/f/piercing.png)
- Ears -
  Earring (m/f)
   ![](basic/m/earring.png) ![](basic/f/earring.png)
- Mouth (Teeth) -
  Buck Teeth (m)
   ![](basic/m/buckteeth.png)
- Mouth (Emotion) -
  Frown (m)
   ![](basic/m/frown.png),
  Smile (m)
   ![](basic/m/smile.png)
- Mouth (Makeup) -
  Black Lipstick (f)
   ![](basic/f/blacklipstick.png),
  Hot Lipstick (f)
   ![](basic/f/hotlipstick.png),
  Purple Lipstick (f)
   ![](basic/f/purplelipstick.png)
- Mouth Prop -
  Cigarette (m/f)
   ![](basic/m/cigarette.png) ![](basic/f/cigarette.png),
  Gas Mask (m/f)
   ![](basic/m/gasmask.png) ![](basic/f/gasmask.png),
  Medical Mask (m/f)
   ![](basic/m/medicalmask.png) ![](basic/f/medicalmask.png),
  Pipe (m/f)
   ![](basic/m/pipe.png) ![](basic/f/pipe.png),
  Vape (m/f)
   ![](basic/m/vape.png) ![](basic/f/vape.png)
- Beard -
  Big Beard (m)
   ![](basic/m/bigbeard.png),
  Chinstrap (m)
   ![](basic/m/chinstrap.png),
  Front Beard (m)
   ![](basic/m/frontbearddark.png)
   ![](basic/m/frontbeard.png),
  Goat (m)
   ![](basic/m/goat.png),
  Handlebars (m)
   ![](basic/m/handlebars.png),
  Luxurious Beard (m)
   ![](basic/m/luxuriousbeard.png)
   ![](basic/m/luxurious_white_beard.png),
  Messy Beard (m)
   ![](basic/m/messy_white_beard.png),
  Mustache (m)
   ![](basic/m/mustache.png),
  Muttonchops (m)
   ![](basic/m/muttonchops.png),
  Normal Beard (m)
   ![](basic/m/normalbeardblack.png)
   ![](basic/m/normalbeard.png)
   ![](basic/m/normal_white_beard.png),
  Shadow Beard (m)
   ![](basic/m/shadowbeard.png),
  Short Beard (m)
   ![](basic/m/short_white_beard.png)
- Neck Accessory -
  Choker (m/f)
   ![](basic/m/choker.png) ![](basic/m/choker2.png) ![](basic/f/choker.png),
  Gold Chain (m/f)
   ![](basic/m/goldchain.png) ![](basic/f/goldchain.png),
  Silver Chain (m/f)
   ![](basic/m/silverchain.png) ![](basic/f/silverchain.png)
- Clothes -
  Hoodie (m/f)
  ![](basic/m/hoodie.png) ![](basic/f/hoodie.png)

## Unisize Punk(ette) Series (24×24)

_"Upsized" female archetypes to the same size / dimensions (with same eyes/nose/mouth/ear positions) as male archetypes_

Humans (f)
![](unisize/human-female_lighter.png)
![](unisize/human-female_light.png)
![](unisize/human-female_dark.png)
![](unisize/human-female_darker.png),
Zombies (f),
![](unisize/zombie-female.png),
Apes (f),
![](unisize/ape-female.png),
Aliens (f)
![](unisize/alien-female.png).

Attributes¹ (by category and a-z):
- Hair -
  Blonde Bob (f)
  ![](unisize/f/blondebob.png),
  Crazy Hair (f)
  ![](unisize/f/crazyhair.png),
  Wild Hair (f)
  ![](unisize/f/wildhair.png)
- Eyes (Makeup) -
  Green Eye Shadow (f)
  ![](unisize/f/greeneyeshadow.png)

¹: "Upsized" (female only) from the basic series

## Faceless Punk Series (24×24)

_Unisize & unisex archetypes from scratch / zero. Add your own eyebrows / eyes / nose / mouth_

Humans (u)
![](faceless/human-i_lighter.png)
![](faceless/human-i_light.png)
![](faceless/human-i_dark.png)
![](faceless/human-i_darker.png)
![](faceless/human-ii_lighter.png)
![](faceless/human-ii_light.png)
![](faceless/human-ii_dark.png)
![](faceless/human-ii_darker.png).

Attributes (by category and a-z):

- Eyebrows -
  Eyebrows (u)
  ![](faceless/u/eyebrows.png)
- Eyes -
  Eyes (u)
  ![](faceless/u/eyes.png)
- Nose -
  Nose (u)
  ![](faceless/u/nose.png),
  Nose Small (u)
  ![](faceless/u/nose_small.png)
- Mouth -
  Mouth (u)
  ![](faceless/u/mouth.png),
  Mouth Darker/Dark/Light (f)
  ![](faceless/f/mouth_darker.png)
  ![](faceless/f/mouth_dark.png)
  ![](faceless/f/mouth_light.png)
- Mouth (Emotion) -
  Smile Darker/Dark/Light (f)
  ![](faceless/f/smile_darker.png)
  ![](faceless/f/smile_dark.png)
  ![](faceless/f/smile_light.png)

## All Natural Punk Series (24×24)

_More skin is the new black_

Human (male/female) ![](natural/human-male_lighter.png)
             ![](natural/human-male_light.png)
             ![](natural/human-male_dark.png)
             ![](natural/human-male_darker.png)
             ![](natural/human-female_lighter.png)
             ![](natural/human-female_light.png)
             ![](natural/human-female_dark.png)
             ![](natural/human-female_darker.png),
Alien (male) ![](natural/alien-male.png)
              ![](natural/alien-male_(ape).png),
Ape (male)   ![](natural/ape-male.png),
Zombie (male)  ![](natural/zombie-male.png)
               ![](natural/zombie-male_(ape).png),
Skeleton (male)  ![](natural/skeleton-male.png),
Demon (male)     ![](natural/demon-male.png)

## More Series (24×24)

_New hat, eyes, ears & more_

Attributes (by category and a-z):
- Hat -
  Birthday Hat (m/f) ![](more/m/birthdayhat.png) ![](more/f/birthdayhat.png),
  Bow (f)  ![](more/f/bow.png),
  Crown (m/f) ![](more/m/crown.png) ![](more/f/crown.png),
  Flowers (f)  ![](more/f/flowers.png),
  Headbands (m)    ![](more/m/headband-brazil.png)
   ![](more/m/headband-canada.png)
   ![](more/m/headband-france.png)
   ![](more/m/headband-germany.png)
   ![](more/m/headband-ireland.png)
   ![](more/m/headband-italy.png)
   ![](more/m/headband-japan.png)
   ![](more/m/headband-mexico.png)
   ![](more/m/headband-nigeria.png)
   ![](more/m/headband-pride.png),
  Jester Hat (m/f) ![](more/m/jesterhat.png) ![](more/f/jesterhat.png),
  Santa Hat (m/f) ![](more/m/santahat.png) ![](more/f/santahat.png),
  Sombrero¹ (m/f) ![](more/m/sombrero.png) ![](more/f/sombrero.png),
  Sun Hat (m/f) ![](more/m/sunhat.png) ![](more/f/sunhat.png),
  Superhero Tiara (f) ![](more/f/superherotiara.png)
  Viking Helmet (m/f) ![](more/m/vikinghelmet.png) ![](more/f/vikinghelmet.png),
  Winter Hat (m/f) ![](more/m/winterhat.png) ![](more/f/winterhat.png),
  Wizard Hat (m) ![](more/m/wizardhat.png)
- Eyes -
  Heart Shades (m/f)  ![](more/m/heartshades.png) ![](more/f/heartshades.png),
  Laser Eyes (m/f)      ![](more/m/lasereyes.png) ![](more/f/lasereyes.png),
  Laser Eyes Gold (m/f) ![](more/m/lasereyesgold.png) ![](more/f/lasereyesgold.png),
  Laser Eyes Blue (m)  ![](more/m/lasereyes-blue.png),
  Ski Googles (m/f)   ![](more/m/skigoogles.png) ![](more/f/skigoogles.png),
  Tears (m/f)         ![](more/m/tears.png) ![](more/f/tears.png)
- Eyes (Makeup) -
  Clown Eyes Purple (m/f)  ![](more/m/clowneyes_purple.png) ![](more/f/clowneyes_purple.png)
- Nose -
  Clown Nose Blue (m/f) ![](more/m/clownnose_blue.png) ![](more/f/clownnose_blue.png),
  Clown Nose Green (m/f) ![](more/m/clownnose_green.png) ![](more/f/clownnose_green.png)
- Ears -
  Silver Earring (m/f) ![](more/m/silverearring.png) ![](more/f/silverearring.png)
- (Covid) Masks -
  White (m/f)  ![](mask/m/white.png) ![](mask/f/white.png),
  Yellow (m/f)  ![](mask/m/yellow.png) ![](mask/f/yellow.png),
  Pink (m/f)   ![](mask/m/pink.png) ![](mask/f/pink.png),
  Rainbow (m/f)  ![](mask/m/rainbow.png) ![](mask/f/rainbow.png),
  Blue (m/f)  ![](mask/m/blue.png) ![](mask/f/blue.png),
  Black (m/f)  ![](mask/m/black.png) ![](mask/f/black.png),
  Cloth White (m/f)  ![](mask/m/cloth_white.png) ![](mask/f/cloth_white.png),
  Cloth Green (m/f)   ![](mask/m/cloth_green.png) ![](mask/f/cloth_green.png),
  Cloth Orange (m/f)  ![](mask/m/cloth_orange.png) ![](mask/f/cloth_orange.png),
  Cloth Red (m/f)    ![](mask/m/cloth_red.png) ![](mask/f/cloth_red.png),
  Cloth Brown (m/f)  ![](mask/m/cloth_brown.png) ![](mask/f/cloth_brown.png),
  Cloth Purple (m/f) ![](mask/m/cloth_purple.png) ![](mask/f/cloth_purple.png),
  Cloth Blue (m/f)   ![](mask/m/cloth_blue.png) ![](mask/f/cloth_blue.png),
  KN-95 (m/f)  ![](mask/m/kn-95.png) ![](mask/f/kn-95.png),
  KN-95 Yellow (m/f) ![](mask/m/kn-95_yellow.png) ![](mask/f/kn-95_yellow.png),
  KN-95 Black (m/f)  ![](mask/m/kn-95_black.png) ![](mask/f/kn-95_black.png)
- Mouth (Makeup) -
  Pink Lipstick (f) ![](more/f/pinklipstick.png),
  Red Lipstick (f) ![](more/f/redlipstick.png)
- Mouth Prop -
  Bubble Gum (m/f) ![](more/m/bubblegum.png) ![](more/f/bubblegum.png),
  Cigar (m/f) ![](more/m/cigar.png) ![](more/f/cigar.png)
- Neck Accessory -
  Gold Diamond Necklace (m/f) ![](more/m/golddiamondnecklace.png)  ![](more/f/golddiamondnecklace.png)
- Clothes -
  Bear Hood (m/f) ![](more/m/bearhood.png) ![](more/f/bearhood.png),
  Frog Hood (m/f) ![](more/m/froghood.png) ![](more/f/froghood.png)

¹: Alternative to the int'l headwear series

## More Hair Style & Color Series (24×24)

_Is orange the new black? Is white the new blonde?_

Afro (m/f)  ![](hair/m/black/afro.png) ![](hair/f/black/afro.png)

  ![](hair/m/brown/afro.png)
  ![](hair/m/darkred/afro.png)
  ![](hair/m/orange/afro.png)
  ![](hair/m/red/afro.png)
  ![](hair/m/pink/afro.png)
  ![](hair/m/purple/afro.png)
  ![](hair/m/blue/afro.png)
  ![](hair/m/periwinkle/afro.png)
  ![](hair/m/lightblue/afro.png)
  ![](hair/m/lightgreen/afro.png)
  ![](hair/m/green/afro.png)
  ![](hair/m/teal/afro.png)
  ![](hair/m/blonde/afro.png)
  ![](hair/m/silver/afro.png)
  ![](hair/m/white/afro.png)

  ![](hair/f/brown/afro.png)
  ![](hair/f/darkred/afro.png)
  ![](hair/f/orange/afro.png)
  ![](hair/f/red/afro.png)
  ![](hair/f/pink/afro.png)
  ![](hair/f/purple/afro.png)
  ![](hair/f/blue/afro.png)
  ![](hair/f/periwinkle/afro.png)
  ![](hair/f/lightblue/afro.png)
  ![](hair/f/lightgreen/afro.png)
  ![](hair/f/green/afro.png)
  ![](hair/f/teal/afro.png)
  ![](hair/f/blonde/afro.png)
  ![](hair/f/silver/afro.png)
  ![](hair/f/white/afro.png)

Big (m/f)  ![](hair/m/black/big.png) ![](hair/f/black/big.png)

  ![](hair/m/brown/big.png)
  ![](hair/m/darkred/big.png)
  ![](hair/m/orange/big.png)
  ![](hair/m/red/big.png)
  ![](hair/m/pink/big.png)
  ![](hair/m/purple/big.png)
  ![](hair/m/blue/big.png)
  ![](hair/m/periwinkle/big.png)
  ![](hair/m/lightblue/big.png)
  ![](hair/m/lightgreen/big.png)
  ![](hair/m/green/big.png)
  ![](hair/m/teal/big.png)
  ![](hair/m/blonde/big.png)
  ![](hair/m/silver/big.png)
  ![](hair/m/white/big.png)

  ![](hair/f/brown/big.png)
  ![](hair/f/darkred/big.png)
  ![](hair/f/orange/big.png)
  ![](hair/f/red/big.png)
  ![](hair/f/pink/big.png)
  ![](hair/f/purple/big.png)
  ![](hair/f/blue/big.png)
  ![](hair/f/periwinkle/big.png)
  ![](hair/f/lightblue/big.png)
  ![](hair/f/lightgreen/big.png)
  ![](hair/f/green/big.png)
  ![](hair/f/teal/big.png)
  ![](hair/f/blonde/big.png)
  ![](hair/f/silver/big.png)
  ![](hair/f/white/big.png)

Bob (f)  ![](hair/f/black/bob.png)

  ![](hair/f/brown/bob.png)
  ![](hair/f/darkred/bob.png)
  ![](hair/f/orange/bob.png)
  ![](hair/f/red/bob.png)
  ![](hair/f/pink/bob.png)
  ![](hair/f/purple/bob.png)
  ![](hair/f/blue/bob.png)
  ![](hair/f/periwinkle/bob.png)
  ![](hair/f/lightblue/bob.png)
  ![](hair/f/lightgreen/bob.png)
  ![](hair/f/green/bob.png)
  ![](hair/f/teal/bob.png)
  ![](hair/f/blonde/bob.png)
  ![](hair/f/silver/bob.png)
  ![](hair/f/white/bob.png)

Buzz Cut (m/f)  ![](hair/m/black/buzzcut.png) ![](hair/f/black/buzzcut.png)

  ![](hair/m/brown/buzzcut.png)
  ![](hair/m/darkred/buzzcut.png)
  ![](hair/m/orange/buzzcut.png)
  ![](hair/m/red/buzzcut.png)
  ![](hair/m/pink/buzzcut.png)
  ![](hair/m/purple/buzzcut.png)
  ![](hair/m/blue/buzzcut.png)
  ![](hair/m/periwinkle/buzzcut.png)
  ![](hair/m/lightblue/buzzcut.png)
  ![](hair/m/lightgreen/buzzcut.png)
  ![](hair/m/green/buzzcut.png)
  ![](hair/m/teal/buzzcut.png)
  ![](hair/m/blonde/buzzcut.png)
  ![](hair/m/silver/buzzcut.png)
  ![](hair/m/white/buzzcut.png)

  ![](hair/f/brown/buzzcut.png)
  ![](hair/f/darkred/buzzcut.png)
  ![](hair/f/orange/buzzcut.png)
  ![](hair/f/red/buzzcut.png)
  ![](hair/f/pink/buzzcut.png)
  ![](hair/f/purple/buzzcut.png)
  ![](hair/f/blue/buzzcut.png)
  ![](hair/f/periwinkle/buzzcut.png)
  ![](hair/f/lightblue/buzzcut.png)
  ![](hair/f/lightgreen/buzzcut.png)
  ![](hair/f/green/buzzcut.png)
  ![](hair/f/teal/buzzcut.png)
  ![](hair/f/blonde/buzzcut.png)
  ![](hair/f/silver/buzzcut.png)
  ![](hair/f/white/buzzcut.png)

Clown (m/f)  ![](hair/m/black/clown.png) ![](hair/f/black/clown.png)

  ![](hair/m/brown/clown.png)
  ![](hair/m/darkred/clown.png)
  ![](hair/m/orange/clown.png)
  ![](hair/m/red/clown.png)
  ![](hair/m/pink/clown.png)
  ![](hair/m/purple/clown.png)
  ![](hair/m/blue/clown.png)
  ![](hair/m/periwinkle/clown.png)
  ![](hair/m/lightblue/clown.png)
  ![](hair/m/lightgreen/clown.png)
  ![](hair/m/green/clown.png)
  ![](hair/m/teal/clown.png)
  ![](hair/m/blonde/clown.png)
  ![](hair/m/silver/clown.png)
  ![](hair/m/white/clown.png)

  ![](hair/f/brown/clown.png)
  ![](hair/f/darkred/clown.png)
  ![](hair/f/orange/clown.png)
  ![](hair/f/red/clown.png)
  ![](hair/f/pink/clown.png)
  ![](hair/f/purple/clown.png)
  ![](hair/f/blue/clown.png)
  ![](hair/f/periwinkle/clown.png)
  ![](hair/f/lightblue/clown.png)
  ![](hair/f/lightgreen/clown.png)
  ![](hair/f/green/clown.png)
  ![](hair/f/teal/clown.png)
  ![](hair/f/blonde/clown.png)
  ![](hair/f/silver/clown.png)
  ![](hair/f/white/clown.png)

Crazy (m/f)  ![](hair/m/black/crazy.png) ![](hair/f/black/crazy.png)

  ![](hair/m/brown/crazy.png)
  ![](hair/m/darkred/crazy.png)
  ![](hair/m/orange/crazy.png)
  ![](hair/m/red/crazy.png)
  ![](hair/m/pink/crazy.png)
  ![](hair/m/purple/crazy.png)
  ![](hair/m/blue/crazy.png)
  ![](hair/m/periwinkle/crazy.png)
  ![](hair/m/lightblue/crazy.png)
  ![](hair/m/lightgreen/crazy.png)
  ![](hair/m/green/crazy.png)
  ![](hair/m/teal/crazy.png)
  ![](hair/m/blonde/crazy.png)
  ![](hair/m/silver/crazy.png)
  ![](hair/m/white/crazy.png)

  ![](hair/f/brown/crazy.png)
  ![](hair/f/darkred/crazy.png)
  ![](hair/f/orange/crazy.png)
  ![](hair/f/red/crazy.png)
  ![](hair/f/pink/crazy.png)
  ![](hair/f/purple/crazy.png)
  ![](hair/f/blue/crazy.png)
  ![](hair/f/periwinkle/crazy.png)
  ![](hair/f/lightblue/crazy.png)
  ![](hair/f/lightgreen/crazy.png)
  ![](hair/f/green/crazy.png)
  ![](hair/f/teal/crazy.png)
  ![](hair/f/blonde/crazy.png)
  ![](hair/f/silver/crazy.png)
  ![](hair/f/white/crazy.png)

Faux Hawk (m)  ![](hair/m/black/fauxhawk.png)

  ![](hair/m/brown/fauxhawk.png)
  ![](hair/m/darkred/fauxhawk.png)
  ![](hair/m/orange/fauxhawk.png)
  ![](hair/m/red/fauxhawk.png)
  ![](hair/m/pink/fauxhawk.png)
  ![](hair/m/purple/fauxhawk.png)
  ![](hair/m/blue/fauxhawk.png)
  ![](hair/m/periwinkle/fauxhawk.png)
  ![](hair/m/lightblue/fauxhawk.png)
  ![](hair/m/lightgreen/fauxhawk.png)
  ![](hair/m/green/fauxhawk.png)
  ![](hair/m/teal/fauxhawk.png)
  ![](hair/m/blonde/fauxhawk.png)
  ![](hair/m/silver/fauxhawk.png)
  ![](hair/m/white/fauxhawk.png)

Frumpy (m/f)  ![](hair/m/black/frumpy.png) ![](hair/f/black/frumpy.png)

  ![](hair/m/brown/frumpy.png)
  ![](hair/m/darkred/frumpy.png)
  ![](hair/m/orange/frumpy.png)
  ![](hair/m/red/frumpy.png)
  ![](hair/m/pink/frumpy.png)
  ![](hair/m/purple/frumpy.png)
  ![](hair/m/blue/frumpy.png)
  ![](hair/m/periwinkle/frumpy.png)
  ![](hair/m/lightblue/frumpy.png)
  ![](hair/m/lightgreen/frumpy.png)
  ![](hair/m/green/frumpy.png)
  ![](hair/m/teal/frumpy.png)
  ![](hair/m/blonde/frumpy.png)
  ![](hair/m/silver/frumpy.png)
  ![](hair/m/white/frumpy.png)

  ![](hair/f/brown/frumpy.png)
  ![](hair/f/darkred/frumpy.png)
  ![](hair/f/orange/frumpy.png)
  ![](hair/f/red/frumpy.png)
  ![](hair/f/pink/frumpy.png)
  ![](hair/f/purple/frumpy.png)
  ![](hair/f/blue/frumpy.png)
  ![](hair/f/periwinkle/frumpy.png)
  ![](hair/f/lightblue/frumpy.png)
  ![](hair/f/lightgreen/frumpy.png)
  ![](hair/f/green/frumpy.png)
  ![](hair/f/teal/frumpy.png)
  ![](hair/f/blonde/frumpy.png)
  ![](hair/f/silver/frumpy.png)
  ![](hair/f/white/frumpy.png)

Half Shaved (f)  ![](hair/f/black/halfshaved.png)

  ![](hair/f/brown/halfshaved.png)
  ![](hair/f/darkred/halfshaved.png)
  ![](hair/f/orange/halfshaved.png)
  ![](hair/f/red/halfshaved.png)
  ![](hair/f/pink/halfshaved.png)
  ![](hair/f/purple/halfshaved.png)
  ![](hair/f/blue/halfshaved.png)
  ![](hair/f/periwinkle/halfshaved.png)
  ![](hair/f/lightblue/halfshaved.png)
  ![](hair/f/lightgreen/halfshaved.png)
  ![](hair/f/green/halfshaved.png)
  ![](hair/f/teal/halfshaved.png)
  ![](hair/f/blonde/halfshaved.png)
  ![](hair/f/silver/halfshaved.png)
  ![](hair/f/white/halfshaved.png)

Heart (f)  ![](hair/f/black/heart.png)

  ![](hair/f/brown/heart.png)
  ![](hair/f/darkred/heart.png)
  ![](hair/f/orange/heart.png)
  ![](hair/f/red/heart.png)
  ![](hair/f/pink/heart.png)
  ![](hair/f/purple/heart.png)
  ![](hair/f/blue/heart.png)
  ![](hair/f/periwinkle/heart.png)
  ![](hair/f/lightblue/heart.png)
  ![](hair/f/lightgreen/heart.png)
  ![](hair/f/green/heart.png)
  ![](hair/f/teal/heart.png)
  ![](hair/f/blonde/heart.png)
  ![](hair/f/silver/heart.png)
  ![](hair/f/white/heart.png)

Long (m)  ![](hair/m/black/long.png)

  ![](hair/m/brown/long.png)
  ![](hair/m/darkred/long.png)
  ![](hair/m/orange/long.png)
  ![](hair/m/red/long.png)
  ![](hair/m/pink/long.png)
  ![](hair/m/purple/long.png)
  ![](hair/m/blue/long.png)
  ![](hair/m/periwinkle/long.png)
  ![](hair/m/lightblue/long.png)
  ![](hair/m/lightgreen/long.png)
  ![](hair/m/green/long.png)
  ![](hair/m/teal/long.png)
  ![](hair/m/blonde/long.png)
  ![](hair/m/silver/long.png)
  ![](hair/m/white/long.png)

Long Curly (f)  ![](hair/f/black/longcurly.png)

  ![](hair/f/brown/longcurly.png)
  ![](hair/f/darkred/longcurly.png)
  ![](hair/f/orange/longcurly.png)
  ![](hair/f/red/longcurly.png)
  ![](hair/f/pink/longcurly.png)
  ![](hair/f/purple/longcurly.png)
  ![](hair/f/blue/longcurly.png)
  ![](hair/f/periwinkle/longcurly.png)
  ![](hair/f/lightblue/longcurly.png)
  ![](hair/f/lightgreen/longcurly.png)
  ![](hair/f/green/longcurly.png)
  ![](hair/f/teal/longcurly.png)
  ![](hair/f/blonde/longcurly.png)
  ![](hair/f/silver/longcurly.png)
  ![](hair/f/white/longcurly.png)

Messy (m/f)  ![](hair/m/black/messy.png) ![](hair/f/black/messy.png)

  ![](hair/m/brown/messy.png)
  ![](hair/m/darkred/messy.png)
  ![](hair/m/orange/messy.png)
  ![](hair/m/red/messy.png)
  ![](hair/m/pink/messy.png)
  ![](hair/m/purple/messy.png)
  ![](hair/m/blue/messy.png)
  ![](hair/m/periwinkle/messy.png)
  ![](hair/m/lightblue/messy.png)
  ![](hair/m/lightgreen/messy.png)
  ![](hair/m/green/messy.png)
  ![](hair/m/teal/messy.png)
  ![](hair/m/blonde/messy.png)
  ![](hair/m/silver/messy.png)
  ![](hair/m/white/messy.png)

  ![](hair/f/brown/messy.png)
  ![](hair/f/darkred/messy.png)
  ![](hair/f/orange/messy.png)
  ![](hair/f/red/messy.png)
  ![](hair/f/pink/messy.png)
  ![](hair/f/purple/messy.png)
  ![](hair/f/blue/messy.png)
  ![](hair/f/periwinkle/messy.png)
  ![](hair/f/lightblue/messy.png)
  ![](hair/f/lightgreen/messy.png)
  ![](hair/f/green/messy.png)
  ![](hair/f/teal/messy.png)
  ![](hair/f/blonde/messy.png)
  ![](hair/f/silver/messy.png)
  ![](hair/f/white/messy.png)

Mohawk (m/f)  ![](hair/m/black/mohawk.png) ![](hair/f/black/mohawk.png)

  ![](hair/m/brown/mohawk.png)
  ![](hair/m/darkred/mohawk.png)
  ![](hair/m/orange/mohawk.png)
  ![](hair/m/red/mohawk.png)
  ![](hair/m/pink/mohawk.png)
  ![](hair/m/purple/mohawk.png)
  ![](hair/m/blue/mohawk.png)
  ![](hair/m/periwinkle/mohawk.png)
  ![](hair/m/lightblue/mohawk.png)
  ![](hair/m/lightgreen/mohawk.png)
  ![](hair/m/green/mohawk.png)
  ![](hair/m/teal/mohawk.png)
  ![](hair/m/blonde/mohawk.png)
  ![](hair/m/silver/mohawk.png)
  ![](hair/m/white/mohawk.png)

  ![](hair/f/brown/mohawk.png)
  ![](hair/f/darkred/mohawk.png)
  ![](hair/f/orange/mohawk.png)
  ![](hair/f/red/mohawk.png)
  ![](hair/f/pink/mohawk.png)
  ![](hair/f/purple/mohawk.png)
  ![](hair/f/blue/mohawk.png)
  ![](hair/f/periwinkle/mohawk.png)
  ![](hair/f/lightblue/mohawk.png)
  ![](hair/f/lightgreen/mohawk.png)
  ![](hair/f/green/mohawk.png)
  ![](hair/f/teal/mohawk.png)
  ![](hair/f/blonde/mohawk.png)
  ![](hair/f/silver/mohawk.png)
  ![](hair/f/white/mohawk.png)

Peak Spike (m)  ![](hair/m/black/peakspike.png)

  ![](hair/m/brown/peakspike.png)
  ![](hair/m/darkred/peakspike.png)
  ![](hair/m/orange/peakspike.png)
  ![](hair/m/red/peakspike.png)
  ![](hair/m/pink/peakspike.png)
  ![](hair/m/purple/peakspike.png)
  ![](hair/m/blue/peakspike.png)
  ![](hair/m/periwinkle/peakspike.png)
  ![](hair/m/lightblue/peakspike.png)
  ![](hair/m/lightgreen/peakspike.png)
  ![](hair/m/green/peakspike.png)
  ![](hair/m/teal/peakspike.png)
  ![](hair/m/blonde/peakspike.png)
  ![](hair/m/silver/peakspike.png)
  ![](hair/m/white/peakspike.png)

Pigtails (f)  ![](hair/f/black/pigtails.png)

  ![](hair/f/brown/pigtails.png)
  ![](hair/f/darkred/pigtails.png)
  ![](hair/f/orange/pigtails.png)
  ![](hair/f/red/pigtails.png)
  ![](hair/f/pink/pigtails.png)
  ![](hair/f/purple/pigtails.png)
  ![](hair/f/blue/pigtails.png)
  ![](hair/f/periwinkle/pigtails.png)
  ![](hair/f/lightblue/pigtails.png)
  ![](hair/f/lightgreen/pigtails.png)
  ![](hair/f/green/pigtails.png)
  ![](hair/f/teal/pigtails.png)
  ![](hair/f/blonde/pigtails.png)
  ![](hair/f/silver/pigtails.png)
  ![](hair/f/white/pigtails.png)

Pixie (f)  ![](hair/f/black/pixie.png)

  ![](hair/f/brown/pixie.png)
  ![](hair/f/darkred/pixie.png)
  ![](hair/f/orange/pixie.png)
  ![](hair/f/red/pixie.png)
  ![](hair/f/pink/pixie.png)
  ![](hair/f/purple/pixie.png)
  ![](hair/f/blue/pixie.png)
  ![](hair/f/periwinkle/pixie.png)
  ![](hair/f/lightblue/pixie.png)
  ![](hair/f/lightgreen/pixie.png)
  ![](hair/f/green/pixie.png)
  ![](hair/f/teal/pixie.png)
  ![](hair/f/blonde/pixie.png)
  ![](hair/f/silver/pixie.png)
  ![](hair/f/white/pixie.png)

Short (m/f)  ![](hair/m/black/short.png) ![](hair/f/black/short.png)

  ![](hair/m/brown/short.png)
  ![](hair/m/darkred/short.png)
  ![](hair/m/orange/short.png)
  ![](hair/m/red/short.png)
  ![](hair/m/pink/short.png)
  ![](hair/m/purple/short.png)
  ![](hair/m/blue/short.png)
  ![](hair/m/periwinkle/short.png)
  ![](hair/m/lightblue/short.png)
  ![](hair/m/lightgreen/short.png)
  ![](hair/m/green/short.png)
  ![](hair/m/teal/short.png)
  ![](hair/m/blonde/short.png)
  ![](hair/m/silver/short.png)
  ![](hair/m/white/short.png)

  ![](hair/f/brown/short.png)
  ![](hair/f/darkred/short.png)
  ![](hair/f/orange/short.png)
  ![](hair/f/red/short.png)
  ![](hair/f/pink/short.png)
  ![](hair/f/purple/short.png)
  ![](hair/f/blue/short.png)
  ![](hair/f/periwinkle/short.png)
  ![](hair/f/lightblue/short.png)
  ![](hair/f/lightgreen/short.png)
  ![](hair/f/green/short.png)
  ![](hair/f/teal/short.png)
  ![](hair/f/blonde/short.png)
  ![](hair/f/silver/short.png)
  ![](hair/f/white/short.png)

Side (f)  ![](hair/f/black/side.png)

  ![](hair/f/brown/side.png)
  ![](hair/f/darkred/side.png)
  ![](hair/f/orange/side.png)
  ![](hair/f/red/side.png)
  ![](hair/f/pink/side.png)
  ![](hair/f/purple/side.png)
  ![](hair/f/blue/side.png)
  ![](hair/f/periwinkle/side.png)
  ![](hair/f/lightblue/side.png)
  ![](hair/f/lightgreen/side.png)
  ![](hair/f/green/side.png)
  ![](hair/f/teal/side.png)
  ![](hair/f/blonde/side.png)
  ![](hair/f/silver/side.png)
  ![](hair/f/white/side.png)

Straight 1 (f)  ![](hair/f/black/straight1.png)

  ![](hair/f/brown/straight1.png)
  ![](hair/f/darkred/straight1.png)
  ![](hair/f/orange/straight1.png)
  ![](hair/f/red/straight1.png)
  ![](hair/f/pink/straight1.png)
  ![](hair/f/purple/straight1.png)
  ![](hair/f/blue/straight1.png)
  ![](hair/f/periwinkle/straight1.png)
  ![](hair/f/lightblue/straight1.png)
  ![](hair/f/lightgreen/straight1.png)
  ![](hair/f/green/straight1.png)
  ![](hair/f/teal/straight1.png)
  ![](hair/f/blonde/straight1.png)
  ![](hair/f/silver/straight1.png)
  ![](hair/f/white/straight1.png)

Straight 2 (f)  ![](hair/f/black/straight2.png)

  ![](hair/f/brown/straight2.png)
  ![](hair/f/darkred/straight2.png)
  ![](hair/f/orange/straight2.png)
  ![](hair/f/red/straight2.png)
  ![](hair/f/pink/straight2.png)
  ![](hair/f/purple/straight2.png)
  ![](hair/f/blue/straight2.png)
  ![](hair/f/periwinkle/straight2.png)
  ![](hair/f/lightblue/straight2.png)
  ![](hair/f/lightgreen/straight2.png)
  ![](hair/f/green/straight2.png)
  ![](hair/f/teal/straight2.png)
  ![](hair/f/blonde/straight2.png)
  ![](hair/f/silver/straight2.png)
  ![](hair/f/white/straight2.png)

Stringy (m/f)  ![](hair/m/black/stringy.png) ![](hair/f/black/stringy.png)

  ![](hair/m/brown/stringy.png)
  ![](hair/m/darkred/stringy.png)
  ![](hair/m/orange/stringy.png)
  ![](hair/m/red/stringy.png)
  ![](hair/m/pink/stringy.png)
  ![](hair/m/purple/stringy.png)
  ![](hair/m/blue/stringy.png)
  ![](hair/m/periwinkle/stringy.png)
  ![](hair/m/lightblue/stringy.png)
  ![](hair/m/lightgreen/stringy.png)
  ![](hair/m/green/stringy.png)
  ![](hair/m/teal/stringy.png)
  ![](hair/m/blonde/stringy.png)
  ![](hair/m/silver/stringy.png)
  ![](hair/m/white/stringy.png)

  ![](hair/f/brown/stringy.png)
  ![](hair/f/darkred/stringy.png)
  ![](hair/f/orange/stringy.png)
  ![](hair/f/red/stringy.png)
  ![](hair/f/pink/stringy.png)
  ![](hair/f/purple/stringy.png)
  ![](hair/f/blue/stringy.png)
  ![](hair/f/periwinkle/stringy.png)
  ![](hair/f/lightblue/stringy.png)
  ![](hair/f/lightgreen/stringy.png)
  ![](hair/f/green/stringy.png)
  ![](hair/f/teal/stringy.png)
  ![](hair/f/blonde/stringy.png)
  ![](hair/f/silver/stringy.png)
  ![](hair/f/white/stringy.png)

Widow's Peak (m)  ![](hair/m/black/widowspeak.png)

  ![](hair/m/brown/widowspeak.png)
  ![](hair/m/darkred/widowspeak.png)
  ![](hair/m/orange/widowspeak.png)
  ![](hair/m/red/widowspeak.png)
  ![](hair/m/pink/widowspeak.png)
  ![](hair/m/purple/widowspeak.png)
  ![](hair/m/blue/widowspeak.png)
  ![](hair/m/periwinkle/widowspeak.png)
  ![](hair/m/lightblue/widowspeak.png)
  ![](hair/m/lightgreen/widowspeak.png)
  ![](hair/m/green/widowspeak.png)
  ![](hair/m/teal/widowspeak.png)
  ![](hair/m/blonde/widowspeak.png)
  ![](hair/m/silver/widowspeak.png)
  ![](hair/m/white/widowspeak.png)

Wild 1 (m/f)  ![](hair/m/black/wild1.png) ![](hair/f/black/wild1.png)

  ![](hair/m/brown/wild1.png)
  ![](hair/m/darkred/wild1.png)
  ![](hair/m/orange/wild1.png)
  ![](hair/m/red/wild1.png)
  ![](hair/m/pink/wild1.png)
  ![](hair/m/purple/wild1.png)
  ![](hair/m/blue/wild1.png)
  ![](hair/m/periwinkle/wild1.png)
  ![](hair/m/lightblue/wild1.png)
  ![](hair/m/lightgreen/wild1.png)
  ![](hair/m/green/wild1.png)
  ![](hair/m/teal/wild1.png)
  ![](hair/m/blonde/wild1.png)
  ![](hair/m/silver/wild1.png)
  ![](hair/m/white/wild1.png)

  ![](hair/f/brown/wild1.png)
  ![](hair/f/darkred/wild1.png)
  ![](hair/f/orange/wild1.png)
  ![](hair/f/red/wild1.png)
  ![](hair/f/pink/wild1.png)
  ![](hair/f/purple/wild1.png)
  ![](hair/f/blue/wild1.png)
  ![](hair/f/periwinkle/wild1.png)
  ![](hair/f/lightblue/wild1.png)
  ![](hair/f/lightgreen/wild1.png)
  ![](hair/f/green/wild1.png)
  ![](hair/f/teal/wild1.png)
  ![](hair/f/blonde/wild1.png)
  ![](hair/f/silver/wild1.png)
  ![](hair/f/white/wild1.png)

Wild 2 (f)  ![](hair/f/black/wild2.png)

  ![](hair/f/brown/wild2.png)
  ![](hair/f/darkred/wild2.png)
  ![](hair/f/orange/wild2.png)
  ![](hair/f/red/wild2.png)
  ![](hair/f/pink/wild2.png)
  ![](hair/f/purple/wild2.png)
  ![](hair/f/blue/wild2.png)
  ![](hair/f/periwinkle/wild2.png)
  ![](hair/f/lightblue/wild2.png)
  ![](hair/f/lightgreen/wild2.png)
  ![](hair/f/green/wild2.png)
  ![](hair/f/teal/wild2.png)
  ![](hair/f/blonde/wild2.png)
  ![](hair/f/silver/wild2.png)
  ![](hair/f/white/wild2.png)

Wild 3 (f)  ![](hair/f/black/wild3.png)

  ![](hair/f/brown/wild3.png)
  ![](hair/f/darkred/wild3.png)
  ![](hair/f/orange/wild3.png)
  ![](hair/f/red/wild3.png)
  ![](hair/f/pink/wild3.png)
  ![](hair/f/purple/wild3.png)
  ![](hair/f/blue/wild3.png)
  ![](hair/f/periwinkle/wild3.png)
  ![](hair/f/lightblue/wild3.png)
  ![](hair/f/lightgreen/wild3.png)
  ![](hair/f/green/wild3.png)
  ![](hair/f/teal/wild3.png)
  ![](hair/f/blonde/wild3.png)
  ![](hair/f/silver/wild3.png)
  ![](hair/f/white/wild3.png)

More

Style 1 (m/f)  ![](hair/m/black/style1.png) ![](hair/f/black/style1.png)

  ![](hair/m/brown/style1.png)
  ![](hair/m/darkred/style1.png)
  ![](hair/m/orange/style1.png)
  ![](hair/m/red/style1.png)
  ![](hair/m/pink/style1.png)
  ![](hair/m/purple/style1.png)
  ![](hair/m/blue/style1.png)
  ![](hair/m/periwinkle/style1.png)
  ![](hair/m/lightblue/style1.png)
  ![](hair/m/lightgreen/style1.png)
  ![](hair/m/green/style1.png)
  ![](hair/m/teal/style1.png)
  ![](hair/m/blonde/style1.png)
  ![](hair/m/silver/style1.png)
  ![](hair/m/white/style1.png)

  ![](hair/f/brown/style1.png)
  ![](hair/f/darkred/style1.png)
  ![](hair/f/orange/style1.png)
  ![](hair/f/red/style1.png)
  ![](hair/f/pink/style1.png)
  ![](hair/f/purple/style1.png)
  ![](hair/f/blue/style1.png)
  ![](hair/f/periwinkle/style1.png)
  ![](hair/f/lightblue/style1.png)
  ![](hair/f/lightgreen/style1.png)
  ![](hair/f/green/style1.png)
  ![](hair/f/teal/style1.png)
  ![](hair/f/blonde/style1.png)
  ![](hair/f/silver/style1.png)
  ![](hair/f/white/style1.png)

Style 2 (f)  ![](hair/f/black/style2.png)

  ![](hair/f/brown/style2.png)
  ![](hair/f/darkred/style2.png)
  ![](hair/f/orange/style2.png)
  ![](hair/f/red/style2.png)
  ![](hair/f/pink/style2.png)
  ![](hair/f/purple/style2.png)
  ![](hair/f/blue/style2.png)
  ![](hair/f/periwinkle/style2.png)
  ![](hair/f/lightblue/style2.png)
  ![](hair/f/lightgreen/style2.png)
  ![](hair/f/green/style2.png)
  ![](hair/f/teal/style2.png)
  ![](hair/f/blonde/style2.png)
  ![](hair/f/silver/style2.png)
  ![](hair/f/white/style2.png)

Style 3 (f)  ![](hair/f/black/style3.png)

  ![](hair/f/brown/style3.png)
  ![](hair/f/darkred/style3.png)
  ![](hair/f/orange/style3.png)
  ![](hair/f/red/style3.png)
  ![](hair/f/pink/style3.png)
  ![](hair/f/purple/style3.png)
  ![](hair/f/blue/style3.png)
  ![](hair/f/periwinkle/style3.png)
  ![](hair/f/lightblue/style3.png)
  ![](hair/f/lightgreen/style3.png)
  ![](hair/f/green/style3.png)
  ![](hair/f/teal/style3.png)
  ![](hair/f/blonde/style3.png)
  ![](hair/f/silver/style3.png)
  ![](hair/f/white/style3.png)

## Rainbow Series (24×24)

_Red, orange, yellow, green, blue, indigo and violet_

Rainbow Hair (m/f)
![](rainbow/m/rainbow-hair.png)
![](rainbow/f/rainbow-hair.png)

## Wall Street Bets Series (24×24)

_Power to the punks_

Hair  ![](wallstreetbets/wallstreetbets-hair1.png)
  ![](wallstreetbets/wallstreetbets-hair2.png)
  ![](wallstreetbets/wallstreetbets-hair3.png)
  ![](wallstreetbets/wallstreetbets-hair1_dark.png)
  ![](wallstreetbets/wallstreetbets-hair2_dark.png)
  ![](wallstreetbets/wallstreetbets-hair3_dark.png)

## Int'l Headwear Series (24×24)

_New international headwear from around the world_

Australian Cork Hat (m/f) ![](intl/m/australiancorkhat.png) ![](intl/f/australiancorkhat.png),
Ayam (m/f)  ![](intl/m/ayam.png) ![](intl/f/ayam.png),
Bamboo Hat (m/f)  ![](intl/m/bamboohat.png) ![](intl/f/bamboohat.png),
Baseball Cap (m/f) ![](intl/m/baseballcap.png) ![](intl/f/baseballcap.png),
Bear Skin (m/f)  ![](intl/m/bearskin.png) ![](intl/f/bearskin.png),
Beer Bong (m/f) ![](intl/m/beerbong.png) ![](intl/f/beerbong.png),
Beret (m/f)  ![](intl/m/beret.png) ![](intl/f/beret.png),
Boater (m/f)  ![](intl/m/boater.png) ![](intl/f/boater.png),
Bororo (m/f)  ![](intl/m/bororo.png) ![](intl/f/bororo.png),
Chichak Helmet (m/f)  ![](intl/m/chichakhelmet.png) ![](intl/f/chichakhelmet.png),
Chinese Landlords Hat (m/f)  ![](intl/m/chineselandlordshat.png) ![](intl/f/chineselandlordshat.png),
Chullo (m/f)  ![](intl/m/chullo.png) ![](intl/f/chullo.png),
Fedora¹ (m/f)  ![](intl/m/fedora.png) ![](intl/f/fedora.png),
Fez (m/f)  ![](intl/m/fez.png) ![](intl/f/fez.png),
Fisherman Cap (m/f)  ![](intl/m/fishermancap.png) ![](intl/f/fishermancap.png),
Flamenco Hat (m/f)  ![](intl/m/flamencohat.png) ![](intl/f/flamencohat.png),
Flower Crown (m/f)   ![](intl/m/flowercrown.png) ![](intl/f/flowercrown.png),
Gat (m/f)  ![](intl/m/gat.png) ![](intl/f/gat.png),
Gaucho (m/f)  ![](intl/m/gaucho.png) ![](intl/f/gaucho.png),
Hennin (m/f)  ![](intl/m/hennin.png) ![](intl/f/hennin.png),
Isicholo (m/f)  ![](intl/m/isicholo.png) ![](intl/f/isicholo.png),
Jaapi (m/f)  ![](intl/m/jaapi.png) ![](intl/f/jaapi.png),
Keffiyeh (m/f)  ![](intl/m/keffiyeh.png) ![](intl/f/keffiyeh.png),
Krakowiak (m/f)  ![](intl/m/krakowiak.png) ![](intl/f/krakowiak.png),
Misango Cap (m/f)  ![](intl/m/misangocap.png) ![](intl/f/misangocap.png),
Newsboy Cap (m)  ![](intl/m/newsboycap.png),
Panama Hat (m/f)  ![](intl/m/panamahat.png) ![](intl/f/panamahat.png),
Rasta (m/f)  ![](intl/m/rasta.png) ![](intl/f/rasta.png),
Royal Cocktail Hat (f)  ![](intl/f/royalcocktailhat.png),
Sibenik (m/f)  ![](intl/m/sibenik.png) ![](intl/f/sibenik.png),
Sombrero (m/f)  ![](intl/m/sombrero.png) ![](intl/f/sombrero.png),
Tam-O-Shanter (m/f)  ![](intl/m/tamoshanter.png) ![](intl/f/tamoshanter.png),
Trapper Hat (m/f)  ![](intl/m/trapperhat.png) ![](intl/f/trapperhat.png),
Tuque (m/f)  ![](intl/m/tuque.png) ![](intl/f/tuque.png),
Turban (m/f)  ![](intl/m/turban.png) ![](intl/f/turban.png),
Tyrolean (m/f)  ![](intl/m/tyrolean.png) ![](intl/f/tyrolean.png),
Ushanka (m/f)  ![](intl/m/ushanka.png) ![](intl/f/ushanka.png),
Viking Hat (m/f)  ![](intl/m/vikinghat.png) ![](intl/f/vikinghat.png)

Saudis - Shemagh (& Agal)  (m)  ![](saudis/m/white_shemagh.png)
  ![](saudis/m/white_shemagh_agal.png)
  ![](saudis/m/white_shemagh_gold_agal.png)
  ![](saudis/m/white_shemagh_stylish_gold_agal.png)
  ![](saudis/m/white_shemagh_crown.png)
  ![](saudis/m/brown_shemagh_agal.png)
  ![](saudis/m/brown_shemagh_crown.png)
  ![](saudis/m/red_shemagh.png)
  ![](saudis/m/red_shemagh_agal.png)
  ![](saudis/m/red_shemagh_crown.png),
 Niquab (f)  ![](saudis/f/niquab-black.png)
  ![](saudis/f/niquab-blue.png)

Jews  - Hats (m)  ![](jews/m/hat1.png)
  ![](jews/m/hat2.png)
  ![](jews/m/hat3.png)
  ![](jews/m/hat4.png)
  ![](jews/m/hat5.png)

¹: Alternatives to the basic series

## Planet of the Apes Series (24×24)

_The rise of more new punk apes_

Ape (male,/female) ![](basic/ape-male.png) ![](basic/ape-female.png)¹ -
![](planet-apes/ape-male-black.png)
![](planet-apes/ape-male-gray.png)
![](planet-apes/ape-male-dark_brown.png)
![](planet-apes/ape-male-brown.png)
![](planet-apes/ape-male-golden_brown.png)
![](planet-apes/ape-male-cheetah.png)
![](planet-apes/ape-male-blue.png)
![](planet-apes/ape-male-dmt.png)
![](planet-apes/ape-male-pink.png)
![](planet-apes/ape-male-red.png)
![](planet-apes/ape-male-tan.png)
![](planet-apes/ape-male-cream.png)
![](planet-apes/ape-male-white.png)
![](planet-apes/ape-male-noise.png)
![](planet-apes/ape-male-trippy.png)
![](planet-apes/ape-male-solid_gold.png)
![](planet-apes/ape-male-bot.png)
![](planet-apes/ape-male-death_bot.png),
Ape Zombie (male) ![](planet-apes/ape-zombie-male.png),
Ape Alien (male) ![](planet-apes/ape-alien-male.png)

¹: From the basic series

## More Species Series (24×24)

_New species_

Demon (male / female) ![](more/demon-male.png) ![](unisize/demon-female.png) ![](more/demon-female.png),
Vampire (male / female) ![](more/vampire-male.png) ![](unisize/vampire-female.png) ![](more/vampire-female.png),
Orc (male / female) ![](more/orc-male.png) ![](unisize/orc-female.png) ![](more/orc-female.png),
Ghost (male / female) ![](more/ghost-male.png) ![](unisize/ghost-female.png) ![](more/ghost-female.png),
Skeleton (male / female) ![](more/skeleton-male.png) ![](unisize/skeleton-female.png) ![](more/skeleton-female.png),
Mummy (male / female) ![](more/mummy-male.png) ![](unisize/mummy-female.png) ![](more/mummy-female.png),
Robot (male / female) ![](more/robot-male.png)  ![](unisize/robot-female.png) ![](more/robot-female.png),
Joker (male / female)  ![](more/joker-male.png) ![](unisize/joker-female.png) ![](more/joker-female.png),
Jack-O-Lantern (male / female) ![](more/jack-o-lantern-male.png) ![](unisize/jack-o-lantern-female.png) ![](more/jack-o-lantern-female.png),
Scream (male / female) ![](more/scream-male.png)  ![](unisize/scream-female.png) ![](more/scream-female.png),
Frankenstein (male / female) ![](more/frankenstein-male.png)  ![](unisize/frankenstein-female.png) ![](more/frankenstein-female.png)

Cyborgs  (male / female)
![](cyborgs/cyborg-male1.png)
![](cyborgs/cyborg-male2.png)
![](cyborgs/cyborg-male3.png)
![](cyborgs/cyborg-male4.png)
![](cyborgs/cyborg-female1.png)
![](cyborgs/cyborg-female2.png)
![](cyborgs/cyborg-female3.png)
![](cyborgs/cyborg-female4.png),
Metal (male / female )
![](cyborgs/cyborg-male-metal.png)
![](cyborgs/cyborg-female-metal.png),
Ape (male)
![](cyborgs/cyborg-ape.png),
Metal (male)
![](cyborgs/cyborg-ape-metal.png)

## Gold(en) Series (24×24)

_Super-rare gold(en) punks in three variants (shiny, metallic, dark)_

![](gold/male_gold_1.png)
![](gold/zombie-male_gold_1.png)
![](gold/ape-male_gold_1.png)
![](gold/alien-male_gold_1.png)
![](gold/demon-male_gold_1.png)
![](gold/skeleton-male_gold_1.png)  /
![](gold/female_gold_1.png)
![](gold/zombie-female_gold_1.png)
![](gold/ape-female_gold_1.png)
![](gold/alien-female_gold_1.png)
![](gold/demon-female_gold_1.png)
![](gold/skeleton-female_gold_1.png)

![](gold/male_gold_2.png)
![](gold/zombie-male_gold_2.png)
![](gold/ape-male_gold_2.png)
![](gold/alien-male_gold_2.png)
![](gold/demon-male_gold_2.png)
![](gold/skeleton-male_gold_2.png)  /
![](gold/female_gold_2.png)
![](gold/zombie-female_gold_2.png)
![](gold/ape-female_gold_2.png)
![](gold/alien-female_gold_2.png)
![](gold/demon-female_gold_2.png)
![](gold/skeleton-female_gold_2.png)

![](gold/male_gold_3.png)
![](gold/zombie-male_gold_3.png)
![](gold/ape-male_gold_3.png)
![](gold/alien-male_gold_3.png)
![](gold/demon-male_gold_3.png)
![](gold/skeleton-male_gold_3.png)  /
![](gold/female_gold_3.png)
![](gold/zombie-female_gold_3.png)
![](gold/ape-female_gold_3.png)
![](gold/alien-female_gold_3.png)
![](gold/demon-female_gold_3.png)
![](gold/skeleton-female_gold_3.png)

## Alien Invasion Series (24×24)

_Aliens in more colors (by degree on the HSL color wheel)_

Aliens (Male/Female) in red (0°), orange (30°),  yellow (60°),
yellow green (90°), green (120°),
cyan green (°150), cyan (°180),
cyan blue (°210),
blue (°240),
violet (°270),
magenta (°300) and red magenta (°330).

![](alien-invasion/alien-male_0.png)
![](alien-invasion/alien-male_30.png)
![](alien-invasion/alien-male_60.png)
![](alien-invasion/alien-male_90.png)
![](alien-invasion/alien-male_120.png)
![](alien-invasion/alien-male_150.png)
![](alien-invasion/alien-male_180.png)
![](alien-invasion/alien-male_210.png)
![](alien-invasion/alien-male_240.png)
![](alien-invasion/alien-male_270.png)
![](alien-invasion/alien-male_300.png)
![](alien-invasion/alien-male_330.png)

![](alien-invasion/alien-female_0.png)
![](alien-invasion/alien-female_30.png)
![](alien-invasion/alien-female_60.png)
![](alien-invasion/alien-female_90.png)
![](alien-invasion/alien-female_120.png)
![](alien-invasion/alien-female_150.png)
![](alien-invasion/alien-female_180.png)
![](alien-invasion/alien-female_210.png)
![](alien-invasion/alien-female_240.png)
![](alien-invasion/alien-female_270.png)
![](alien-invasion/alien-female_300.png)
![](alien-invasion/alien-female_330.png)

Alien Apes (Male)

![](alien-invasion/alien-ape-male_0.png)
![](alien-invasion/alien-ape-male_30.png)
![](alien-invasion/alien-ape-male_60.png)
![](alien-invasion/alien-ape-male_90.png)
![](alien-invasion/alien-ape-male_120.png)
![](alien-invasion/alien-ape-male_150.png)
![](alien-invasion/alien-ape-male_180.png)
![](alien-invasion/alien-ape-male_210.png)
![](alien-invasion/alien-ape-male_240.png)
![](alien-invasion/alien-ape-male_270.png)
![](alien-invasion/alien-ape-male_300.png)
![](alien-invasion/alien-ape-male_330.png)

## All Caps Series (24×24)

_(Baseball) caps in more colors (by degree on the HSL color wheel)_

Caps in red (0°), orange (30°), yellow (60°),
yellow green (90°), green (120°),
cyan green (°150), cyan (°180),
cyan blue (°210),
blue (240°),
violet (°270),
magenta (°300) and red magenta (°330).

![](all-caps/m/cap_0.png)
![](all-caps/m/cap_30.png)
![](all-caps/m/cap_60.png)
![](all-caps/m/cap_90.png)
![](all-caps/m/cap_120.png)
![](all-caps/m/cap_150.png)
![](all-caps/m/cap_180.png)
![](all-caps/m/cap_210.png)
![](all-caps/m/cap_240.png)
![](all-caps/m/cap_270.png)
![](all-caps/m/cap_300.png)
![](all-caps/m/cap_330.png)

![](all-caps/f/cap_0.png)
![](all-caps/f/cap_30.png)
![](all-caps/f/cap_60.png)
![](all-caps/f/cap_90.png)
![](all-caps/f/cap_120.png)
![](all-caps/f/cap_150.png)
![](all-caps/f/cap_180.png)
![](all-caps/f/cap_210.png)
![](all-caps/f/cap_240.png)
![](all-caps/f/cap_270.png)
![](all-caps/f/cap_300.png)
![](all-caps/f/cap_330.png)

## Fast Food Series (24×24)

_(Baseball) caps & more in fast food chain styles & colors_

- Caps -
  Baskin-Robbins (m/f) ![](fastfood/m/cap-br.png) ![](fastfood/m/cap-br_flipped.png)
                       ![](fastfood/f/cap-br.png) ![](fastfood/f/cap-br_flipped.png),
  Burger King (m/f) ![](fastfood/m/cap-brk.png) ![](fastfood/m/cap-brk_flipped.png)
                    ![](fastfood/f/cap-brk.png) ![](fastfood/f/cap-brk_flipped.png),
  White Castle (m/f) ![](fastfood/m/cap-castle.png) ![](fastfood/m/cap-castle_flipped.png)
                     ![](fastfood/f/cap-castle.png) ![](fastfood/f/cap-castle_flipped.png),
  Domino's Pizza (m/f) ![](fastfood/m/cap-dom.png) ![](fastfood/m/cap-dom_flipped.png)
                       ![](fastfood/f/cap-dom.png) ![](fastfood/f/cap-dom_flipped.png),
  Dunkin' Donuts (m/f) ![](fastfood/m/cap-dunk.png) ![](fastfood/m/cap-dunk_flipped.png)
                       ![](fastfood/f/cap-dunk.png) ![](fastfood/f/cap-dunk_flipped.png),
  Pizza Hut (m/f) ![](fastfood/m/cap-hut.png) ![](fastfood/m/cap-hut_flipped.png)
                  ![](fastfood/f/cap-hut.png) ![](fastfood/f/cap-hut_flipped.png),
  Jack in the Box (m/f) ![](fastfood/m/cap-jack.png) ![](fastfood/m/cap-jack_flipped.png)
                        ![](fastfood/f/cap-jack.png) ![](fastfood/f/cap-jack_flipped.png),
  Kentucky Fried Chicken (m/f) ![](fastfood/m/cap-kentucky.png) ![](fastfood/m/cap-kentucky_flipped.png)
                               ![](fastfood/f/cap-kentucky.png) ![](fastfood/f/cap-kentucky_flipped.png),
  McDonald's (m/f) ![](fastfood/m/cap-m-black.png)
                   ![](fastfood/m/cap-m-black_flipped.png)
          ![](fastfood/m/cap-m-gray.png)
          ![](fastfood/m/cap-m-gray_flipped.png)
          ![](fastfood/m/cap-m-red.png)
          ![](fastfood/m/cap-m-red_flipped.png)
          ![](fastfood/m/cap-m-white.png)
          ![](fastfood/m/cap-m-white_flipped.png)
          ![](fastfood/m/cap-m-black.png)
                   ![](fastfood/f/cap-m-black_flipped.png)
          ![](fastfood/f/cap-m-gray.png)
          ![](fastfood/f/cap-m-gray_flipped.png)
          ![](fastfood/f/cap-m-red.png)
          ![](fastfood/f/cap-m-red_flipped.png)
          ![](fastfood/f/cap-m-white.png)
          ![](fastfood/f/cap-m-white_flipped.png),
  Subway (m/f) ![](fastfood/m/cap-sub.png) ![](fastfood/m/cap-sub_flipped.png)
               ![](fastfood/f/cap-sub.png) ![](fastfood/f/cap-sub_flipped.png),
  Wendy's (m/f) ![](fastfood/m/cap-w.png) ![](fastfood/m/cap-w_flipped.png)
                ![](fastfood/f/cap-w.png) ![](fastfood/f/cap-w_flipped.png)
- Cowboy Hats -
  McDonald's (m) ![](fastfood/m/cowboy-m-red.png)
- Safari Hats -
  Kentucky Fried Chicken (m) ![](fastfood/m/safari-kentucky.png)
- Bucket Hats -
  McDonald's (m) ![](fastfood/m/bucket-m-red.png)
- Crowns -
  Burger King (m) ![](fastfood/m/crown-brk.png)

## World of Women Series (24×24)

_New skin tones, new eye colors, new lipsticks_

Skin Tones (Classic Series) -
Light Warm Olive ![](world-women/woman-light_warm_olive.png),
Medium Olive ![](world-women/woman-medium_olive.png),
Medium Gold ![](world-women/woman-medium_gold.png),
Deep Warm Gold ![](world-women/woman-deep_warm_gold.png),
Deep Bronze ![](world-women/woman-deep_bronze.png),
Deep Neutral ![](world-women/woman-deep_neutral.png),
Golden ![](world-women/woman-golden.png),
Burning Red ![](world-women/woman-burning_red.png),
Cyper Green ![](world-women/woman-cyber_green.png),
Cool Blue ![](world-women/woman-cool_blue.png),
Night Goddess ![](world-women/woman-night_goddess.png)

Skin Tones II (Big Eyes Series) -
![](world-women/woman-light_warm_olive-ii.png)
![](world-women/woman-medium_olive-ii.png)
![](world-women/woman-medium_gold-ii.png)
![](world-women/woman-deep_warm_gold-ii.png)
![](world-women/woman-deep_bronze-ii.png)
![](world-women/woman-deep_neutral-ii.png)
![](world-women/woman-golden-ii.png)
![](world-women/woman-burning_red-ii.png)
![](world-women/woman-cyber_green-ii.png)
![](world-women/woman-cool_blue-ii.png)
![](world-women/woman-night_goddess-ii.png)

Skin Tones III (Natural Series) -
![](world-women/woman-light_warm_olive-iii.png)
![](world-women/woman-medium_olive-iii.png)
![](world-women/woman-medium_gold-iii.png)
![](world-women/woman-deep_warm_gold-iii.png)
![](world-women/woman-deep_bronze-iii.png)
![](world-women/woman-deep_neutral-iii.png)
![](world-women/woman-golden-iii.png)
![](world-women/woman-burning_red-iii.png)
![](world-women/woman-cyber_green-iii.png)
![](world-women/woman-cool_blue-iii.png)
![](world-women/woman-night_goddess-iii.png)

Eyes -
Blue ![](world-women/eyes-blue.png),
Purple ![](world-women/eyes-purple.png),
Brown ![](world-women/eyes-brown.png),
Green ![](world-women/eyes-green.png)

Lipsticks -
Party Pink ![](world-women/lipstick-party_pink.png),
Passion Red ![](world-women/lipstick-passion_red.png),
Burgundy ![](world-women/lipstick-burgundy.png),

## Normie Series (24×24)

_Left-facing? Right-facing? Normie designs use the golden middle. Male? Female? Non-binary? Normie designs are unisex_

Human ![](normies/normie_human-lighter.png) ![](normies/normie_human-light.png) ![](normies/normie_human-dark.png) ![](normies/normie_human-darker.png),
Alien ![](normies/normie_alien.png),
Ape ![](normies/normie_ape.png),
Zombie  ![](normies/normie_zombie.png),
Demon  ![](normies/normie_demon.png),
Skeleton  ![](normies/normie_skeleton.png)

## Doge Series (24×24)

_Shiba Inu dogs - Much wow_

Classic ![](doge/classic.png),
Dark ![](doge/dark.png),
Alien ![](doge/alien.png),
Zombie ![](doge/zombie.png)

Attributes (by category and a-z):

- Hat  -
  Bandana ![](doge/bandana.png),
  Beanie ![](doge/beanie.png),
  Cap  ![](doge/cap.png),
  Cap Forward ![](doge/capforward.png),
  Cowboy Hat ![](doge/cowboyhat.png),
  Fedora ![](doge/fedora.png),
  Headband ![](doge/headband.png),
  Knitted Cap ![](doge/knittedcap.png),
  Tiara ![](doge/tiara.png),
  Top Hat ![](doge/tophat.png)
- Hair -
  Crazy Hair ![](doge/crazyhair.png)
- Eyes -
  3D Glasses ![](doge/3dglasses.png),
  Big Shades  ![](doge/bigshades.png),
  Classic Shades ![](doge/classicshades.png),
  Eye Patch   ![](doge/eyepatch.png),
  Nerd Glasses  ![](doge/nerdglasses.png),
  Regular Shades  ![](doge/regularshades.png),
  Small Shades  ![](doge/smallshades.png)

## Questions? Comments?

Post them over at the [Help & Support](https://github.com/geraldb/help) page. Thanks.

mime_type: text/plain


text:
# API

<!-- vim-markdown-toc GFM -->

* [Actors](#actors)
* [Base](#base)
* [Drawing](#drawing)
* [Event Handling](#event-handling)
* [Files](#files)
* [Intermission Screens](#intermission-screens)
* [Level Data](#level-data)
* [Players](#players)
* [Sounds](#sounds)
* [Weapons](#weapons)
* [Global Objects](#global-objects)

<!-- vim-markdown-toc -->

The ZScript API (Advanced Programming Interface) is vast and has some holes
which are hard to explain. Some parts are implemented in ways that don't make
sense to user code, but are fine to the engine. Because of this, the API shall
be documented in pseudo-ZScript which gives an idea of how it works for the
modder rather than for the engine.

# Actors

<!-- inter-toc actor -->

* [State](api/actor/State.md)

<!-- end -->

TODO

# Base

<!-- inter-toc base -->

* [Array](api/base/Array.md)
* [CVar](api/base/CVar.md)
* [Color](api/base/Color.md)
* [FixedArray](api/base/FixedArray.md)
* [Object](api/base/Object.md)
* [StringTable](api/base/StringTable.md)
* [String](api/base/String.md)
* [Thinker](api/base/Thinker.md)
* [Vector](api/base/Vector.md)

<!-- end -->

TODO

# Drawing

<!-- inter-toc drawing -->

* [BrokenLines](api/drawing/BrokenLines.md)
* [Console](api/drawing/Console.md)
* [Font](api/drawing/Font.md)
* [GIFont](api/drawing/GIFont.md)
* [Screen](api/drawing/Screen.md)
* [Shape2D](api/drawing/Shape2D.md)
* [TexMan](api/drawing/TexMan.md)
* [TextureID](api/drawing/TextureID.md)

<!-- end -->

TODO

# Event Handling

<!-- inter-toc events -->

* [ConsoleEvent](api/events/ConsoleEvent.md)
* [EventHandler](api/events/EventHandler.md)
* [RenderEvent](api/events/RenderEvent.md)
* [ReplaceEvent](api/events/ReplaceEvent.md)
* [StaticEventHandler](api/events/StaticEventHandler.md)

<!-- end -->

TODO

# Files

<!-- inter-toc files -->

* [Wads](api/files/Wads.md)

<!-- end -->

TODO

# Intermission Screens

<!-- inter-toc inter -->

* [InterBackground](api/inter/InterBackground.md)
* [PatchInfo](api/inter/PatchInfo.md)
* [StatusScreen](api/inter/StatusScreen.md)
* [WBPlayerStruct](api/inter/WBPlayerStruct.md)
* [WBStartStruct](api/inter/WBStartStruct.md)

<!-- end -->

For legacy reasons, many intermission-related things may be prefixed with `WI`
or `WB`. The abbreviation `WI` means *World Intermission* (the intermission
screen was originally called "World Map" by Tom Hall) and `WB` meaning *World
Buffer*, as this data was originally buffered into a specific memory address
for [statistics drivers][1].

[1]: https://doomwiki.org/wiki/Statistics_driver

# Level Data

<!-- inter-toc level -->

* [F3DFloor](api/level/F3DFloor.md)
* [FColorMap](api/level/FColorMap.md)
* [LineIdIterator](api/level/LineIdIterator.md)
* [Line](api/level/Line.md)
* [SecPlane](api/level/SecPlane.md)
* [SecSpecial](api/level/SecSpecial.md)
* [SectorEffect](api/level/SectorEffect.md)
* [SectorTagIterator](api/level/SectorTagIterator.md)
* [Sector](api/level/Sector.md)
* [Side](api/level/Side.md)
* [Vertex](api/level/Vertex.md)

<!-- end -->

TODO

# Players

<!-- inter-toc player -->

* [PlayerClass](api/player/PlayerClass.md)
* [PlayerSkin](api/player/PlayerSkin.md)
* [Team](api/player/Team.md)

<!-- end -->

TODO

# Sounds

<!-- inter-toc sound -->

* [SeqNode](api/sound/SeqNode.md)

<!-- end -->

TODO

# Weapons

<!-- inter-toc weapon -->

* [PSprite](api/weapon/PSprite.md)

<!-- end -->

TODO

# Global Objects

<!-- inter-toc global/data -->

* [Client](api/global/data/Client.md)
* [Constants](api/global/data/Constants.md)
* [Game](api/global/data/Game.md)
* [Information](api/global/data/Information.md)
* [Player](api/global/data/Player.md)

<!-- end -->

These variables are accessible in any context and are not bound by any specific
object. Generally these mirror global information within the engine itself.

<!-- inter-toc global/func -->

* [Classes](api/global/func/Classes.md)
* [Game](api/global/func/Game.md)
* [Math](api/global/func/Math.md)
* [Random](api/global/func/Random.md)
* [Sound](api/global/func/Sound.md)
* [System](api/global/func/System.md)

<!-- end -->

These functions are accessible in any context and are not bound by any specific
object. Generally these are utility functions.

<!-- inter-toc global/type -->

* [DehInfo](api/global/type/DehInfo.md)
* [FOptionMenuSettings](api/global/type/FOptionMenuSettings.md)
* [GameInfoStruct](api/global/type/GameInfoStruct.md)
* [LevelLocals](api/global/type/LevelLocals.md)

<!-- end -->

These are the types used by global variables.

<!-- EOF -->

repo_name: zdoom-docs/stable

repo_language: Ruby

mime_type: text/x-ruby


text:
# Language

<!-- vim-markdown-toc GFM -->

* [Reading This Document](#reading-this-document)
* [Translation Unit](#translation-unit)
* [Versions](#versions)
* [Top-level](#top-level)
* [Include directives](#include-directives)
	* [Example: Include directives](#example-include-directives)
* [Table of Contents](#table-of-contents)

<!-- vim-markdown-toc -->

ZScript is a new (circa 2017) scripting language that has sprung from the
ceasing of ZDoom and the subsequent reprisal of GZDoom as mainline. It is
similar to Java, though it has many deficiencies, oddities and other such
issues. Despite this, it is still the most powerful Doom modding tool since
straight up source editing, and will likely stay that way for a while until
Eternity Engine inevitably becomes competition-worthy with scripting additions.

This documentation serves as an introduction to and informal specification of
the ZScript language from a programmer's viewpoint. It should also be useful
for non-programmers looking for specifics on the inner workings of the language
and more information on the functions and properties provided to it.

ZScript runs in a virtual machine much like ACS, although because it is *not*
compiled to bytecode and uses an object-oriented structure, the virtual machine
is far more complex, and also therefore quite a bit slower. ZScript may only be
read from source files by the engine, which has several benefits as well as
detriments. It is the opinion of the author that this is a bad solution, but
the author will refrain from going on a several-paragraph tirade about why
bytecode is always better than source, even if it is an optional component.

In any case, here we are. This documentation will detail all aspects of
ZScript, from the language and type system to the API and finer details. This
document is distributed under the [CC0 public domain license](LICENSE.txt) in
the hope that it is useful reference and serves as a solid basis for further
writings. This document was originally written by Alison Watson (Marrub.)
Attribution is encouraged but not required.

# Reading This Document

This document's syntaxes are written in a specific way to be easy to read but
still close enough to a formal syntax that, for instance, someone writing a
parser could do so off of this document. Here is a legend describing all syntax
element spellings:

| Spelling      | Meaning                                                                                |
| --------      | -------                                                                                |
| Keyword       | Any keyword with spaces around it is spelled as-is.                                                       |
| Symbol        | Any symbol with spaces around it is spelled as-is, the whitespace is only for clarity and may be omitted. |
| `Syntax`      | A syntax element defined by this document. Spelled as according to its grammar.                           |
| `Syntax...`   | A syntax element of which there may be any amount of. Spelled as according to its grammar.                |
| `Syntax{N}`   | A syntax element of which there may be exactly N amount of. Spelled as according to its grammar.          |
| `$[` and `]$` | An optional syntax element, which may be omitted by the user.                                             |
| `"text"`      | Any string literal, contents do not necessarily have to be what is inside unless explicitly stated.       |

# Translation Unit

Full ZScript files are referred to as "translation units." This terminology
comes from the C standard, and refers simply to the entirety of a ZScript
source file. ZScript files are looked for in lumps named `zscript` with any
extension. The standard extension is `.zs`, but `.zsc` is common as well. The
author of this documentation prefers `.zsc`.

The base translation unit `zscript` may start with a version directive, then
followed by any number of top-level definitions and `#include` directives.
Included translation units may not have version directives.

All keywords and identifiers in ZScript are case insensitive.

# Versions

A version directive may be placed at the very beginning of a ZScript file, the
syntax being:

```
version "num"
```

Where `num` is the ZScript version to use. By default ZScript is version
2.3, the original ZScript specification. This old version is not supported
by this documentation and it is highly encouraged to always use the latest
version of ZScript. The minimum version supported by this documentation is 3.0.

# Top-level

A ZScript file can have one of several things at the top level of the file,
following a version directive:

* Class definitions
* Structure definitions
* Enumeration definitions
* Constant definitions
* Include directives

# Include directives

Include directives include other files to be processed by the ZScript compiler,
allowing you to organize and separate code into different files. Their syntax
is simple:

```
#include "filename"
```

Note that included filenames will conflict with other mods. If two mods have a
file named `zscript/MyCoolClasses.zsc` and both include it, expecting to get
different files, the engine will fail to load with a script error.

To avoid this, it is suggested to place your ZScript code under a uniquely
named sub-folder.

## Example: Include directives

Basic includes.

```
#include "zscript/MyCoolMod/MyCoolClasses.zsc"
```

# Table of Contents

Finally, here is a table of contents for each language element:

<!-- inter-toc -->

* [Classes](language/Classes.md)
* [Constants](language/Constants.md)
* [Enumerations](language/Enumerations.md)
* [Expressions](language/Expressions.md)
* [Members](language/Members.md)
* [Methods](language/Methods.md)
* [Statements](language/Statements.md)
* [Structures](language/Structures.md)
* [Types](language/Types.md)

<!-- end -->

<!-- EOF -->


text:
# Glossary

<!-- inter-toc -->

* [Classes](glossary/Classes.md)
* [Concepts](glossary/Concepts.md)
* [Structures](glossary/Structures.md)
* [Style](glossary/Style.md)
* [Versions](glossary/Versions.md)

<!-- end -->

Miscallaneous information about ZScript, including class lists and version
differences.

<!-- EOF -->


text:
# Entry Points

<!-- vim-markdown-toc GFM -->

* [ACS](#acs)
* [Actors](#actors)
	* [Examples: Actor Replacement](#examples-actor-replacement)
* [Console Commands](#console-commands)
* [CVARINFO](#cvarinfo)
* [DECALDEF](#decaldef)
* [DECORATE](#decorate)
* [LOCKDEFS](#lockdefs)
* [GLDEFS](#gldefs)
* [KEYCONF](#keyconf)
* [MAPINFO](#mapinfo)
* [MENUDEF](#menudef)
* [TERRAIN](#terrain)

<!-- vim-markdown-toc -->

For backwards compatibility reasons and so as to not bloat the ZScript language
itself, many interactions with the engine are not defined in ZScript. This
section describes all ZScript interactions with the engine, both inside and
outside of ZScript itself.

## ACS

ACS has several functions for interfacing with ZScript: `SetUserVariable`
(callfunc `24`,) `GetUserVariable` (callfunc `25`,) `SetUserArray` (callfunc
`28`,) `GetUserArray` (callfunc `29`) and `ScriptCall` (callfunc `210`.)

`GetUserVariable` may be used to get any `float` or `double` (converted to
fixed-point,) `name` or `string` (converted to ACS string,) `bool` (converted
to integer,) or integer (of any type including `enum`, converted to a 32-bit
signed integer) member of an `Actor`, by TID or by the script activator. The
member may be `native`, though it may not be `meta`. If the type is an `array`
or fixed-size array, the first element is used.

`SetUserVariable` follows the same rules as `GetUserVariable`, although
`native` variables may not be set. `name` is not handled.

`SetUserArray` and `GetUserArray` follow the same rules as `SetUserVariable`
and `GetUserVariable`, but the index of an array may be used. The variable does
not have to be an array if the index is `0`.

`ScriptCall` may be used to call any `static` function on any class. It cannot
call functions on `struct`s. If the first argument of the function is type
`Actor`, the activator is passed to this argument (or `null` if there is no
activator.) Each argument may be of type `int` (or its aliases,) `color` or
`bool` (converted from integer,) `double` (converted from fixed-point,) `name`,
`string` or `sound` (converted from ACS string.)

The function may have default arguments. The function may return zero or more
values, although more than one value will be ignored. The returned value may be
`int` (or one of its aliases,) `bool` or `color` (converted to integer,)
`double` (converted to fixed-point,) `name`, `sound` or `string` (converted to
ACS string.) If it is not one of these types, it will be ignored.

## Actors

Actor classes can be replaced by the `replaces` class flag, which during
dynamic actor replacement will choose to spawn this class over its replaced
actor, unless the replaced actor is later replaced again by another class.
Dynamic actor replacement can also be overridden with an event handler's
`CheckReplacement` virtual function.

### Examples: Actor Replacement

```
// Some actor.
class OtherActor : Actor
{
}

// OtherActor will be dynamically replaced with MyActor.
class MyActor : Actor replaces OtherActor
{
}

// OtherActor will now be replaced with MyOtherActor instead of MyActor.
class MyOtherActor : Actor replaces OtherActor
{
}
```

## Console Commands

While ZScript cannot be directly called by console commands, one can use the
`event` and `netevent` console commands. `event` will dispatch a non-player
network event, and `netevent` will dispatch a network event for the player that
ran it.

## CVARINFO

Any CVars declared as a server CVar in `CVARINFO` or by the engine will be
accessible as a global variable in ZScript, which has a special type that can
be implicitly cast to the type of the CVar. They cannot be set this way, only
accessed.

## DECALDEF

`DECALDEF` can set the decal generator for a specific `Actor` class with the
`generator` keyword. An actor can also define its generator and inherited
classes' generators with the `Decal` property.

## DECORATE

TODO: lots of things to note here

## LOCKDEFS

Key and lock groups in `LOCKDEFS` are defined as groups of `Inventory` or `Key`
descendants.

## GLDEFS

Lights can be associated with `Actor` classes and frames in `GLDEFS`.

## KEYCONF

TODO: this can be used for custom buttons

## MAPINFO

In `MAPINFO`, the `GameInfo` block (referred to as `MAPINFO`/GameInfo in this
document) the following properties interact directly with ZScript:

* `EventHandlers` and `AddEventHandlers` override or add to the list of
`StaticEventHandler` or `EventHandler` classes registered by the game (as
opposed to event handlers registered per-map.)
* `MessageBoxClass` sets the `MessageBoxMenu` class to use for message boxes
used by the engine's GUI.
* `PlayerClasses` and `AddPlayerClasses` override or add to the list of
`PlayerPawn` classes the game provides.
* `PrecacheClasses` will pre-cache all sprites used by an `Actor` class. Note
that this also works for `StateProvider` degenerates like `Weapon`.
* `StatScreen_CoOp` sets the `StatusScreen` class to use for co-op intermission
screens.
* `StatScreen_DM` sets the `StatusScreen` class to use for Deathmatch
intermission screens.
* `StatScreen_Single` sets the `StatusScreen` class to use for single-player
intermission screens.
* `StatusBarClass` sets the status bar class used by the game to the provided
`BaseStatusBar` class.
* `WeaponSlot` sets the game's default weapon slots to the provided `Weapon`
classes.

TODO: there are other things here as well, like map event handlers

## MENUDEF

TODO: this directly uses ZScript classes

## TERRAIN

The `SmallSplash`, `SplashBase` and `SplashChunk` properties of `Splash` blocks
use `Actor`s.

<!-- EOF -->


text:
# ZScriptDoc

This is documentation for the ZScript language. CC0 public domain. See
[LICENSE](LICENSE.txt) for more information.

* [API](api.md) - for information on the interfaces provided by GZDoom. This is itself a map of all of the API files.
* [Entry Points](entry.md) - for information on the ways you can tell the engine to add new things.
* [Glossary](glossary.md) - for miscallaneous information and concepts you should learn. This is itself a map of all of the glossary files.
* [Language](language.md) - for information on the language itself.

If you're wondering where to start, try starting with the language
documentation and working your way from there. Also recommended is looking at
existing mods using ZScript and modifying them. Try experimenting with
features if you don't know what they do.

<!-- EOF -->


text:
Stuff that needs doing:

* `classgen.rb`
* contributing guidelines
* markdown style guide


text:
# State

Represents a state on an `Actor` or `StateProvider`. Data in `State` is
read-only and is copied as needed to its respective locations for modification,
as it is merely a look into the global constant state table.

```
struct State
{
	readonly uint8 Frame;
	readonly State NextState;
	readonly int   Sprite;
	readonly int16 Tics;

	readonly int    Misc1;
	readonly int    Misc2;
	readonly uint16 TicRange;
	readonly uint8  UseFlags;

	readonly bool bCanRaise;
	readonly bool bDeHackEd;
	readonly bool bFast;
	readonly bool bFullBright;
	readonly bool bNoDelay;
	readonly bool bSameFrame;
	readonly bool bSlow;

	int  DistanceTo(State other);
	bool InStateSequence(State base);
	bool ValidateSpriteFrame();

	textureid, bool, vector2 GetSpriteTexture(int rotation, int skin = 0, vector2 scale = (0, 0));
}
```

### `Frame`

The sprite frame of this state.

### `NextState`

A pointer to the next state in the global state table.

### `Sprite`

The sprite ID of this state.

### `Tics`

The number of game ticks this state lasts.

### `Misc1`, `Misc2`

Primarily used in DeHackEd compatibility. Don't use this.

### `TicRange`

The maximum amount of tics to add for random tic durations, or `0` if the
duration is not random. For example, `TNT1 A random(5, 7)` would have a `Tics`
value of `5` and a `TicRange` of `2`.

### `UseFlags`

The scope of this state. See *Action Scoping*. Can have any of the
`DefaultStateUsage` flags.

### `bCanRaise`

State has the `CanRaise` flag, allowing `A_VileChase` to target this actor for
healing without entering an infinitely long state.

### `bDeHackEd`

`true` if the state has been modified by DeHackEd.

### `bFast`

State has the `Fast` flag, halving the duration when fast monsters is enabled.

### `bFullBright`

State has the `Bright` flag, making it fully bright regardless of other
lighting conditions.

### `bNoDelay`

State has the `NoDelay` flag, forcing the associated action function to be run
if the actor is in its first tic.

### `bSameFrame`

`true` if the state's frame is to be kept from the last frame used, i.e., is
`#`.

### `bSlow`

State has the `Slow` flag, doubling the duration when slow monsters is enabled.

### `DistanceTo`

Returns the offset between this state and `other` in the global frame table.
Only works if both states are owned by the same actor.

### `InStateSequence`

Returns `true` if this state is within a contiguous state sequence beginning
with `base`.

### `ValidateSpriteFrame`

Returns `true` if the sprite frame actually exists.

### `GetSpriteTexture`

Returns the texture, if the texture should be flipped horizontally, and scaling
of this state's sprite. Scaling will return `scale` unless `skin` is nonzero.
`skin` determines the player skin used.

<!-- EOF -->


text:
# Players

TODO

```
readonly int        ConsolePlayer;
readonly bool       Multiplayer;
readonly int        Net_Arbitrator;
readonly bool       PlayerInGame[MAXPLAYERS];
play     PlayerInfo Players[MAXPLAYERS];
```

### `ConsolePlayer`

Number of the player running the client. **Not deterministic.**

### `Multiplayer`

Game is networked.

### `Net_Arbitrator`

Number of the player who initiated or currently hosts the game.

### `PlayerInGame`

`true` if the player is currently in-game.

### `Players`

`PlayerInfo` structures for each player.

<!-- EOF -->


text:
# Client

TODO

```
KeyBindings AutomapBindings;
KeyBindings Bindings;

readonly Font BigFont;
readonly int  CleanHeight;
readonly int  CleanHeight_1;
readonly int  CleanWidth;
readonly int  CleanWidth_1;
readonly int  CleanXFac;
readonly int  CleanXFac_1;
readonly int  CleanYFac;
readonly int  CleanYFac_1;
readonly Font ConFont;
readonly Font IntermissionFont;
readonly Font SmallFont;
readonly Font SmallFont2;
readonly Font NewConsoleFont;
readonly Font NewSmallFont;

ui float         BackbuttonAlpha;
ui int           BackbuttonTime;
ui int           MenuActive;
ui BaseStatusBar StatusBar;

readonly ui bool NetGame;

int LocalViewPitch;
```

### `AutomapBindings`

TODO

### `Bindings`

TODO

### `BigFont`

The `bigfont` for the current game.

### `CleanHeight`

The current screen height divided by `CleanYFac`. **Not deterministic.**

### `CleanHeight_1`

The current screen height divided by `CleanYFac_1`. **Not deterministic.**

### `CleanWidth`

The current screen width divided by `CleanXFac`. **Not deterministic.**

### `CleanWidth_1`

The current screen width divided by `CleanYFac_1`. **Not deterministic.**

### `CleanXFac`

Integral scaling factor for horizontal positions to scale from 320x200 to the
current virtual resolution. **Not deterministic.**

### `CleanXFac_1`

Integral scaling factor for horizontal positions to scale from 320x200 to the
current virtual resolution, accounting for aspect ratio differences. **Not
deterministic.**

### `CleanYFac`

Integral scaling factor for vertical positions to scale from 320x200 to the
current virtual resolution. **Not deterministic.**

### `CleanYFac_1`

Integral scaling factor for vertical positions to scale from 320x200 to the
current virtual resolution, accounting for aspect ratio differences. **Not
deterministic.**

### `ConFont`

The console font.

### `IntermissionFont`

The font used in intermission screens.

### `SmallFont`

The `smallfnt` for the current game.

### `SmallFont2`

The alternate `smallfnt`.

### `NewConsoleFont`

TODO

### `NewSmallFont`

TODO

### `BackbuttonAlpha`

Alpha of the back button in menus.

### `BackbuttonTime`

The time until the back button starts fading out in menus.

### `MenuActive`

The current active menu state. One of:

| Name             | Description                                                    |
| ----             | -----------                                                    |
| `Menu.Off`       | No active menu.                                                |
| `Menu.OnNoPause` | Menu is opened, but the game is not paused.                    |
| `Menu.On`        | Menu is open, game is paused.                                  |
| `Menu.WaitKey`   | Menu is opened, waiting for a key for a controls menu binding. |

### `StatusBar`

TODO

### `NetGame`

Whether this is a networked game or not.

### `LocalViewPitch`

The pitch angle (in degrees) of `ConsolePlayer`'s view. **Not deterministic.**

<!-- EOF -->


text:
# Constants

TODO

```
const MAXPLAYERNAME;
const MAXPLAYERS;

const DEFMELEERANGE;
const MISSILERANGE;
const PLAYERMISSILERANGE;
const SAWRANGE;
```

### `MAXPLAYERNAME`

The maximum length of a player name.

### `MAXPLAYERS`

The maximum amount of players in game.

### `DEFMELEERANGE`

The range where melee will be used for monsters, and the range for the player's
melee attacks.

### `MISSILERANGE`

The maximum range for monster missile/hit-scan attacks.

### `PLAYERMISSILERANGE`

The maximum range for player missile/hit-scan attacks.

### `SAWRANGE`

The range of Doom's Chainsaw weapon.

<!-- EOF -->


text:
# Game State

TODO

```
readonly bool           AutomapActive;
readonly bool           DemoPlayback;
readonly uint           GameAction;
readonly int            GameState;
readonly int            GameTic;
play     LevelLocals    Level;
readonly MusPlayingInfo MusPlaying;

deprecated("3.8") readonly bool GlobalFreeze;
int ValidCount;
```

### `AutomapActive`

`true` if the auto-map is currently open on the client. **Not deterministic.**

### `DemoPlayback`

User is watching a demo.

### `GameAction`

Current global game action. May be one of:

| Name                  | Description           |
| ----                  | -----------           |
| `ga_autoloadgame`     | Don't use this.       |
| `ga_autosave`         | Creates an autosave.  |
| `ga_completed`        | Don't use this.       |
| `ga_fullconsole`      | Don't use this.       |
| `ga_loadgamehideicon` | Don't use this.       |
| `ga_loadgameplaydemo` | Don't use this.       |
| `ga_loadgame`         | Don't use this.       |
| `ga_loadlevel`        | Don't use this.       |
| `ga_newgame2`         | Don't use this.       |
| `ga_newgame`          | Don't use this.       |
| `ga_nothing`          | Does nothing.         |
| `ga_playdemo`         | Don't use this.       |
| `ga_recordgame`       | Don't use this.       |
| `ga_savegame`         | Don't use this.       |
| `ga_screenshot`       | Takes a screenshot.   |
| `ga_slideshow`        | Don't use this.       |
| `ga_togglemap`        | Toggles the auto-map. |
| `ga_worlddone`        | Don't use this.       |

### `GameState`

Current global game state. May be one of:

| Name              | Description                                          |
| ----              | -----------                                          |
| `GS_DEMOSCREEN`   | Inside a level but watching a demo in the main menu. |
| `GS_FINALE`       | Reading a cluster end text or at the end sequence.   |
| `GS_FULLCONSOLE`  | Outside of a level, console only.                    |
| `GS_HIDECONSOLE`  | Outside of a level, console hidden (i.e. main menu.) |
| `GS_INTERMISSION` | In between levels.                                   |
| `GS_LEVEL`        | Inside a level.                                      |
| `GS_STARTUP`      | Game not yet initialized.                            |
| `GS_TITLELEVEL`   | Watching a `TITLEMAP` in the main menu.              |

### `GameTic`

Number of game tics passed since engine initialization. **Not deterministic.**

### `Level`

All level info as defined in `LevelLocals`.

### `MusPlaying`

TODO

### `GlobalFreeze`

Deprecated. Don't use.

### `ValidCount`

Don't use this.

<!-- EOF -->


text:
# Static Info

TODO

```
readonly array<class<Actor>> AllActorClasses;
readonly array<class>        AllClasses;
readonly array<PlayerClass>  PlayerClasses;
readonly array<PlayerSkin>   PlayerSkins;
readonly array<Team>         Teams;

play     DehInfo             Deh;
readonly GameInfoStruct      GameInfo;
readonly FOptionMenuSettings OptionMenuSettings;
readonly textureid           SkyFlatNum;
readonly Weapon              WP_NOCHANGE;
```

### `AllActorClasses`

An array of every actor class type reference.

### `AllClasses`

An array of every class type reference.

### `PlayerClasses`

An array of all player classes as defined in `MAPINFO`/GameInfo and `KEYCONF`.

### `PlayerSkins`

An array of all player skins as defined in `SKININFO` and `S_SKIN`.

### `Teams`

An array of all teams. Maximum index is `Team.Max`.

### `Deh`

Static DeHackEd information.

### `GameInfo`

Static information from `MAPINFO`/GameInfo.

### `OptionMenuSettings`

Defaults for `OptionMenu`s as defined in `MENUDEF`'s `OptionMenuSettings` block
and `MAPINFO`/GameInfo.

### `SkyFlatNum`

The texture ID for sky flats. `F_SKY1` by default in Doom.

### `WP_NOCHANGE`

A constant denoting that the weapon the player is currently holding shouldn't
be switched from.

<!-- EOF -->


text:
# Random Number Generation

All of these functions may have `[identifier]` between the function name and
the argument list to specify a named RNG table to use. This special syntax
applies only to these functions.

```
double FRandom(double min, double max);
double FRandomPick(double...);
int    Random(int min = 0, int max = 255);
int    Random2(uint mask = uint.Max);
int    RandomPick(int...);
void   SetRandomSeed(uint num);
```

### `FRandom`

Returns a random float between `min` and `max`.

### `FRandomPick`

Same as `RandomPick`, but with floats.

### `Random`

Returns a random integer between `min` and `max`.

### `Random2`

Returns a random integer value between `-mask` and `mask`. `mask` is used as a
bit mask, so it is recommended to use a value of one less than a power of two
(i.e. 3, 7, 15, 31, 63, 127, 255...)

### `RandomPick`

Returns one of the provided parameters randomly.

### `SetRandomSeed`

Sets the seed of the RNG table to `num`.

<!-- EOF -->


text:
# Math

These are all of the math functions provided to ZScript. These are available in
all contexts. Note that all angles are in degrees.

```
Type   Abs(Type n);
double ACos(double n);
double ASin(double n);
double ATan(double n);
double ATan2(double y, double x);
uint   BAM(double angle);
double Ceil(double n);
Type   Clamp(Type n, Type minimum, Type maximum);
double Cos(double n);
double CosH(double n);
double Exp(double n);
double Floor(double n);
double Log(double n);
double Log10(double n);
Type   Max(Type n, Type maximum);
Type   Min(Type n, Type minimum);
double Sin(double n);
double SinH(double n);
double Sqrt(double n);
double Tan(double n);
double TanH(double n);
double VectorAngle(double x, double y);
```

### `Abs`

Returns `|n|` (absolute of `n`.)

### `ACos`

Returns the arc-cosine of `n`.

### `ASin`

Returns the arc-sine of `n`.

### `ATan`

Returns the arc-tangent of `n`.

### `ATan2`

Returns the arc-tangent of `y / x` using the arguments' signs to determine the
correct quadrant.

### `BAM`

Returns a byte angle of `angle` (`degrees * (0x40000000 / 90.0)`.)

### `Ceil`

Returns the integral portion of `n`, rounded up.

### `Clamp`

Returns `n` if `n` is more than `minimum` and less than `maximum`, or either of
those values if it is not.

### `Cos`

Returns the cosine of `n`.

### `CosH`

Returns the hyperbolic cosine of `n`.

### `Exp`

Returns euler's number raised to the power `n`. Note that you probably want
instead the `**` binary operator, as in `a ** b`, since euler's number is
generally not a very useful constant when programming games.

### `Floor`

Returns the integral portion of `n`, rounded down.

### `Log`

Returns the natural (base of euler's number) logarithm of `n`.

### `Log10`

Returns the common (base 10) logarithm of `n`. Note that this is useful for
instance when calculating the number of decimal digits in a number.

### `Max`

Returns `n` if `n` is less than `maximum`, or `maximum`.

### `Min`

Returns `n` if `n` is more than `minimum`, or `minimum`.

### `Sin`

Returns the sine of `n`.

### `SinH`

Returns the hyperbolic sine of `n`.

### `Sqrt`

Returns the square root of `n`.

### `Tan`

Returns the tangent of `n`.

### `TanH`

Returns the hyperbolic tangent of `n`.

### `VectorAngle`

Same as `ATan2`, but with arguments reversed.

<!-- EOF -->


text:
# Class Handling

TODO

```
Type GetDefaultByType(class<Actor> type);
Type New(class typename = ThisClass);
```

### `GetDefaultByType`

Returns an object containing the default values for each member of the `Actor`
type provided as they would be set in `BeginPlay`. **Note that the return value
cannot be serialized and if stored must be marked as `transient`.** The
returned object is a pseudo-object which is stored only in-memory.

### `New`

Typically spelled lowercase (`new`), creates an object with type `typename`.
Defaults to using the class of the calling object.

<!-- EOF -->


text:
# Game

TODO

```
string G_SkillName();
int    G_SkillPropertyInt(int p);
double G_SkillPropertyFloat(int p);

deprecated("3.8") vector3, int G_PickDeathmatchStart();
deprecated("3.8") vector3, int G_PickPlayerStart(int pnum, int flags = 0);
```

### `G_SkillName`

The name of the skill in play.

### `G_SkillPropertyInt`

Returns a skill property. `p` may be:

| Name                   |
| ----                   |
| `SKILLP_ACSRETURN`     |
| `SKILLP_AUTOUSEHEALTH` |
| `SKILLP_DISABLECHEATS` |
| `SKILLP_EASYBOSSBRAIN` |
| `SKILLP_EASYKEY`       |
| `SKILLP_FASTMONSTERS`  |
| `SKILLP_INFIGHT`       |
| `SKILLP_NOPAIN`        |
| `SKILLP_PLAYERRESPAWN` |
| `SKILLP_RESPAWNLIMIT`  |
| `SKILLP_RESPAWN`       |
| `SKILLP_SLOWMONSTERS`  |
| `SKILLP_SPAWNFILTER`   |

### `G_SkillPropertyFloat`

Returns a skill property. `p` may be:

| Name                    |
| ----                    |
| `SKILLP_AGGRESSIVENESS` |
| `SKILLP_AMMOFACTOR`     |
| `SKILLP_ARMORFACTOR`    |
| `SKILLP_DAMAGEFACTOR`   |
| `SKILLP_DROPAMMOFACTOR` |
| `SKILLP_FRIENDLYHEALTH` |
| `SKILLP_HEALTHFACTOR`   |
| `SKILLP_MONSTERHEALTH`  |
| `SKILLP_KICKBACKFACTOR` |

### `G_PickDeathmatchStart`

Note: This function is deprecated and `LevelLocals::PickDeathmatchStart` should
be used instead.

Returns the position and angle of a random death-match start location.

### `G_PickPlayerStart`

Note: This function is deprecated and `LevelLocals::PickPlayerStart` should be
used instead.

Returns the position and angle of a player start for player `pnum`. `flags` may
be:

| Name                  | Description                                               |
| ----                  | -----------                                               |
| `PPS_FORCERANDOM`     | Always picks a random player spawn for this player.       |
| `PPS_NOBLOCKINGCHECK` | Does not check if an object is blocking the player spawn. |

<!-- EOF -->


text:
# Sound

TODO

```
void  MarkSound(sound snd);
void  SetMusicVolume(float vol);
bool  S_ChangeMusic(string name, int order = 0, bool looping = true, bool force = false);
float S_GetLength(sound id);
void  S_PauseSound(bool notmusic, bool notsfx);
void  S_ResumeSound(bool notsfx);
void  S_Sound(sound id, int channel, float volume = 1, float attenuation = ATTN_NORM);
```

### `MarkSound`

Marks `snd` to be pre-cached (loaded into memory early.)

### `SetMusicVolume`

Sets the volume of the music relative to the user's volume. Range is 0-1,
inclusive.

### `S_ChangeMusic`

Changes the music to `name`. If `name` is `"*"`, the music will be set to the
default music for this level. Will loop if `looping` is `true`. `force` will
force the music to play even if a playlist (from the `playlist` console
command) is playing.

`order` may mean something different based on the music format:

| Format                              | Meaning                                     |
| ------                              | -------                                     |
| Tracker music (`.mod`, `.xm`, etc.) | Specifies the order the song will start at. |
| Multi-track `.ogg`, `.flac`, etc.   | Specifies the track to begin playing at.    |
| Any other format                    | No meaning, will be ignored.                |

### `S_GetLength`

Returns the length of a sound in seconds. **Potentially non-deterministic if
all users in a networked game are not using the same sounds.**

### `S_PauseSound`

Pauses music if `notmusic` is `false` and all game sounds if `notsfx` is
`false`. Used for instance in the time stop power-up.

### `S_ResumeSound`

Resumes playing music and, if `notsfx` is `false`, all game sounds as well.

### `S_Sound`

Plays a sound (as defined in `SNDINFO`) from the calling object if it has world
presence (is an actor or sector etc.)

`channel` may be:

| Name          | Description                                                        |
| ----          | -----------                                                        |
| `CHAN_AUTO`   | Automatically assigns the sound to a free channel (if one exists.) |
| `CHAN_BODY`   | For footsteps and generally anything else.                         |
| `CHAN_ITEM`   | For item pickups.                                                  |
| `CHAN_VOICE`  | For player grunts.                                                 |
| `CHAN_WEAPON` | For weapon noises.                                                 |
| `CHAN_5`      | Extra sound channel.                                               |
| `CHAN_6`      | Extra sound channel.                                               |
| `CHAN_7`      | Extra sound channel.                                               |

`channel` may also have the following flags applied with the binary OR
operator `|`:

| Name               | Description                                                                              |
| ----               | -----------                                                                              |
| `CHAN_LISTENERZ`   | Sound ignores height entirely, playing at the listener's vertical position.              |
| `CHAN_LOOP`        | Continues playing the sound on loop until it is stopped manually.                        |
| `CHAN_MAYBE_LOCAL` | Does not play sound to other players if the silent pickup compatibility flag is enabled. |
| `CHAN_NOPAUSE`     | Does not pause in menus or when `S_PauseSound` is called.                                |
| `CHAN_NOSTOP`      | Does not start a new sound if the channel is already playing something.                  |
| `CHAN_UI`          | Does not record sound in saved games or demos.                                           |

Additionally, `CHAN_PICKUP` is equivalent to `CHAN_ITEM | CHAN_MAYBE_LOCAL`.

`attenuation` determines the drop-off distance of the sound. The higher the
value, the quicker it fades. Constants include:

| Name          | Value   | Description                                                                         |
| ----          | -----   | -----------                                                                         |
| `ATTN_IDLE`   | `1.001` | Uses Doom's default sound attenuation.                                              |
| `ATTN_NONE`   | `0`     | Does not drop off at all, plays throughout the whole map.                           |
| `ATTN_NORM`   | `1`     | Drops off using the `close_dist` and `clipping_dist` defined in `SNDINFO`. Default. |
| `ATTN_STATIC` | `3`     | Drops off quickly, at around 512 units.                                             |

<!-- EOF -->


text:
# System

TODO

```
uint MSTime();
vararg void ThrowAbortException(string format, ...);
```

### `MSTime`

Returns the number of milliseconds since the engine was started. **Not
deterministic.**

### `ThrowAbortException`

Kills the VM and ends the game (without exiting) with a formatted error.

<!-- EOF -->


text:
# GameInfoStruct

Static information from `MAPINFO`/GameInfo.

```
struct GameInfoStruct
{
	double      Armor2Percent;
	string      ArmorIcon1;
	string      ArmorIcon2;
	name        BackpackType;
	textureid   BerserkPic;
	int         DefKickBack;
	color       DefaultBloodColor;
	int         DefaultDropStyle;
	int         GameType;
	double      GibFactor;
	textureid   HealthPic;
	array<name> InfoPages;
	bool        IntermissionCounter;
	bool        NoRandomPlayerClass;
	double      NormForwardMove[2];
	double      NormSideMove[2];
	double      TeleFogHeight;
	string      mBackButton;
	name        mSliderColor;
	GIFont      mStatScreenEnteringFont;
	GIFont      mStatScreenFinishedFont;
	GIFont      mStatScreenMapNameFont;
}
```

TODO

<!-- EOF -->


text:
# FOptionMenuSettings

Defaults for `OptionMenu`s as defined in `MENUDEF`'s `OptionMenuSettings` block
and `MAPINFO`/GameInfo.

```
struct FOptionMenuSettings
{
	int mTitleColor;
	int mFontColor;
	int mFontColorValue;
	int mFontColorMore;
	int mFontColorHeader;
	int mFontColorHighlight;
	int mFontColorSelection;
	int mLineSpacing;
}
```

### `mTitleColor`

TODO

### `mFontColor`

TODO

### `mFontColorValue`

TODO

### `mFontColorMore`

TODO

### `mFontColorHeader`

TODO

### `mFontColorHighlight`

TODO

### `mFontColorSelection`

TODO

### `mLineSpacing`

The spacing in virtual pixels between two lines in an `OptionMenu`.

<!-- EOF -->