[{"data":1,"prerenderedAt":2394},["ShallowReactive",2],{"blog-index":3},[4,71,115,186,288,352,465,516,554,614,726,779,848,952,1006,1054,1088,1165,1215,1262,1311,1342,1385,1415,1444,1482,1512,1550,1605,1677,1708,1749,1788,1839,1880,1913,1956,1990,2022,2058,2117,2181,2228,2251,2302,2360],{"id":5,"title":6,"body":7,"date":61,"description":62,"draft":63,"extension":64,"meta":65,"navigation":66,"path":67,"seo":68,"stem":69,"__hash__":70},"blog\u002Fblog\u002Fnew-catacombs-build.md","New Catacombs Build",{"type":8,"value":9,"toc":57},"minimark",[10,14,17,47,50,54],[11,12,13],"p",{},"Heyo 👋",[11,15,16],{},"I have made some updates to my game Catacombs (which is just what I'm calling it for now 🤷). Those changes are as follows:",[18,19,20,24,38,41,44],"ul",{},[21,22,23],"li",{},"The player's movement speed has increased, including replacing \"rolling\" with a faster \"dashing\"",[21,25,26,27],{},"There are now 3 additional types of enemies:\n",[18,28,29,32,35],{},[21,30,31],{},"Skeleton Archers - shoot arrows",[21,33,34],{},"Yellow Skeleton - lunges at the player from a distance when attacking",[21,36,37],{},"Skeleton Mages - shoot multiple projectile orbs",[21,39,40],{},"Some of the dungeon floors felt cramped, so I expanded the hallways",[21,42,43],{},"Added more \"juice\" to the combat to make it feel better, i.e. adding things like hitstop, screen shake, and sprite-flashing on hits landing",[21,45,46],{},"Enemies now have health bars above their heads",[11,48,49],{},"At this point in time I am focusing entirely on making combat \"feel good\", and I won't lie, it's really hard. It make sense when you think about it: every game you play does the \"basic gameplay loop\" for its respective genre, and on paper they all hit the mark, but the subtleties of the \"game feel\" are what separates a great game from a terrible one. I keep iterating over-and-over again until I feel it \"click\", and it's hard because it's part logic but it's mostly just feeling it out. Like I will come up with an idea, try it, and wow - it sucks! I'm hoping I have an a-ha moment, but I thought for now I might as well get another build up. Click below if you want to give it a try!",[51,52],"project-link",{"slug":53},"catacombs",[11,55,56],{},"—Josh",{"title":58,"searchDepth":59,"depth":59,"links":60},"",2,[],"2026-07-31","I have made some updates to my game Catacombs, and I'm focusing entirely on making combat feel good.",false,"md",{},true,"\u002Fblog\u002Fnew-catacombs-build",{"title":6,"description":62},"blog\u002Fnew-catacombs-build","lp9mFLoE6nWBm6qATG6XjXw3FD4SQhrTwaNwowCUfzo",{"id":72,"title":73,"body":74,"date":108,"description":109,"draft":63,"extension":64,"meta":110,"navigation":66,"path":111,"seo":112,"stem":113,"__hash__":114},"blog\u002Fblog\u002Fcatacombs-and-some-thoughts.md","Catacombs and Some Thoughts",{"type":8,"value":75,"toc":106},[76,79,87,90,93,96,99,101,104],[11,77,78],{},"Should I apologize for the delay this time? How about on the next blog post in 2040? 😁",[11,80,81,82,86],{},"I've been a software engineer in industry for just shy of two years now, and I'm still living in Columbus. I really enjoy what I do and it's been a privilege to be able to work in a career where I get to create things. I am also ",[83,84,85],"em",{},"finally"," in my last semester for my post-bacc in Computer Science at Oregon State University; at the time of this writing, I will be graduating in under a month.",[11,88,89],{},"One of the things I feel every day as a developer is this sense that I have no idea what I'm doing. Maybe that's something for me to sort out with my therapist, or maybe that's just how it is when you work in a field where things constantly change and you have to constantly adapt. I have gotten used to the feeling, so I can't really complain. And as hard as things might be sometimes, it's really cool to take a look back at where you've been to see how far you've come. This is my first time looking at the code for my site in just under two years, and it's really fascinating to look back.",[11,91,92],{},"I don't even know where to start. First, it's crazy to think that I could hand a series of Word documents of these blogposts to Claude and it could make this entire website in one prompt. I am also marvelling at the fact that I kept copying and pasting HTML documents for new blog posts over and over again, and each of my files has a whole slew of unused CSS classes. I'm also chuckling at the memory of how I used to copy and paste my entire project to save a new \"version\"... even though this entire project is in a git repository! I have been using GitHub Pages to host my website, but it never occurred to me that git is also (and primarily) version control.",[11,94,95],{},"But I'm not judging myself, it's just a step on the journey. I look back at this repo with fondness (and I even made this post \"the old fashioned way\" and just copied my latest blog post and changed the colors), and I intend to preserve it. Just because something is old or inefficient or clunky for it's time and place doesn't mean it's wrong. People still find value in old cars and video games amongst other things. And hey, this site still gets the job done, right?",[11,97,98],{},"Anywho, I've made a new 2D game. It is, once again, a dungeon crawler. I don't know why I've returned to this exact concept several times, but it's just the kind of game that speaks to me. I plan to keep working on this one, but this is the \"v1\" so to speak, and I wanted to get a version of it out there. Although it is quite simple, it feels more crisp and clean to me than my past games, and I hope to iterate on it as a fun side project. You can click below to play it now, or find it on the Portfolio tab.",[51,100],{"slug":53},[11,102,103],{},"I do have plans to make a new website, this one using a content-management system and a modern web framework. I want to do some more blogging there in the future. Stay tuned! Or don't, I don't think anyone reads this anyways. No worries, I still find it fun. 🤷",[11,105,56],{},{"title":58,"searchDepth":59,"depth":59,"links":107},[],"2026-05-20","I've been a software engineer in industry for just shy of two years now, and I'm still living in Columbus.",{},"\u002Fblog\u002Fcatacombs-and-some-thoughts",{"title":73,"description":109},"blog\u002Fcatacombs-and-some-thoughts","V5FhxoJiyc9yijOMmx7QZSpLJF8k05a-WNB9ZATnHNM",{"id":116,"title":117,"body":118,"date":179,"description":180,"draft":63,"extension":64,"meta":181,"navigation":66,"path":182,"seo":183,"stem":184,"__hash__":185},"blog\u002Fblog\u002Fchecking-back-in.md","Checking Back In",{"type":8,"value":119,"toc":177},[120,123,134,149,152,161,168,172,175],[11,121,122],{},"Hi Again!",[11,124,125,126,129,130,133],{},"I am back for a record ",[83,127,128],{},"third"," post in a row where I apologize for the delay in time between posts! And this time, I legitimately fell off for several months. I'm hoping to do some more blogging going forward, probably with shorter posts, in general. Hopefully you can take comfort in the fact that even if I'm gone, I'm never ",[83,131,132],{},"permanently"," gone; I'm just out there somewhere, forgetting to take care of my blog!",[11,135,136,137,140,141,148],{},"This time, my absence was do to leaning in hard to software development internship applications and interviews. I had a few bites throughout the spring, and then I was able to land something this May, and I am now working as a software developer intern, which has been really fun so far! It's been really satisfying to finally reach \"industry\" and spend my work days primarily focusing on code. I also have ",[83,138,139],{},"so"," much to learn, and it's taking me some time to get comfortable with the fact that I know so little! But I love to learn and I already feel like I've learned so much (for instance, in my experience, you will learn infinitely more about ",[142,143,147],"a",{"href":144,"rel":145},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGit",[146],"nofollow","git"," in the first few weeks of working on branches and making pull requests than you will just reading about it). I've also gotten to move to Columbus, OH, which is a really cool city! Having lived in the Ann Arbor area for most of my life, I've heard quite a few \"things\" about Columbus, but I have to say I'm really suprised by the town. It's much bigger than I originally thought it was and there's a ton to do.",[11,150,151],{},"So I've been really busy with life - moving, getting settled in, starting a new job. I've not had much time to work on Corridors recently, but I do have plans to pick it up again soon here. I've got a lot of good pieces in place and I feel like I'm approaching a pretty fun first version.",[11,153,154,155,160],{},"Lately, though, I have found some time to start working on a personal web project here and there. I'm taking the tech stack that I'm working with at my new company and trying to make my own app with it, both for fun and as a way to get more comfortable with the tools I learn at work. It's a website that is going to serve simply as a database for my Pokémon cards. At first, I want to make it a simple CRUD app like my ",[142,156,159],{"href":157,"rel":158},"http:\u002F\u002Fspaceacademy.us-east-2.elasticbeanstalk.com\u002F",[146],"Space Academy"," website, but I also want to practice other concepts like dynamic routing and perhaps even authentication and authorization of users. (I can't think of why anyone would want an \"account\" on a website for my card collection, but it could be a good exercise!). I've already got the \"Read\" part of the application going, which you can see in the image below.",[11,162,163],{},[164,165],"img",{"alt":166,"src":167},"The plan is to keep the UI clean and simple and focus on the guts!","\u002Fimages\u002Fpokemon_card_site.PNG",[11,169,170],{},[83,171,166],{},[11,173,174],{},"Hopefully I'll post sooner rather than later going forward. Thanks for your patience and talk to you soon!",[11,176,56],{},{"title":58,"searchDepth":59,"depth":59,"links":178},[],"2024-07-14","I am back for a record third post in a row where I apologize for the delay in time between posts!",{},"\u002Fblog\u002Fchecking-back-in",{"title":117,"description":180},"blog\u002Fchecking-back-in","sZLaW5TeC88ApYXF7M_b2UuhjroJZ4wz3MRryRODsk0",{"id":187,"title":188,"body":189,"date":281,"description":282,"draft":63,"extension":64,"meta":283,"navigation":66,"path":284,"seo":285,"stem":286,"__hash__":287},"blog\u002Fblog\u002Fprogress-report.md","Progress Report",{"type":8,"value":190,"toc":279},[191,194,197,206,212,216,222,226,232,236,239,242,248,251,254,261,264,268,277],[11,192,193],{},"Hello,",[11,195,196],{},"Back again. Sorry, going to apologize once again for the longer-than-planned delay on making a blog post. I can say that I have been hard at work on a lot of things with my game, though, so I am going to use this blog post as a sort of \"state of the union\" for Corridors (or rather, \"state of the game\"). 😉",[11,198,199,200,205],{},"To put it simply, the main two things I've done in the last two months is 1.) created a much larger level and 2.) refined how my enemies attack the player. On the first front, my plan after implementing most of the functionality for the core gameplay loop was always to then create a much larger level to be the template for how the game's levels would work going forward. While I've not really done large-scale level design for my game projects before, it is something that I really like to do and I feel like it comes naturally to me (related but unrelated, I really like Minecraft and I have built some pretty big maps before, check out my ",[142,201,204],{"href":202,"rel":203},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=-GtXke-Eym0",[146],"castle"," in my portfolio!). I'm enjoying the freedom of crafting my own world, and I've made some pretty good progress on a large map that I'm casually calling \"the purple level\" for now. Still a work in progress, but I have some images below that show off some of the rooms of this larger level:",[11,207,208],{},[164,209],{"alt":210,"src":211},"This is the main room for combat in the level (so far).","\u002Fimages\u002Fpurple_level_1.png",[11,213,214],{},[83,215,210],{},[11,217,218],{},[164,219],{"alt":220,"src":221},"This room is right below the room in the previous image. I plan to add some greenery everywhere!","\u002Fimages\u002Fpurple_level_2.png",[11,223,224],{},[83,225,220],{},[11,227,228],{},[164,229],{"alt":230,"src":231},"A glance at the main hallway that will connect all the other rooms of the level.","\u002Fimages\u002Fpurple_level_3.png",[11,233,234],{},[83,235,230],{},[11,237,238],{},"Creating these larger rooms was the impetus for the second thing I needed to address, which was the current logic of enemy behavior. Once I put 10+ enemies in one giant room, it made the flaws of my overly-simplistic AI behavior more apparent. I decided it was time to overhaul how this works, and basically the key change is that instead of enemies picking one cover spot and only coming out to chase the player if an \"inactivation timer\" expired, enemies are now picking certain moments to chase the player or move up to closer cover.",[11,240,241],{},"There is no more \"inactivation timer\"; instead, there is a timer running that activates every few seconds and prompts a handful of enemies to move to a new state. That state is either a closer cover or directly charging the player. See the graphic below for more details:",[11,243,244],{},[164,245],{"alt":246,"src":247},"Enemy behavior graphic","\u002Fimages\u002Fenemy_behavior_graphic.PNG",[11,249,250],{},"To further enhance the combat experience, I actually added another facet to healing, which is the use of a \"stim pack\" that the player can administer to themselves to instantly heal. The player's health does tick up after a period of time without being attacked, but I really liked adding this dimension to healing because it enables and encourages the player to take the enemies head-on and have more control over how their health is managed (you can see how this stim feature works in the YouTube video at the bottom of this post).",[11,252,253],{},"These couple of changes have made the combat feel a lot better. It feels a lot less \"robotic\", so to speak; since the timer activates only certain enemies and they then each do something different, it just feels like the enemies each have a mind of their own and there's more \"going on\" on the battlefield.",[11,255,256,257,260],{},"So now, I'm really at a spot where ",[83,258,259],{},"enough is enough",". I have spent over a year creating the pieces, fine-tuning things, working on combat dynamics, etc. I've eaten my vegetables, it's time for dessert: I want to take my purple level and make it really huge, crazy, and chaotic and finally put these pieces to work. I will definitely think more on the little things again in the near future, but now I feel good enough about the bones of this game that I want to have some fun. So, hopefully my next blog post will have some fireworks to show off.",[11,262,263],{},"If you want to see a quick demo of how this new level and the refined mechanics look, please check out the YouTube video below:",[265,266],"youtube",{"id":267},"zWHhRKgHDBM",[11,269,270,271,276],{},"One other thing I might as well mention - one day I was frozen to my couch with my MacBook on my lap so I decided to see if I could make tic-tac-toe by myself without looking up any tutorials or videos (I was 99% sure I could and would have been really disappointed at this point if I couldn't lol). I was able to do it (hooray), and for the heck of it I put it on my itch.io site. So if you want to see that, ",[142,272,275],{"href":273,"rel":274},"https:\u002F\u002Fjadedquail.itch.io\u002Ftic-tac-toe",[146],"click this link",".",[11,278,56],{},{"title":58,"searchDepth":59,"depth":59,"links":280},[],"2024-03-28","Back again. Sorry, going to apologize once again for the longer-than-planned delay on making a blog post.",{},"\u002Fblog\u002Fprogress-report",{"title":188,"description":282},"blog\u002Fprogress-report","uRe1oPsH4hCxBxh7NJN-cxEmfFfVIb0sMkdgAElUUMU",{"id":289,"title":290,"body":291,"date":345,"description":346,"draft":63,"extension":64,"meta":347,"navigation":66,"path":348,"seo":349,"stem":350,"__hash__":351},"blog\u002Fblog\u002Ffirst-release-of-corridors.md","First Release of Corridors",{"type":8,"value":292,"toc":343},[293,296,304,307,316,319,341],[11,294,295],{},"Hi again,",[11,297,298,299,303],{},"I'm still here! Sorry for the long delay between blog posts, but I have been really locked in trying to get a first build of my game up on the site for people to play. I'm happy to say we're finally there! You can check out the game either at the top of the ",[142,300,302],{"href":301},"\u002Fportfolio","Portfolio"," page, or by clicking the link at the bottom of this post. I currently have a build working for Windows, and I hope to have a build for Mac working soon. I decided to name the game Corridors. I had originally thought of naming the game \"Climb\", with the thought that the player would keep climping up a spire as they battled enemies, but I ended up going the other direction, and the player moves through different hallways before dropping down into the next one.",[11,305,306],{},"I spent a lot of time the last month debugging and working on the UI so that the game could feel like a full, playable experience. There's definitely still a few bugs, but the build seems to be very stable. While I'm happy to have something released, I definitely plan to keep working on this game. Now that the overall structure of the game appears to be in place, I want to make the levels that generate (or the \"corridors\" 😉) be larger and more complex. I think that will help me \"find the fun\" in the core gameplay.",[11,308,309,310,315],{},"I also plan on playing some FPS games in my free time to study how other games handle enemy AI. Right now, the enemies in my game follow a fairly simple formula: when activated, they run towards a designated cover spot, and if the player is \"hiding\" from the enemies and there's no shooting, then some enemies will get up and charge the player. I want to \"feel out\" how other games do it, and specifically, I think I'm going to start with some oldies to see how they did it back in the day (this is my excuse to revisit one of my favorite games from childhood, ",[142,311,314],{"href":312,"rel":313},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJames_Bond_007:_Nightfire",[146],"007: Nightfire",").",[11,317,318],{},"Anyways, please click the link below to download Corridors from itch.io site. Hope you like it, and thank you for reading!",[320,321,322,328,338],"blockquote",{},[11,323,324],{},[325,326,327],"strong",{},"Corridors — 3D Game",[11,329,330],{},[142,331,334],{"href":332,"rel":333},"https:\u002F\u002Fjadedquail.itch.io\u002Fcorridors",[146],[164,335],{"alt":336,"src":337},"Corridors","\u002Fimages\u002Fcorridors_icon.PNG",[11,339,340],{},"The first build of my 3D first-person shooter. Battle your way through infinitely-generating levels!",[11,342,56],{},{"title":58,"searchDepth":59,"depth":59,"links":344},[],"2024-02-01","I'm still here! Sorry for the long delay between blog posts, but I have been really locked in trying to get a first build of my game up on the site for people to play.",{},"\u002Fblog\u002Ffirst-release-of-corridors",{"title":290,"description":346},"blog\u002Ffirst-release-of-corridors","8TAINeb_GBg3mRtRWqXoz3wfWmG-jSi6_0C9rm4TWUw",{"id":353,"title":354,"body":355,"date":458,"description":459,"draft":63,"extension":64,"meta":460,"navigation":66,"path":461,"seo":462,"stem":463,"__hash__":464},"blog\u002Fblog\u002Fpickups-and-a-web-app.md","Pickups and a Web App",{"type":8,"value":356,"toc":456},[357,360,394,397,402,406,410,413,433,451,454],[11,358,359],{},"Happy Winter!",[11,361,362,363,367,368,371,372,375,376,379,380,382,383,385,386,389,390,393],{},"I have been busy plugging away at some things with my game, but a lot of the changes are not quite as glamorous as things I have shown in previous posts. For one, I've spent a lot of time working on bug fixes and refactoring code. In particular, I previously had two scripts called ",[364,365,366],"code",{},"PlayerMovement"," and ",[364,369,370],{},"PlayerController",", respectively, that I did not feel were named appropriately relative to the functionality they provided. Since the latter script actually handled more of the functionality related to the weapon itself, I renamed that script to ",[364,373,374],{},"GunManager"," and additionally moved some code from the ",[364,377,378],{},"Gun"," script to this newly named script, i.e. those functions that made more sense to be part of the \"central management\" of weapons. I then moved some code from the former ",[364,381,370],{}," to ",[364,384,366],{}," and then renamed ",[83,387,388],{},"that"," script to ",[364,391,392],{},"PlayerManager",", since this script now handles more aspects of the player's control than just its movement. Written out here, it sounds like a bunch of semantics, but for the organization of my scripts, it makes a lot more sense and it means I have to spend less time wondering where the heck some function or another is in my code!",[11,395,396],{},"To work towards making my game a complete and playable experience, I've added a few pickups, such as ammo drops and health packs. I'm also getting prepped to let the player carry two weapons, so I revisted how weapon pickups look and feel. To make weapon pickups feel better, I made a quick \"pickup\" animation where the player lifts up a weapon after grabbing it from a gun rack. It looks pretty simple, but it gave me quite the headache to implement (I discovered I was not consistent with what I was keyframing across different animations, which caused jerkiness and inconsistencies in transitions between animations. Luckily, that's all been resolved!). Check out the gifs below to see quick little snippets of these additions (in order: weapon pickup animation, ammo pickup, health pickup).",[398,399],"clip",{"alt":400,"src-path":401},"Weapon pickup","\u002Fimages\u002Fweapon-pickup.mp4",[398,403],{"alt":404,"src-path":405},"Ammo pickup","\u002Fimages\u002Fammo-pickup.mp4",[398,407],{"alt":408,"src-path":409},"Health pickup","\u002Fimages\u002Fhealth-pickup.mp4",[11,411,412],{},"In addition to working on my game, I also just finished up my winter semester at Oregon State and I have deployed my group's semester-long project to the web, which you can check out by clicking the link below (or the equivalent link located on the Portfolio page). This was a databases class, so our project involved creating a SQL database and connecting it to a web application that can perform CRUD operations on the database. I really enjoyed this class because instead of just going through a long list of content and giving us videos to hold our hand, the professor instead made us put our learning into action by working on one giant project all semester, which I find very effective for learning (the phrase \"use it or lose it\" describes my learning style to a tee).",[11,414,415,416,421,422,427,428,432],{},"Throughout the semester we were hosting our web app on one of Oregon State's student machines, which ended as soon as the class ended. I took this as a good opportunity to learn about web hosting through ",[142,417,420],{"href":418,"rel":419},"https:\u002F\u002Faws.amazon.com\u002F",[146],"Amazon Web Services",", so that I could put our group's database and web application on the public web. Specifically, I used Amazon's ",[142,423,426],{"href":424,"rel":425},"https:\u002F\u002Faws.amazon.com\u002Frds\u002F",[146],"Relational Database Service (RDS)"," to host the database and then used their ",[142,429,431],{"href":424,"rel":430},[146],"Elastic Beanstalk"," service to orchestrate several other services for web hosting (EC2, S3, autoscaling, etc). It took me a bit to get my bearings, but I was able to deploy the site properly. Please feel free to check it out and test adding, deleting, and updating entries to the various tables!",[320,434,435,440,448],{},[11,436,437],{},[325,438,439],{},"Space Academy — Website",[11,441,442],{},[142,443,445],{"href":157,"rel":444},[146],[164,446],{"alt":159,"src":447},"\u002Fimages\u002Fspaceacademy.png",[11,449,450],{},"REST API made with Express and Node.js, connected to a MySQL database. Deployed via Elastic Beanstalk on Amazon Web Services.",[11,452,453],{},"Have a Happy New Year! I can't wait to work on some more cool projects in the new year and blog about them. Thank you for reading!",[11,455,56],{},{"title":58,"searchDepth":59,"depth":59,"links":457},[],"2023-12-21","I have been busy plugging away at some things with my game, but a lot of the changes are not quite as glamorous as things I have shown in previous posts.",{},"\u002Fblog\u002Fpickups-and-a-web-app",{"title":354,"description":459},"blog\u002Fpickups-and-a-web-app","8vWBJousDCbSmQ3K5Sly0KLHnKnmZ-qIcyqOPe7zgPw",{"id":466,"title":467,"body":468,"date":509,"description":510,"draft":63,"extension":64,"meta":511,"navigation":66,"path":512,"seo":513,"stem":514,"__hash__":515},"blog\u002Fblog\u002Fgenerating-levels.md","Generating Levels",{"type":8,"value":469,"toc":507},[470,473,476,479,483,492,498,502,505],[11,471,472],{},"Hello Again,",[11,474,475],{},"I am back again for another post! I have been making steady progress in my game, and I think I am nearly done with the overall structure of the gameplay experience. The main thing I have been focusing on since my last post is turning the game into an infinite, randomly-generated dungeon where stages called \"segments\" will continue to spawn until the player dies. The objective of the game is to survive for as many segments as possible.",[11,477,478],{},"I was able to successfully create a system whereby segments continuously generate. The game starts by spawning a starter segment, which has a hole in the floor where the player \"drops\" into the next segment. At that hole is a node with a script on it that calls for a random segment to be generated such that the entrance point of this new segment lines up with the exit point of the previous segment. Likewise, once the player gets to the end of this \"new\" segment, there is another hole to drop into, and that hole spawns another segment. So, as the player moves along and defeats all the enemies in each segment, a new one will keep spawning. This has worked pretty effectively so far; I'm able to save on resources by not having tons of empty segments lingering, and at the same time, the player doesn't see segments spawning in and out because the changeover happens when they are dropping through a tunnel.",[398,480],{"alt":481,"caption":481,"src-path":482},"As the player drops into the next segment, another segment spawns. A maximum of 3 segments can exist at a time, so older segments are despawned.","\u002Fimages\u002Flevel_generation.mp4",[11,484,485,486,491],{},"The most challenging part of generating each segment was re-baking the navmesh at runtime. The navmesh, which is the designated area in which an agent can move (in my case, the enemies), typically gets baked once before runtime and does not change. However, since in my game different segments are being created and destroyed as the player moves along, there is a need for a navmesh that dynamically re-bakes in order to ensure enemies have full mobility over the changing terrain. Base Unity itself does not have a mechanism for this, but luckily there is an experimental package for Unity called ",[142,487,490],{"href":488,"rel":489},"https:\u002F\u002Fdocs.unity3d.com\u002FPackages\u002Fcom.unity.ai.navigation@1.1\u002Fmanual\u002Findex.html",[146],"AI Navigation"," that does allow you to call for a navmesh re-bake from a script. It was challenging to work through some bugs, but I now have the game successfully re-baking the navmesh as soon as the player falls through a tunnel to transition from one segment to the next.",[11,493,494],{},[164,495],{"alt":496,"src":497},"As soon as a player transitions to a new segment, the navmesh is re-baked (navmesh seen here in light blue).","\u002Fimages\u002Fdynamic_nav.png",[11,499,500],{},[83,501,496],{},[11,503,504],{},"Now that level-generation is under control, I want to make a bunch of more segments for the player to fight enemies on (I've got the building blocks, now it's time to make some levels!). I am very excited for this part because I get to see it all come together. My plan is to get those building blocks going and ensure that the right menus and mechanics are in place for the game to actually \"work\", make a few more weapons perhaps, and then we're going to wrap it up there. Thanks for reading as always!",[11,506,56],{},{"title":58,"searchDepth":59,"depth":59,"links":508},[],"2023-11-05","I am back again for another post! I have been making steady progress in my game, and I think I am nearly done with the overall structure of the gameplay experience.",{},"\u002Fblog\u002Fgenerating-levels",{"title":467,"description":510},"blog\u002Fgenerating-levels","UjcF2gI0s683hjVcS3rQx_3Zr1yH7NWrZcbMGxpPUx8",{"id":517,"title":518,"body":519,"date":547,"description":548,"draft":63,"extension":64,"meta":549,"navigation":66,"path":550,"seo":551,"stem":552,"__hash__":553},"blog\u002Fblog\u002Ftaking-shape.md","Taking Shape",{"type":8,"value":520,"toc":545},[521,524,531,534,537,540,543],[11,522,523],{},"Howdy,",[11,525,526,527,530],{},"I have finally returned to the blog! Although I have not blogged as much as I had originally intended to, I ",[83,528,529],{},"have"," been working a lot in the background. I've spent a lot of time the last month or two playing around with concepts and mechanics to see what felt best, and I think I finally have the vision of what I want this project to be (and I feel like knowing me, as soon as I say this I'm going to change directions again in the next blog post 🤷).",[11,532,533],{},"Using some of the mechanics I talked about in other posts, I now have created a simple stage that has two \"rooms\" of enemies. I think that the combat is simple but fluid, and I want to build around this and actually complete this thing. My hope is that I can get random rooms to generate at the end of the previous room, so it creates a long hallway of different subsets of enemies to fight.",[11,535,536],{},"I added a lot of mechanics since the last blog post, but just to highlight a few: The player can now both \"knife\" enemies in a melee attack and throw knives at enemies from a distance. Only a certain number of enemies can fire at the same time, so that way there's not a million overlapping gun noises. I have added multiple different pitches for gun sounds, also for the purpose of presenting audio overlap. I made \"taking cover\" less of a random experience; enemies used to just pick a random cover or cover within an \"optimal band\", but it felt better to just have enemies move to set covers instead.",[11,538,539],{},"I think in terms of mechanics, I'm satisfied for now. I want to put this thing together and actually have a full (but reasonably-sized) game that you can download and play. If there are any tweaks to be made, I'll come back and do those later. Check out a little demo of what I have so far in the video below!",[265,541],{"id":542},"lBKJIcRhq1k",[11,544,56],{},{"title":58,"searchDepth":59,"depth":59,"links":546},[],"2023-09-22","I have finally returned to the blog! Although I have not blogged as much as I had originally intended to, I have been working a lot in the background.",{},"\u002Fblog\u002Ftaking-shape",{"title":518,"description":548},"blog\u002Ftaking-shape","uPIXJjcR2KqKplOazlggoEsJmjBZyQOQICEHWRoETgU",{"id":555,"title":556,"body":557,"date":607,"description":608,"draft":63,"extension":64,"meta":609,"navigation":66,"path":610,"seo":611,"stem":612,"__hash__":613},"blog\u002Fblog\u002Ftaking-cover.md","Taking Cover",{"type":8,"value":558,"toc":605},[559,562,565,568,571,577,581,584,587,590,596,600,603],[11,560,561],{},"Hi there,",[11,563,564],{},"Sooooo I’ve pivoted again! I decided that while I love designing maps – and I feel like I have learned a lot through building the map I mentioned in my last post – I think it’s more important for me to focus on developing a strong core gameplay mechanic. When I was playtesting my game on the large map, I felt like I really didn’t have a plan for how I want the game to feel; at that time, I just had a pack of enemies all run towards the player and bunch up right in front of him and unload on him. I want to lock down what the actual gameplay feels like, and for that reason I wanted to focus more on how gunplay and interactions look, and then work on things like a map later.",[11,566,567],{},"I’ve implemented quite a few things to achieve this end since my last post. First of all, I wanted something a little more exciting than a mob of enemies right in the player’s face, so I created a “cover” system. The way it works is that there are several cover objects that are kept track of by my GameManager script, and when an enemy is “activated” – i.e., the player gets too close to the enemy, or the player shoots the enemy – then the enemy runs to cover.",[11,569,570],{},"The GameManager script has a function which returns the best cover for the enemy to run to, and it determines this by considering a few things, such as which covers are already taken, and which covers are behind the player and wouldn’t make sense for the enemy to run to. The cover spots that get the most consideration are the ones in what I call the “optimal band”, meaning they are at a certain distance that is both not too close and not too far from the player, which I’ve illustrated below here:",[11,572,573],{},[164,574],{"alt":575,"src":576},"Enemies will prioritize finding cover in the \"optimal band\" distance range from the player.","\u002Fimages\u002Foptimal_band.PNG",[11,578,579],{},[83,580,575],{},[11,582,583],{},"I’m still toying with the best way to make use of this cover mechanic. I’ve already made it such that if the player gets too close to the enemy, it will leave its cover and attack the player, but I also want enemies to switch cover positions in an organic way as well.",[11,585,586],{},"With cover becoming a more important element of my game, something else I had to think about was an issue with how enemies were aiming at the player. When in a combat state, the enemy shoots a raycast towards the player and will only shoot at the player if the raycast is actually hitting him; thus, if the raycast hits a wall or some other cover, the enemy will not fire its weapon. However, the raycast only detects one specific location on the player, usually the player’s center; what if part of the player is exposed to the enemy but the raycast is still detecting a wall? The enemy should shoot at the exposed part of the player that it should see, but with this setup described here, the enemy will not fire its weapon.",[11,588,589],{},"The solution for this was actually to shoot out multiple raycasts, with each one veering out a little bit from the center raycast. If the “central” raycast hits a wall, we then check the “supplementary” raycasts to see if they are detecting the player; and if they detect the player, then the enemy adjusts its aim to follow that raycast instead. This makes it so the player can’t cheese the game and lean very slightly out of cover so they can shoot the enemy, but the enemy can’t shoot them.",[11,591,592],{},[164,593],{"alt":594,"src":595},"The enemy shoots multiple raycasts, all close to each other; the enables the enemy to adjust its aim.","\u002Fimages\u002Fsupplementary_raycasts.PNG",[11,597,598],{},[83,599,594],{},[11,601,602],{},"I think that I have a lot of great pieces in place at the moment. I want to put these things all together and have them feel good before I move forward with creating levels or anything of the like; I think it’s most important to perfect the core of the game first, and then add from there. It’s taken me a bit to see that, but I think I’m getting a lot closer now!",[11,604,56],{},{"title":58,"searchDepth":59,"depth":59,"links":606},[],"2023-08-18","Sooooo I’ve pivoted again! I decided that while I love designing maps – and I feel like I have learned a lot through building the map I mentioned in my last post – I think it’s more important for me to focus on…",{},"\u002Fblog\u002Ftaking-cover",{"title":556,"description":608},"blog\u002Ftaking-cover","4gKwSwmiG2DzbCBvk-M3yp3qV-pbmeLaupJxpcdp6rc",{"id":615,"title":616,"body":617,"date":719,"description":720,"draft":63,"extension":64,"meta":721,"navigation":66,"path":722,"seo":723,"stem":724,"__hash__":725},"blog\u002Fblog\u002Fflying-off-the-staircase.md","Flying Off the Staircase",{"type":8,"value":618,"toc":717},[619,622,631,634,640,644,657,666,669,702,705,708,711,713],[11,620,621],{},"Hello again!",[11,623,624,625,630],{},"As promised, I’m now going to revisit the FPS game and go over some of the progress I’ve made there. As I said in a previous post, I’ve decided to abandon the pre-made “desert” map that I had been playing with, as it doesn’t really fit with what I want to focus on with this game. Instead, I’ve turned my attention to Unity’s ",[142,626,629],{"href":627,"rel":628},"https:\u002F\u002Funity.com\u002Ffeatures\u002Fprobuilder",[146],"ProBuilder"," design editor to build out a map.",[11,632,633],{},"I’ve been pretty busy doing that; you can see in the screenshot below the map I’ve been making. It’s pretty basic, but I want to spend more of my time focusing on creating a core gameplay loop and polishing the mechanics of the game, and I think a simple map such as this one will enable me to do so.",[11,635,636],{},[164,637],{"alt":638,"src":639},"I plan on giving this walls and a glass ceiling, sort of like a stadium.","\u002Fimages\u002Flevel.png",[11,641,642],{},[83,643,638],{},[11,645,646,647,650,651,656],{},"After building some stairs and ramps, I had an issue that I needed to figure out. My current movement system is based on user input adding ",[83,648,649],{},"forces"," to the player to get him to move; as a result of that, when the player was going up ramps, he would end up flying off the top once the end of the ramp\u002Fstaircase was reached. This was not ideal for ramps, and very unrealistic for stairs! ( ",[142,652,655],{"href":653,"rel":654},"https:\u002F\u002Fwww.reddit.com\u002Fr\u002FUnity3D\u002Fcomments\u002Fp7nq93\u002Fhow_do_i_keep_player_on_ground_when_running_up\u002F",[146],"This post"," from reddit shows the exact same issue I’m talking about).",[11,658,659,660,665],{},"The solution to this involved a couple of things. For one, while on a slope, the player’s “forward” force was going in the same direction as the ramp’s slope, via the ",[142,661,664],{"href":662,"rel":663},"https:\u002F\u002Fdocs.unity3d.com\u002FScriptReference\u002FVector3.ProjectOnPlane.html",[146],"ProjectOnPlane()"," method of Unity’s Vector3 struct. This was still not preventing the player from flying off the top of the ramp, because we’re adding forces, and they don’t magically go away when the slope of the surface the player is on changes.",[11,667,668],{},"What did fix the issue, though, was forcing the player to have no upward velocity (i.e. a “y” value) unless the player is on a slope or jumping. Obviously if a player is deliberately moving up a slope or is choosing to jump, there needs to be some upward velocity allowed; but aside from that, there’s no other scenario where we’d want the player to have upward momentum. So, by adding the following at the end of our Update() method:",[670,671,675],"pre",{"className":672,"code":673,"language":674,"meta":58,"style":58},"language-csharp shiki shiki-themes github-light","if (!OnSlope() && !initiatingJump && rb.velocity.y > 0f)\n{\n   rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z);\n}\n","csharp",[364,676,677,685,690,696],{"__ignoreMap":58},[678,679,682],"span",{"class":680,"line":681},"line",1,[678,683,684],{},"if (!OnSlope() && !initiatingJump && rb.velocity.y > 0f)\n",[678,686,687],{"class":680,"line":59},[678,688,689],{},"{\n",[678,691,693],{"class":680,"line":692},3,[678,694,695],{},"   rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z);\n",[678,697,699],{"class":680,"line":698},4,[678,700,701],{},"}\n",[11,703,704],{},"We were able to correct the player’s velocity to eliminate upward movement in cases where we didn’t want it, such as the moment where the player has moved off a ramp and back onto a flat surface. So, no more flying off of stairs. Perhaps if I run fast enough up my own staircase I can fly off the top and then I’ll change this back to reflect this new perspective on physics, but for now, I think this fix works nicely.",[11,706,707],{},"Aside from that, I’ve laid out some of my enemies and I’m seeing how the game feels when the player is shooting his way through the map. See the video below for what that looks like! A crucial next step is coming up with a way to make my enemy AI more fun to fight. I don’t want them bunching up too much with each other, and I want my AI to have a little more complexity than just charging straight at the player. So, I have some research to do!",[265,709],{"id":710},"UtbU5sK2jl0",[11,712,56],{},[714,715,716],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":58,"searchDepth":59,"depth":59,"links":718},[],"2023-07-28","As promised, I’m now going to revisit the FPS game and go over some of the progress I’ve made there.",{},"\u002Fblog\u002Fflying-off-the-staircase",{"title":616,"description":720},"blog\u002Fflying-off-the-staircase","tBRCldkv7fVkW2jmr8yScg9wf1oVv7NbpO-iINUqUPg",{"id":727,"title":728,"body":729,"date":772,"description":773,"draft":63,"extension":64,"meta":774,"navigation":66,"path":775,"seo":776,"stem":777,"__hash__":778},"blog\u002Fblog\u002Fgmtk-game-jam-2023.md","GMTK Game Jam 2023",{"type":8,"value":730,"toc":770},[731,734,743,746,753,762,765,768],[11,732,733],{},"Hello!",[11,735,736,737,742],{},"This weekend I participated in ",[142,738,741],{"href":739,"rel":740},"https:\u002F\u002Fitch.io\u002Fjam\u002Fgmtk-2023",[146],"GMTK's 2023 Game Jam",", which was an absolute blast. This is the third game jam I have been to, but the first one I just sorta hung out and talked to people and the second one I only assisted my team with some minor level-design stuff; this was the first game jam where I put my head down and made something from scratch, all by myself. I didn't have the bandwidth this weekend to put in the maximum amount of time (it's a little different when it starts while you're still at work and you're not physically present at the game jam), but I still managed to put in 17 hours in the span of two days making a game (or rather, it ended up being a little demo).",[11,744,745],{},"The theme for this year's game jam was \"Roles Reversed\", which you could interpret however you'd like. I had a few thoughts in my head at first - a princess rescuing a knight, a comedy game where horses ride people (which I'm still kinda into) - but I decided to keep it simple and go with a 2D platformer, which I have actually never made before. My thought was to make a platformer game where the player shoots at enemies, but then a timer would be running and when it finishes counting down, suddenly the game world changed and the enemies are the ones with the guns, and they try to shoot you. The player could then build-up points or \"mana\" or something the better you do dodging enemies in the \"reversed\" world, and then you can use those earnings to have more success when the gun is back in the player's hands.",[11,747,748,749,752],{},"As is tradition for me, I bit off more than I could chew in my head and I had to reel it in and make something much smaller (I am also way too neurotic and detail-oriented to \"go for bulk\" in a game jam). So my game, which I call Reverse Rabbit based on the theme and the main character, is more of a demo for some of the mechanics that I would like to include in this theoretical game. I ",[83,750,751],{},"do"," plan on making a more fleshed out version of this game eventually, so stay tuned! I think that's the power of a game jam, is that it forces you to do something in a short time frame so you can get your creative juices flowing, and you can always take what you learned and did and expand on it.",[11,754,755,756,761],{},"I have my build for this game jam posted here on my site (though I am cheating, I actually added the sound effects after time was up, so this version posted on my site here has a little more pizzazz). The art for this game comes from Kenney's ",[142,757,760],{"href":758,"rel":759},"https:\u002F\u002Fkenney.nl\u002Fassets\u002Fpixel-line-platformer",[146],"Pixel Line Platformer"," tileset, which looks very nice and was easy to use. You can go to the \"Portfolio\" tab of this website or click the link below in this blog post to play the game:",[51,763],{"slug":764},"reverse-rabbit",[11,766,767],{},"It's been a bit since my last blog post, and I've made a ton of progress on my FPS game (built a whole stage). I also have some more technical notes from what I learned during this game jam. I'm going to save both of these for some later blog posts, and I plan on posting more frequently again here. Until next time!",[11,769,56],{},{"title":58,"searchDepth":59,"depth":59,"links":771},[],"2023-07-09","This weekend I participated in GMTK's 2023 Game Jam, which was an absolute blast. This is the third game jam I have been to, but the first one I just sorta hung out and talked to people and the second one I only…",{},"\u002Fblog\u002Fgmtk-game-jam-2023",{"title":728,"description":773},"blog\u002Fgmtk-game-jam-2023","8iKs3CWLLZNj_Jebrgs4mmYMb1HJktvCerTXVnN6gLo",{"id":780,"title":781,"body":782,"date":841,"description":842,"draft":63,"extension":64,"meta":843,"navigation":66,"path":844,"seo":845,"stem":846,"__hash__":847},"blog\u002Fblog\u002Fplans-for-the-summer.md","Plans for the Summer",{"type":8,"value":783,"toc":839},[784,786,789,792,813,817,821,824,827,834,837],[11,785,733],{},[11,787,788],{},"I’ve finished up my class for the semester, and I now have some extra time this summer to dig into some more game development. I’m going to use this blog post as a way to organize my thoughts on what the plan is going forward for me.",[11,790,791],{},"First off, to report on what I’ve been working on the last couple of weeks: One thing I was starting to not like the feel of in my game was the movement system, specifically the jumping. I really disliked how the player could switch directions midair at full velocity; it felt very unnatural, and while jumping around this desert map, it was actually difficult to control the player to land on smaller platforms. My movement system was done by completely changing the player’s velocity on any input, and I decided I needed to learn more about a force-based system.",[11,793,794,795,800,801,806,807,812],{},"I found a really great tutorial series online by a new YouTuber I hadn’t before checked out named ",[142,796,799],{"href":797,"rel":798},"https:\u002F\u002Fwww.youtube.com\u002F@davegamedevelopment",[146],"Dave \u002F GameDevelopment",". He has a pretty effective ",[142,802,805],{"href":803,"rel":804},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=f473C43s8nE",[146],"first person movement"," tutorial that I followed and implemented into my game. Specifically, he moves his player using ",[142,808,811],{"href":809,"rel":810},"https:\u002F\u002Fdocs.unity3d.com\u002FScriptReference\u002FRigidbody.AddForce.html",[146],"Rigidbody.AddForce","; this means that when you switch directions (midair or otherwise), you’re player doesn’t just change velocity to the other direction on a dime, but instead slowly switches directions as the force impacts the velocity of the player. It feels much more organic. See below for a “before and after” of what movement looks like in my game with this implementation.",[398,814],{"alt":815,"caption":815,"src-path":816},"The player switches movement from left to right instantly.","\u002Fimages\u002Fvel-jump.mp4",[398,818],{"alt":819,"caption":819,"src-path":820},"The player gradually moves from left to right as a new force is applied.","\u002Fimages\u002Fforce-jump.mp4",[11,822,823],{},"Honestly, I was so intrigued by Dave’s movement system that I went down a rabbit hole and started following several of his tutorials to learn more about how he moves his player controller. I love the way he organizes his code and I found myself watching his tutorials on jumping, running, sliding, and wall running. So while I don’t have much more to report on in my own game, I really think I learned a ton since my last post!",[11,825,826],{},"Going forward, I’ve decided that I don’t really want to pursue this “desert map” any further; I think it was a good exercise in lighting and adjusting my assets for a map, but it doesn’t feel optimized for what I’d like to create, which is a fast, fluid shooter. I plan on leaning more heavily into the movement systems that I’ve been learning about; while I am going to implement a lot of what Dave’s channel has to offer, I am also going to push myself to build upon what I’ve learned about adding forces to Rigidbodies to implement my movement systems, too.",[11,828,829,830,833],{},"I also think this is a good opportunity for me to learn a bit of level design. I’ve been looking at features like Unity’s ",[142,831,629],{"href":627,"rel":832},[146],", and I’d like to design some prototype levels for me to play around with, i.e. place my enemy AI on some basic maps and see how the gameplay feels.",[11,835,836],{},"I’m going to keep my sights set on these goals for now, and then going forward I can focus more on putting together a more full experience with some polish. For now, I’m feeling great about what I’ve learned about physics and movement in Unity, and I can’t wait to put it into action.",[11,838,56],{},{"title":58,"searchDepth":59,"depth":59,"links":840},[],"2023-06-16","I’ve finished up my class for the semester, and I now have some extra time this summer to dig into some more game development.",{},"\u002Fblog\u002Fplans-for-the-summer",{"title":781,"description":842},"blog\u002Fplans-for-the-summer","LD6HjUILl1QHVcQCDteKGRmn9CBgYozMgNjPTv8_wjE",{"id":849,"title":850,"body":851,"date":945,"description":946,"draft":63,"extension":64,"meta":947,"navigation":66,"path":948,"seo":949,"stem":950,"__hash__":951},"blog\u002Fblog\u002Fplaying-with-a-map.md","Playing with a Map",{"type":8,"value":852,"toc":943},[853,856,865,868,877,880,886,889,892,901,904,907,922,925,929,933,936,939,941],[11,854,855],{},"Hi There,",[11,857,858,859,864],{},"We’re finally cooking with gas! Now that I have a bunch of core pieces of my game setup, I’ve moved on to putting together a map. I first wanted to see what would happen once I moved my player, enemies, and other key components (such as my audio manager and main canvas) to a new scene; whenever the environment changes, you learn a lot about what settings need to change. I downloaded a desert-themed terrain and town pack (by ",[142,860,863],{"href":861,"rel":862},"https:\u002F\u002Fassetstore.unity.com\u002Fpackages\u002F3d\u002Fenvironments\u002Fdesert-town-environment-low-poly-194870",[146],"Halberstram Art","), and luckily it already had a demo scene that I could use as my testing grounds. I placed my player and enemies in the environment, and after doing some minor tweaking and re-baking the nav mesh, everything was up and running pretty smoothly. Nice!",[11,866,867],{},"I will say that having an actual town to run around in is exposing some flaws in my movement system for the player. I don’t like how the player can change directions in midair, and I want to make his jump feel a bit more realistic. I also am finding that my game sometimes messes up on calculating whether or not the player should have a second jump. I plan on modifying this movement system soon, so that movement feels little less clunky and simplistic.",[11,869,870,871,876],{},"There was some other progress I made on this new map (one of which was lighting; this is seriously the best tutorial I have ever seen on basic lighting in a Unity scene: ",[142,872,875],{"href":873,"rel":874},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=uwYf1yMPuvk",[146],"Unity 2020 Tutorial - Lighting And Post-Processing Low Poly Scene","), but I want to highlight what I thought was the most interesting thing I learned with moving to this new map.",[11,878,879],{},"This map is a lot larger than what I had been working on in my demo scene, so when I re-baked the nav mesh, there were more obstacles that had to be considered. Here’s a peek at what the nav mesh looks like in the new scene. Note that you can see the player on top of a roof:",[11,881,882],{},[164,883],{"alt":884,"src":885},"Navmesh scene","\u002Fimages\u002Fnavmesh_scene.png",[11,887,888],{},"Since the nav mesh is more complex, it sometimes takes the nav mesh agent more time to calculate a path to its target. If the target (which is the player) is reachable, it’s not an issue, but if the player is in an unreachable location – such as on the roof of a building – then the nav mesh agent takes a longer amount of time to go through a bunch of possibilities before moving closer towards the player.",[11,890,891],{},"Normally, I’ve been setting the destination of the nav mesh agent with this code:",[670,893,895],{"className":672,"code":894,"language":674,"meta":58,"style":58},"navMeshAgent.destination = player.transform.position;\n",[364,896,897],{"__ignoreMap":58},[678,898,899],{"class":680,"line":681},[678,900,894],{},[11,902,903],{},"But this is an asynchronous call, so the nav mesh agent will not move until it can calculate what its destination should be. So, when I was calling this every frame (which in general is a bad idea, not very efficient to update your nav mesh agent’s so frequently, and it’s unnecessary), I was finding that the nav mesh agent was literally just paralyzed because it couldn’t calculate a path before the next frame rolled around, and then it had to start over. When I tried only calling every second, the nav mesh agent started to move again, but it would stop every time it needed to calculate its destination again, which resulted in the agent stuttering as it moved.",[11,905,906],{},"To resolve this, I had to instead use this code:",[670,908,910],{"className":672,"code":909,"language":674,"meta":58,"style":58},"NavMesh.CalculatePath(navMeshAgent.transform.position, player.transform.position, NavMesh.AllAreas, path);\nnavMeshAgent.SetPath(path);\n",[364,911,912,917],{"__ignoreMap":58},[678,913,914],{"class":680,"line":681},[678,915,916],{},"NavMesh.CalculatePath(navMeshAgent.transform.position, player.transform.position, NavMesh.AllAreas, path);\n",[678,918,919],{"class":680,"line":59},[678,920,921],{},"navMeshAgent.SetPath(path);\n",[11,923,924],{},"The call to CalculatePath() is synchronous, and it calculates a route for the nav mesh agent while it’s still moving. The agent will keep moving on its path, and only change paths once the calculation is complete, so it will move fluidly without pausing or stuttering. You can see the difference between the two below:",[398,926],{"alt":927,"caption":927,"src-path":928},"Nav mesh agent stutters while calculating path.","\u002Fimages\u002Fnma_stutter.mp4",[398,930],{"alt":931,"caption":931,"src-path":932},"Nav mesh agent moves fluidly, calculates path while moving.","\u002Fimages\u002Fnma_working.mp4",[11,934,935],{},"The one concern to think about going forward is whether the CalculatePath() calls will cause frame rate issues. I plan on loading this map up with a ton of enemy AI in the future to see what happens, so that will be telling!",[11,937,938],{},"Stay tuned for more updates!",[11,940,56],{},[714,942,716],{},{"title":58,"searchDepth":59,"depth":59,"links":944},[],"2023-05-26","We’re finally cooking with gas! Now that I have a bunch of core pieces of my game setup, I’ve moved on to putting together a map.",{},"\u002Fblog\u002Fplaying-with-a-map",{"title":850,"description":946},"blog\u002Fplaying-with-a-map","C7UQe7qDwZgWLxNhmOR1N3T3tCVuU9081crQMsjC2m0",{"id":953,"title":954,"body":955,"date":999,"description":1000,"draft":63,"extension":64,"meta":1001,"navigation":66,"path":1002,"seo":1003,"stem":1004,"__hash__":1005},"blog\u002Fblog\u002Fpistol-animations-and-more-weapon-sounds.md","Pistol Animations and More Weapon Sounds",{"type":8,"value":956,"toc":997},[957,959,962,977,983,986,989,992,995],[11,958,193],{},[11,960,961],{},"The last couple of weeks have been busy for me, but I still found some time to work on my FPS. I have a few essential pieces that I wanted to finish up before I move on to my next phase here, which would be finally putting everything together on a playable level. I think at that point, I’ll finally be able to start tweaking things and creating a “core gameplay loop” that feels fun.",[11,963,964,965,970,971,976],{},"One of the big things I focused on last week was modifying the arm asset I have been using for the player so that it fits the pistol better (the arm asset I am using is from ",[142,966,969],{"href":967,"rel":968},"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLyBYG1JGBcd009lc1ZfX9ZN5oVUW7AFVy",[146],"TheKiwiCoder's Enemy AI series","). To do that, I had to open up the .fbx file in ",[142,972,975],{"href":973,"rel":974},"https:\u002F\u002Fwww.blender.org\u002F",[146],"Blender"," and re-educate myself on how to model (it’s been a sec!). I eventually re-familiarized myself with edges, vertices, and faces, and I was able to modify the arm asset so that I could make the fingers curl and fit around the handle of the pistol better. I also had to add an index finger to the hand so it could be placed in front of the pistol’s trigger.",[11,978,979],{},[164,980],{"alt":981,"src":982},"Curled arm","\u002Fimages\u002Fcurled_arm.png",[11,984,985],{},"From there, I attached this modified right arm and a left arm to the pistol, and created animations running, lowering the weapon, raising the weapon, and reloading, same as the other weapons. I’m pretty satisfied with how the arms look on the pistol, and I’m glad I went through the effort to customize the right hand.",[11,987,988],{},"Aside from the pistol animations, I made a few smaller additions as well. I implemented some more weapon noises, including a “dry fire” sound effect that plays when you fire a weapon that has no bullet in the chamber. I also added more weapons to the enemies, who were previously only using the M4 weapon. I modified the relevant scripts so that they now detect which weapon is active on the enemy and then use the correct assets relative to that weapon, such as the proper raycast point, muzzle flash, and offset coordinates for how the weapon sits on the enemy’s back and hands. This makes it easy for me to just activate whichever weapon I want the particular enemy to be using in the hierarchy, and then the game does the rest.",[265,990],{"id":991},"BzU6BklEGn8",[11,993,994],{},"I’m pretty excited, because now it’s time to put a level together! I’m going to find a cool pack of polygonal terrain and assets to build a level with, and start setting up enemies that will patrol the area for my player to get into firefights with. I want to put all the ingredients in the stew and see how it tastes, and go from there 😊",[11,996,56],{},{"title":58,"searchDepth":59,"depth":59,"links":998},[],"2023-05-06","The last couple of weeks have been busy for me, but I still found some time to work on my FPS.",{},"\u002Fblog\u002Fpistol-animations-and-more-weapon-sounds",{"title":954,"description":1000},"blog\u002Fpistol-animations-and-more-weapon-sounds","BVjNVkdakvdSs_YobR5d0EjA4CVEBxXpm11dp0xwgSA",{"id":1007,"title":1008,"body":1009,"date":1047,"description":1048,"draft":63,"extension":64,"meta":1049,"navigation":66,"path":1050,"seo":1051,"stem":1052,"__hash__":1053},"blog\u002Fblog\u002Farms.md","Arms!",{"type":8,"value":1010,"toc":1045},[1011,1014,1017,1026,1033,1037,1040,1043],[11,1012,1013],{},"Happy Tuesday,",[11,1015,1016],{},"The day has finally arrived: The player in my FPS game is no longer possessing his gun with non-existent hands, and instead I now have two arms that hold the weapons and animate along with them! It’s definitely added some life to the game, and I feel like I’m getting closer to being ready to set up some levels for the player to conquer.",[11,1018,1019,1020,1025],{},"At first, I wanted to try creating a fully animating character model for the player instead of just a pair of arms. I experimented with a platform called ",[142,1021,1024],{"href":1022,"rel":1023},"https:\u002F\u002Fwww.mixamo.com\u002F#\u002F",[146],"Mixamo",", which has tons of character models and animations that are all very plug-and-play, so you can integrate them all with each other pretty easily (and you can implement the animations with other 3D character models outside of Mixamo, too). While I do think I will be making use of Mixamo in future projects, I decided against a full character model for my player, mainly because I thought it would be difficult to integrate these animations with the weapons which I have already animated separately. The only way you could “see” this character model anyway would be by seeing the player’s shadow, so the benefit to me seemed pretty minimal given the amount of time and energy it would have taken at this juncture to implement the full model.",[11,1027,1028,1029,1032],{},"So instead, I used the same character model I had been using for the enemy, and I opened up its .fbx file in ",[142,1030,975],{"href":973,"rel":1031},[146]," and ripped off its arms! (Or rather, I ripped the body off the arms). I created two models, one for the left and right arms respectively, so I could more easily manipulate the two as separate objects. In Unity, I actually didn’t have just one pair of arms, but instead a pair of arms for each separate weapon. By making the arms a child object of the weapon, it would cause them to inherit a lot of the other things occurring on the weapon, i.e. when the weapon experiences recoil, the arms would “kick up” as the weapon kicks up. In short, it makes more sense to pair the arms with the weapon instead of the player’s body, since the arms really follow what the weapon does.",[398,1034],{"alt":1035,"src-path":1036},"Arms","\u002Fimages\u002Farms.mp4",[11,1038,1039],{},"From there, it was pretty simple to animate the arms to follow along with a weapon’s animations. When the weapon would be lowered, raised, reloaded, etc., I moved the arms to new positions on the same keyframes where the weapon moved; this created simple animations that look great for this low-poly world. One weapon that I still have to work on is the pistol, since it’s smaller than a rifle and the current arm models have hands that are too clunky to make holding a pistol look good. I’m going to experiment in Blender with curling the fingers on the arms models, so that way the pair of arms attached to the pistol will be easier to work with and will look more realistic.",[11,1041,1042],{},"From there, I think it’s time to put some levels together and see how it feels, and adjust as I go to make the game feel more fun! As always, thanks for stopping by.",[11,1044,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1046},[],"2023-04-18","The day has finally arrived: The player in my FPS game is no longer possessing his gun with non-existent hands, and instead I now have two arms that hold the weapons and animate along with them!",{},"\u002Fblog\u002Farms",{"title":1008,"description":1048},"blog\u002Farms","V1-e7dUoO0DO4Nwg2GTal5MaIBLHmHPSsidi7kQ5XsE",{"id":1055,"title":1056,"body":1057,"date":1081,"description":1082,"draft":63,"extension":64,"meta":1083,"navigation":66,"path":1084,"seo":1085,"stem":1086,"__hash__":1087},"blog\u002Fblog\u002Fenemy-patrolling.md","Enemy Patrolling",{"type":8,"value":1058,"toc":1079},[1059,1061,1064,1067,1070,1074,1077],[11,1060,855],{},[11,1062,1063],{},"Been a busy month for sure, but I’ve still found some time to work on my FPS game. I’ve created a new state for the AI, which I’ve called “patrolling”; in this state, the enemy AI will walk a path consisting of several nodes, then loop back around to the first node after completing the path. This state has replaced the “idle” state that I was working with previously, and now I can have my AI walking around on custom paths instead of standing still like statues.",[11,1065,1066],{},"With this state, I’ve also made a tweak where any time you shoot the enemies, they’ll come out of the “patrolling” state and immediately attack the player, whereas before the enemy would only attack the player if the player was within a certain range (regardless of whether the player shot the enemy). I haven’t implemented it yet, but I also plan on adding in functionality whereby an enemy will notice other enemies attacking a player, and join in themselves; that way, it won’t appear like enemies are ignoring gunfights happening right in front of them.",[11,1068,1069],{},"The other big thing I worked on this month was adding a sniper rifle to the game. Like with the other weapons, I had to size and position the gun in the player’s hands and then create animations for reloading, lowering, and raising the weapon, but I had to also make some adjustments and add new features for the sniper. I had to play with values to make sure that the sniper had more “kick” when firing, and make sure that it was single fire with a limited fire rate. I also had to make sure that the zoom when aiming down the sights was more intense, too. When zooming in, once the camera’s “field of view” value passed a certain threshold, I made the gun itself disappear and a scope overlay appeared on the screen instead, thus imitating an eye staring down a sniper scope. I’m very pleased with the results; the sniper feels very fluid and fun.",[398,1071],{"alt":1072,"src-path":1073},"Snipe","\u002Fimages\u002Fsnipe.mp4",[11,1075,1076],{},"So only a few changes this month, but I’m looking to dig into a lot more for the next month to come. I want to move forward with setting up a level for this FPS game versus just the sandbox I have right now; I also have plans to make a MERN website soon, and I’ve been feeling the itch again to make a small 2D game again, maybe with my own artwork. Here’s to hoping that I have a productive spring 😊",[11,1078,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1080},[],"2023-03-27","Been a busy month for sure, but I’ve still found some time to work on my FPS game. I’ve created a new state for the AI, which I’ve called “patrolling”; in this state, the enemy AI will walk a path consisting of several…",{},"\u002Fblog\u002Fenemy-patrolling",{"title":1056,"description":1082},"blog\u002Fenemy-patrolling","llv9z10LmwHfcEu6ofjCoJ1HTjYnZk1tNyTeF49e-2I",{"id":1089,"title":1090,"body":1091,"date":1158,"description":1159,"draft":63,"extension":64,"meta":1160,"navigation":66,"path":1161,"seo":1162,"stem":1163,"__hash__":1164},"blog\u002Fblog\u002Fenums-interfaces-and-state-machines.md","Enums, Interfaces, and State Machines",{"type":8,"value":1092,"toc":1156},[1093,1096,1105,1124,1127,1130,1139,1154],[11,1094,1095],{},"Happy Sunday!",[11,1097,1098,1099,1104],{},"I’ve been putting some more work into my enemy AI in my game. Once again, I’m largely following the work of ",[142,1100,1103],{"href":1101,"rel":1102},"https:\u002F\u002Fwww.youtube.com\u002F@TheKiwiCoder",[146],"The Kiwi Coder"," (who has become one of my favorite Unity content creators, especially since he’s personally responded to a few questions I’ve had!); I’m making a lot of tweaks along the way and I’ve now gotten to a spot where I’m implementing my own states into the state machine that Kiwi implemented in his project.",[11,1106,1107,1112,1113,367,1118,1123],{},[142,1108,1111],{"href":1109,"rel":1110},"https:\u002F\u002Fdocs.unity3d.com\u002FManual\u002FStateMachineBasics.html",[146],"State machines"," are very useful, and I’m actually pretty impressed with myself for not utilizing them earlier. I really like how with Kiwi’s implementation, you can very easily “Enter” a new state, and the main state machine script itself handles the exiting of the current state and other little transition items. This state machine build has also helped me become more familiar with both ",[142,1114,1117],{"href":1115,"rel":1116},"https:\u002F\u002Flearn.unity.com\u002Ftutorial\u002Fenumerations",[146],"enumerations",[142,1119,1122],{"href":1120,"rel":1121},"https:\u002F\u002Flearn.unity.com\u002Ftutorial\u002Finterfaces",[146],"interfaces"," in C#. The different states all inherit from the same interface to ensure that all the proper functionality exists across each state, and to change states, you simply provide the state’s enum value to the state machine object, which has already stored the states that correspond to each enum value (I will admit, I have in the past been guilty of just using a string in place of an enumeration, and I can see how this is a much cleaner option).",[11,1125,1126],{},"In my game right now, I’ve implemented an “idle” and “attack” state by following along with Kiwi. In addition to that, I’ve also created a “return” state, where if the player gets too far away from the enemy that is chasing him, the enemy will give up and run back to the initial position where he was idling. Part of these state transitions is also an animation for equipping and unequipping a weapon. So when the enemy enters the attack state, he pulls the weapon off his back and into his hand, and when the enemy leaves the attack state, he puts the weapon out of his hand and back onto his back (see video below). Organizing when all of these events should be triggered is made easy thanks to the state machine. Thanks Kiwi!",[265,1128],{"id":1129},"LTWrtBCNDsM",[11,1131,1132,1133,1138],{},"I try to do at least two blog posts a month, so seeing that I’m a little behind here, I’m going to make another post soon here to write about what I’ve learned about ",[142,1134,1137],{"href":1135,"rel":1136},"https:\u002F\u002Fdocs.unity3d.com\u002FScriptReference\u002FVector3.Slerp.html",[146],"slerping"," lately – I use this to make sure that the enemy doesn’t just “snap” when he rotates towards the player after pulling out his weapon, but instead more smoothly looks at him. Still a long way to go, but I think I’m making great strides in learning about 3D mechanics.",[11,1140,1141,1142,1147,1148,1153],{},"Also, I’m in a web development course right now at Oregon State! Before this, I wasn’t super educated on the full stack of web development. For instance, this site you’re on right now (as of 2\u002F26\u002F2023) is entirely static, built only using HTML and CSS. In the past, I’ve built very basic backends using ",[142,1143,1146],{"href":1144,"rel":1145},"https:\u002F\u002Fflask.palletsprojects.com\u002Fen\u002F2.2.x\u002F",[146],"Flask"," in Python, but I didn’t know much about web frameworks in general. We’ve been using ",[142,1149,1152],{"href":1150,"rel":1151},"https:\u002F\u002Freactjs.org\u002F",[146],"React.js"," in this class, and it’s definitely sparked my curiosity for web development. I’m hoping to convert this website into a React app one day, and maybe overhaul the design and implement some cool features. Hopefully soon! Thanks for reading, as always.",[11,1155,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1157},[],"2023-02-26","I’ve been putting some more work into my enemy AI in my game. Once again, I’m largely following the work of The Kiwi Coder (who has become one of my favorite Unity content creators, especially since he’s personally…",{},"\u002Fblog\u002Fenums-interfaces-and-state-machines",{"title":1090,"description":1159},"blog\u002Fenums-interfaces-and-state-machines","TREXWtgcIWh7n49hjN9ngisSFGD_Q50wMM8ojfetRec",{"id":1166,"title":1167,"body":1168,"date":1208,"description":1209,"draft":63,"extension":64,"meta":1210,"navigation":66,"path":1211,"seo":1212,"stem":1213,"__hash__":1214},"blog\u002Fblog\u002Fgun-sounds-and-enemy-ai.md","Gun Sounds and Enemy AI",{"type":8,"value":1169,"toc":1206},[1170,1172,1181,1198,1201,1204],[11,1171,193],{},[11,1173,1174,1175,1180],{},"Since my last post, I have worked on two things: giving the weapons sound, and laying the groundwork to have functioning and responsive enemies. The gun sounds were actually pretty easy to implement (though I think I did something quite basic). I found a ",[142,1176,1179],{"href":1177,"rel":1178},"https:\u002F\u002Fassetstore.unity.com\u002Fpackages\u002Faudio\u002Fsound-fx\u002Fweapons\u002Fgun-sound-pack-59420",[146],"weapon sounds pack"," on the Unity Asset Store, and from there it was pretty easy to have these sounds trigger when the player fires their gun, reloads their weapon, etc.",[11,1182,1183,1184,1188,1189,1193,1194,1197],{},"The harder project of the two was to get started on the enemy AI. This is an area that I'm not very familiar with; even in my 2D games, my enemies move and interract with the player in a pretty basic way. One of my favorite tutorialists on YouTube for Unity games is ",[142,1185,1187],{"href":1101,"rel":1186},[146],"TheKiwiCoder"," who I think has content that is great for \"bridging the gap\" between being a beginner and an advanced game developer. Specifically, I'm very heavily following his ",[142,1190,1192],{"href":967,"rel":1191},[146],"AI series"," , which is helping teach me about AI states, state machines, NavMeshes and agents, advanced character models and rigs, and more. I had to stop more than a couple of times along the way to learn about new concepts before I could continue his tutorials - things such as enums, interfaces, null conditional operators, scriptable objects, structs - but overall it's been very productive for me and I'm learning an absolute ",[83,1195,1196],{},"ton"," about scripting. Specifically, I have a better handle on interfaces and state machines in Unity then I've ever had before. If you sometimes feel frustrated with tutorials being too hard and explaining too little, definitely check TheKiwiCoder out, he's one of the best.",[11,1199,1200],{},"See the below embedded video for a look at what one of my weapons sounds like, and some of the basic AI activity that I've implemented. I absolutely love the ragdolling of the enemy!",[265,1202],{"id":1203},"tKECMcLP5Uo",[11,1205,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1207},[],"2023-01-29","Since my last post, I have worked on two things: giving the weapons sound, and laying the groundwork to have functioning and responsive enemies.",{},"\u002Fblog\u002Fgun-sounds-and-enemy-ai",{"title":1167,"description":1209},"blog\u002Fgun-sounds-and-enemy-ai","z4GCgKLnRSntpd6zo8kmKPYh4q7jtOPlqAcMxg8s7Ws",{"id":1216,"title":1217,"body":1218,"date":1255,"description":1256,"draft":63,"extension":64,"meta":1257,"navigation":66,"path":1258,"seo":1259,"stem":1260,"__hash__":1261},"blog\u002Fblog\u002Fweapon-handling-101.md","Weapon Handling 101",{"type":8,"value":1219,"toc":1253},[1220,1223,1226,1235,1244,1248,1251],[11,1221,1222],{},"Happy New Year,",[11,1224,1225],{},"Spent most of my time over the last few weeks improving how the gun handles for the player. I created animations for what the gun does when the player is reloading or running. At first I was worried that I wasn't going to be able to make compelling animations, but I found that it's pretty easy to get a simple reload or \"weapon bob\" animation created, and I'm pretty pleased with the results.",[11,1227,1228,1229,1234],{},"The running and reloading are done with animations, but I decided that for the player \"lowering his gun\" when approaching a wall, I would instead lerp the rotation of the weapon. I used a ",[142,1230,1233],{"href":1231,"rel":1232},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=bax-xjlfMPs",[146],"great tutorial by BuffaLou"," as a starting point, and I was able to make the adjustments needed to fit my vision for this game. Between these different animations and mechanisms, it took me a good bit of thinking to figure out how to properly trigger each one - i.e. handling things like \"you shouldn't be able to shoot while near a wall\" and \"you should cancel your reload if you start running during the animation\". I'm pretty happy with where it's at now, and I think I've laid solid groundwork to move on to other parts of the game.",[11,1236,1237,1238,1243],{},"Speaking of other parts, I have a shootable NPC in my game, which I got from the ",[142,1239,1242],{"href":1240,"rel":1241},"https:\u002F\u002Fassetstore.unity.com\u002Fpackages\u002F3d\u002Fcharacters\u002Fhumanoids\u002Flow-poly-animated-people-156748",[146],"Low Poly Animated People pack by polyperfect"," . As you can see below, you can now shoot and kill Santa in my video game. I plan on building on this affront to Christmas by playing around with the other characters in this pack, and hopefully will get some basic enemies and levels designed soon.",[398,1245],{"alt":1246,"src-path":1247},"Handling","\u002Fimages\u002Fhandling.mp4",[11,1249,1250],{},"Stay tuned!",[11,1252,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1254},[],"2023-01-14","Spent most of my time over the last few weeks improving how the gun handles for the player.",{},"\u002Fblog\u002Fweapon-handling-101",{"title":1217,"description":1256},"blog\u002Fweapon-handling-101","yMUdZGeA67CxbFMg5chCnRDq9iqRXWUUNEATwEjpUDc",{"id":1263,"title":1264,"body":1265,"date":1304,"description":1305,"draft":63,"extension":64,"meta":1306,"navigation":66,"path":1307,"seo":1308,"stem":1309,"__hash__":1310},"blog\u002Fblog\u002Frecoil-and-particle-effects.md","Recoil and Particle Effects",{"type":8,"value":1266,"toc":1302},[1267,1270,1279,1282,1286,1293,1297,1300],[11,1268,1269],{},"Hi Again,",[11,1271,1272,1273,1278],{},"The number one thing I've learned in the last month is that I really don't know much about 3D game development! I feel like I've been spending a lot of time in the ",[142,1274,1277],{"href":1275,"rel":1276},"https:\u002F\u002Fcommons.wikimedia.org\u002Fwiki\u002FFile:Dunning%E2%80%93Kruger_Effect_01.svg",[146],"\"Valley of Despair\" of the Dunning-Kruger Effect chart"," . It was a little disappointing at first, and made me feel like I hadn't learned much in my last few years of game development. But that's not true, and I snapped out of it pretty quickly.",[11,1280,1281],{},"With my FPS game, I've been focusing on making the gun feel good. I've managed to implement aiming down sights, recoil, and particle effects (sparks) for when bullets hit a target. I've also added bullet holes that appear on hit surfaces, and hitmarkers for when bullets hit targets.",[398,1283],{"alt":1284,"src-path":1285},"Recoil","\u002Fimages\u002Frecoil.mp4",[11,1287,1288,1289,1292],{},"Recoil was the hardest thing for me to get right, and I learned a lot about game physics in doing so. Right now, the \"up and down\" motion of the player's view is controlled by the mouse, which moves the camera up and down. The \"left and right\" motion is also controlled by the mouse, but that actually moves the ",[83,1290,1291],{},"player"," itself versus just the camera. For recoil, I had to add a force that factors in to this up\u002Fdown and left\u002Fright movement; so the mouse controls where the player looks, but the firing weapon also pushes the camera up a little more and the player left and right a little more, which creates a recoil effect. Additionally, I have the gun itself move backwards slightly when the weapon is fired, and then it is immediately pulled back to its local position relative to the player, thus creating a \"back and forth\" movement of the weapon.",[398,1294],{"alt":1295,"src-path":1296},"Hitmarker","\u002Fimages\u002Fhitmarker.mp4",[11,1298,1299],{},"Learned a lot, but have a lot more to go!",[11,1301,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1303},[],"2022-12-29","The number one thing I've learned in the last month is that I really don't know much about 3D game development!",{},"\u002Fblog\u002Frecoil-and-particle-effects",{"title":1264,"description":1305},"blog\u002Frecoil-and-particle-effects","dqs2zw1MuACRuF1ga5M2GXYp2HmZLyU0qOsZmttg26g",{"id":1312,"title":1313,"body":1314,"date":1335,"description":1336,"draft":63,"extension":64,"meta":1337,"navigation":66,"path":1338,"seo":1339,"stem":1340,"__hash__":1341},"blog\u002Fblog\u002Fstarting-on-my-fps.md","Starting on my FPS",{"type":8,"value":1315,"toc":1333},[1316,1318,1321,1324,1327,1331],[11,1317,193],{},[11,1319,1320],{},"Sorry for such a long delay in posts! I've not had as much time in the last month for a few reasons, such as preparing for a final exam, holidays, and my second go-around with Covid-19. But, with a lot of that stuff behind me, I have some more time to work on this FPS game.",[11,1322,1323],{},"Honestly, I am definitely realizing that I am a lot more comfortable with 2D development than I am with 3D development. As I've been getting started here with getting a character moving, I'm truly starting to come to terms with just how involved 3D game physics are (and how subtle changes can make a huge difference). While I still have lots to learn, I was able to play with the gravity for my character so that it feels a little more natural, i.e the player will \"plummet\" faster at the bottom of their jump's arc.",[11,1325,1326],{},"I found a few great asset packs to work with, too (it still never ceases to amaze me how many cheap or free assets exist out there to play with). Right now I want to get some basics down for the player, such as a gun that fires properly and feels like it has a little life to it, and then I will try to detail and polish those areas. For now, though, I definitely feel like I've picked a project that is pretty exciting for me and offers a lot for me to learn.",[398,1328],{"alt":1329,"src-path":1330},"Fps hopping","\u002Fimages\u002Ffps_hopping.mp4",[11,1332,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1334},[],"2022-12-05","Sorry for such a long delay in posts! I've not had as much time in the last month for a few reasons, such as preparing for a final exam, holidays, and my second go-around with Covid-19.",{},"\u002Fblog\u002Fstarting-on-my-fps",{"title":1313,"description":1336},"blog\u002Fstarting-on-my-fps","IF1crUpa_03l7dKkxt-UFaH_Tn8svcwxt3-jAsEBAEM",{"id":1343,"title":1344,"body":1345,"date":1378,"description":1379,"draft":63,"extension":64,"meta":1380,"navigation":66,"path":1381,"seo":1382,"stem":1383,"__hash__":1384},"blog\u002Fblog\u002Flearning-fps-skills.md","Learning FPS Skills",{"type":8,"value":1346,"toc":1376},[1347,1350,1365,1369,1372,1374],[11,1348,1349],{},"Hello Again!",[11,1351,1352,1353,1358,1359,1364],{},"I've been spending the last couple of weeks doing another one of James Doyle's ",[142,1354,1357],{"href":1355,"rel":1356},"https:\u002F\u002Fwww.udemy.com\u002Fcourse\u002Funityfpsgame\u002F",[146],"incredible tutorial series"," in preparation for creating an FPS game (Also credit to ",[142,1360,1363],{"href":1361,"rel":1362},"https:\u002F\u002Fkenney.nl\u002Fassets",[146],"Kenney"," for use of his SciFi pack in this tutorial series!). See below for a GIF from my \"following along\" of James' tutorial:",[398,1366],{"alt":1367,"src-path":1368},"Fps","\u002Fimages\u002Ffps.mp4",[11,1370,1371],{},"I definitely think it's time I focus a little more on some 3D development, as I want to strengthen my skills and portfolio in this area. I've always really loved the first-person shooter genre (played more than a couple hundred hours of Call of Duty growing up), and so that's where I'm going to focus my efforts first. My objective with the FPS game I'm going to make is to create something with a lot of polish - I want the game to feel smooth, fluid, and satisfying. I'm thinking I'm also going to create a game where the player feels fast and free, i.e. a lot of boosts, jumps, and other similar mechanics.",[11,1373,1250],{},[11,1375,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1377},[],"2022-11-05","I've been spending the last couple of weeks doing another one of James Doyle's incredible tutorial series in preparation for creating an FPS game (Also credit to Kenney for use of his SciFi pack in this tutorial series!).",{},"\u002Fblog\u002Flearning-fps-skills",{"title":1344,"description":1379},"blog\u002Flearning-fps-skills","oXOIMdQZAb1JPbRz1UlvZ7LLMq3Vw9odvFpKkIaVkIU",{"id":1386,"title":1387,"body":1388,"date":1408,"description":1409,"draft":63,"extension":64,"meta":1410,"navigation":66,"path":1411,"seo":1412,"stem":1413,"__hash__":1414},"blog\u002Fblog\u002Ffishing-village-is-complete.md","Fishing Village is Complete!",{"type":8,"value":1389,"toc":1406},[1390,1392,1395,1398,1401,1404],[11,1391,733],{},[11,1393,1394],{},"Very happy to say that I am finished with my fishing game, which is called Fishing Village. The game is as the title advertises, it's a village in which you fish. Have a ball! See if you can catch every species.",[11,1396,1397],{},"In terms of personal growth, I explored a few new concepts with this game, one of which was implementing a little bit of physics, which you can see when you catch a fish (it flies out at the player as a projectile with an arc). I also got to play more with probabilities and spawn rates, and I especially firmed up my grasp on how weighted probabilities can be implemented in Unity. The thing I'm most proud of with this game, however, is that I made it in only 2 months, and my scripting definitely stepped up in terms of efficiency. It's really satisfying to be able to put together a fun little polished game so quickly!",[11,1399,1400],{},"If you'd like to play the game in your browser, please click the picture link below, or check out the \"Portfolio\" tab on this site.",[51,1402],{"slug":1403},"fishing-village",[11,1405,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1407},[],"2022-10-12","Very happy to say that I am finished with my fishing game, which is called Fishing Village.",{},"\u002Fblog\u002Ffishing-village-is-complete",{"title":1387,"description":1409},"blog\u002Ffishing-village-is-complete","rM_WIAP8jqEOwUjcxt2zqdkN3q4FVrAO_l3FfI0k6f0",{"id":1416,"title":1417,"body":1418,"date":1437,"description":1438,"draft":63,"extension":64,"meta":1439,"navigation":66,"path":1440,"seo":1441,"stem":1442,"__hash__":1443},"blog\u002Fblog\u002Ffishing-game-updates.md","Fishing Game Updates",{"type":8,"value":1419,"toc":1435},[1420,1423,1426,1429,1433],[11,1421,1422],{},"Happy Fall!",[11,1424,1425],{},"Just poppin' in for a quick update, as I'm currently hard at work on this game, school, and work. I've gotten a lot done since my last post, and most importantly, we're at a spot in this fishing game where you can cast your line, hook a fish, and it will fly back to you when you reel in! I had a lot of experience from my last game with spawn random items, so it came in handy when implementing random fish.",[11,1427,1428],{},"A new thing I learned here was how to use a little bit of physics to get the fish to fly out of the water and land on the player's head. I wanted to make sure that the fish would pop out of the water at a reasonable speed, and also fly out in an \"arc\" motion, which looks a lot more natural than the fish beelining up above the player. Overall, I am happy with how it looks, and I'm satisfied to see how much quicker making this mini-project has been based on the experience I've gained in the last year or two.",[398,1430],{"alt":1431,"src-path":1432},"Catching","\u002Fimages\u002Fcatching.mp4",[11,1434,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1436},[],"2022-09-24","Just poppin' in for a quick update, as I'm currently hard at work on this game, school, and work.",{},"\u002Fblog\u002Ffishing-game-updates",{"title":1417,"description":1438},"blog\u002Ffishing-game-updates","67nNtDLeq8F309UuYEaabW7ZNhTtWeBzJiRrE8Y-4ec",{"id":1445,"title":1446,"body":1447,"date":1475,"description":1476,"draft":63,"extension":64,"meta":1477,"navigation":66,"path":1478,"seo":1479,"stem":1480,"__hash__":1481},"blog\u002Fblog\u002Fside-project-fishing-game.md","Side Project: Fishing Game 🎣",{"type":8,"value":1448,"toc":1473},[1449,1452,1455,1464,1468,1471],[11,1450,1451],{},"Hello hello!",[11,1453,1454],{},"I'm pretty ecstatic to be at a place where I have a working demo for my main 2D game that I've been working on. It's pretty satisfying to see all my hard work over the past year materialize into something that is playable - though I've got a lot of work to do, still! To give myself a little bit of a break (but believe me, I will be working on this more very soon), I have decided to create a little fishing-game side project.",[11,1456,1457,1458,1463],{},"I am a big fan of action and adventure games, but I would truly be lost if I didn't have my social simulation games - Animal Crossing, Stardew Valley, and the Sims are some of my favorite games to play. I wanted to try my hand at a little fishing game, using a ",[142,1459,1462],{"href":1460,"rel":1461},"https:\u002F\u002Fshubibubi.itch.io\u002Fcozy-fishing",[146],"very awesome 2D asset pack"," created by shubibubi on itch.io. This one is going to be much smaller in scope; I really just want to create a crisp, satisfying game where you toss your rod into the water and pull back a fish 😊 I've already gotten my player moving and throwing the rod in a pretty clean and satisfying way, as you can see below.",[398,1465],{"alt":1466,"src-path":1467},"Fishing","\u002Fimages\u002Ffishing.mp4",[11,1469,1470],{},"I'm taking this time, too, as an opportunity to implement what I've learned having worked on a bigger game over the past year. I've been more conscious about how I'm laying the groundwork for this next game; specifically, I want to make sure I'm setting myself up to write more efficient code. That means relying less on multiple \"GetComponent\u003C>\" calls and calls that are occurring every frame in Update() when they should be only occurring once. I think it's going well so far and it's cool to put some new lessons into action.",[11,1472,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1474},[],"2022-09-02","I'm pretty ecstatic to be at a place where I have a working demo for my main 2D game that I've been working on.",{},"\u002Fblog\u002Fside-project-fishing-game",{"title":1446,"description":1476},"blog\u002Fside-project-fishing-game","e6E8LdIh4LUcY_Qz8sKwPeg9KjWMAQDd4yQYmzXqrl4",{"id":1483,"title":1484,"body":1485,"date":1505,"description":1506,"draft":63,"extension":64,"meta":1507,"navigation":66,"path":1508,"seo":1509,"stem":1510,"__hash__":1511},"blog\u002Fblog\u002Fdemo-is-live.md","Demo is Live!",{"type":8,"value":1486,"toc":1503},[1487,1489,1492,1495,1498,1501],[11,1488,733],{},[11,1490,1491],{},"I finally have a demo of my game, ready to be played in your browser right now! Just click the image below here, and you'll be taken to a link where you can give it a try. Hope you enjoy it, and feel free to provide any feedback you might have. 😁",[51,1493],{"slug":1494},"vault-crawl-demo",[11,1496,1497],{},"You can also access this demo from the \"Portfolio\" page of this site at any time. This is the first time I tried creating a WebGL build, and I think it's a much, much better way to put games out there for people to see. I am going to spend some time making WebGL versions of all my other games as well, so they're more easily accessible.",[11,1499,1500],{},"As always, I will continue to work on this game to make new features and squash bugs. Stay tuned as well for a new side project I'm working on as well; hope you like fishing! 🎣",[11,1502,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1504},[],"2022-08-14","I finally have a demo of my game, ready to be played in your browser right now! Just click the image below here, and you'll be taken to a link where you can give it a try.",{},"\u002Fblog\u002Fdemo-is-live",{"title":1484,"description":1506},"blog\u002Fdemo-is-live","oMit42Blss4HnNMqe8BR0YfeNBQrlnJQMCvLRmAFVQ8",{"id":1513,"title":1514,"body":1515,"date":1543,"description":1544,"draft":63,"extension":64,"meta":1545,"navigation":66,"path":1546,"seo":1547,"stem":1548,"__hash__":1549},"blog\u002Fblog\u002Fboss-fights.md","Boss Fights",{"type":8,"value":1516,"toc":1541},[1517,1519,1522,1525,1529,1532,1536,1539],[11,1518,733],{},[11,1520,1521],{},"Happy to say that after a lot of experimentation, I now have a \"boss\" enemy to fight in my game. This is the first of what I am going to call \"Barons\" in the game - they're bigger and tougher than standard enemies, and have different moves they'll use on the player. This first baron is named Bluestreak, and he's a giant lizard (I named him after one of my favorite rollercoasters at Cedar Point 😁)",[11,1523,1524],{},"In addition to having a lot more health, a visible health bar, and a name tag, this enemy is also set apart by its special moves. Basically, the enemy has a script that draws a random number every few seconds, and that number decides what attack the enemy will do next - either a standard attack or one of his specials. His first special is a rotating laser beam - Bluestreak starts a charge-up animation, which gives the player a little bit of time to prepare (e.g., run for his life), and then Bluestreak will blast out four lasers. As you can see below, it pretty much melts the player's health bar, so the best move is to bail.",[398,1526],{"alt":1527,"src-path":1528},"Laser","\u002Fimages\u002Flaser.mp4",[11,1530,1531],{},"Bluestreak's other move is to power himself up and charge at the player, where damage is dealt upon impact. Like with the laser, a few seconds of animation gives the player the ability to get out of the way. With both of these specials, I intend to give the player a good feeling of \"ebb and flow\" with boss battles, i.e. there's a time to attack and a time to retreat. I think it makes for fun, stimulating gameplay.",[398,1533],{"alt":1534,"src-path":1535},"Charge","\u002Fimages\u002Fcharge.mp4",[11,1537,1538],{},"Now that I have more variety in enemies, I think I want to touch up the game and create a demo for it that people can download and play. First, I'll need to play-test it a bit and settle on some proper attack, buff, and defense values for the player and the enemies (thus far, I've been throwing random-ish numbers out to get something going). I've never balanced a game before with so many different values, but this is really an essential part of many games and I'm looking forward to this experience.",[11,1540,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1542},[],"2022-07-31","Happy to say that after a lot of experimentation, I now have a \"boss\" enemy to fight in my game.",{},"\u002Fblog\u002Fboss-fights",{"title":1514,"description":1544},"blog\u002Fboss-fights","BUql71FBKjLsA6yoIQ6a49DuYn3TKbvwg29SRvsWc0g",{"id":1551,"title":1552,"body":1553,"date":1598,"description":1599,"draft":63,"extension":64,"meta":1600,"navigation":66,"path":1601,"seo":1602,"stem":1603,"__hash__":1604},"blog\u002Fblog\u002Fvariety-in-enemies.md","Variety in Enemies",{"type":8,"value":1554,"toc":1596},[1555,1558,1561,1568,1576,1580,1587,1591,1594],[11,1556,1557],{},"Happy Saturday,",[11,1559,1560],{},"I initially started this game with the goal of \"going further\" with a personal project and seeing what it's like to make a \"big\" game (in my world, at least 😄). One thing I was willing to sacrifice was \"compelling combat\" for the sake of \"completing something,\" i.e. I wanted to prioritize things like inventory, leveling-up, and random-generation first.",[11,1562,1563,1564,1567],{},"However! At some point I decided I got far enough with that and now I want the game to be ",[83,1565,1566],{},"fun",". I really do think the difference between an average game and a great game is the subtleties in the core gameplay loop. So I want to play around with what makes combat fun; one effort to do that is by creating new and various types of enemies, so that combat doesn't feel boring or monotone.",[11,1569,1570,1571,315],{},"I've introduced a variety of new enemies into my game. One is an enemy-type that I call a \"trailer,\" where it produces a slime trail behind it that is dangerous to the touch of the player. I've also created a \"bomber\" enemy that starts to \"puff up\" when you get in its range, and then it will explode and inflict massive damange if you are still nearby (it's an homage to the ",[142,1572,1575],{"href":1573,"rel":1574},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreeper_(Minecraft)",[146],"Minecraft Creeper",[398,1577],{"alt":1578,"src-path":1579},"Bomber","\u002Fimages\u002Fbomber.mp4",[11,1581,1582,1583,1586],{},"I've also created what I call a \"bounty\" enemy, which is essentially ",[83,1584,1585],{},"not"," an enemy but instead a golden raccoon that has had too much caffeine and runs around erratically. If you're quick enough, you can defeat it and it will drop big money 💰 💰. (If you have qualms over the morality of killing a creature that isn't attacking you, then let's say in the official lore of the game, these golden raccoons are trying to find children to steal lollipops from. Now you're obligated to stop them!)",[398,1588],{"alt":1589,"src-path":1590},"Bounty","\u002Fimages\u002Fbounty.mp4",[11,1592,1593],{},"I'm hoping to also create a boss enemy soon that is bigger, has more health, and has a variety of attacks. I'm hoping to learn a lot about gameplay in the next few weeks, and hope to make my game as exciting as possible!",[11,1595,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1597},[],"2022-07-16","I initially started this game with the goal of \"going further\" with a personal project and seeing what it's like to make a \"big\" game (in my world, at least 😄).",{},"\u002Fblog\u002Fvariety-in-enemies",{"title":1552,"description":1599},"blog\u002Fvariety-in-enemies","prn5lAcqyDyUpyVClksBO-1K8sU72oWgijdcbmGIyKg",{"id":1606,"title":1607,"body":1608,"date":1670,"description":1671,"draft":63,"extension":64,"meta":1672,"navigation":66,"path":1673,"seo":1674,"stem":1675,"__hash__":1676},"blog\u002Fblog\u002Frandom-dungeon-generation.md","Random Dungeon Generation",{"type":8,"value":1609,"toc":1668},[1610,1612,1621,1624,1630,1636,1642,1648,1654,1660,1663,1666],[11,1611,193],{},[11,1613,1614,1615,1620],{},"One of the new concepts I took a crack at with this game was doing some random dungeon generation. I relied heavily on a ",[142,1616,1619],{"href":1617,"rel":1618},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=qAf9axsyijY",[146],"video tutorial by Blackthornprod",", which broke down the nuts and bolts of random map generation very well. Basically, we start with a chunk of the map as our centerpoint, which has four openings on it (up, down, left, right). Each of these openings has a \"node\" attached to it that will select a random \"map chunk\" to be placed next to that opening, thus extending the map; the newly-generated map chunk then has its own openings, which in turn have their own nodes, and thus the generation continues. The generation will stop once each path is closed off, meaning that the last-generated map chunk has no extra openings that need to be closed.",[11,1622,1623],{},"See below for some examples of dungeons that were generated in my game!",[11,1625,1626],{},[164,1627],{"alt":1628,"src":1629},"Dungeon map 1","\u002Fimages\u002Fdungeon_map_1.PNG",[11,1631,1632],{},[164,1633],{"alt":1634,"src":1635},"Dungeon map 2","\u002Fimages\u002Fdungeon_map_2.PNG",[11,1637,1638],{},[164,1639],{"alt":1640,"src":1641},"Dungeon map 3","\u002Fimages\u002Fdungeon_map_3.PNG",[11,1643,1644],{},[164,1645],{"alt":1646,"src":1647},"Dungeon map 4","\u002Fimages\u002Fdungeon_map_4.PNG",[11,1649,1650],{},[164,1651],{"alt":1652,"src":1653},"Dungeon map 5","\u002Fimages\u002Fdungeon_map_5.PNG",[11,1655,1656],{},[164,1657],{"alt":1658,"src":1659},"Dungeon map 6","\u002Fimages\u002Fdungeon_map_6.PNG",[11,1661,1662],{},"From there, each of these map chunks has a set number of \"mob spawners\" on it, which will spawn a random number of mobs (within a range), and randomly select which mobs to spawn, as well. The player can explore the different paths and encounter random assortments of enemies to defeat.",[11,1664,1665],{},"It was definitely one of the more challenging goals to achieve for my game, but I really learned a ton while doing this, as I've never done random generation like this before. I hope to build on this basic implementation of random map generation in the future, so I can create more complex and winding maps :)",[11,1667,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1669},[],"2022-07-02","One of the new concepts I took a crack at with this game was doing some random dungeon generation.",{},"\u002Fblog\u002Frandom-dungeon-generation",{"title":1607,"description":1671},"blog\u002Frandom-dungeon-generation","4P46Vz5XjAM1-yjRGZmZG24yonvOaW2WYfCE5L-VJUE",{"id":1678,"title":1679,"body":1680,"date":1701,"description":1702,"draft":63,"extension":64,"meta":1703,"navigation":66,"path":1704,"seo":1705,"stem":1706,"__hash__":1707},"blog\u002Fblog\u002Fnpcs.md","NPCs",{"type":8,"value":1681,"toc":1699},[1682,1684,1687,1690,1694,1697],[11,1683,523],{},[11,1685,1686],{},"Quick blog post for today! One of the systems in my game that I worked hard on was creating dialogue interactions with NPCs. The key to having it run smoothly was to ensure that each dialogue \"slide\" is marked properly so that the game knows what to do next when the player clicks - that could be another static line a dialogue, a line of dialogue that requires a \"yes\u002Fno\" answer, or the end of the dialogue. Additionally, I had to also create branching paths of dialogue, where the NPC's answer would be different if the player answered \"yes\" or \"no\" to a question. I wanted to make sure that I designed a system that could be re-used, such that every new NPC I put in the game could fit right in without me having to completely re-configure how their individual dialogue would work.",[11,1688,1689],{},"I also created for the NPCs a script I called \"Wander\", which created determined, closed-loop paths that the NPCs would walk in around the map. They're very short and concise, and the main purpose of adding these paths was to give some life to what would be an otherwise \"frozen\" character. Like with the dialogue system, I designed it such that it can be re-used seamlessly with new NPCs, such that I can create a new NPC, assign it a path like \"left, up, right, down,\" and the NPC will immediately walk in the same path over and over again.",[398,1691],{"alt":1692,"src-path":1693},"Dialogue","\u002Fimages\u002Fdialogue.mp4",[11,1695,1696],{},"One of my favorite things to do in coding projects is put in those cosmetic changes that are neat, organized, and give the project life. Which is probably why I like game design so much!",[11,1698,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1700},[],"2022-06-19","Quick blog post for today! One of the systems in my game that I worked hard on was creating dialogue interactions with NPCs.",{},"\u002Fblog\u002Fnpcs",{"title":1679,"description":1702},"blog\u002Fnpcs","pHLWY6iWqVQP0fqGwxOWICk85Kd50RufL-RKueQiP-s",{"id":1709,"title":1710,"body":1711,"date":1742,"description":1743,"draft":63,"extension":64,"meta":1744,"navigation":66,"path":1745,"seo":1746,"stem":1747,"__hash__":1748},"blog\u002Fblog\u002Finventory-system.md","Inventory System",{"type":8,"value":1712,"toc":1740},[1713,1715,1724,1728,1731,1734,1738],[11,1714,193],{},[11,1716,1717,1718,1723],{},"One of the most challenging but rewarding things to put into my most recent game was a drag-and-drop inventory system. I started by working off of a ",[142,1719,1722],{"href":1720,"rel":1721},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=BGr-7GZJNXg",[146],"fantastic video"," by Code Monkey on how to create such an inventory, and then added more features from there. Beyond the basic drag-and-drop functionality, I was also able to restrict certain \"use slots\" such that they could only hold items of a certain class, as well as have items \"drop\" from the player's inventory at his feet when the user drags the item outside of the inventory menu box.",[398,1725],{"alt":1726,"src-path":1727},"Inventory","\u002Fimages\u002Finventory.mp4",[11,1729,1730],{},"An important aspect of creating this inventory system was keeping track of item \"images\" while they were being dragged from one slot to another. I had to account for a couple of different scenarios, such as the item being dragged to a new slot, the item never finding a new slot and reverting back to its old slot, the item swapping with another item in another slot, etc.",[11,1732,1733],{},"It was also challenging to make sure that the actual item associated with each inventory slot had its information properly transferred from one slot to another. This was especially important for the shop, where the player can buy and sell items. It took a long time to ensure that the inventory items were responding properly to being dragged and dropped (and I must admit I think a more senior coder would probably have a thing or two to say about the efficiency of my code), but eventually I got it right through a lot of trial and error!",[398,1735],{"alt":1736,"src-path":1737},"Shopping","\u002Fimages\u002Fshopping.mp4",[11,1739,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1741},[],"2022-06-08","One of the most challenging but rewarding things to put into my most recent game was a drag-and-drop inventory system.",{},"\u002Fblog\u002Finventory-system",{"title":1710,"description":1743},"blog\u002Finventory-system","qFHyz_AZtEckE1fLyMmnoP_Af9oAoKpGCu_lAdUVTBk",{"id":1750,"title":1751,"body":1752,"date":1781,"description":1782,"draft":63,"extension":64,"meta":1783,"navigation":66,"path":1784,"seo":1785,"stem":1786,"__hash__":1787},"blog\u002Fblog\u002Fsmooth-gameplay.md","Smooth Gameplay",{"type":8,"value":1753,"toc":1779},[1754,1757,1760,1767,1770,1774,1777],[11,1755,1756],{},"Hey there!",[11,1758,1759],{},"When I first started making this game, I had two learning priorities for myself. First, I wanted to make something that was more than just a \"demo\" to see what it's like to put a full game together; second, I wanted the game's core loop to \"cut like butter\" and feel smooth. I'm a strong believer that this second point is an absolute essential for having a game that people want to come back for.",[11,1761,1762,1763,1766],{},"For instance, one of my favorite games of all time - Rocket League - literally just consists of some cars, a bar, and a field. But, the game has had lasting success for over six years and has a very dedicated following and eSports scene; and to me, I believe it's because it feels really, ",[83,1764,1765],{},"really"," good to drive and fly around in the game.",[11,1768,1769],{},"So, to put this concept into practice, I tried to think of ways I could make gameplay feel \"snappy\" in my game. I quite literally created a system in the game where the player's character \"snaps\" onto enemies in his immediate vicinity, so that way the player doesn't have to worry about making sure their sword lines up exactly with the enemy they're targeting. If you look at the gif below, you can see the character pivoting from enemy to enemy quickly and wasting no strokes - that's all being done with a click of a mouse, and doesn't require the player to re-align the character's direction otherwise.",[398,1771],{"alt":1772,"src-path":1773},"Snap combat","\u002Fimages\u002Fsnap_combat.mp4",[11,1775,1776],{},"So while this simplifies combat, it also makes cutting through enemies buttery smooth. And overall, I want to make the full \"onslaught\" of the dungeon be the complex, rewarding experience for the player, and not so much frustrate them with the \"clunkiness\" of individual battles. As I continue to add more features to my game, I want to pay special attention to this \"smoothness\" factor, so I can make the player feel light and airy in the game.",[11,1778,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1780},[],"2022-05-18","When I first started making this game, I had two learning priorities for myself. First, I wanted to make something that was more than just a \"demo\" to see what it's like to put a full game together; second, I wanted the…",{},"\u002Fblog\u002Fsmooth-gameplay",{"title":1751,"description":1782},"blog\u002Fsmooth-gameplay","m_-T1dnIkyYuNPtDCIyt8YmOUyoEkyHeQaKg5iKQVkk",{"id":1789,"title":1790,"body":1791,"date":1832,"description":1833,"draft":63,"extension":64,"meta":1834,"navigation":66,"path":1835,"seo":1836,"stem":1837,"__hash__":1838},"blog\u002Fblog\u002Fupdates-and-new-2d-game.md","Updates and New 2D Game",{"type":8,"value":1792,"toc":1830},[1793,1795,1802,1805,1808,1812,1815,1822,1825,1828],[11,1794,1269],{},[11,1796,1797,1798,1801],{},"Back to the blog! Although I haven't made a post here in a while, I have been ",[83,1799,1800],{},"very"," busy in the last year with programming. About March of last year, I wrote on this blog that I had started to work on a 2D RPG game. Well I've been working on it consistently since last year, and it's become my biggest project yet. I've done a lot of things with this game I have never done before, including but not limited to randomly-generated dungeons, a full loot system, a drag-and-drop inventory, multiple combat mechanics and abilities, and more.",[11,1803,1804],{},"There's a lot of stuff in this game, too much for one update, so I am going to make several posts detailing the different features I've created in this game in the last year. I always think it's a good idea to stop where you are and take inventory of what you've done with a project, so I'm hoping that dissecting my game in the next few posts will help me make it better as I continue to work on it here.",[11,1806,1807],{},"As a little sneak-peak, see the gif below - I'm proud of how lively the spawn area is in the game!",[398,1809],{"alt":1810,"src-path":1811},"Spawn area","\u002Fimages\u002Fspawn_area.mp4",[11,1813,1814],{},"I'm also very happy to say that I've gone back to school to finally get my bachelor's degree in Computer Science. I'm currently enrolled in a post-baccalaureate CS program at Oregon State University - Go Beavs! - where I'm able to take rigorous computer science courses in a well-established online program. I'm able to take the courses while working full-time, so it works very well for me right now. I'm 2½ courses through the program so far, and it's been a lot of fun, and I've learned a lot.",[11,1816,1817,1818,1821],{},"(I have to say, too, after taking Discrete Math for the second time, it turns out this education thing works, because it is much, ",[83,1819,1820],{},"much"," easier to grasp this time around).",[11,1823,1824],{},"Looking forward to more posts in the days and weeks to come 😁",[11,1826,1827],{},"(Also, wanted to note here that while I did create this game, many of the game's assets are from artists who create free pixel art for use for developers. I will be creating a credits list shortly, as these artists do a great service to people like me who want to cut their teeth and make some games!)",[11,1829,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1831},[],"2022-05-03","Back to the blog! Although I haven't made a post here in a while, I have been very busy in the last year with programming.",{},"\u002Fblog\u002Fupdates-and-new-2d-game",{"title":1790,"description":1833},"blog\u002Fupdates-and-new-2d-game","yGW9O1FSckKN9V_AziaaEGnOisClfMVoz5xzye8b3Dw",{"id":1840,"title":1841,"body":1842,"date":1873,"description":1874,"draft":63,"extension":64,"meta":1875,"navigation":66,"path":1876,"seo":1877,"stem":1878,"__hash__":1879},"blog\u002Fblog\u002Fa-few-updates.md","A Few Updates",{"type":8,"value":1843,"toc":1871},[1844,1847,1850,1853,1859,1862,1866,1869],[11,1845,1846],{},"Hey there,",[11,1848,1849],{},"So unfortunately after some poking around, I've decided that the FreeNAS dream is dead. I attempted to set up my laptop by my router and turn it into a NAS device, but I was really struggling with working with the FreeNAS (now TrueNAS) software, and frankly the laptop sitting around on the floor was quite the eye sore (pictured below). I gave it a shot and learned a few things, so I'm going to let this one go.",[11,1851,1852],{},"I also was planning on prepping a tank to get a new betta fish, but prepping done right takes weeks and I don't have the energy for it. So I've been having a real quitter's mindset this week!",[11,1854,1855],{},[164,1856],{"alt":1857,"src":1858},"FreeNAS","\u002Fimages\u002FFreeNAS.jpg",[11,1860,1861],{},"However, I did have a nice little start to my unnamed 2D RPG game that I do want to focus on. I got some assets, started the project, and got my character moving (and the camera following him). Not much, but a start. I'm using the same main character as my Fruit N Shoot game because it's an easy spritesheet to work with and I like him :)",[398,1863],{"alt":1864,"src-path":1865},"2dsample","\u002Fimages\u002F2dsample.mp4",[11,1867,1868],{},"I'm planning on re-focusing on my projects and I will hopefully have more to report in the weeks to come!",[11,1870,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1872},[],"2021-03-21","So unfortunately after some poking around, I've decided that the FreeNAS dream is dead. I attempted to set up my laptop by my router and turn it into a NAS device, but I was really struggling with working with the…",{},"\u002Fblog\u002Fa-few-updates",{"title":1841,"description":1874},"blog\u002Fa-few-updates","2AooBL7WuRIaYdqW5SHxACbBBwe9VwXa-GrI5AqBh2s",{"id":1881,"title":1882,"body":1883,"date":1906,"description":1907,"draft":63,"extension":64,"meta":1908,"navigation":66,"path":1909,"seo":1910,"stem":1911,"__hash__":1912},"blog\u002Fblog\u002Fsimple-frogger.md","Simple Frogger",{"type":8,"value":1884,"toc":1904},[1885,1887,1890,1893,1899,1902],[11,1886,733],{},[11,1888,1889],{},"I was poking around some old Unity files on my computer and I totally forgot that I had started a simple 2D project a few months ago. It was about halfway done, so I went ahead and took a few days to finish it up. It's just a simple frogger game, but I had fun going back and completing it because it's the perfect kind of small project that I can use to get back on the proverbial horse. I uploaded it to my portfolio if you want to check it out!",[11,1891,1892],{},"MacOS builds have been hurting my head lately, so I am going to address that later, but for now you can play the game on Windows or on WebGL (i.e. in-browser). It seems to me there aren't a ton of web browsers that support client-side WebGL games, but if you have one then go for it :)",[11,1894,1895],{},[164,1896],{"alt":1897,"src":1898},"Frog blog","\u002Fimages\u002Ffrog_blog.png",[11,1900,1901],{},"(Others might describe this as minimal graphics, but I like to think of it as a complex work in style of the De Stijl art movement)",[11,1903,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1905},[],"2021-03-04","I was poking around some old Unity files on my computer and I totally forgot that I had started a simple 2D project a few months ago.",{},"\u002Fblog\u002Fsimple-frogger",{"title":1882,"description":1907},"blog\u002Fsimple-frogger","otMb7v1lmRFfEH-ZVao8yL3CYlmsIHZo6PDwDXRDJ88",{"id":1914,"title":1915,"body":1916,"date":1949,"description":1950,"draft":63,"extension":64,"meta":1951,"navigation":66,"path":1952,"seo":1953,"stem":1954,"__hash__":1955},"blog\u002Fblog\u002Fmore-certs-and-some-plans.md","More Certs and Some Plans",{"type":8,"value":1917,"toc":1947},[1918,1921,1924,1927,1930,1933,1936,1942,1945],[11,1919,1920],{},"Howdy, hope everyone's had a good winter so far.",[11,1922,1923],{},"Just thought I would check in again. I've been taking a break from game development recently and I've leaned into studying for IT certifications. I really like IT because it seems to me to have a heavy emphasis on organization, and I've always been a hyper-organized person. I've managed to acquire a CompTIA Network+ and Security+ certification in the last month, and I've learned a lot about networks and how to secure them. With that, I think I'm going to rest on studying for these certifications and move back to doing programming and game development.",[11,1925,1926],{},"I have a few ideas in mind for things I would like to do. First, I really want to re-learn C++. It's been a while since I've used that language, and I am not as familiar with C languages as I would like to be. I've identified some online courses and videos that I think will serve as a great refresher, and I'll be sure to get a project going with that language to solidify my skills.",[11,1928,1929],{},"Second, after learning a few things in my IT studies, I've found that I can use something called FreeNAS to turn one of my old laptops into a network-attached storage (NAS) device. The laptop really doesn't have that much space, but I think it would be a fun project to try so that I can get some hands-on experience with something I know about.",[11,1931,1932],{},"Third, I've decided to stop working on my 3D game and put it in my portfolio as a sort of \"sandbox\" project. I learned a lot and had a lot of fun with it, but coming back from a long break with game development, I want to jump into something new and fresh. I will be adding the 3D game to the portfolio in the next few days, and then I want to get started on a 2D RPG that I hope will end up being a pretty full experience. I've always been interested in game development because I consider myself to be both a \"left brain\" and a \"right brain\" thinker; I love tech but I really love being creative. I want to move to a 2D game so I can work with something I am more technically comfortable with so that way I can focus on making a creative experience (because the best games are about the story and the beauty of it, not just a bunch of mechanics slapped together)!",[11,1934,1935],{},"TL;DR - The tech train is rolling again, I'm ready to rumble ;)",[11,1937,1938],{},[164,1939],{"alt":1940,"src":1941},"Ducky","\u002Fimages\u002Fducky.jpg",[11,1943,1944],{},"(My Security+ card is still in the mail, so I decided to assuage your disappointment with my rad shades and ducky hat)",[11,1946,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1948},[],"2021-02-28","Just thought I would check in again. I've been taking a break from game development recently and I've leaned into studying for IT certifications.",{},"\u002Fblog\u002Fmore-certs-and-some-plans",{"title":1915,"description":1950},"blog\u002Fmore-certs-and-some-plans","UDtuAC9UGQaIcYP8ENNtR4M1kqwpVwAPvqPdSIvzW8E",{"id":1957,"title":1958,"body":1959,"date":1983,"description":1984,"draft":63,"extension":64,"meta":1985,"navigation":66,"path":1986,"seo":1987,"stem":1988,"__hash__":1989},"blog\u002Fblog\u002Fupdate.md","Update",{"type":8,"value":1960,"toc":1981},[1961,1964,1967,1970,1973,1979],[11,1962,1963],{},"Hello! After a lengthy hiatus I have returned :)",[11,1965,1966],{},"I apologize for the long delay, I've been very busy with various things and blogging got away from me. I've decided though that I will pick it back up however. Although I've been gone, I have been busy! I have received two new certifications: GFCE and A+. It was a lot of studying, but passing the exams felt very rewarding. I have my eyes on acquiring the Network+ certification next.",[11,1968,1969],{},"I do plan on jumping back into Unity and other programming projects as well. I'm thinking that I want to start fresh with a new concept in Unity, so I have plans to take my current 3D game and finish it up as a sort of \"sandbox\" project. I plan on having it in my portfolio on this site soon!",[11,1971,1972],{},"So, back to the grind. I'll see you soon!",[11,1974,1975],{},[164,1976],{"alt":1977,"src":1978},"Apluscert","\u002Fimages\u002Fapluscert.jpeg",[11,1980,56],{},{"title":58,"searchDepth":59,"depth":59,"links":1982},[],"2021-01-17","I apologize for the long delay, I've been very busy with various things and blogging got away from me.",{},"\u002Fblog\u002Fupdate",{"title":1958,"description":1984},"blog\u002Fupdate","96Fquly-Kn4RAOEPKCdxi8Div3dIRFsQtVIE4k_bkv0",{"id":1991,"title":1992,"body":1993,"date":2015,"description":2016,"draft":63,"extension":64,"meta":2017,"navigation":66,"path":2018,"seo":2019,"stem":2020,"__hash__":2021},"blog\u002Fblog\u002Fparticle-trails-and-shopping.md","Particle Trails and Shopping",{"type":8,"value":1994,"toc":2013},[1995,1998,2001,2005,2008,2011],[11,1996,1997],{},"Hi there! Still here, chugging along.",[11,1999,2000],{},"I've made some good progress since my last post. I've managed to get some particle trails going that follow the player's movement; when the player swings, spins, or speed boosts, you can see a blue trail following the motion. I'm not too sure yet if the current trail I have on is the right color or if it's too intense, but I think some form of this trail will look nice in the end. I also added a system of money to the game, where the player gets paid to defeat enemies (and you can see damage numbers and the \"value of the kill\" in-game).",[398,2002],{"alt":2003,"src-path":2004},"Particles","\u002Fimages\u002Fparticles.mp4",[11,2006,2007],{},"And, all of this money can be used in the new shopping system! I created an NPC that acts as a vendor who will be an access point to the shop. Here the player can buy and sell weapons. I really enjoyed digging into the UI and setting up all the different dialogue texts and buttons, and I'm happy with how it turned out. I'll be sure to expand on this as my development process goes on.",[11,2009,2010],{},"Thanks for stopping by!",[11,2012,56],{},{"title":58,"searchDepth":59,"depth":59,"links":2014},[],"2020-09-13","I've made some good progress since my last post. I've managed to get some particle trails going that follow the player's movement; when the player swings, spins, or speed boosts, you can see a blue trail following the motion.",{},"\u002Fblog\u002Fparticle-trails-and-shopping",{"title":1992,"description":2016},"blog\u002Fparticle-trails-and-shopping","QslqhdBLbfXYMX5mUr07EexmvyeHbLgFD5bTpZRRZIQ",{"id":2023,"title":2024,"body":2025,"date":2051,"description":2052,"draft":63,"extension":64,"meta":2053,"navigation":66,"path":2054,"seo":2055,"stem":2056,"__hash__":2057},"blog\u002Fblog\u002Fhud-improvements.md","HUD Improvements",{"type":8,"value":2026,"toc":2049},[2027,2030,2033,2037,2040,2043,2047],[11,2028,2029],{},"Howdy folks. I can't believe it's already September! I have this weird thing with Covid where I simultaneously perceive time as going too fast and too slow at the same time... basically I can't wait to get out of the house again when this is all over.",[11,2031,2032],{},"I've made some big improvements to the HUD in my game, and added a few new gameplay aspects. The player now has a shield that depletes before health, and it also replenishes itself when the player is not in combat. I also touched up the weapon indicator in the bottom left, and added a few more cosmetic items to the inventory menu. I also started on what I call the \"Move Bar,\" which is at the bottom center of the screen; basically it gives a visual to the cooldown time for each special move the player uses. I also added a speed boost function, which can be seen on said Move Bar.",[398,2034],{"alt":2035,"src-path":2036},"Speedboost","\u002Fimages\u002Fspeedboost.mp4",[11,2038,2039],{},"The HUD looks a little blocky and simple right now, but at the moment I'm just trying to lay things about before I make things look a little nicer. I think going forward I want to focus on using the particle system in Unity to help emphasize what is happening to the player, i.e. an indication that shields are down or that the speed boost is active.",[11,2041,2042],{},"That's all for now. Enjoy this goal I scored recently!",[398,2044],{"alt":2045,"src-path":2046},"Niceshot","\u002Fimages\u002Fniceshot.mp4",[11,2048,56],{},{"title":58,"searchDepth":59,"depth":59,"links":2050},[],"2020-09-01","Howdy folks. I can't believe it's already September! I have this weird thing with Covid where I simultaneously perceive time as going too fast and too slow at the same time... basically I can't wait to get out of the…",{},"\u002Fblog\u002Fhud-improvements",{"title":2024,"description":2052},"blog\u002Fhud-improvements","TvvpNAjfBKKVf6yvka1ltlI5eD4fYDUf1rfSx9O6WE4",{"id":2059,"title":2060,"body":2061,"date":2110,"description":2111,"draft":63,"extension":64,"meta":2112,"navigation":66,"path":2113,"seo":2114,"stem":2115,"__hash__":2116},"blog\u002Fblog\u002Fnetworking-and-inventory-system.md","Networking and Inventory System",{"type":8,"value":2062,"toc":2108},[2063,2078,2081,2085,2100,2106],[11,2064,2065,2066,2071,2072,2077],{},"Over the last few weeks I have been working on a few things, mainly a new inventory system for my Unity game and a new class on ",[142,2067,2070],{"href":2068,"rel":2069},"https:\u002F\u002Fwww.udemy.com\u002F",[146],"Udemy",". I have also been playing a lot of ",[142,2073,2076],{"href":2074,"rel":2075},"https:\u002F\u002Ffallguys.com\u002F",[146],"Fall Guys",". I really missed the simple joy of playing Mario Party 6 at my friend's house after school as a kid, and I'm glad that Mediatonic was able to capture that again!",[11,2079,2080],{},"In my Unity project, I have managed to create an inventory system where the player can pause, open an inventory menu, and then click the picture of the weapon they would like to use. I also went into Blender and made some new weapons, such as an axe and a club (right now I can manage hopping on Blender and making a few simple assets, but I definitely need to pick a time to really become proficient in modelling like I was on Autodesk Maya). The hardest part of this whole process was actually finding a way to pause every moving entity in the scene whenever the player pressed pause, but luckily I found a way!",[398,2082],{"alt":2083,"src-path":2084},"Weapons","\u002Fimages\u002Fweapons.mp4",[11,2086,2087,2088,2093,2094,2099],{},"I've also become more interested in understanding how networks work; I realized that I only have a surface-level understanding of how things like routers and IP addresses work. So I went ahead and purchased a course on networking created by ",[142,2089,2092],{"href":2090,"rel":2091},"https:\u002F\u002Fdavidbombal.com\u002F",[146],"David Bombal",". I've only just begun and I've already learned a lot about topics such as reading binary, IP subnetting, and broadcast\u002Fcollision domains. I've also gotten some experience using ",[142,2095,2098],{"href":2096,"rel":2097},"https:\u002F\u002Fwww.netacad.com\u002Fcourses\u002Fpacket-tracer",[146],"Cisco Packet Tracer",", a network simulation tool that lets you get hands-on experience and apply everything you learn about networking. It's really an area that I didn't know much about, so I'm excited to continue learning.",[11,2101,2102],{},[164,2103],{"alt":2104,"src":2105},"Networking","\u002Fimages\u002Fnetworking.PNG",[11,2107,56],{},{"title":58,"searchDepth":59,"depth":59,"links":2109},[],"2020-08-27","Over the last few weeks I have been working on a few things, mainly a new inventory system for my Unity game and a new class on Udemy.",{},"\u002Fblog\u002Fnetworking-and-inventory-system",{"title":2060,"description":2111},"blog\u002Fnetworking-and-inventory-system","H8QPfHfpUQ1JySqaKvISYKF_KrJvJ8MNjb83JfDrVG0",{"id":2118,"title":2119,"body":2120,"date":2174,"description":2175,"draft":63,"extension":64,"meta":2176,"navigation":66,"path":2177,"seo":2178,"stem":2179,"__hash__":2180},"blog\u002Fblog\u002Fctfs-and-low-poly-terrains.md","CTFs and Low-Poly Terrains",{"type":8,"value":2121,"toc":2172},[2122,2143,2146,2155,2161,2164,2170],[11,2123,2124,2125,2130,2131,2136,2137,2142],{},"This weekend I had the pleasure of playing OpenSOC, a DFIR challenge hosted by ",[142,2126,2129],{"href":2127,"rel":2128},"https:\u002F\u002Freconinfosec.com\u002F",[146],"Recon InfoSec",", where teams hunt down various threats and \"capture flags.\" I got the opportunity to become more familiar with a bunch of great tools, such as ",[142,2132,2135],{"href":2133,"rel":2134},"https:\u002F\u002Fwww.graylog.org\u002F",[146],"Graylog",", a log management software, and ",[142,2138,2141],{"href":2139,"rel":2140},"https:\u002F\u002Fwww.elastic.co\u002Fproducts\u002Fkibana",[146],"Kibana",", a data visualization tool.",[11,2144,2145],{},"At first I found a lot of things to be pretty difficult, but by the end of the weekend, I was able to grab a few challenges all by myself! The tools given to use were great for things like finding phishing emails and seeing which machines on the network clicked the dangerous links. These scenarios were all made up, but they definitely drove home the point that all employees of a company should be on high alert for phishing scams (there's nothing worse for info security then opening the door for your intruder)!",[11,2147,2148,2149,2154],{},"I really enjoyed this CTF-esque event, so I'm going to try a few more. I found a great website called ",[142,2150,2153],{"href":2151,"rel":2152},"https:\u002F\u002Foverthewire.org\u002Fwargames\u002F",[146],"OverTheWire"," that has a lot of great \"Wargames\" that allow you to practice security concepts. I recently started the first one, called \"Bandit,\" which teaches you how to use tools and commands on Linux machines. So far, it's been pretty fun!",[11,2156,2157],{},[164,2158],{"alt":2159,"src":2160},"Bandit","\u002Fimages\u002Fbandit.png",[11,2162,2163],{},"I also managed to get a low-poly terrain finished for my game in Unity. I think it fits the theme well, and it certainly gives my testing grounds a more lively atmosphere than before. In the weeks to come, I plan to start working on the UI, and creating an inventory system so that way the player can pick up weapons and choose between them.",[11,2165,2166],{},[164,2167],{"alt":2168,"src":2169},"Lowpolyterr","\u002Fimages\u002Flowpolyterr.PNG",[11,2171,56],{},{"title":58,"searchDepth":59,"depth":59,"links":2173},[],"2020-08-09","This weekend I had the pleasure of playing OpenSOC, a DFIR challenge hosted by Recon InfoSec, where teams hunt down various threats and \"capture flags.\"",{},"\u002Fblog\u002Fctfs-and-low-poly-terrains",{"title":2119,"description":2175},"blog\u002Fctfs-and-low-poly-terrains","6Ps2fpdLMvRPWYi0AML98AmtSwfSeFgpTofAsCCiFh4",{"id":2182,"title":2183,"body":2184,"date":2221,"description":2222,"draft":63,"extension":64,"meta":2223,"navigation":66,"path":2224,"seo":2225,"stem":2226,"__hash__":2227},"blog\u002Fblog\u002Fdatabase-weapons-terrains.md","Database, Weapons, Terrains",{"type":8,"value":2185,"toc":2219},[2186,2189,2192,2196,2199,2205,2208,2214,2217],[11,2187,2188],{},"Sorry for the long length of time between posts! I've done a lot in the past month, and a lot of my time was occupied because I am moving to Chicago in the next two weeks, so there has been a lot of preparation (apartment shopping, furniture, utilities, etc). Nonetheless, I've been working diligently on a few things.",[11,2190,2191],{},"I've made some good progress on my game! I've removed health bars temporarily, but I've added weapons (which will display text when hovered over) and now enemies will spawn within certain zones. The player can walk up to a weapon, pick it up, and start slashing at bad guys. I've also added some basic UI elements, just as a start. I also started to work on a surrounding terrain for the game's map (I am very, very not good at using Unity's terrain tools, so that was a struggle), which right now looks very plain but I plan on turning it into a green, low-poly terrain using Blender.",[398,2193],{"alt":2194,"src-path":2195},"Terrain","\u002Fimages\u002Fterrain.mp4",[11,2197,2198],{},"I also started and completed another project in the past month. Recently I've gotten back into collecting Pokemon cards, something I did very casually as a child. I got all my cards together (and bought some new ones!) and decided to enter them all into an Excel document. I recorded the information as shown below, cataloging each card's stats, year, attributes, and value. I thought that these older cards would be pretty valuable, but that was not the case. Oh well.",[11,2200,2201],{},[164,2202],{"alt":2203,"src":2204},"Excel","\u002Fimages\u002Fexcel.PNG",[11,2206,2207],{},"After finishing the database of cards in Excel (a term I use loosely, because I chose not to use SQL for this), I used Python and the library openpyxl to read the database. I was able to create a few useful scripts, like one that gave overall statistics about the database and another that checked how many Pokemon I had caught out of the total list of Pokemon (or the \"Pokedex\"). Then, I used the library Tkinter to create a simple GUI for a script that allows a user to search through the database for specific cards, as shown below.",[11,2209,2210],{},[164,2211],{"alt":2212,"src":2213},"Database","\u002Fimages\u002Fdatabase.png",[11,2215,2216],{},"Hope you enjoyed and thanks for reading!",[11,2218,56],{},{"title":58,"searchDepth":59,"depth":59,"links":2220},[],"2020-08-06","Sorry for the long length of time between posts! I've done a lot in the past month, and a lot of my time was occupied because I am moving to Chicago in the next two weeks, so there has been a lot of preparation…",{},"\u002Fblog\u002Fdatabase-weapons-terrains",{"title":2183,"description":2222},"blog\u002Fdatabase-weapons-terrains","q9Pe8GeXBbaUO9iCgcLTBUy9fqJEy9kDSh_CfkJkOZc",{"id":2229,"title":2230,"body":2231,"date":2244,"description":2245,"draft":63,"extension":64,"meta":2246,"navigation":66,"path":2247,"seo":2248,"stem":2249,"__hash__":2250},"blog\u002Fblog\u002Fhealth-bars-and-spin-attacks.md","Health Bars and Spin Attacks",{"type":8,"value":2232,"toc":2242},[2233,2236,2240],[11,2234,2235],{},"Over the last few days I've been working on adding more types of attacks into my game. I have to admit, I probably did not choose the easiest combat system for someone who is just starting to get their feet wet in 3D game development; because my game has a sort of \"automated\" attack system where you click on an enemy and the player moves towards and hits it, I have to be careful with prioritizing actions in my code (i.e. when do we move and when do we attack, when does one action trump the other, etc). After a lot of fiddling, I managed to get a spin attack working in my game, as shown in the gif below. I also created a health bar above my enemies' heads. I'm making steady progress on getting satisfying movement and combat, and hopefully soon I'll be able to start crafting the world around the player!",[398,2237],{"alt":2238,"src-path":2239},"Spin","\u002Fimages\u002Fspin.mp4",[11,2241,56],{},{"title":58,"searchDepth":59,"depth":59,"links":2243},[],"2020-07-13","Over the last few days I've been working on adding more types of attacks into my game. I have to admit, I probably did not choose the easiest combat system for someone who is just starting to get their feet wet in 3D…",{},"\u002Fblog\u002Fhealth-bars-and-spin-attacks",{"title":2230,"description":2245},"blog\u002Fhealth-bars-and-spin-attacks","u6wqH118s2v_jwv1jvatBt68GmjcXgOlne-mFUJukUs",{"id":2252,"title":2253,"body":2254,"date":2295,"description":2296,"draft":63,"extension":64,"meta":2297,"navigation":66,"path":2298,"seo":2299,"stem":2300,"__hash__":2301},"blog\u002Fblog\u002Fputting-pieces-together-in-unity.md","Putting Pieces Together in Unity",{"type":8,"value":2255,"toc":2293},[2256,2259,2262,2265,2269,2284,2287,2291],[11,2257,2258],{},"The time between posts was longer for this one because I went on a trip to a friend's lakehouse. It was a great time, but my extremely fair skin makes it so I burst into flames the second I am exposed to sunlight, so now I have to apply Aloe every 30 minutes. Probably why I've always spent most of my time indoors on a computer!",[11,2260,2261],{},"So at this point, I've become fairly familiar with the process of making an animation in Blender for my model and exporting it to Unity. I went ahead an made a simple \"arm swinging\" animation and a death animation, which is all the pieces I need to make some very basic gameplay.",[11,2263,2264],{},"I managed to get my game at a point where the player can go up to an enemy, swing at it a few times, and then it falls over and dies. In the past I've used other people's models and animations from the asset store, and I've come to appreciate how clean those assets were; it's really hard to make your animations flow smoothly when you make them yourself! But, I think I managed to get them to a point that I'm satisfied with.",[398,2266],{"alt":2267,"src-path":2268},"Combat","\u002Fimages\u002Fcombat.mp4",[11,2270,2271,2272,2277,2278,2283],{},"Just to make sure I'm giving credit where it's due, I am drawing heavily from a great Udemy course on intermediate Unity development called ",[142,2273,2276],{"href":2274,"rel":2275},"https:\u002F\u002Fwww.udemy.com\u002Fcourse\u002Funityrpg\u002F",[146],"\"RPG Core Combat Creator: Learn Intermediate Unity C# Coding\""," by ",[142,2279,2282],{"href":2280,"rel":2281},"https:\u002F\u002Fwww.gamedev.tv\u002F",[146],"GameDev.tv"," . The instructors, Ben Tristem, Rick Davidson, and Sam Pattuzzi, do a wonderful job of breaking down the basics of RPG creation. Basically I watch them as a reference point and change the code as I see fit to better match what I'm going for (and I use different assets as well). I encourage you to check them out!",[11,2285,2286],{},"Now to totally change topics: I am really into the video game Rocket League! It's my favorite game of all time, and I've been playing for about 4 years and have logged about 2,000 hours. I'm going to occasionally posts gifs of plays that I'm proud of.",[398,2288],{"alt":2289,"src-path":2290},"Backwards goal","\u002Fimages\u002Fbackwards_goal.mp4",[11,2292,56],{},{"title":58,"searchDepth":59,"depth":59,"links":2294},[],"2020-07-07","The time between posts was longer for this one because I went on a trip to a friend's lakehouse.",{},"\u002Fblog\u002Fputting-pieces-together-in-unity",{"title":2253,"description":2296},"blog\u002Fputting-pieces-together-in-unity","wvmPaQoY8y-GBFn1Vtjpb6wLUXoNY3Uxxb0pn0mIeHk",{"id":2303,"title":2304,"body":2305,"date":2353,"description":2354,"draft":63,"extension":64,"meta":2355,"navigation":66,"path":2356,"seo":2357,"stem":2358,"__hash__":2359},"blog\u002Fblog\u002Fplaying-with-blender.md","Playing with Blender",{"type":8,"value":2306,"toc":2351},[2307,2320,2323,2326,2332,2335,2339,2342,2346,2349],[11,2308,2309,2310,2314,2315,276],{},"Over the last few days I've been familiarizing myself with the basics of Blender. I watched and followed a few tutorials of Grant Abbitt, whose videos are absolutely brilliant (If you're looking to learn about Blender or animation in general, please check him out at his website ",[142,2311,2312],{"href":2312,"rel":2313},"https:\u002F\u002Fwww.gabbitt.co.uk\u002F",[146]," or his YouTube channel ",[142,2316,2319],{"href":2317,"rel":2318},"https:\u002F\u002Fwww.youtube.com\u002Fuser\u002Fmediagabbitt",[146],"here",[11,2321,2322],{},"I decided to get my feet wet by making a simple model and to start animating it. I have plans for a 3D game in Unity that I want to make; I've really enjoyed playing Diablo III this year and I want to make something in that style. So to start, my goals were to make a simple model, animate it, make it move with a mouse click, and make the animations respond to the player's movement.",[11,2324,2325],{},"This (below) is the simple model that I made in Blender:",[11,2327,2328],{},[164,2329],{"alt":2330,"src":2331},"Samurai 2","\u002Fimages\u002Fsamurai_2.png",[11,2333,2334],{},"After modeling this figure - not much effort, it's pretty boxy - I had to create an armature so I would be able to move the limbs and make some simple animations. Below is a gif of me in the process of making a walk cycle:",[398,2336],{"alt":2337,"src-path":2338},"Walk anim","\u002Fimages\u002Fwalk_anim.mp4",[11,2340,2341],{},"The absolute hardest part of the last few days was figuring out how to import Blender models and animations to Unity and making them work. There was a lot of trouble with making sure the orientation and size of the model transfered to Unity in a way that made sense. But, after a lot of fiddling around, I was able to get the model into Unity, hook up a NavMesh Agent to it, and get it moving and animating at the proper times:",[398,2343],{"alt":2344,"src-path":2345},"Sun test","\u002Fimages\u002Fsun_test.mp4",[11,2347,2348],{},"So, with all that finished, I think I will focus my efforts on Unity for the next few days and get some enemies in my game for the player to fight with.",[11,2350,56],{},{"title":58,"searchDepth":59,"depth":59,"links":2352},[],"2020-06-27","Over the last few days I've been familiarizing myself with the basics of Blender. I watched and followed a few tutorials of Grant Abbitt, whose videos are absolutely brilliant (If you're looking to learn about Blender…",{},"\u002Fblog\u002Fplaying-with-blender",{"title":2304,"description":2354},"blog\u002Fplaying-with-blender","iHmJoLytT5mxXCsMiHcNBFIappeEPJ987rC7cOBHTFo",{"id":2361,"title":2362,"body":2363,"date":2387,"description":2388,"draft":63,"extension":64,"meta":2389,"navigation":66,"path":2390,"seo":2391,"stem":2392,"__hash__":2393},"blog\u002Fblog\u002Fmy-first-post.md","My First Post",{"type":8,"value":2364,"toc":2385},[2365,2368,2371,2374,2376,2382],[11,2366,2367],{},"Hello, my name is Josh and this is my new blog!",[11,2369,2370],{},"Tonight is the first night that this site goes live. I've decided to create this blog and website to both keep track of the various tech projects I do and to give myself something to look back at in the future. I just graduated from the University of Notre Dame this May - four years that felt like 30 seconds! - and now I have some time on my hands to create, play, and hang out with friends.",[11,2372,2373],{},"Unfortunately, I no longer have a cheap and easy way to use Autodesk Maya for modeling and animation now that my student license is no longer effective; I love Maya but I don't think I can stomach the cost right now! So it's looking like for a start I will be familiarizing myself with Blender for this summer. Hopefully I can create some assets to use in a new Unity project that I've been brainstorming, but more on that in the future.",[11,2375,56],{},[11,2377,2378],{},[164,2379],{"alt":2380,"src":2381},"Deck pic","\u002Fimages\u002Fdeck_pic.jpg",[11,2383,2384],{},"Apologies for the wild hair; can't get a cut during COVID!",{"title":58,"searchDepth":59,"depth":59,"links":2386},[],"2020-06-23","Tonight is the first night that this site goes live. I've decided to create this blog and website to both keep track of the various tech projects I do and to give myself something to look back at in the future.",{},"\u002Fblog\u002Fmy-first-post",{"title":2362,"description":2388},"blog\u002Fmy-first-post","V_y-jJEQjqQ57Dsa0ScValnKdS55qm9R6BH-4oNYXMA",1789352072065]