Praytic / youtd2

Classic community-driven session-based Tower Defense game with RPG elements.
https://youtd2.com/
MIT License
97 stars 17 forks source link

Seeding #414

Open basxto opened 7 months ago

basxto commented 7 months ago

For doing a high-score match on two different devices with the same waves, it would be practical to a) have the random waves, item drops and random gamemodes be derived from a seed in a reproducible manner b) see the current seed in "Game Stats" c) start single-player with a custom seed.

That might even be interesting for testing, since the same inputs would always lead to the same results.

Kvel2D commented 7 months ago

Having same randomness for waves is doable.

Can't have same randomness for tower distribution. If player upgrades elements in different order or earlier/later before wave finish - probabilities diverge.

Can't have same randomness for item drops, also because player inputs can diverge probabilities. For example, let's say two players play a game with same seed and get an item which increases item quality. Player 1 decides to put this item on a tower. Player 2 decides to horadric cube the item. This will cause probabilities for item drops to diverge.

basxto commented 7 months ago

That sounds basically okay. Shattered Pixel Dungeon also diverges with different input, but everybody had the same opportunities basically. Different builders influence item quality anyways.

earlier/later before wave finish

Does that mean it depends on the elapsed game time? Or only during which wave it gets done?

If the input is humanly reproducible it would also allow speedrunning seeds, though not if it depends on elapsed time.

Kvel2D commented 7 months ago

No, tower distribution doesn't depend on game time. It depends on element levels and wave level. So if player 1 researches ice level 3 before wave 10 finish and player 2 researches ice level 3 after wave 10 finish there are two different conditions and two different random results for towers distributed after wave 10:

  1. wave 10 + ice level 3
  2. wave 10 + ice level 2