Kobold Town - Latest posts https://forums.kobold.town Latest posts Phaedra, the Night's Whisper Rest in peace Roberta. You’ll live on forever with me.

]]>
https://forums.kobold.town/t/phaedra-the-nights-whisper/45#post_2 Wed, 23 Jul 2025 15:21:44 +0000 forums.kobold.town-post-450
Arcanum - Theory of Magic i’m rolling a custom version of it here: https://arcanum.koboldinteractive.com/

changes:

  • New Furniture: Air Duct, Central Air. Generate air per air duct; increase the scaling factor of air ducts and generate a little water using water gems as fuel.
  • Talking Skull has an upgrade that tells jokes and tosses you a bone every once in a while.

currently working on: necromancy rework. here are my plans:

  1. Talking Skull: Book of Jokes. Skull starts telling jokes occasionally and throws you a bone when it does so as you converse with it for other effects.
  2. Reanimator Spell: Reanimation Ritual. 60s buff that summons a Reanimated Body summon minion during combat. Spends body resource to do so. Scales health with skill, and increases summon rate with skill.
  3. TBD class tier spell: Bind Skeletal Mount: You gain a special mount slot that starts empty when you unlock this spell. Casting it debuffs an enemy in combat that can be made undead. Based on the type and level, grants you bonuses when you use that mount.
  4. By Malthanis: Telltale Heart , gives you permanent unease rate, but increases umbramancy and necromancy Have I not told you that what you mistake for madness is but over acuteness of the senses? – Zenu: “costs zero space in your house as a furniture - you know its somewhere beneath that floor”
  5. Collab with Malthanis: necro minion Corpse Mound stats are relatively minor, and degrade to a floor outside of active combat – every time an enemy is killed, it gets increased stats (“add a corpse to the pile”, stat increase maybe based on enemy killed?) – cap based on necro skills – concept only of course, I have zero idea how much of a bitch that could be to code – – wyx - “Think I’d have like a “rot” counter on them that slowly decreases their abilities over time, and starts them off at a % effectveness based on your reanimation skill”

Summary from the Arcanum Discord:

finally looks at code looks like here’s all the t_necroclass tagged classes: t1: reanimator t2: bonemonger t4: necromancer t5: grey necromancer t6: vile necromancer anything in particular anyone wants me to keep in mind for scope? my top of mind thoughts:

  1. use bodies to summon creatures
  2. leverage creatures you’ve beaten to summon - ie. instead of minions, they’re summons
  3. end-game magic that can turn monsters you fight in battle into minions when they die and bypass the limits on what monsters you can get
]]>
https://forums.kobold.town/t/arcanum-theory-of-magic/191#post_1 Fri, 04 Oct 2024 01:05:38 +0000 forums.kobold.town-post-449
spy family i was correct about delicious in dungeon but spy family is still special and good

]]>
https://forums.kobold.town/t/spy-family/139#post_3 Thu, 03 Oct 2024 16:31:37 +0000 forums.kobold.town-post-448
spy family i liked it

]]>
https://forums.kobold.town/t/spy-family/139#post_2 Thu, 03 Oct 2024 11:10:12 +0000 forums.kobold.town-post-447
important comic tbqh by tumblr user birdofprey1234




]]>
https://forums.kobold.town/t/important-comic-tbqh/188#post_1 Tue, 21 May 2024 18:19:17 +0000 forums.kobold.town-post-443
Zizz, the Scorpobold Name: Zizz the Scorpobold




Art by Ovaettr

Sheet Version: v0.9.1

Description

he’s a trans gay greaser jock with a heart of gold
he’s a monk who practices martial arts and his unique twin-bloodstreams and hearts allow him to use his venom both offensively and defensively
he has access to basic magic using his venom and aura!
really it only serves him to make him BIG (4’ with magic, instead of 4" without)

Path: Athletics

Abilities & Aspects

Power Agility Fortitude Willpower Cunning Ego
7 6 6 4 3 5
Proficiency Level (PL) Physical Health (HP) Mental Health (MP) Determination Pool
3 10 6 5
Aspect Attribute Explanation
Strength Power Advantage on any roll using this attribute.
Vulnerability Cunning Disadvantage on any roll using this attribute.
Defense Fortitude Attacks targeting this attribute do not suffer disadvantage.
Determination Ego Attacks targeting this attribute do not suffer disadvantage. You gain a pool of determination points equal to this attribute that you can choose to spend on rolls before rolling, which recovers when you suitably rest and recover.

Traits

  • Scorpobold (Scorpion kobold)
  • Venomancer
  • Martial artist
  • Queer

Traits are typically single word descriptors that describe what you are to the world. Choose 3 when you start.
Traits can represent but are not limited to: species, race, job, class, profession, reputation, personality, etc.
Any dice roll relevant to a trait allows that trait to grant advantage.

Traits can be naturally acquired or changed as your character experiences their life. For balance reasons, you should stick to one trait per proficiency level, but there’s no hard limit.

Flaws

  • Himbo

A flaw is a trait that grants disadvantage.

When initially creating your character, you may gain a flaw to add an extra trait.

Flaws can be naturally acquired or changed as your character experiences their life. For balance reasons, you shouldn’t acquire more flaws than your proficiency level.

A flaw can be the same word as a trait.

Acquisitions

  • Venom magic: Can grow from 4 inches tall to 4 feet tall with venom magic. As it’s literally in his veins, it makes him very strong, even if his natural body weren’t enlarged with magic, his power remains. Don’t lose a finger!
  • Stinger: Regardless of opponent’s attribute, the toxin targets their vulnerability, and given its potency is from Zizz’s blood, his strength is applied as the offensive attribute.
  • Twin-hearted: Can’t be killed even if you crush a heart.
  • Grappling combat: Zizz’s many different arms allows him to maneuver in a myriad of ways. Small arms with gentle and steady control, and stronger, larger arms for gripping or leverage, which can fit neatly inside Zizz’s two gigantic claws that protrude beneath his muscular set of arms.

Acquisitions are temporary or permanent things or effects that don’t come from who you are as a person.

Anything you have listed here means that your character has acquired them in some way due to inherent traits or experiences.

See also: FES: Acquisitions and Traumas

Traumas

Traumas are temporary or permanent afflictions that are hindering your character. See previous link for more info.


Want to create a character? Follow the instructions here.

]]>
https://forums.kobold.town/t/zizz-the-scorpobold/187#post_1 Fri, 17 May 2024 02:56:02 +0000 forums.kobold.town-post-442
Closing registrations Due to my health I’m not able to try to do much with the community atm, so I’m closing out registrations temporarily for now.

Feel free to contact me by email or in DMs elsewhere if you’re interested in doing something with the forum!

]]>
https://forums.kobold.town/t/closing-registrations/186#post_1 Thu, 11 Apr 2024 20:02:22 +0000 forums.kobold.town-post-441
rest in peace, akira toriyama once i publish my base game i will probably come back and try to make dragonball (not Z) in my ttrpg i think. i think FES would do it justice.

]]>
https://forums.kobold.town/t/rest-in-peace-akira-toriyama/185#post_1 Fri, 08 Mar 2024 19:30:52 +0000 forums.kobold.town-post-440
i tested out FES with my parents this weekend we played a 2 hour adventure of “save the inn from the rats in the basement” except I made it a rat king that was psychically transforming people into rats and it was very fun and horror-lite

]]>
https://forums.kobold.town/t/i-tested-out-fes-with-my-parents-this-weekend/182#post_1 Tue, 20 Feb 2024 17:12:41 +0000 forums.kobold.town-post-435
long covid sucks post title

]]>
https://forums.kobold.town/t/long-covid-sucks/178#post_1 Mon, 12 Feb 2024 18:41:20 +0000 forums.kobold.town-post-428
kobolds who don't yip are so valid yes and yes

]]>
https://forums.kobold.town/t/kobolds-who-dont-yip-are-so-valid/173#post_3 Fri, 09 Feb 2024 19:22:05 +0000 forums.kobold.town-post-416
kobolds who don't yip are so valid yip

]]>
https://forums.kobold.town/t/kobolds-who-dont-yip-are-so-valid/173#post_1 Fri, 09 Feb 2024 18:30:20 +0000 forums.kobold.town-post-414
weekly Valheim I started a new Valheim server!

Come join da discord if you want to play.

I’m thinking either Wednesday or Thursday nights, but it’s a dedicated server so you can hop on whenever!

]]>
https://forums.kobold.town/t/weekly-valheim/163#post_1 Mon, 05 Feb 2024 21:55:03 +0000 forums.kobold.town-post-397
KOSA please call your representatives if you’re in the USA

if it passes i probably won’t keep running this site

]]>
https://forums.kobold.town/t/kosa/162#post_1 Thu, 01 Feb 2024 03:04:26 +0000 forums.kobold.town-post-396
patreon crew also if anyone wants a custom bsky username.kobold.town domain hmu

]]>
https://forums.kobold.town/t/patreon-crew/40#post_10 Thu, 11 Jan 2024 19:21:14 +0000 forums.kobold.town-post-389
Yappy New Year! I did a lot of loafin around!


But I’m looking forward to trying to draw more art this year - 2023 was definitely a really slow year for me art wise but so far so good, I’ve done an art this year already and hoping to keep up the momentum!

]]>
https://forums.kobold.town/t/yappy-new-year/157#post_3 Thu, 11 Jan 2024 18:07:50 +0000 forums.kobold.town-post-388
Yappy New Year! I 100%'d Vampire Survivors and now i’m addicted to games like it

I’m looking forward to expanding my TTRPG and working on my Gameboy game (long covid aside)

what about you???

:heart:

]]>
https://forums.kobold.town/t/yappy-new-year/157#post_2 Thu, 11 Jan 2024 18:06:19 +0000 forums.kobold.town-post-387
Yappy New Year! Hope all the bolds here had a nice winter break and a yappy new year! Post about anything fun you did over the winter holidays or things that you’re looking forward to this year!

]]>
https://forums.kobold.town/t/yappy-new-year/157#post_1 Thu, 11 Jan 2024 10:06:49 +0000 forums.kobold.town-post-386
Bibby, the Guinea Pig Knight Path: path of athletics
Proficiency lvl: 3
power:7 strength
agility: 4
fortitude:6 defense
willpower:3 vuln
cunning:5
ego:6
hp:10
mp:6
determination:6
Recon: scouting advantage
Good Sniffer
DeadLifter
acquisition:
Magic Crown: +1 determination

]]>
https://forums.kobold.town/t/bibby-the-guinea-pig-knight/155#post_1 Sat, 09 Dec 2023 02:42:00 +0000 forums.kobold.town-post-383
Welcome to Kobold Town! :wave: Introduce yourself here! I’m Entropy!! I use they/them and it/its pronouns, I’m a worldbuilder, and I am a dragon :3

]]>
https://forums.kobold.town/t/welcome-to-kobold-town-introduce-yourself-here/5#post_15 Wed, 06 Dec 2023 04:29:49 +0000 forums.kobold.town-post-381
Jujutsu Kaisen anyone else watching it?

i just caught up and i feel physically ill about the death in it lmao

]]>
https://forums.kobold.town/t/jujutsu-kaisen/152#post_1 Wed, 06 Dec 2023 03:29:37 +0000 forums.kobold.town-post-378
what would help you use this forum more? Title

I want to make the forum more active and idk what would help

]]>
https://forums.kobold.town/t/what-would-help-you-use-this-forum-more/151#post_1 Tue, 05 Dec 2023 22:13:04 +0000 forums.kobold.town-post-377
yip again yip (the sequel)

]]>
https://forums.kobold.town/t/yip-again/141#post_3 Fri, 01 Dec 2023 00:32:56 +0000 forums.kobold.town-post-376
Sage Gainsboro, Rabbitfolk Fortune Teller Name: Sage Gainsboro

Sheet Version: v0.9

Description

Sage Gainsboro is a rabbitfolk, he/they, fortune teller. He is approximately 3’6" tall, and has a lithe build that is bulked up by his fuzzy, plush, blue-gray fur (with white bits near his nose/feet/paws). His eyes are a darker blue-ish gray, and his little nose is a dusky pink. He is in his early 20’s, and a defining aspect of them is that they are profoundly unlucky. Ever since he was a kit, when the warren where he lived with his family was flooded during a flash flood during a rainstorm, killing them all, he’s been alone, his luck subpar at best (though, one Could claim that them surviving when their family did not due to being out of the warren, stargazing, is a type of luck, but…). They were taken in and raised by Secretary Kenku of the local Adventurer’s Guild, and now, Sage is gearing up to make his debut as a real adventurer!

Path:

  • Path of Expertise (Non-martial)

Abilities & Aspects

Proficiency Level (PL) Physical Health (HP) Mental Health (MP) Determination Pool
3 7 10 6
Power Agility Fortitude Willpower Cunning Ego
4 6 5 6 7 3
Aspect Attribute Explanation
Strength Cunning Advantage on any roll using this attribute.
Vulnerability Power Disadvantage on any roll using this attribute.
Defense Agility Attacks targeting this attribute do not suffer disadvantage.
Determination Willpower Attacks targeting this attribute do not suffer disadvantage. You gain a pool of determination points equal to this attribute that you can choose to spend on rolls before rolling, which recovers when you suitably rest and recover.

Traits

  • Lagomorph: very good hearing/eyesight (perception in general), bunnyhops, soft fur, very energetic
  • Fortune Teller: skilled in several types of fortune telling (primarily tarot and runes), and can make money off it, and maybe occasionally tell the future…?!
  • Stargazer: the thing that saved their life, knows a decent bit of how to navigate by the stars & things about the stars/constellations
  • Vegetarian: only eats plants and plant-like objects. knows a lot about veggies in both cuisine and a medical sense.

Flaws

  • Unlucky: ever since he was a kit, Sage has been profoundly unlucky. From the death of their entire family due to a flooded warren in a flash flood, to various mishaps growing up, luck is Generally Not On Their Side. Part of him collecting lucky trinkets is an attempt to counteract this.

Acquisitions

  • Good Luck Charms: (qty: A Lot) (not enough to be over encumbered, but…)
    • Effect: +1d3 to one roll per long rest
  • Dual Bunny Daggers: here lookie (passed down from parents)
    • Effect: something maybe idk
  • Clothing: hooded cape, studded leather armor, cotton clothes, belt.
    • Hooded Cape Effect: +1 to stealth at night
    • Studded Leather Armor Effect: -1 to opponent’s roll to attack physically
  • Tarot Deck: for use in telling fortunes. rabbit themed. made by the Craftsbold.
  • Set of Runes: for use in telling fortunes. black and silver. made by the Craftsbold.

Traumas

  • Hydrophobia:
    • Description: greatly dislikes swimming and may even panic if water is too fast/deep/watery area is too closed in. A result of the untimely demise of his entire family’s warren during a flash flood.
    • Duration: While not as bad as it was when they were a kit, it’s absolutely Still There.
    • Cure: Time heals all wounds, and this one is no different. As stated above, the Trauma isn’t as bad as it was when they were little, but they still have Issues with water because of it. Possibly overcoming a similar situation with a better outcome may help.


(art by @ovaettr!!!)

]]>
https://forums.kobold.town/t/sage-gainsboro-rabbitfolk-fortune-teller/149#post_1 Mon, 20 Nov 2023 02:23:51 +0000 forums.kobold.town-post-374
FES Test campaign scratch space @kobold asked for a die roll:

test test

4d6kh3+10: 1 + 1 + 4 + 3 = 18

]]>
https://forums.kobold.town/t/fes-test-campaign-scratch-space/148#post_2 Sat, 18 Nov 2023 06:27:58 +0000 forums.kobold.town-post-373
yip again we yipping and popping we yopping

]]>
https://forums.kobold.town/t/yip-again/141#post_2 Sat, 18 Nov 2023 03:14:31 +0000 forums.kobold.town-post-372
FES: Character Sheet v0.9.1 Changelog v0.9:

  • Metaphysical → Mental in stat table
]]>
https://forums.kobold.town/t/fes-character-sheet-v0-9-1/36#post_10 Sat, 18 Nov 2023 02:45:34 +0000 forums.kobold.town-post-371
FES: Character Sheet v0.9.1 Changelog 0.8:

  • Bumped base statline up to reflect change from 2d6 to 3d6
  • Restructured a few things & made sure it was consistent elsewhere
]]>
https://forums.kobold.town/t/fes-character-sheet-v0-9-1/36#post_9 Sat, 18 Nov 2023 02:33:08 +0000 forums.kobold.town-post-370
FES Test campaign scratch space for da new adventurers

]]>
https://forums.kobold.town/t/fes-test-campaign-scratch-space/148#post_1 Sat, 18 Nov 2023 02:09:42 +0000 forums.kobold.town-post-369
Bo's FES character sheet Name: Bo

Sheet Version: v0.9

Description

they/them
tiny rain frog bard who wears a cloak and plays a lyre (a small handheld harp). they have a naturally grumpy face, but are cautiously curious about the world.

Path:

  • Path of Magic

Abilities & Aspects

Proficiency Level (PL) Physical Health (HP) Mental Health (MP) Determination Pool
3 6 10 6
Power Agility Fortitude Willpower Cunning Ego
4 6 3 6 7 5
Aspect Attribute Explanation
Strength Ego Advantage on any roll using this attribute.
Vulnerability Agility Disadvantage on any roll using this attribute.
Defense Power Attacks targeting this attribute do not suffer disadvantage.
Determination Willpower Attacks targeting this attribute do not suffer disadvantage. You gain a pool of determination points equal to this attribute that you can choose to spend on rolls before rolling, which recovers when you suitably rest and recover.

Traits

lyrist
healer
small
wizard

Flaws

clumsy

Acquisitions

lyre
cloak
large hat
steelsilk lyre strings
small handful of fairy dust

any ally who hears my song can gain advantage on an ability check!

Traumas

none!

]]>
https://forums.kobold.town/t/bos-fes-character-sheet/147#post_1 Sat, 18 Nov 2023 01:51:41 +0000 forums.kobold.town-post-368
Welcome to Kobold Town! :wave: Introduce yourself here! Hi I’m Nora!! I use they/them and ze/hir. I’m a jeweler and amateur worldbuilder and I am working on a koboldsona!!! I also make bots sometimes.

]]>
https://forums.kobold.town/t/welcome-to-kobold-town-introduce-yourself-here/5#post_14 Sun, 12 Nov 2023 21:57:40 +0000 forums.kobold.town-post-363
Dice roll stats+balance needed also, here’s the latest version of the code I built to play around with this. i rebuilt to be able to accommodate changing the base dice. enjoy

def calc_at_least_dice(bonus, adv, disadv, base_dice=2):
  # maps the resulting dice roll to the number of times that value is rolled
  val_map = {}
  total_to_roll = base_dice+abs(adv-disadv)
  bonus_roll = 0 # 1 if adv >= disadv else -1
  adv_func = max if adv >= disadv else min
  exploded_values = [
    [i for i in range(1, 7)]
    for j in range(total_to_roll)
  ]
  roll_values = [1 for i in range(total_to_roll)]
  total_rolls = 0
  expected_roll_values = 6 ** total_to_roll
  
  while total_rolls < expected_roll_values:
    dice = [0 for i in range(base_dice)]
    accum = 0
    seen = set()
    for roll in roll_values:
      if roll in seen:
        accum += bonus_roll
      for i in range(len(dice)):
        if adv_func(roll, dice[i]) == roll:
          dice = dice[0:i] + [roll] + dice[i:-1]
          break
      seen.add(roll)
    roll_total = accum + bonus + sum(dice[0:base_dice])
    val_map[roll_total] = val_map.get(roll_total, 0) + 1
    total_rolls += 1
    next_die_plus_index = 0
    while next_die_plus_index < len(roll_values) and roll_values[next_die_plus_index] == 6:
      roll_values[next_die_plus_index] = 1
      next_die_plus_index += 1
    if next_die_plus_index >= len(roll_values):
      break
    roll_values[next_die_plus_index] += 1
  # print(val_map)
  k2 = '' if adv == disadv else f'k{base_dice}'
  # print(f'{total_to_roll}d6{k3}+{bonus}')
  # print("total\t% at least = roll")
  percentage = 0.0
  probabilities = {}
  for roll in reversed(sorted(val_map.keys())):
    num_rolled = val_map[roll]
    percentage += num_rolled / total_rolls
    probabilities[roll] = percentage
  return {
    roll: round(100.0*probabilities[roll], 2) for roll in sorted(probabilities.keys())
  }
  
probs = {}
# headers = ['roll total']
roll_types = []
base_dice = 3
for adv in range(0, 3):
  for bonus in range(10, 11):
    roll_dist = calc_at_least_dice(bonus, adv, 0, base_dice)
    k2 = '' if adv == 0 else f'k{base_dice}'
    dice_amt = f'{base_dice+adv}d6{k2}+{bonus}'
    roll_types.append(dice_amt)
    # headers.append(dice_amt)

    for roll in sorted(roll_dist.keys()):
      pct = roll_dist[roll]
      probs[roll] = probs.get(roll, {})
      probs[roll][dice_amt] = str(pct)

print(f'roll total\t' + '\t'.join(roll_types))
for roll_total in sorted(probs.keys()):
  # print(f'{roll_total}: {str(probs[roll_total])}')
  # print(str([probs[roll_total].get(dice_amt, str(0.0)) for dice_amt in roll_types]))
  values = [probs[roll_total].get(dice_amt, str(0.0)) for dice_amt in roll_types]
  print(f'{roll_total}\t' + '\t'.join(values))

prints out the likelihood that your roll will be at least the roll total listed:

roll total 3d6+10 4d6k3+10 5d6k3+10
13 100.0 100.0 100.0
14 99.54 99.92 99.99
15 98.15 99.61 99.92
16 95.37 98.84 99.73
17 90.74 97.22 99.2
18 83.8 94.29 98.05
19 74.07 89.51 95.86
20 62.5 82.48 92.05
21 50.0 73.07 86.01
22 37.5 61.65 77.46
23 25.93 48.77 66.13
24 16.2 35.49 52.56
25 9.26 23.15 37.71
26 4.63 13.04 23.42
27 1.85 5.79 11.39
28 0.46 1.62 3.55

as you can see, at 20, your likelihood of rolling at least a 20 increases by 20% with 1 advantage, and 10% again with 2, which imo helps make it much more intuitive to think about “average effectiveness of advantage”

]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_10 Sun, 12 Nov 2023 05:18:43 +0000 forums.kobold.town-post-360
Dice roll stats+balance needed OK, I’ve learned my lesson.

  1. Using advantage for crit mechanics is bad/makes advantage too strong. Advantage is already incredibly strong - giving a bonus on top of the base advantage is not working, so I’m nixing the crit mechanics. Instead, I’m going to opt for crit mechanics to be an optional rule, which will either be separate from the dice roll itself, or if it is a part of the dice roll, it needs to be done in a way that distinguishes itself from advantage somehow.
  2. 2d6 still makes advantage numerically too strong, so I am going to need to advance the dice to 3d6. Oops!
  3. Stat spread and PL mechanics will have to change to accommodate this.

I still want to balance the baseline game around the concept of “the average baseline roll is what you want to target for difficulty”, ie. that someone of average competence trained in a particular challenge would have a pretty high chance to succeed if given any advantage on top of that.

Average roll is 10.5 on 3d6, so I’m going to file off the .5 and say that skill to match the average likelihood is also 10, so the new target average roll for competence is 20.

So, if you want experience to exactly equal baseline proficiency in terms of power, I can see PL going up to 10 in this case. I think I’m going to stick with PL +3 as the base level (+1 and +2 are still reserved more for “youth” or “npc” stat lines), so that your weakest physical and mental HP do not suffer too much, which means the new spread of stats ends up being something like 7, 6, 6, 5, 4, 3 or something like that.

I’m gonna fiddle with the numbers some more and see if I come up with anything else that needs to change as a result of this, but hopefully with this change the game will feel a little less ridiculous.

Tomorrow I’m going to put to tables the number crunching for a 3d6 system to show you where I land.

]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_9 Sun, 12 Nov 2023 05:10:27 +0000 forums.kobold.town-post-359
Dice roll stats+balance needed oh right. the code.

def calc_at_least_dice(bonus, adv, disadv):
  # maps the resulting dice roll to the number of times that value is rolled
  val_map = {}
  total_to_roll = 3+abs(adv-disadv)
  bonus_roll = 1 if adv >= disadv else -1
  adv_func = max if adv >= disadv else min
  exploded_values = [
    [i for i in range(1, 7)]
    for j in range(total_to_roll)
  ]
  roll_values = [1 for i in range(total_to_roll)]
  total_rolls = 0
  expected_roll_values = 6 ** total_to_roll
  
  while total_rolls < expected_roll_values:
    dice1 = 0
    dice2 = 0
    dice3 = 0
    accum = 0
    seen = set()
    for roll in roll_values:
      if roll in seen:
        accum += bonus_roll
      if adv_func(roll, dice1) == roll:
        dice3 = dice2
        dice2 = dice1
        dice1 = roll
      elif adv_func(roll, dice2) == roll:
        dice3 = dice2
        dice2 = roll
      elif adv_func(roll, dice3) == roll:
        dice3 = roll
      seen.add(roll)
    roll_total = accum + bonus + dice1 + dice2 + dice3
    val_map[roll_total] = val_map.get(roll_total, 0) + 1
    total_rolls += 1
    next_die_plus_index = 0
    while next_die_plus_index < len(roll_values) and roll_values[next_die_plus_index] == 6:
      roll_values[next_die_plus_index] = 1
      next_die_plus_index += 1
    if next_die_plus_index >= len(roll_values):
      break
    roll_values[next_die_plus_index] += 1
  # print(val_map)
  k3 = '' if adv == disadv else 'k3'
  # print(f'{total_to_roll}d6{k3}+{bonus}')
  # print("total\t% at least = roll")
  percentage = 0.0
  probabilities = {}
  for roll in reversed(sorted(val_map.keys())):
    num_rolled = val_map[roll]
    percentage += num_rolled / total_rolls
    probabilities[roll] = percentage
  return {
    roll: round(100.0*probabilities[roll], 2) for roll in sorted(probabilities.keys())
  }
  
probs = {}
# headers = ['roll total']
roll_types = []
for adv in range(0, 3):
  for bonus in range(6, 13):
    roll_dist = calc_at_least_dice(bonus, adv, 0)
    k3 = '' if adv == 0 else 'k3'
    dice_amt = f'{3+adv}d6{k3}+{bonus}'
    roll_types.append(dice_amt)
    # headers.append(dice_amt)

    for roll in sorted(roll_dist.keys()):
      pct = roll_dist[roll]
      probs[roll] = probs.get(roll, {})
      probs[roll][dice_amt] = str(pct)

print(f'roll total\t' + '\t'.join(roll_types))
for roll_total in sorted(probs.keys()):
  values = [probs[roll_total].get(dice_amt, str(0.0)) for dice_amt in roll_types]
  print(f'{roll_total}\t' + '\t'.join(values))
]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_8 Fri, 03 Nov 2023 21:02:40 +0000 forums.kobold.town-post-356
Dice roll stats+balance needed if i’m targeting 3d6 as the baseline for dice rolls, then the rest of the stats have to bump up with it

so given the baseline roll is 10.5, i thought to estimate the same amount for stats, but the numbers just don’t feel right - advantage still feels too strong by a little bit, so i think instead of moving to 3d6 i’m going to instead buff the baseline stats a little more and see where the numbers land there, since buffing the baseline stats will make the rolls’ value have a lesser share

here’s the graphs for 3d6 advantage, using the +1s per match still. i looked into regular advantage and it still felt like too much, and i didn’t like how the numbers felt from a non-mathematical standpoint because moving from 2d6 keep 2 to 3d6 keep 3 ends up making advantage crits stronger, but i don’t want to remove the concept of crits in the game because i still want there to be a “WOW” factor that can happen when you roll that isn’t ignored just because you already rolled high on the dice you get to keep

so we’ll see how this lines up when i think on it more next time



in the baseline 3d6 i started thinking about the difference between 20 and 21 for the targeted “average”, and i don’t like 21 as much as 20 just from a “do the numbers feel natural perspective” so a lot of my thinking on the balance was centered around hitting 20 in the 3d6 system.

]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_7 Fri, 03 Nov 2023 21:00:00 +0000 forums.kobold.town-post-355
Dice roll stats+balance needed i played with adding an extra dice and the math doesn’t feel good

so my next step is going to be to poke at the base stats and proficiency level and see what it feels like to make those stronger vs. advantage

]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_6 Fri, 03 Nov 2023 20:52:14 +0000 forums.kobold.town-post-354
Dice roll stats+balance needed OK here’s the updated numbers, which looks muuuuuuuuch better. I think the consequence is that we need to drop the max bonus a player can get right away from +8 down to +6 or +7, but I’m not 100% sure, and am going to have to think about this some more, I could potentially keep it as-is!


Updated code:

def calc_at_least_dice(bonus, adv, disadv):
  # maps the resulting dice roll to the number of times that value is rolled
  val_map = {}
  total_to_roll = 2+abs(adv-disadv)
  bonus_roll = 1 if adv >= disadv else -1
  adv_func = max if adv >= disadv else min
  exploded_values = [
    [i for i in range(1, 7)]
    for j in range(total_to_roll)
  ]
  roll_values = [1 for i in range(total_to_roll)]
  total_rolls = 0
  expected_roll_values = 6 ** total_to_roll
  
  while total_rolls < expected_roll_values:
    dice1 = 0
    dice2 = 0
    accum = 0
    seen = set()
    for roll in roll_values:
      if roll in seen:
        accum += bonus_roll
      if adv_func(roll, dice1) == roll:
        dice2 = dice1
        dice1 = roll
      elif adv_func(roll, dice2) == roll:
        dice2 = roll
      seen.add(roll)
    roll_total = accum + bonus + dice1 + dice2
    val_map[roll_total] = val_map.get(roll_total, 0) + 1
    total_rolls += 1
    next_die_plus_index = 0
    while next_die_plus_index < len(roll_values) and roll_values[next_die_plus_index] == 6:
      roll_values[next_die_plus_index] = 1
      next_die_plus_index += 1
    if next_die_plus_index >= len(roll_values):
      break
    roll_values[next_die_plus_index] += 1
  # print(val_map)
  k2 = '' if adv == disadv else 'k2'
  print(f'{total_to_roll}d6{k2}+{bonus}')
  print("total\t% at least = roll")
  percentage = 0.0
  probabilities = {}
  for roll in reversed(sorted(val_map.keys())):
    num_rolled = val_map[roll]
    percentage += num_rolled / total_rolls
    probabilities[roll] = percentage
  for roll in sorted(probabilities.keys()):
    print(f'{roll}\t{round(100.0*probabilities[roll], 2)}')

The likelihood to hit the average difficulty (14) when given a single advantage increases from:

  • 61% to 86% for +7 (25%)
  • 41% to 72% for +6 (31%)
  • 30% to 59% for +5 (29%)
  • 16% to 38% for +4 (22%)
  • 11% to 27% for +3 (16%)
]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_5 Mon, 30 Oct 2023 17:18:43 +0000 forums.kobold.town-post-353
Dice roll stats+balance needed i 100% coded this wrong

]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_4 Mon, 30 Oct 2023 16:30:12 +0000 forums.kobold.town-post-352
Dice roll stats+balance needed In Short, the likelihood to hit the average difficulty (14) when given a single advantage increases from:

  • 61% to 92% for +7 (31%)
  • 41% to 88% for +6 (47%)
  • 30% to 78% for +5 (48%)
  • 16% to 65% for +4 (49%)
  • 11% to 54% for +3 (43%)

Advantage is stronger than I want it to be so I need to figure out a way to fix that. :slight_smile:

]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_3 Fri, 27 Oct 2023 20:57:43 +0000 forums.kobold.town-post-351
Dice roll stats+balance needed it looks a little bit better when you’re only at +3, which is a middling stat:

i need to poke at this some more to understand the math better, but basically, more advantage = the more impact from stats to hit the “average” difficulty, so i believe I need to think of a way to change stat scaling a little bit.

If you’re curious, here’s the python code I used to calculate this:

def calc_at_least_dice(bonus, adv, disadv):
  # maps the resulting dice roll to the number of times that value is rolled
  val_map = {}
  total_to_roll = 2+abs(adv-disadv)
  bonus_roll = 1 if adv >= disadv else -1
  exploded_values = [
    [i for i in range(1, 7)]
    for j in range(total_to_roll)
  ]
  roll_values = [1 for i in range(total_to_roll)]
  total_rolls = 0
  expected_roll_values = 6 ** total_to_roll
  while total_rolls < expected_roll_values:
    accum = bonus
    seen = set()
    for roll in roll_values:
      if roll in seen:
        accum += bonus_roll
      seen.add(roll)
      accum += roll
    val_map[accum] = val_map.get(accum, 0) + 1
    total_rolls += 1
    next_die_plus_index = 0
    while next_die_plus_index < len(roll_values) and roll_values[next_die_plus_index] == 6:
      roll_values[next_die_plus_index] = 1
      next_die_plus_index += 1
    if next_die_plus_index >= len(roll_values):
      break
    roll_values[next_die_plus_index] += 1
  print("Total: % that value is at least this amount")
  percentage = 0.0
  probabilities = {}
  for roll in reversed(sorted(val_map.keys())):
    num_rolled = val_map[roll]
    percentage += num_rolled / total_rolls
    probabilities[roll] = percentage
  for roll in sorted(probabilities.keys()):
    print(f'{roll}\t{round(100.0*probabilities[roll], 2)}')
]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_2 Fri, 27 Oct 2023 20:37:17 +0000 forums.kobold.town-post-350
Dice roll stats+balance needed I was thinking today about how stats pan out for dice rolls and I think I’ve made advantage too powerful.

here’s regular 2d6, which looks pretty acceptable:

however, here’s 3d6k2+7, which includes +1 for each match that happens:

feels a bit much!!

i’m gonna have to revisit how difficulty scaling works a little bit i think

]]>
https://forums.kobold.town/t/dice-roll-stats-balance-needed/142#post_1 Fri, 27 Oct 2023 20:29:42 +0000 forums.kobold.town-post-349
yip again yip

]]>
https://forums.kobold.town/t/yip-again/141#post_1 Sat, 14 Oct 2023 16:27:59 +0000 forums.kobold.town-post-348
wrote some thoughts on little shop of horrors it’s pretty thinkpost-y. hope it makes sense

]]>
https://forums.kobold.town/t/wrote-some-thoughts-on-little-shop-of-horrors/140#post_1 Thu, 12 Oct 2023 00:11:45 +0000 forums.kobold.town-post-347
Monster Subjugation: Lindwyrms Oops, I forgot the determination, but… that would be +3 for her.

In total, that’s 20… as this is a metaphysical application, and a lindwyrm is not sentient yet still a dragon, i would say that while the difficulty is at +2, I would say the lindwyrm’s mental hp does not get this bonus, and being a weaker stat thus would be 4 at best.

And so, bringing her opponent’s mental points to 0, she applies a trauma: WARNED. SCOLDED. ALLOWED A WAY TO SURVIVE PEACEFULLY.

It understood. Its clutch would all survive if they followed the river.

The lindwyrm dashed away back into the cave.

“Is it over?” asks Charlie.

“I don’t know,” Duchess responds. She turns her head towards him and looks at him still hiding behind a bush. “Aren’t you the expert on that?”

“Oh,” he says. “You’re right. Well, we can do two things, I suppose. Lindwyrms are weak diggers, and can escape elsewhere eventually, but I imagine it will be a long time. They are dragons and, naturally, would rather stay here and keep digging than leave. So, we would need to camp here and set up guard. We would also need to feed the Lindwyrms, or risk them attacking us in desperation.” Charlie becomes self-aware, realizing he’s potentially talking over Duchess.

Duchess was enraptured and fascinated. “Charlie, you really did a great job! That’s a fantastic idea!” she says.

Kobold sat next to the party in front of the cave and makes the ground shake a little. “Kobold,” it says in agreement.

Charlie blushes. “Ok, but you two gotta hunt the food. We have the wagon but that’s only going to last so long.”

“Sure, buddy, sure,” she says and ducks down to him to give him a hug. “I think we did it,” she says optimistically.

]]>
https://forums.kobold.town/t/monster-subjugation-lindwyrms/126#post_12 Mon, 09 Oct 2023 22:42:33 +0000 forums.kobold.town-post-346
Monster Subjugation: Lindwyrms @kobold asked for a die roll:

Duchess is using her BEAST-TONGUE to speak, and is putting all weight and effort to the bottom of her determination to win over the beast’s terror and respect.

+7 total bonus

  • +3 proficiency (she is the mayor’s daughter)
  • +4 ego

3 advantages:

  • Magical - she is speaking to a magical beast
  • Beast-tongue - she would not be able to attempt this otherwise
  • Armor of the Dragon - her words bear the will of thousands, including the might of dragons itself. Surely a dragon, despite not being sentient, would understand?

2 disadvantages:

  • Lowborn
  • This is the LINDWYRM’S TERRITORY now, and it will fight you back if you do not convince it

3d6kh2+7: 4 + 5 + 4 = 17 (including +1 from match)

]]>
https://forums.kobold.town/t/monster-subjugation-lindwyrms/126#post_11 Mon, 09 Oct 2023 22:29:38 +0000 forums.kobold.town-post-345
Monster Subjugation: Lindwyrms The Lindwyrm, a creature of territory, whips and writhing in pain and howls in terror and agony, unable to reach its tiny arms upon the spot Duchess laid a bruise.

Duchess speaks strangely in a harmonious cry: “Creature! Begone! We do not want to fight needlessly even as you threaten our lives! Take your family and flee further towards the river’s source!”

Would this work, she thought? Far too late to decide against it if not.

]]>
https://forums.kobold.town/t/monster-subjugation-lindwyrms/126#post_10 Mon, 09 Oct 2023 22:21:44 +0000 forums.kobold.town-post-344
Monster Subjugation: Lindwyrms This is NOT a normal encounter. A lindwyrm is not something an entry level party should be fighting. This is exceedingly difficult, but only possible because The Armor of the Dragon will ensure she does not die in a single blow.

If DC 14 is average, and this is a fair bit above average, I’d land in the 16-17 zone. So let’s say 16.

This means she deals 2 damage to the lyndwyrm. A lindwyrm is martial in nature and lithe, so it is likely to have around 10 hp - +2 over Duchess.

The strike lands true, but the dragon’s scales yet provide much armor against such an attack!

The Lindwyrm HOWLS IN FURY.

Combat has begun!

The crew is literally putting their lives on the line!

]]>
https://forums.kobold.town/t/monster-subjugation-lindwyrms/126#post_9 Mon, 09 Oct 2023 22:13:23 +0000 forums.kobold.town-post-343
Monster Subjugation: Lindwyrms @kobold asked for a die roll:

+8 to roll

  • +3 for proficiency level in rapier use
  • +5 for agility

4 Advantages:

  • Agility is her strength
  • She is a duelist
  • Kobold has blessed her
  • The party is taking the lindwyrm by surprise

3 disadvantages:

  • This is a dragon, she is a kobold
  • She is not yet familiar with the pressure points of lindwyrms
  • This is the lindwyrm’s lair

3d6kh2+8: 3 + 6 + 3 = 18 (including +1 from match)

]]>
https://forums.kobold.town/t/monster-subjugation-lindwyrms/126#post_8 Mon, 09 Oct 2023 22:07:36 +0000 forums.kobold.town-post-342
Monster Subjugation: Lindwyrms The crew have assembled at Duchess’ side. Ready to ambush, the crew rely on her agility.

Kobold gives encouragement and a magical pat, and Duchess strikes out from hiding using her agility to act before the adult lindwyrm can see her leap from the brush.

“Princess Mode!” she cries, drawing her rapier and -

As she sprints out, it’s almost as though she is flying, a magical transformation blurring her from sight- This is the magical heirloom of the love of Kobold Town, “the Armor of the Dragon”, and within the light of her armor, the tip of her rapier is magically dulled to apply precise pressure points in damage instead of otherwise lethal attacks.

So equipped, Duchess rushes in. This was her time to shine!

]]>
https://forums.kobold.town/t/monster-subjugation-lindwyrms/126#post_7 Mon, 09 Oct 2023 22:03:14 +0000 forums.kobold.town-post-341
spy family best anime tbh

at least until delicious in dungeon is out

]]>
https://forums.kobold.town/t/spy-family/139#post_1 Sun, 08 Oct 2023 01:21:33 +0000 forums.kobold.town-post-340