This week, I intended to work on the other enemy type and adding a death system for the player, but instead I added a new enemy type. The enemy type I added is the mite, which spawns in colonies to swarm the player. Their behavior is somewhat intricate. The mite mound spawns mites at a rate of about 1-2 per second when the player is close enough to it or when the player shoots it. It also spawns another mite whenever the player kills a mite. Mites are spawned from one of seven spawn locations on the mound. However, each hill only holds 50 mites. When a mite spawns, if it can see the player, it follows them using Unreal's built in ai movement system. If the mite can't see the player, it rotates around in place to look for them. If a mite spawns in but doesn't move positions within 3 seconds, it goes back into the hill. If a mite is close enough to the player, it deals a small amount of damage that quickly adds up in swarms. The mites die from just a single bullet, and they also despawn after 40 seconds of leaving the hill, to help with performance. To help with performance, I also had to optimize them a lot. I removed everything from the tick event in favor of a timer that releases a pulse about 3 times per second, which is 20+ times faster, depending on the framerate. The only thing that I couldn't do this with is the ai movement because I need that to run every frame, and I don't want to program that myself when the built in Unreal system is so easy.
I also modeled, animated, and textured both the mound and mites myself. The mites were 3d modeled, rendered to flat images, then animated with those images using Unreal's flipbooks. This increased performance and adds to the retro look.
Next week, I plan on doing some of the things I had initially planned on doing this week. I'll make assets for the standard enemy type and replace the skeleton with them. I'll also implement the time loop mechanic, so the player can actually lose instead of being invincible. If I have time, I'll also work on events or puzzles to try to have some gameplay loop.
Total Project Review
Some of the highlights for this project were making the character movement, post processing filter, gargoyle, and mite hill because I think these things all came out pretty well and they are some of the most impactful on the overall feel and atmosphere of the game. By creating this, I got a lot of practice with Unreal beyond what I did in the first independent project in Unreal. I've gotten some practice with scripting custom character movement, shooting, enemies, and other mechanics. I've also gotten a lot of practice with modeling and texturing in Blender. Some things I would do differently if I did this project again are plan on a smaller scale and use more cubegrid objects to make a level whitebox. It is very easy to set your goals too high in game development and be unable to finish them all in time, which is going to happen here. I wasn't expecting to finish most of the level and gameplay mechanics, but progress has been slower than anticipated. Also, the fact that my whitebox cubegrid is only two separate pieces is very annoying. That makes it harder to transition from that whitebox to the final decoration. I should have used a separate object for each area of the level. One thing I would change baout this project for future classes is increasing the amount of time we have to work on it. I think that cutting out a little bit of the board game analysis or game theory material in favor of more time to work in the engine or on this project would be helpful.
0 Comments
This week, I spent most of my time working on modeling the gargoyle for my game. Even though I spent so much time on it, I still think it was worth it because it adds a lot to the atmosphere of the dungeon. It was difficult to make the proportions look right, especially on the face, but by using multiple reference photos, I eventually got it to a state where I was happy enough.
I also did a little bit of work on the enemy ai system, and gave them the ability to damage the player when nearby. Currently, it is still very rudimentary, and it just prints some text on screen that says it attacked the player and gives the updated HP value of the player.
Next week, I plan on focusing mainly on this enemy type. I'd like to draw and animate custom sprites to replace the current skeleton assets and to improve their ai and allow them to kill the player. Making sprites will likely be pretty difficult, because of how many I'll need to make. Each enemy type will need 5 idle animations, 5 movement animations, at least one attack animation, and at least one death animation. It may also be difficult to properly implement the player's death system. I want the entire level to reset upon death of the player, but I also need to ensure that any game settings carry over. I also want the reset to be smooth by making it fade into and out of black instead of just cutting. I don't expect either of these things to be super difficult in Unreal, but I may still encounter some difficulty with them.
This week, the main things I did were add recoil when shooting, make a prototype for event 1, and do some work on enemy ai. Recoil was fairly straightforward to implement with the knowledge I had because, Instead of using an animation, I just rotate the weapon around an axis depending on a recoil variable that increases when firing and decreases when not. The bullet spread also scales with the recoil.
For event 1, I currently only have a box that, when shot, causes another box to disappear and causes the screen to shake as if there is an earthquake, which is what event 1 will be. However, that's most of what there is to event 1. Once I replace the white boxes with finished rock models, that event will be done. To make this event, I had to learn how to make the screen shake, which is something I didn't know how to do before, but turned out to be pretty simple in Unreal.
I also did some work on enemy ai. I improved their ability to see/look for the player, but I also optimized their code so they are no longer running all of it on every single game tick, which got it to a point where I can have 100+ default enemies on screen at once and only lose about 1 frame per second compared to when there are none.
Next week, I still need to model the gargoyle statue that I planned on doing this week, and I also need to keep working on enemy ai and the player's health/respawn system. Modeling the gargoyle will definitely be pretty difficult because it will be humanoid, so any imperfections will stand out a lot more. It might also be hard to texture in a way that looks cohesive but not too flat or bland.
This week, I got quite a few things done. One of the first things I did this week was model and animate some plants. I did this using flat images of plants, which I recolored in Photoshop, and attached to slightly bent planes in Blender. Then I took these into Unreal and animated them using timelines to make them rotate about a point. I added them mainly because the dungeon felt pretty bland without them, and because they allow for some new options for enemy types I could make later down the line.
Another thing I did was change the appearance of the player's attacks by changing their materials to give them brighter glows and adding some particles to the burst attack. I also reworked the burst attack so they work on a cooldown. I also added a light around the player whenever they fire, so that they have increased visibility when far away from the hexagon lights. I still plan on adding particles and recoil whenever the play fires though, and I'm also going to update the green lights on the weapon so they all have purposes and look better.
The other big thing I did this week was begin working on enemies. Currently, this one only has very basic ai, where it just walks towards the player if it can see them. However, I implemented a system for 8-directional billboarded sprites, which will fit in with the retro look of the game. Currently it is using a temporary asset from the internet, but you can still get an idea of what it will be like in this state.
I also did some other things like fixing an issue with the lights that caused some performance problems, adding some settings like player camera sensitivity, and tweaking some other world settings.
Next week, the main things I plan on working on are doing some level scripting, so that the player will actually have a level to explore with a couple of interactable objects/events, continuing work on the enemy ai, and doing some more assert creation. In particular, I want to model a gargoyle, which will be an enemy type that shows up in a couple of places and a decoration in other places. I also want to give the enemy a way to fight back against the player, and a way for the player's health to represented on screen. If I have time for it, I'll also program event one and the walls that it destroys. One problem I'll run into will be modelling the gargoyle and making it look good, because that'll have to be a much more detailed model, so it'll be hard to get looking right, especially since it is humanoid.
This week, I only worked on asset modelling. Mainly, I started making models for the dungeon environments in my game. I wasn't able to do as much as usual for this weekly reflection because this was a two day week for me. However, since spring break has started, I'll have more free time to catch up for the next week. One challenge I faced in making these dungeon assets is that they blend together a lot. This is still a problem that I'm working on, but I plan to use a different but similar texture for the arches and pillars to give the environment a better feeling of depth and texture. Next week, my primary goals will be to model lots more assets for both the dungeon and cave environments, and to keep working on enemy ai. Enemy ai is something I have been meaning to work on for quite a while but haven't gotten around to, but I plan to have a finished prototype of at least one enemy done by the next reflection. One other thing I plan to do by the next week is create a blueprint system that billboards sprites. I will use this for most enemy types and also for some things in the environment such as particle effects, and should hopefully enhance the retro look of the game.
To make this greybox, I replaced most objects from my whitebox, or at least covered them. In areas I haven't greyboxed yet, the default whitebox cubegrid is still visible, however it is not in most areas that I have greyboxed. I also did things like replace the pointy cubegrid triangles I had filling in for stalactites, with actual stalactite models. I selected to model the assets I currently have because making assets that allow me to assemble the structure of the level, such as walls, floors, ceilings, and notable decorations, is currently more important that modelling all of the small details. I'm not done making assets for the level by any means, however, and I will keep making more assets to add to what I currently have. All assets are made by me. Greyboxing affects my design going forward because it allows me to actually see what the game may look like later on. This allows me to make any big changes that I need to right now, when the stakes are low, instead of getting really far into making assets and realizing that they don't fit.
Since the last quarter reflection, we have started actually working on our personal projects. This has meant that I've had to learn how to do things that are a lot more specific to my needs for this project such as dense fog, destructible objects, and a pixelated post processing effect. I've also gotten a lot of practice using Unreal's visual scripting system, and I now feel pretty confident in my ability to use it without needing to refer to the internet or a tutorial all the time. I've enjoyed the increased independence that has come with working on the individual projects, but the it also means that I have to create some structure for myself to stay on pace, which can be difficult. Modelling assets takes a lot more time than expected, so that is something I will need to get more efficient at in the future. By the time the next quarter reflection is due, I hope to improve even more with Unreal, particularly with some of the systems I haven't yet explored such as animation and particles. I will pursue these goals probably mostly using Youtube tutorials on these subjects to learn how to do them and implement them into my project. I also hope to be better at the scripting system as well, especially with the more complex nodes. The artwork I chose for my update show growth because previously I had very little experience with texturing models, which is something I now know how to do. I am also more efficient at creating models from scratch. Overall, I would assess my digital art progress and improvement to be pretty good so far. I feel like I have a decent grasp of how to use Unreal Engine and 3d modeling software.
This week, the primary things I did were making some models for cave walls, floors, and ceilings, and adding a fog effect. For the cave assets, there are currently three different models: a standard square cave floor, a cube shaped cave wall that can be used for edges, and a square shaped rock tile with a patch of mud in it. To make these, I made a plane or cube, subdivided the sides, and slightly randomized the offset of each vertex. Then, I painted on the textures, and darkened and pixelated them in Unreal by editing their materials. The fog is a dark black fog that makes it difficult for the player to see very far. For this, I used the built in Unreal tools for making volumetric fog, but it took a while to adjust settings and find what worked best in this environment. One difficulty I encountered was that the settings for fog are not very intuitive, so I had to play around with a lot of different things before I found something I liked. I did not accomplish as much this week as I had hoped to, so I hope to catch up a bit next week. I had intended to learn some more about how the enemy ai system works in Unreal, so that is something extra I'll have to do next week. Next week, I primarily hope to continue modelling assets, work on enemies, and work on scripting the level out. Scripting the level shouldn't be too difficult because it is very similar to what I did on my individual project a couple of months ago. Doing the AI for the enemies may be more difficult because it is something I still have very little experience with, so I will likely run into problems there. Link to planning document
This week, I primarily focused on making assets for my project. This includes stalactites with three variations, a fence, stone pillars, and making textures for the crates and clay pots that I had previously implemented. One challenge I faced with making these models was making the textures for them, which is something I had very little experience with. Luckily, it isn't all that difficult to do, so it only took me 30 minutes or so to texture each of these models. It is also quite difficult to find textures that look the way you want them to in your game. To solve this, I did a lot of tweaking of the materials inside of Unreal. For example, for the stalactite materials, I divided their brightness to be about one third of the original brightness of the texture. I also began working on learning how to use ai in Unreal Engine to create enemies, but I still don't have very much of a tangible product to show for that. It's something that I'll keep working on in the following weeks. My goal for next week is to continue working on assets, level scripting, and also enemies. I would like to have a mostly complete example of an enemy by the end of next week. It will be difficult for me to learn how to do this to completion, and I will certainly run into challenges in regards to that. I will use tutorials like this one to learn how to make enemy ai, and hopefully solve any problems I run into.
Updated To-Do List The 3d models I have made so far for this game are: stalactites (3 variants), crates, clay pots (2 variants), and the weapon. All of these models serve unique purposes in the game. The destructible things like the pots and crates can be used to conceal secret areas, block the path of enemies, or even contain other objects within them, such as fuel refills. The weapon is the player's means of fighting back against enemies. The stalactites enhance the feeling of the environment, and will be in some areas of the map. The crates were made from cubes where I pulled in each face, then I compounded more boxes diagonally over them using a boolean modifier, and then hollowed them out using a boolean subtraction modifier. The pots were created similarly but starting from a cylinder. The stalactites were also created from cylinders, and I manually adjusted vertices to make them look rough. Additional spikes were created via extrusion. The weapon is the most complex model, and to make it, I started with a box. The tools I used the most to make it were extrusion, subdividing lines and faces, and boolean addition.
|
AuthorI am Oliver Lich, a student at Chapel Hill High School, who is taking the Game Art and Design course. Last year I took the Computer Modeling and Animation course. Some of my hobbies include gaming and cubing. I am a member of the Chapel Hill High school game development club. CategoriesArchives
April 2024
|