2:02pm - Well I didn't get any advice from my readers but I thought about my problem from last time a bunch over the last couple of days and I've decided that everything should be in the World model. So, World will have a list of all the actors in the world, and each actor will be contained by a Tile. It occurs to me now that the reason the original game I was building off of didn't do this is that it wasn't a strict tile based game. So this should work fine.
2:12pm - Hmm... I'm thinking about the TurnController idea I had. It definately encapsulates a gameplay element. Part of the idea of seperating things into MCV is to make the model portable, but the controllers and view could be from anything. Well, I think I'm going to have to break that. First with my MenuController, then with the TurnController. Because while the data can all fit into the model, the gameplay can't. I'm not sure what Quill18 was thinking with that. Ahh well, we're two different developers and I'm making a very different game. ^.^;;
2:31pm - I keep wondering if there should be a TurnController or if that should be part of the WorldController. I guess I need to flesh out the idea for the TurnController more before I go on. The first thing that happens when a scene loads is that the WorldController instantiates the world and all its associated graphics. The MenuController at the same time is building and hiding the menus. After that initial setup phase is done, the first turn begins. Now, does the WorldController manage the turn order itself, or do I have a secondary controller begin digesting inputs and pushing the WorldController around?
Hmm... No, I think the WorldController should do that itself. So, the WorldController registers itself with the InputManager as the last thing it does on its own. Then it starts responding to user input. If the menu button is pressed, then the Menu takes focus, and starts digesting inputs until its closed and it goes back to the world.
So that's that, but there are a few loose ends still.
Besides the menus that are put up on the screen and interact with the player, there's also going to be a heads up display. I'm not sure if that's part of the menu or not. I'm thinking it is, though.
Hmm... It occurs to me that this part in particular will change the most when I jump from this iteration, the small Roguelike game, to The Big Game which I'm making this as a step towards. The reason is because this is a simplification, so there are different stats to track. In this game there's only one weapon and armour, that you improve as you go along.
But anyways, the stats that will be shown on screen are your Name, your HP, your Attack and your Defense. At present I'm not planning any status changes in this version, so there's no need to track poisoned or anything like that. Oh! I forgot hunger. Yeah there'll be a hunger stat too.
So there'll be a distinct "Player" actor assigned somewhere and it'll be their stats that show up on the HUD at all times. I was thinking it might show the stats of whoever is up but then you'd see the monsters stats! XD
Alright so the MenuController has five widgets for player stats that sit at the bottom of the screen. How do they get their data? I could have them have a callback tied into the WorldController so that they update whenever the data in the World model changes, right? I think so. It's a little techy to think about at this stage.
3:57pm - The last important thing I haven't covered is transfering player data between scenes. Normally if you save the game everything gets written to a save file, right? But I don't want to do file saving/loading between every dungeon level or whatever just to keep the player's stats fresh. So I'm thinking I'll make some Unity ScriptableObject classes for storing the player's data while the game is live. They persist between scenes so the data can be kept on hand. I'm not sure if that's part of the Model layer or the Controllers layer though. XD
Alright, if I'm not mistaken that's the whole game in brief. There might be some other systems in play later on but these are the big ones.
I guess it's time to go to HackNPlan again and try to sort my project into tasks.
4:52pm - I'm adding some Utilities to the design. They're not part of the game exactly, they're just tools to work between everything. Like a Dungeon Generator to generate random dungeons, and a Dungeon Builder to take those random dungeons or pregenerated maps and turn them into Worlds.
I think it's about time I took a break though. I've been at it for almost three hours. Though, I've made great progress.
5:50pm - Well gosh that hour went quick. I feel like I barely did anything at all. And yet, now I'm completely off track from what I was working on before.
I've got some top-level plans in my HackNPlan Game Design Model, but I don't feel up to making the individual tasks now. I'd kind've like to go home, actually, but I'm not sure what I'll do there. Maybe Mario Kart? Maybe Zelda BotW? Maybe more Etrian Mystery Dungeon? We'll see...
I definately want to finish Alex's website, but I can do that at home.
Next time I work on my projects I think I'll be able to finish the Design Model and put some tasks in to complete. It's a fluid model so I can keep adding to it as I think of things, too. So that's good.
I'm excited to get back to coding!
2:12pm - Hmm... I'm thinking about the TurnController idea I had. It definately encapsulates a gameplay element. Part of the idea of seperating things into MCV is to make the model portable, but the controllers and view could be from anything. Well, I think I'm going to have to break that. First with my MenuController, then with the TurnController. Because while the data can all fit into the model, the gameplay can't. I'm not sure what Quill18 was thinking with that. Ahh well, we're two different developers and I'm making a very different game. ^.^;;
2:31pm - I keep wondering if there should be a TurnController or if that should be part of the WorldController. I guess I need to flesh out the idea for the TurnController more before I go on. The first thing that happens when a scene loads is that the WorldController instantiates the world and all its associated graphics. The MenuController at the same time is building and hiding the menus. After that initial setup phase is done, the first turn begins. Now, does the WorldController manage the turn order itself, or do I have a secondary controller begin digesting inputs and pushing the WorldController around?
Hmm... No, I think the WorldController should do that itself. So, the WorldController registers itself with the InputManager as the last thing it does on its own. Then it starts responding to user input. If the menu button is pressed, then the Menu takes focus, and starts digesting inputs until its closed and it goes back to the world.
So that's that, but there are a few loose ends still.
Besides the menus that are put up on the screen and interact with the player, there's also going to be a heads up display. I'm not sure if that's part of the menu or not. I'm thinking it is, though.
Hmm... It occurs to me that this part in particular will change the most when I jump from this iteration, the small Roguelike game, to The Big Game which I'm making this as a step towards. The reason is because this is a simplification, so there are different stats to track. In this game there's only one weapon and armour, that you improve as you go along.
But anyways, the stats that will be shown on screen are your Name, your HP, your Attack and your Defense. At present I'm not planning any status changes in this version, so there's no need to track poisoned or anything like that. Oh! I forgot hunger. Yeah there'll be a hunger stat too.
So there'll be a distinct "Player" actor assigned somewhere and it'll be their stats that show up on the HUD at all times. I was thinking it might show the stats of whoever is up but then you'd see the monsters stats! XD
Alright so the MenuController has five widgets for player stats that sit at the bottom of the screen. How do they get their data? I could have them have a callback tied into the WorldController so that they update whenever the data in the World model changes, right? I think so. It's a little techy to think about at this stage.
3:57pm - The last important thing I haven't covered is transfering player data between scenes. Normally if you save the game everything gets written to a save file, right? But I don't want to do file saving/loading between every dungeon level or whatever just to keep the player's stats fresh. So I'm thinking I'll make some Unity ScriptableObject classes for storing the player's data while the game is live. They persist between scenes so the data can be kept on hand. I'm not sure if that's part of the Model layer or the Controllers layer though. XD
Alright, if I'm not mistaken that's the whole game in brief. There might be some other systems in play later on but these are the big ones.
I guess it's time to go to HackNPlan again and try to sort my project into tasks.
4:52pm - I'm adding some Utilities to the design. They're not part of the game exactly, they're just tools to work between everything. Like a Dungeon Generator to generate random dungeons, and a Dungeon Builder to take those random dungeons or pregenerated maps and turn them into Worlds.
I think it's about time I took a break though. I've been at it for almost three hours. Though, I've made great progress.
5:50pm - Well gosh that hour went quick. I feel like I barely did anything at all. And yet, now I'm completely off track from what I was working on before.
I've got some top-level plans in my HackNPlan Game Design Model, but I don't feel up to making the individual tasks now. I'd kind've like to go home, actually, but I'm not sure what I'll do there. Maybe Mario Kart? Maybe Zelda BotW? Maybe more Etrian Mystery Dungeon? We'll see...
I definately want to finish Alex's website, but I can do that at home.
Next time I work on my projects I think I'll be able to finish the Design Model and put some tasks in to complete. It's a fluid model so I can keep adding to it as I think of things, too. So that's good.
I'm excited to get back to coding!