tukkek / javelin

Party-based roguelike (open-source strategy-RPG game).
https://javelinrl.wordpress.com/
64 stars 7 forks source link

Specialized Dungeon Chests #256

Open tukkek opened 4 years ago

tukkek commented 4 years ago

Many games have specialized types of containers, from armor/weapon racks to scroll dispensaries. Would be interesting to have something similar as Rare Dungeon Features in Javelin.

Would be interesting to add an unit test that has a mapping of item type to container type, doing an Class#isInstance() operation on every item in the game to make sure to add new types of container once a new item type is added.

tukkek commented 3 years ago

This is now implemented in 5ffa8dd94868956ee235a7b903857ab5d48922e0 - however, the current Chests are less than ideal. Bags or Dead Adventurers are thematic enough but it doesn't make sense why a coherent individual dungeon would have many Dead Adventurers or Bags laying around, so instead the current implementation just chooses at random because seeing a Dungeon with 10 bags laying around would do the opposite of the original intention of giving Dungeons personality and instead makes it confusing, distracting and unbelievable.

Ideally the current containers would be replaced by ones that could be generated more thematically and as such give Dungeons more of an ambience and sense of mystery for the player to wonder about - a Dungeon with lots of Armor Displays and Gem Displays may have been built by a retired Figher while a Dungeon with Scroll, Wands and Potions was certainly a Wizard's Laboratory at some point... in that sense, even a random assortment of chest types is enough to give the player imagination's food for thought and maybe even create scenarios more enticing than hand-made ones could predict (same for #271).

Here's some ideas of the Art necessary to achieve this next upgrade to the feature. The programming involved should be fairly minimal now that the baseline function is working:

Here are things that are already in the game but could use new images: