Procedural RPG OT: every action has consequences

Started by Legend, Apr 20, 2019, 09:02 PM

previous topic - next topic

0 Members and 1 Guest are viewing this topic.


Here is the real deal in game.

Zoomed in on the bottom right corner to show more detail. Again here is the raw image that the map is upscaled from:

A single pixel in the original map becomes 16*16 pixels in the new map, but it can get arbitrarily zoomed in. I tried two different approaches before settling on this one. This technique converts the pixel map into a curve. I realised that it would be nice to have this information anyway, so I figure I might as well use it.


The scale is way off but I'm starting to experiment with artistic elements instead of just gameplay elements. Ripples around coasts and deeper water is darker.

The end goal is for the game to have a highly stylized fantasy map that acts as a backdrop for everything.


Experimenting with something new.

Solves practically all of my problems while improving the end game. Here's how it works!

Everything is rendered in real time. A shader takes a height map, a detail map, and the global heat and humidity maps as input. It generates all the land from that info every frame. There is no actual mesh for the world, it's just a shader.

A compute shader or seperate thread can then render new local maps as needed. Only done as the camera moves or zooms in/out. Can be slow since it can happen on screen and still look good.

I think I'll embrace this new 3D look but an orthographic camera can be used to get a 2D looking map if I want to go back to that.


Some new mountain tech. I've been really struggling with this step of development since it's so loosely defined but I'm still managing two steps forward for every step back.

The new mountains are part of my general solution for rendering the world. A very high resolution picture is made that just shows if a pixel is water, land, or river. Since every pixel is just one byte, this picture can be held in memory without issues.

Then new chunks are procedurally rendered as needed. For every pixel in the chunk, the distance from it to the nearest water is calculated. This gives a general mountain look. A lower res height map is then added to this so that rivers and lakes are not at sea level.

This height map can then be used by the shader to deform the mesh.



I think tomorrow I'll try to finish it up to minimum viable product level. Then I can move on with the rest of the RPG and get that into a playable state.


Everything is coming together. Obviously there is more I'd like to improve but I'm pretty happy with the current state of things. The difference between this video and the last video is night and day (although I need to fix those spires). Now I can spend the rest of the day working on the art side of things. The whole world shouldn't just be mountains but I focused on that since they are the most complicated.


It's working!

Everything is still low res and programmer art, but game is starting to resemble a game. Grass and trees are simulated, and you can see super fast seasons as winter extends through the north. There is a massive desert through the middle of the world, but there is actually another desert hidden under the ice sheet in the north.

This game is turning out so much crazier and cooler than I was ever expecting. The switch to 3D was primarily for programing reasons but it really demonstrates the scale of the world.


Procedural family names

Without curation, here are some last names that I'm currently generating.


Seems to do a darn good job making names that follow a general style. I'm amazed at how "made up by a high school student writing fantasy" it feels compared to the consonant soups of my first attempts.

Will need to put in a filter though just to make sure nothing super bad gets generated. Next I'll try first names.


Well except for human males, this looks good to go.

Spoiler for Hidden:
<br><br>Human Cities<br>1. contiago<br>2. quangpin<br>3. zhongduo<br>4. marceilles<br>5. burg<br>6. lolormsara<br>7. mantosport<br>8. cagliha<br>9. roy<br>10. jiza<br>11. tonju<br>12. ovss dn<br>13. oendos<br>14. kango<br>15. tarquolle<br>16. luoya<br>17. thessav<br>18. smos<br>19. yanto<br>20. bracus<br>21. reskos<br>22. ghangping<br>23. trebes<br>24. lerueilles<br>25. cavacera<br>26. gyeoali<br>27. cang<br>28. vaxicum<br>29. bopingzhou<br>30. kangapou<br>31. medroviyantonerg<br>32. hathai<br>33. vinnzhou<br>34. berraca<br>35. logn<br>36. laga<br>37. bhodes<br>38. karanto<br>39. cong<br>40. skanzhou<br>41. anzig<br>42. taj<br>43. aendanda<br>44. sanago<br>45. malls<br>46. habule<br>47. myousou<br>48. yegensburg<br>49. manti<br>50. ranting<br>51. cong<br>52. bonne<br>53. nopewell<br>54. aevenna<br>55. akangshad<br>56. naendu<br>57. nadango<br>58. zimbuktu<br>59. limingo<br>60. argont<br>61. canlier<br>62. euari<br>63. yeffa<br>64. vor<br>65. nendora<br>66. seccosburg<br>67. knorai<br>68. nazigrai<br>69. bogath<br>70. gour<br>71. allisbon<br>72. bugspei<br>73. mitsake<br>74. magrang<br>75. rempoia<br>76. soma<br>77. citta<br>78. taffanadu-batan<br>79. patra hora<br>80. hellstane<br>81. gulandung<br>82. jiankia<br>83. chexa<br>84. kinsbuhof<br>85. ptulora<br>86. mujgo<br>87. jiaozhou<br>88. trolis<br>89. bulgeium<br>90. tiankanng<br>91. yanyu<br>92. bri<br>93. val<br>94. kand<br>95. janth<br>96. citermarino<br>97. erdiseo<br>98. akrinde<br>99. lorinth<br>100. egngacu<br><br>Human Man Names<br>todo<br><br>Human Woman Names<br>1. rarian folt<br>2. clotild ollingfon<br>3. gra viddler<br>4. ligundra whart<br>5. asacey jusgg<br>6. aunderer make<br>7. jecimada celmon<br>8. aura risnsm<br>9. julya hurpo<br>10. jegaveve rosby<br>11. cifavia stonynd<br>12. cohelle rus<br>13. brath rowlis<br>14. juliara werand<br>15. chrilyn toy<br>16. liara mayney<br>17. lyendefer coston<br>18. chlenty shaelas<br>19. anitha spabb<br>20. cory baelin<br>21. carmella mossoway<br>22. raendrey hort<br>23. leya harrick<br>24. helyssent harryled<br>25. pelly wydder<br>26. trelippacquesta conch<br>27. julicia jusgower<br>28. annalys sustmanden<br>29. gessta wyrrenter<br>30. arice caynwody<br>31. rissandeina lake<br>32. pada ung<br>33. kikki sutchul<br>34. ianilyn greenwoodflother<br>35. ale bergrabb<br>36. marry tul<br>37. beexanda marlyndondon<br>38. hosha hupps<br>39. alexander owooksterlynear<br>40. alexis lorry<br>41. horalynn crax<br>42. velaria dushy<br>43. peta oanouth<br>44. ara braun<br>45. shaely ryswynson<br>46. elizailla cloanghimm<br>47. cilla pemforrester<br>48. saya ulslafy<br>49. shang toxthantlon<br>50. iaenda egandrrighet<br><br>Fairy Cities<br>1. rarksun<br>2. contpesun<br>3. limmetssun<br>4. rassysun<br>5. maidolowersun<br>6. tinn<br>7. esun<br>8. petun<br>9. peoncettemun<br>10. rellopesun<br>11. sun<br>12. fasun<br>13. honasun<br>14. sun<br>15. hoaryllaxsun<br>16. gradensun<br>17. bary&#39;sun<br>18. storsun<br>19. jarnsun<br>20. gahliasun<br>21. tinnsun<br>22. ganden pinksun<br>23. oodsun<br>24. laliniasun<br>25. anendrsun<br>26. ageenasun<br>27. rack soapwortsun<br>28. beesesun<br>29. twillingsun<br>30. ascilasun<br>31. feseasun<br>32. felloon flowersun<br>33. consun<br>34. ralvasun<br>35. postsun<br>36. brossun<br>37. cin beronsunsun<br>38. rairietasun<br>39. sun<br>40. sun<br>41. tulsun<br>42. lassun<br>43. blowersun<br>44. gariasun<br>45. yelodysun<br>46. merfallsun<br>47. beriwin<br>48. speniumsun<br>49. stsun<br>50. pasunafr sasun<br>51. browalasun<br>52. dun<br>53. cheresun<br>54. buttercun<br>55. enasun<br>56. luglesun<br>57. boozesthin<br>58. liminarisun<br>59. pearlet savesun<br>60. gainsun<br>61. primsun<br>62. gosebudsun<br>63. olintsun<br>64. forysun<br>65. sun<br>66. nilsun<br>67. ankedicasun<br>68. darinasun<br>69. fun<br>70. flowin<br>71. rhing glorysun<br>72. triamsun<br>73. lelphisun<br>74. chrylsun<br>75. laineiun<br>76. coowsun<br>77. toonywysun<br>78. tran<br>79. rintesun<br>80. killasun<br>81. bushiasun<br>82. gerasun<br>83. stsun<br>84. limogesun<br>85. acoleusun<br>86. gas plofsun<br>87. al fsun<br>88. melorssun<br>89. roun<br>90. wansysun<br>91. sun<br>92. hytun<br>93. gliliaxsun<br>94. greemisun<br>95. gottlasun<br>96. leun<br>97. banteloniasun<br>98. makersun<br>99. cardenioflowersun<br>100. honeflowersun<br><br>Fairy Man Names<br>1. peaut<br>2. rit<br>3. malebeeryspirit<br>4. fronillirmspirit<br>5. nspirit<br>6. elliumspirit<br>7. delpirit<br>8. flowflowespirit<br>9. mizit<br>10. duttespirit<br>11. itendespirit<br>12. frit<br>13. calipspirit<br>14. pephyspirit<br>15. orit<br>16. shseapirit<br>17. angerbury bellsspirit<br>18. plutunit<br>19. futassspit<br>20. vainforestspirit<br>21. lavendull caspirit<br>22. deasspirit<br>23. pragote gentianspirit<br>24. molacaspirit<br>25. belspirit<br>26. tutchman&#39;s breechesspirit<br>27. le manaspirit<br>28. olantaspirit<br>29. lacsvaaspirit<br>30. wilvermistspirit<br>31. orgnirit<br>32. mait<br>33. vit<br>34. summewesavoryspirit<br>35. varit<br>36. soirit<br>37. chrit<br>38. conthellirit<br>39. soseflowerspirit<br>40. rit<br>41. chunationspirit<br>42. coxgottenwoodsspirit<br>43. lumispirit<br>44. rit<br>45. gindespirit<br>46. rit<br>47. forastspirit<br>48. spirit<br>49. tendspirit<br>50. hosettaspirit<br><br>Fairy Woman Names<br>1. banerfal<br>2. rathenbul<br>3. cariassoul<br>4. glintsoul<br>5. tummoul<br>6. rasoul<br>7. rardensoul<br>8. allifoul<br>9. shoul<br>10. agoniasoul<br>11. gaffleysoul<br>12. cosssoul<br>13. asoul<br>14. grissiniumsoul<br>15. proul<br>16. choul<br>17. blaris edsousanssowfl<br>18. olsmerall<br>19. ful<br>20. dairinsoul<br>21. bordin pinksoul<br>22. flavesoul<br>23. adesoul<br>24. therasoul<br>25. lendflooul<br>26. maidesoul<br>27. scrigolesoul<br>28. marsoul<br>29. hul<br>30. dumbell<br>31. columiasoul<br>32. tarkspursoul<br>33. shadsoul<br>34. trecoul<br>35. rairinasoul<br>36. nasoul<br>37. piastesoul<br>38. holly soul<br>39. frissve gsoul<br>40. tasigesoul<br>41. bergersoul<br>42. caiasoul<br>43. straksoul<br>44. creesoul<br>45. sweetsoul<br>46. ssoul<br>47. nsoul<br>48. aroul<br>49. preen snowflakesoul<br>50. anonsoul<br><br>Machine Cities<br>1. ook&#39;v k&#39;vul<br>2. vpuk&#39;v <br>3. to iok&#39;v u<br>4. iruv 04509-6910<br>5. vtukk&#39;v <br>6. ulendinu <br>7. uivak&#39;v <br>8. lurv hi<br>9. kov w uut<br>10. toyoly<br>11. k&#39;v i<br>12. neviteti<br>13. finury<br>14. pernerluv<br>15. qulyu<br>16. kotu-kollu<br>17. lu e<br>18. volyut v<br>19. ulu iniu <br>20. lodu<br>21. vy vk&#39;v <br>22. toryi<br>23. prthfinder<br>24. indokk&#39;v huvurk&#39;v <br>25. dutey eurti<br>26. indo<br>27. gov ru<br>28. belgorod<br>29. verve<br>30. endu<br>31. vokk&#39;v o<br>32. oniey<br>33. rove- etul<br>34. bunk&#39;v h<br>35. ovk&#39;v <br>36. rover<br>37. k&#39;v endo<br>38. vubutter<br>39. ter<br>40. k&#39;v uhuuvu<br>41. r-tv ovkhu<br>42. unjo<br>43. hurihonjo<br>44. fevak&#39;v ovutvu<br>45. rvvyvtortter<br>46. dunuvhiru<br>47. k&#39;v endoy<br>48. tok&#39;v utu u<br>49. vppernovu<br>50. huku<br>51. k&#39;v ivhiwu<br>52. fuv ruvnodu<br>53. inuyu uga<br>54. fuiniu<br>55. o v unul<br>56. khelyubinvk&#39;v <br>57. rokuk&#39;v <br>58. tungel<br>59. venk&#39;v <br>60. u 1<br>61. ukk&#39;v <br>62. iruv 05280-6910<br>63. vhrgex<br>64. tok&#39;v unkhk&#39;v itv<br>65. nuikk&#39;v ugo<br>66. bujoryuk&#39;v i<br>67. v354 kephei<br>68. hydronuliu <br>69. uebuvhi<br>70. hunk&#39;v <br>71. aru 1 urov 1<br>72. pu un<br>73. ikk&#39;v h<br>74. r-1<br>75. tunk&#39;v u<br>76. ozur<br>77. yu-8000<br>78. one<br>79. vurutto <br>80. ozu<br>81. kuk&#39;v huigu<br>82. nohon utvukk&#39;v <br>83. to iyo<br>84. k&#39;v endov<br>85. vugov v hionov <br>86. buint petervburg<br>87. eu endevtruktion<br>88. bld<br>89. i 332277554499006611<br>90. rv uvuyu<br>91. guko<br>92. roend&#39;v <br>93. tokhe<br>94. yuendude<br>95. tukk&#39;v <br>96. urti ev<br>97. ink&#39;v <br>98. futvuyu u<br>99. n1-l3<br>100. nugoyu<br><br>Machine Individual Names<br>1. kuzun<br>2. hunk<br>3. ding ikovo<br>4. dun en<br>5. tonkephei<br>6. ukugoyu<br>7. yuenduvhi<br>8. iruku o<br>9. betrophro e<br>10. kelebrun glul<br>11. nikk<br>12. n1-l3<br>13. rvgk1-f02<br>14. vtel-on-do<br>15. vieboke<br>16. uiutvhi<br>17. rokkov ov<br>18. tukugeyury probev:<br>19. khovhi ur<br>20. lurk<br>21. izuho<br>22. vtelloy<br>23. urtk<br>24. quurk<br>25. uvvri<br>26. deend vuvteti<br>27. niku u<br>28. to ivu uni<br>29. geleld&#39;v <br>30. bruvnodur<br>31. bukivhi u urello<br>32. i u<br>33. ku utu<br>34. b 332277554499006611<br>35. bl kheuny<br>36. luvugu i<br>37. on bruwn<br>38. obu u<br>39. di ukhev<br>40. iyo<br>41. qunu 2<br>42. vutvu<br>43. turutu<br>44. uteyu<br>45. vokk<br>46. vovibrukheo<br>47. aji<br>48. vhika<br>49. nuri<br>50. u 1 iku<br>51. uvhiko<br>52. klinu<br>53. hirov.<br>54. vun uinbuyuvhi<br>55. vhoton<br>56. fro<br>57. rvenio <br>58. to vku<br>59. voxeruktu<br>60. lo u i<br>61. iva<br>62. y ulloy<br>63. nendiu 3<br>64. pholeptoyon<br>65. woh g64<br>66. uru<br>67. tvu<br>68. vunur voino<br>69. yutenu 9<br>70. niru<br>71. beto<br>72. vpekewulk<br>73. yovtoretolui u<br>74. hutvu<br>75. yate<br>76. vlto<br>77. ur 1<br>78. kongolu<br>79. ulliu <br>80. uki<br>81. kituyo<br>82. fuik<br>83. toyotu e<br>84. kr ifi<br>85. v-2 b<br>86. vteeve<br>87. upu 1<br>88. izitvvk<br>89. entil<br>90. vhoburuki<br>91. oldk<br>92. duikor<br>93. kuend<br>94. upu<br>95. unityu fu<br>96. rovtok et union<br>97. ikhevhiro<br>98. ark 18136<br>99. urgoyote<br>100. koguyu<br><br><br>

I cannot stress enough just how pleased I am with this setup. There is a ton of room for variation yet everything still follows similar trends. This system is pretty much perfect for any sort of raw name generation. Not all procedural names should use it (human first names might be better with just a list) but it's great for what it does.



Trying out a slightly more realistic art style. Old look was pretty cool imo but wasn't matching the feel of the game.

Also as you can see, the map is really coming together. The 512*512 grid is visible in this video when close to the ground. Not only is it cool seeing how much additional detail is added per tile with this second procedural generation pass, but these tiles will also be used for construction and empire building. The game does not have tile based movement or play like a tile based game unless the player is a governor/king focused on managing the bigger picture.


Fading distant objects to blue helps demonstrate scale.


Think I've narrowed in on how roads, bridges, and a few other things like that will work.

Essentially the world is split into sectors (hopefully I can figure out a more medieval sounding name before release). These sectors are the squares you see in the screenshot above. Along river banks and shores, sectors have irregular shapes and don't spread out into the water. Instead a seperate water only sector covers that space.

Sector wide improvements can be constructed including roads and irrigation. When roads are built on a water sector, they are automatically used as bridges. Makes it all fairly simple from both a player perspective and a dev perspective. No need to build paths between every building, just build the road upgrade for that sector and you are good to go. Neighboring sectors with road upgrades string together to form continuous roads for traveling long distances.


Region, province, territory

zone is kind of weird.  It doesn't feel like it'd make sense in a medieval time, but it is actually a middle English word.  

Go Up