Project Code Monkey - WIP (Local multiplayer!)

Finally finished the base Unreal course and started working on a game of my own!

Right now it’s a small game about running around and being a code monkey (with split screen multiplayer)

If you see something in it you like, ask away and I can help you implement the same in your games :slight_smile:

The latest videos can be found on this playlist, but I hope to make a habit of elaborating on them in this thread…

What’s new:
Technically, everything, since this is my first prototype. I started from the blank C++ project and brought in several good looking marketplace assets:

The skeletal meshes were nicely mapped to the Unreal skeleton, but it turns out there’s a large gap between “close enough” and “working”. In order to get the animations from the starter pack and idle pack onto the Simple People skeletons, I had to follow this rough process:

  1. Set all three skeletons to be based on the Humanoid rig
  2. Make a retarget base pose for the Simple People skeleton that was similar to the reference poses of the others (this was the hardest part to do within Unreal, I think it would have been easier with an external program and then import)
  3. Pick out the animations I wanted and “Retarget Anim Assets”

Sounds simple, but figuring out what to do + step 2 took the better part of a day.

After that, the rest was easy. The main player blueprint is based off of Character, with some tweaks to hook camera rotation up to right thumbstick instead of character movement.

This one is my favorite demo, but I’ve since removed the functionality from the game (but it only took 2 blueprint nodes…)

I’ve added some structure (using BSP box brushes) and a conference room to the office. More importantly, splitscreen multiplayer is Just Working and it was fun to just run around even though there was nothing to do. Speaking of running… I added a run button that gives me 50% more speed and appropriately speeds up my run animation.

All of the directional/spotlights were removed and replaced with an ambient skylight, which is much more pleasing to my eye.

The two big features of this demo are:

  1. More office furniture
  2. Something to interact with!

As far as gameplay, I’m not sure yet if this will be a core element, a side game, or just something you can do for no purpose. The basic idea is that you have to press the gamepad buttons displayed on the right to type out source code loaded in from a text file. I was pretty unhappy with how the widget glowed when placed on the monitor, which I thankfully found a fix for by the next version. As a UI goes, it’s pretty bad, but it is basic gameplay so who am I to complain.

I found a fix for the glowing widget! The only way to keep widgets from being rendered with all of those effects is to render them to screen space. All of the blueprints (except for the player) have been converted to C++, which had some subtly different viewport functions than blueprints have available. In the end, however, I got the widget to scale between two arbitrary world locations and project onto the screen. Those locations are defined by sockets on the monitor mesh itself. Notice that the different monitors with different aspect ratios don’t squish any UI elements :slight_smile:

Gameplay changes:
Now when the wrong button is pressed, it scrambles your code! You just introduced a bug into your program!!!

Going forward, now that I have some proof of concepts for several elements it’s time to sit down with some paper and write up my game design document :wink:

Whew, incredibly frustrating day, but I got a menu working (UMG + gamepads = bad time) and player select for multiplayer mode. I’ll have to do a longer write-up and video when I clean up the code and finish the missing pieces, but here’s a preview:

edit: The secret sauce in player select is that when I open the player select screen, I can go directly to Slate and set focus on a widget by controller id, even if there’s no player associated with it (yet). So I do that for 4 players and send an event out from my player select widget that creates players when I see a controller pressing the Start button.

For the main menu, if I detect any navigation type controls (up, down, left, right, A, B) on the outer widget, I reset focus to the first widget in the vertical box, which feels pretty good.

I’ve done a lot of refactoring since my last update, getting my code untangled and stuffed into a nice state machine. This video focuses a bit more on the gameplay than menus. The game now has an events coordinator that will randomly generate a list of meetings for the day. Each meeting consists of a time and a location (plucked at random from possible meeting locations in the world). 15 in-game minutes before the meeting, you’re notified that a meeting is about to occur and a beacon pops up on the zoomed out view (also new!). If you can’t get to the meeting before it ends (15 in-game minutes right now), then you’ve missed it!

The plan is for the programming minigame to be the core and events (not just meetings!) will be the distractions that the player has to deal with. Also TODO: make a nice UI for notifying the player of meetings…

(Nothing new in the video until the last half, so feel free to skip ahead)

Spent a while polishing the UI and game flow before I sent the prototype off to friends to test… A lot of work without a lot to show for it (other than ease of development and less buggy behavior). I do have some basic coworker AI to show off though :slight_smile:

The basic system here is that on startup, the game mode will query the level for Workstation actors and assign an NPC to that workstation. This way I can have cozy levels with 3-4 coworkers and big whopping levels with 50+ coworkers like the one in the video.

Will you have power-ups? Will they be Fritos, Tab, and Mountain Dew? Will I have to endure boring meetings with Boring Manager Rob?

Jokes aside, this is fantastic. I’m genuinely looking forward to getting to play this.

Yes, but a little more boring to go with the corporate theme… temporary keyboard upgrades, etc. And absolutely yes, someone will have to attend the meetings or team morale will decrease!

Long time no update! I took a break for a while to get other aspects figured out (starting a business!), but now I have a clean rewrite of the prototype and am closing in on making a demo available via Steam. Lots of polishing steps, but the core gameplay is there!

1 Like

I’ve got a public build if anyone would like to try it out and/or give feedback :slight_smile:

(copy pasta from /r/gamedev Feedback Friday…)

I have to admit this build has some pretty rough edges (UI and AI especially), but I’d like some feedback on the core gameplay.

TODO FIXME is a couch coop game of software development. You are a cog in the machine. Spend each day trying to get projects finished while also attending to meetings and other necessary(?) busywork.

// TODO: insert download link here ~250mb download

Notes:
Please use an Xbox controller, keyboard isn’t fully supported anymore

Mechanics:
Play the coding minigame at your desk (press X) to push forward and progress on the next project feature. Of course… you might have a meeting scheduled. If you attend the meeting, you’ll get a healthy bonus to your coding productivity (in exchange for 15 minutes of your day!), but if you skip it you’ll get dinged and out of sync with your team (-10% efficiency :frowning: )

I plan to have more minigames and events, but since only have meetings and the coding minigame are implemented this build is limited to 1 hour of the workday.

Things I’m brutally aware of (but wouldn’t mind tips):

  • Keyboard users can’t play the coding minigame, this build is best experienced with an Xbox controller (and strangely doesn’t map right when streaming via Steam).
  • It could use a lot more animations, especially for NPCs at meetings and idling at their desk.
  • More sound! I haven’t yet found a good track for the background, but feel free to find some muzak on Youtube while you play.
  • Co-op hasn’t been tested in a while, I bet it has UI oddities.
  • Needs a tutorial level :slight_smile:

Doing a bit of late night work on a tutorial level (and requisite UI improvements)…

Here’s a sneak peek of what I’ve got so far:

1 Like

Privacy & Terms