kirbycope / CopeCraft

MIT License
0 stars 0 forks source link

Screenshot

CopeCraft

Installation

  1. Download the zip file
  2. Unarchive zip contents into the Saves folder of Minecraft Java Edition

Background

This started when I looked at updating OneBlock to work with the latest Minecraft version. As I started to dive into the code and study line-by-line I would google each command to find some documentation. Unfortunately, Mojang doesn't seem to offer a lot to that effect so I relied on fan wikis, forums, stack arqade, and youtube. Once I got comfortable with the code I decided that I actually wanted to make my own thing. We played a lot of OneBlock, SkyBlock, and Hypixel in 2021 so I started thinking about what was fun about those experiences.

Game Design

Where to "Start"?

I knew I wanted a SkyBlock of some sort; a void with floating islands. I liked the "Infinite Block" in OneBlock, but we had a challenege to stay in the OneBlock Tutorial and that was a lot of fun. The main limiter in that challenge was lack of lava (and strongholds too but that's literal end game stuff). Having lava and water to make a cobblestone generator was great if we had a starting island, like Ultimate Sky Islands.

Inspiration Island

So, I needed an island and thought of the Tiller's Farm from World of Warcraft. That farm you went to, cleaned up and eventually did quests for the townsfolk. I thought that was a great idea for a farm sim starter. The farm was compact and easy enough to rough out in-game. I found an image of the farm online and drew a grid over it using MS Paint. MS Paint

Creating the Map

I had done some videos using superflat worlds and Edit Save Data video (so I could make a hardcore OneBlock). I wanted to spawn at 0 0 0 so I had to create a void with a single block to build off of.

Macguffin

Now that I had an island I felt I needed a reason to be there. I thought of Stardew Valley and Rune Factory where the trope is that an estranged relative has a farm they let go of in their old age and it's up to you to save the family farm or whatever. My wife has a great uncle Eric (still alive, btw) and he aged out of his 90-acre property so I ran with that. I got started working on a deed to the farm and a letter explaining the situation to go with it. I couldn't make a personalized letter and the deed took up precious inventory so I settled on a basic letter using a book generator.

Quest Chain

I started with gathering, planting, and farming wheat as the 3 objectives for 1 quest. I wanted to be like Hypixel SkyBlock and World of Warcraft as far as quest trackers go. So the bossbar would display the current objective's status and the sidebar would display overall quest progress. When an objective was complete it would turn green in the side bar. Once all objectives were complete the quest rewards the player with a sound effect and XP. I made a video of that build.

Problems with the Objective Tracker

I had used team's prefix to style text and used text formatting codes to style player names in the scoreboard. It was quite messy and immediately clearly an issue when the quest had the same item as part of two objectives.

team modify q101 prefix {"text":"Harvest Wheat "}
team join q1o1 Seeds

So I did a refactor. Instead of using keywords for objectives, I would simply use numbers and a suffix.

team modify q1o1 suffix {"text":". Harvest Wheat Seeds"}
team join q1o1 1

In both cases, I had to remove the incomplete (white) "objective" 1 and then add §a1 to the green team when an objective was complete. This is done in the o##-o##-transition.mcfunction script(s). The scoreboard gets cleared when the quest is "turned in" in the end.mcfunction script.

PoC Complete, Now What?

I added more quests. I even drew some post-it notes with Beetle from the Legend of Zelda showing up in a sky-ship-shop (a portmanteau of his appearances in Wind Waker and Skyward Sword) when he noticed your campfire. I played through a couple of times and I found the pacing to be killed during the Tutorial. So I reworked the order of quests and modified the map. Map changes included things like placing wheat to harvest instead of waiting for some to grow and leaving a sapling in a pot in case the trees didn't drop one. Things I might not have considered if I didn't play through it myself dozens of times checking the quest tracking system. Oh, and "Beetle" was cut because it's a Survival map and not an Adventure map, so having anything come swooping in is a real challenge. So I opted for what other skyblock games do and just have seed island in the distance. Quest Chain

Adding Non-Player Characters

I wanted to add my boys to the game. We spent the summer playing a Hypixel SykBlock Co-op as a family and they loved playing Animal Crossing with mom before that. So Timmy and Tommy Nook we're added to the game! BoatCraft

I set a block at 42 -1 42 and made a shipwreck standing up to serve as a store. Shipwreck Store

I tried having the Villagers as kids but they wouldn't do trades or even trigger the "TalkedToVillager" statistic. So, lore-wise, they have been shipwrecked a while. They have a theme song that plays when you enter the store and colorful (a feature added in patch 1.16 IIRC) title text.

Store Location

I wanted the stores to be static and bigger inside than out and I settled on having warp points. If you step on the welcome mat, you get warped to the store; way up above the clouds where a player would have a hard time finding it. The stores are directly above so there is almost no load time. They are so high in fact you cant see them from the island I built. At first, I had them in the cloud layer but they looked obvious. It's now in a sweet spot where the chunk is loaded but objects are still too far apart to render. I eventually added a function to change the game mode to Adventure mode if you warp to a store so that you cant tear the place apart (from the inside). You are back on Survival if you are warped out.

What to Sell to Continue the Gameplay?

I thought long and hard about what I needed (that they being traders might offer) and what I could see from the farm. I settled on Tim[my] wanting plants/food and Tom[my] wanting blocks/materials. The farm has wheat and oak to offer in return. So Tim gives you a water bucket for wheat and Tom gives you a lava bucket for oak. That solves the aforementioned problem of getting a lava generator. You can also use 10 lava buckets to make an obsidian portal and hop to the Nether (which is currently unrestricted).

A New [Non-]Player Has Entered!

I also wanted my wife to have a presence in the game. She was awesome helping me talk through gameplay and map design. Great feedback I wasn't always ready to hear. We love Studio Ghibli and Zelda. So I eventually came around to using Kiki the witch and styling the Witch Hut's interior like those in Link's Awakening and A Link Between Worlds. While figuring out how to decorate I made a video about placing candles on skulls.

Wait, What's Happening?

I wanted a quest log, like most RPGs, so I can track what the heck is going on and what I need to do next. I looked and it seems you can't update a book. So I have to clear the item and replace it. Since I am using mcfunctions I don't get things like string builders so I had to have multiple copies of the book. Pro tip: create an account on minecraft.tools to save your work.

Is that it?

I have some code for summoning a "Menu Chest" to the player. There is a nice video by Cloud_Wolf on how to do a chest menu. I joined the guy's Discord and he said he plans on doing an updated video with tricks he finds himself using.
I also have some code for particles over your head and some code for an item over your head. This is so a quest marker or shopkeeper... something along those lines. I like to see what is possible and then operate within those parameters.

The End

I wanted to see what I could do by the end of the year. This challenge was fun and motived me to start a Unity project. This project was fun and all and I can overcome the restrictions by joining the modding community but my current employer uses Unity so I am going to take the opportunity to learn that.