Saturday, March 22, 2025

GOZR monster generator


I had a think and tried to isolate the kinds of sounds you might find in a GOZR RPG (affil link) monster name, then I figured what the heck, I’ll make yet another bookmarklet, a GOZR monsterator (drag it to your bookmarks toolbar or click it)!

But here is the table I plugged into it:

Prefix         (d20)    Middle (d12)       Suffix Table (d20)
1. Atta-1. -ar-1. -sor
2. Bol-2. -in-2. -k
3. Gru-3. -ul-3. -te
4. Hin-4. -ek-4. -rat
5. Ick-5. -og-5. -muck
6. Krol-6. -ir-6. -guin
7. Lok-7. -ax-7. -bot
8. Mro-8. -um-8. -n
9. Moo-9. -or-9. -ku
10. Pre-10. -ix-10. -dor
11. Quetzl-11. -ur-11. -pow
12. Rakka-12. -az-12. -don
13. Zor-
13. -zak
14. Vrak-
14. -vex
15. Thul-
15. -goth
16. Gor-
16. -lith
17. Skra-
17. -zul
18. Nar-
18. -vok
19. Xul-
19. -thar
20. Ygg-
20. -wyn


just the script text for reference:

javascript:(function(){const prefixes=["Atta-","Bol-","Gru-","Hin-","Ick-","Krol-","Lok-","Mro-","Moo-","Pre-","Quetzl-","Rakka-","Zor-","Vrak-","Thul-","Gor-","Skra-","Nar-","Xul-","Ygg-"];const middles=["-ar-","-in-","-ul-","-ek-","-og-","-ir-","-ax-","-um-","-or-","-ix-","-ur-","-az-"];const suffixes=["-sor","-k","-te","-rat","-muck","-guin","-bot","-n","-ku","-dor","-pow","-don","-zak","-vex","-goth","-lith","-zul","-vok","-thar","-wyn"];const sizes=["Small","Gooz","Large","Monstrous","Huge"];const sizeHp=[2,6,10,20,30];const sizeDmg=["1d4","1d6","2d6","3d6","4d6"];const specialDmg=["Pain 1d6 hours","Poisoning","Acid! Melts 1 item","Paralyzing","Blinded","Nauseated","Spasms!","Unlucky","Euphoria! Stop fighting","All Dmg is REAL"];const forms1=["Creepy crawly","Cyborg","Muscles","Constructed","Segmented","Swimmer","Leaper","Devilish","Wallcrawler","Aquatic","Spitting","Winged","Plantlike","Glowing","Ooze","Roaring","Leathery","Noxious","Acidic","Hissing","Flaming","Psionic","Stomper","Nauseating","Goozoid","Skittering","Screechy","Smart","Flying reptile","Sky zoomer","Demonic","Furry critter","Electric","Toothy","Machine","Wizardly"];const forms2=["Robot","Dinosaur","Bird","Wolf","Cat","Rat","Snake","Worm","Fungus","Plant","Tiger","Dog","Ape","Gooz","Cyborg","Spider","Lizard","Frog","Turtle","Deer","Rodent","Fish","Flightless bird","Wasp","Undead","Rhino","Weasel","Serpent","Monkey","Bear","Octopus","Golem","Falcon","Weird","Pterodactyl","Thunder lizard"];const weird=["Orbs circle head","Clicking vocals","Bleeding sores","Covered in worms","Backward joints","Mushroom on skin","Cries like a baby","Eyes on body","Spit bugs","Moves like dancer","Speaks to unseen","Radiates heat"];const actions=["Run","Fight","Defend","Something weird"];const roll=(d)=>Math.floor(Math.random()*d)+1;const pick=(arr)=>arr[Math.floor(Math.random()*arr.length)];const name=()=>pick(prefixes)+pick(middles)+pick(suffixes);const size=()=>{const r=roll(20);if(r<=4)return{size:sizes[0],hp:sizeHp[0],dmg:sizeDmg[0]};if(r<=11)return{size:sizes[1],hp:sizeHp[1],dmg:sizeDmg[1]};if(r<=17)return{size:sizes[2],hp:sizeHp[2],dmg:sizeDmg[2]};if(r<=19)return{size:sizes[3],hp:sizeHp[3],dmg:sizeDmg[3]};return{size:sizes[4],hp:sizeHp[4],dmg:sizeDmg[4]};};const modifyHp=(baseHp)=>{const rollResult=roll(6);switch(rollResult){case 1:return baseHp-1;case 2:case 3:return baseHp;case 4:return baseHp+roll(4);case 5:return baseHp+2;case 6:return baseHp+roll(6);default:return baseHp;}};const modifyDmg=(baseDmg)=>{const rollResult=roll(6);switch(rollResult){case 1:case 2:return baseDmg;case 3:return baseDmg+"+1";case 4:return baseDmg+"+2";case 5:return baseDmg+"+3";case 6:return baseDmg;default:return baseDmg;}};const special=()=>pick(specialDmg);const form=()=>`${pick(forms1)} ${pick(forms2)}`;const threat=()=>{const r=roll(8);if(r<=2)return"Typical (d8)";if(r<=4)return"Threatening (d6)";if(r<=6)return"Dangerous (d4)";return"Gooz killer (d3)";};const pack=()=>{const r=roll(6);if(r<=2)return"Wimpy (3d6)";if(r<=4)return"Moderate (2d6)";if(r<=5)return"Tough (1d6)";return"Scary (1d4)";};const nextAction=()=>pick(actions);const generateMonster=()=>{const s=size();const modifiedHp=modifyHp(s.hp);const modifiedDmg=modifyDmg(s.dmg);const hasSpecial=roll(6)===6;const specialDamage=hasSpecial?` plus special: ${special()}`:"";return`Name: ${name()}\nThreat: ${threat()}\nSize: ${s.size}\nHP: ${modifiedHp}\nDMG: ${modifiedDmg}${specialDamage}\nForm: ${form()}\nPack: ${pack()}\nWeird: ${pick(weird)}\nNext Action: ${nextAction()}`;};const win=window.open("","_blank","width=600,height=400");win.document.write(`<html><head><title>Monster Generator</title><style>body{font-family:Arial,sans-serif;padding:20px;}#monster{white-space:pre-line;margin-bottom:20px;}button{margin-right:10px;}</style></head><body><div id="monster">${generateMonster()}</div><button onclick="window.print()">Print</button></body></html>`);win.document.close();})();onclick="window.print()">Print</button></body></html>`);win.document.close();})();

----
Share good posts with good goblins. Claytonian at the gmails.

No comments: