BentoBoxWorld / AOneBlock

A OneBlock Minecraft Game for BentoBox
https://docs.bentobox.world
Eclipse Public License 2.0
77 stars 29 forks source link

[Feature] Fixed sequences of blocks for better game design #167

Open Bogden opened 3 years ago

Bogden commented 3 years ago

From a game design perspective, the beginning of the game is a bit flawed in that players can generate blocks that they have not yet been given the resources to mine. An early sequence of cobblestone, for instance, before the player has gotten 3 logs. An iron ore before the player has gotten three stone, diamond before iron, etc.

For reference, this is how the original begins:

#
#       Data pack by IJAMinecraft
#       @ ijaminecraft.com
#       @ youtube.com/user/IJAMinecraft
#

execute as @s[scores={ija-a4-counter=1}] at @s align xz positioned ~0.5 ~ ~0.5 run fill ~ ~ ~ ~ ~ ~ minecraft:grass_block replace minecraft:barrier

execute as @s[scores={ija-a4-counter=2}] at @s align xz positioned ~0.5 ~ ~0.5 run fill ~ ~ ~ ~ ~ ~ minecraft:grass_block replace minecraft:barrier

execute as @s[scores={ija-a4-counter=3}] at @s align xz positioned ~0.5 ~ ~0.5 run fill ~ ~ ~ ~ ~ ~ minecraft:grass_block replace minecraft:barrier

execute as @s[scores={ija-a4-counter=4}] at @s align xz positioned ~0.5 ~ ~0.5 run fill ~ ~ ~ ~ ~ ~ minecraft:oak_log replace minecraft:barrier

execute as @s[scores={ija-a4-counter=5}] at @s align xz positioned ~0.5 ~ ~0.5 run fill ~ ~ ~ ~ ~ ~ minecraft:oak_log replace minecraft:barrier

execute as @s[scores={ija-a4-counter=6}] at @s align xz positioned ~0.5 ~ ~0.5 run fill ~ ~ ~ ~ ~ ~ minecraft:chest[facing=east]{"LootTable":"ija-one-block:00"} replace minecraft:barrier

In terms of AOneBlock, maybe something like this could work:

'0':
  name: Plains
  fixedBlocks:
    0: GRASS_BLOCK
    1: GRASS_BLOCK
    2: GRASS_BLOCK
    3: OAK_LOG
    4: OAK_LOG
    5: OAK_LOG
    # etc, etc
    700: CHEST_WITH_WATER_BUCKET
  biome: PLAINS
  blocks:
    PODZOL: 40
    MYCELIUM: 40
    BIRCH_LEAVES: 100
    IRON_ORE: 300
    CHEST: 200
    BEE_NEST: 20
    OAK_LOG: 2000
    DIRT: 1000
    ANDESITE: 100
    INFESTED_STONE: 40
    DARK_OAK_LOG: 300
    OAK_LEAVES: 1000
    BROWN_MUSHROOM_BLOCK: 100
    DIORITE: 100
    COAL_ORE: 700
    GRAVEL: 100
    DIAMOND_ORE: 30
    GOLD_ORE: 30
    GRASS_BLOCK: 2000
    DARK_OAK_LEAVES: 100
    BIRCH_LOG: 500
    COBBLESTONE: 800
    SAND: 200
    GRANITE: 400
    COARSE_DIRT: 100
    STONE: 800
    CLAY: 40
    EMERALD_ORE: 10
    GRASS_PATH: 100
  mobs:
    COW: 150
    SPIDER: 75
    SHEEP: 75
    PIG: 150
    VILLAGER: 15
    CHICKEN: 200
Bogden commented 3 years ago

Related, but slightly different is the idea of having specific chests at certain blocks. Here I put a placeholder for "CHEST_WITH_WATER_BUCKET", and for reference the original OneBlock drops a chest with an oak sapling and some torches at block 47, which is crucially important for a renewable wood resource that an otherwise unlucky player could end up without for an extremely long period of time.

Other reference points: A Water Bucket at block 36 A Birch Sapling at block 282 (end of Plains phase) A Spruce Sapling and Map at block 680 (end of Underground phase)

These are just examples of course, with the necessary functionality being the ability to drop specific chests at specific blocks

Bogden commented 3 years ago

Some more notes on what I think could make sense for a default progression order, just purely opinions that you can feel free to take or leave. Basically this order implies that the next block should not appear until the previous block has appeared enough times. This could be achieved through shifting the drop tables of the phases, or through sequenced blocks as referenced in this issue.

  1. Dirt
  2. Wood
  3. Water Bucket
  4. Wheat Seeds (Enables Cow, Sheep, and Chicken breeding. Can also be acquired through bonemealing grass)
  5. Wood-Tier blocks (Stone, Coal, etc)
  6. Carrot Seeds (Enables Pig breeding)
  7. Stone-Tier blocks (Iron, etc)
  8. Potatoes
  9. Gold
  10. Melons, Pumpkins, Sugar Cane
  11. Bamboo (Enables scaffolding)
  12. Redstone
  13. 2 Villagers (Enables an iron farm, and countless other useful blocks and tools)
  14. Diamond (Enables enchanting table)
  15. Lava Bucket (Enables cobblestone generator)
  16. Obsidian
  17. Nether Quartz (Enables observer and comparator automation)
  18. Soul Sand (Enables water elevators)
  19. Ice (Enables basalt generator)
tastybento commented 3 years ago

Thanks for the ideas. I added the fixed blocks option. You'll need to delete phases 0 and 700 yml files to see the new format. It's what you wrote above. I just randomly stuck a sponge in at block 50 on the first phase.

For the other ideas, the chest values can be manipulated to give players a chance with the various things you mentioned. I'll look at them again and see if some tweaking is in order. I also like the idea of some predefined keys like "CHEST_WITH_X" where X can be an item.

By the way, I purposely heavily restricted water access in the early phases on OneBlock. It was to try to avoid SkyBlock-esqe game play, i.e., force players to think differently. I really, really, wanted to avoid cobblestone generators. In other words, the idea was to try and create a game really distinct from SkyBlock. I know one major difference is that there's no lava early on, but as soon as you have water and lava - bam, you have SkyBlock and dribbles of cobblestone all over the place. So, that's a very long way of saying, I kept water to the ocean phase! Of course admins can changed the phases, but that's my rational.

Bogden commented 3 years ago

Awesome! Thanks so much for such a speedy implementation on this!

In terms of water, I totally am on board with avoiding cobble gens early on, but water alone I think is so crucial to a lot of the experience. For me it serves two main purposes.

  1. It allows you to grow crops, which leads to quite a few things. First, for some basic food, but then for animal breeding, and the various materials related to them. As is, the game teases you by giving you some seeds in some chests, but with no way to grow them.
  2. It allows you to build downwards by using water to descend safely. This is really important to me. It allows you to add a lot more depth to your island build, and also lets you build effective mob farms at low levels.

As long as you restrict lava to a very late game section, then I don't think there's any issues with giving out water very early on, as the original OneBlock did. I'd strongly recommend giving out a single water bucket very early on, but of course this is just an opinion on the overall game design and not necessarily any particular feature.

Bogden commented 3 years ago

Wait a sec, I just realized the sponge at block 50 is also a big tease for not having water haha

Bogden commented 3 years ago

For the chest thing, I think it's more relevant when you want the player to have exactly some number of something, instead of a chance at various things. Fences and whatnot, super cool to have as random drops. A second bucket of water on the other hand, has pretty huge implications for the average player who doesn't know about tricks like bonemealing a stream to generate a water source from tall seagrass.

Same kind of logic applies to giving the player their first (and only) carrot, pumpkin seed, acacia sapling, etc.

If left to random chance, it's entirely possible for the player to go past an entire phase and never get that one carrot.

Bogden commented 3 years ago

Took a crack at fleshing out the initial drops a bit more to help ease the curve a bit:

  fixedBlocks:
    0: GRASS_BLOCK
    1: GRASS_BLOCK
    2: GRASS_BLOCK
    3: OAK_LOG
    4: OAK_LOG
    5: CHEST
    6: OAK_LOG
    7: GRASS_BLOCK
    8: OAK_LOG
    9: GRASS_BLOCK
    10: OAK_LOG
    11: OAK_LOG
    12: OAK_LOG
    12m: PIG
    13: GRASS_BLOCK
    14: GRASS_BLOCK
    15: GRASS_BLOCK
    16: CHEST
    17: OAK_LOG
    18: GRASS_BLOCK
    19: OAK_LOG
    20: GRASS_BLOCK
    21: OAK_LOG
    22: MELON
    23: DIRT
    24: DIRT
    25: STONE
    26: STONE
    27: STONE
    50: CHEST_WITH_WATER_BUCKET

The water bucket and melon are new, if you decide against water, then the melon should probably also not appear.

Not sure if there's a good way to set fixed mob spawns, but I put 12m: PIG here. Dunno how hard it is to parse this kind of stuff, but maybe 12: OAK_LOG, PIG would be easier to implement?

I also removed GOLD_ORE, DIAMOND_ORE, EMERALD_ORE from blocks to avoid running into stuff you can't mine until you have iron, and I removed VILLAGER from mobs. Villagers are actually incredibly powerful in skyblock/oneblock, because as soon as you have two, you can immediately breed them and access an incredibly large number of tools and blocks. Full diamond armor, full diamond tools, etc. I tend to think of villagers as a pretty mid-late game reward overall.

On the same note, guaranteeing two villager spawns would be nice to be able to do. In the original map, you get two villagers during Phase 6 - Red Desert.

Bogden commented 3 years ago

The only other big design issue that I think needs to be addressed is the fact that you can get obsidian before you get 3 diamonds. Incredibly painful whenever it happens of course, since it takes around 5 minutes to break an obsidian block without a diamond pickaxe. Might even want to just remove obsidian as a possible drop until a later phase, otherwise fixing a sequence of blocks during the underground phase that ensures no obsidian is hit before 3 diamonds (or a chest with a diamond pickaxe) are encountered.

RustyDagger commented 3 years ago

Id just like to point out that the bucket on obsidian to pickup lava feature is a thing. I totally over looked this and players ended up with lava early on ( they didn't have to mine the obsidian tho, )