• You can syndicate your blog to the GameDev.net community.
Learn how here.

# Blogs

## Manipulation of a sprite

I am thinking, that even though it is a prototype, we should build in the animation. Mainly, this is because I don’t want to do it later when we replace the graphics. So far we have the player attacking without any animation, and I am about to implement player jumping, again without the graphics. So, its a prototype, so we don’t want to waste time ( maybe looking for graphics, or building new ones ) , and we don’t want to invest into it ( buying premium assets ). SO, i am going to manipulate the ones we got. Boom, right!? I just found that the sprite pack we are using for the player actually has an attack animation, so thats great. I am going to make a jump animation for four directions and then implement it in the game, and then go back and do the attack animation. I am thinking that I can make the sprite have the shadow, and just move the image…and not the collider? I don’t want the player “bumping” into a mob that is two squares above the player because he is jumping into the ‘air’ . I had thought about having a tile map for representing mob and player locations, this way we could have a virtual ‘zed’ axis for the player to jump up into. maybe that would be overkill? And now I am realizing that if a mob was to fly, it would have to have location tied to the ground. hmmmmm Lets try just having the sprites be displaced from the collider ( so the image moves in animation but the collider stays put ). I think this makes sense. Other than missile attacks….. shit. Oh boy, two colliders? Why the heck not, right , I mean,…. I am not even sure that would work. How about we just go in that direction and hope it all works out for the best lol! HAHAHAHAHAHA So, lets do this beeeatcho machado ! First, the damn sprite. I hope this works lol front
side back Yeah, so …. a little distortion and a shadow?!////….. mmmmkay, lets see if it works lol A day goes by, and I am wondering if i might be doing this wrong. So just to recap, the issue is this: We want the player to jump. It is a 2d world, where everything is a flat image in the X and Y, and then there is some layering of images in the Z. If the flat image could jump, the change in Z wouldn’t really be seen. in fact, you wouldn’t see it. So the idea was to have the sprites image move/animate, keep the collider still as to not ‘bump’ into sprites to the north of the player, and probably create a DoubleZed variable holding the virtual Zed difference. So, mobs at ground level would be 1, and a jump would go to 2, and a bird could fly at 3-5 or higher…. things in the water and underground would be 0 or less. When I write it all out, it seems completely retarded, like I am overthinking something really simple. I do this a lot, hence my internal suspicion. The part of this I think I should change right now before implementing it in unity is not having the jump animation include a shadow, but instead, create a shadow in real time…. some way , some how…. maybe if using a light source and actual shadows, it might look really awesome. Or if anything else, it would be a object within the player object, that grows and shrinks depending on the jump height. Just frames, no shadow Ugh, just got the animation clips set up and then had unity crash, only to reboot and find I didn’t save . The clips are still there, just empty. Nothing quite like doing something twice. Okay, back to it. So when it crashed, the player woulden’t move, yet I hadn’t done anything in the code, only set up the animation clips for attacking and jumping. In my jumping animations, I had transform properties animated, which apparently is a no no if you are moving the player via other means. I think anyways. But this makes sense, and it is better. I am not sure what I was thinking. So, yeah, the script will control the jump – and this way we can turn the collider into a trigger while its in the air, which will be the solution for bumping into bad guys ( or untouchable blocks ) when jumping. I also don’t want to write a gravity script…. so, to use the Unity physics engine, we will turn on Gravity momentarily , take note of the jump off point, and when we reach it again, we will stop the player, nullify its velocity, turn off gravity , and make sure the player is where he jumped off from. Boom!
Two days later, and the player animates whilst attacking ( I think he is animated to shoot a bow, so reversing the motions kind of make him look like he punching – and then the weapon item can have a animation set, that should be able to append to the animation and play together – that is going to look crude as heck for the prototype ) and jumping!
attacks look good, jumping standing still or side to side is good, but jumping south and north??? not so much lolFocusing first on jumping north, we have to calculate where the ground is, or rather, where the shadow should be, minus the distance Y+ that is from jumping. I thought it would be as simple as the_ground = player_position.y – velocity.y if velocity.y is above zero. Close but no cigar. The shadow goes from bottom to the top of the screen with no real relation with the player, which ruins the illusion. So here, it works, pretty darn well, and honestly I have no idea what the #*@! is going on so now, jumping south. Basically, the shadow becomes the “landing” point, so going south was a bit of a challenge in the sense that the player doesn’t really show any kind of true movement, the shadow becomes the new “spot” to where the player is. So I simply make the shadow move to a certain point based on jump height ( a variable ) and then allow the player to “fall” ( in gravity ) to the shadow.

## Demonstration of Map Mesh

Last month I described in words how I was building a clickable map using vertex colors. Well, a reader requested I make some visuals to demonstrate what I was talking about, so I whipped up a demo in Unity and grabbed a video of my screen: You can see a tile grid with vertex colors, and all the colors are scrambled every click. Technically you could do this with multiple materials, but you would need a lot of materials (one for every color, which is basically every tile) with that approach. That creates two problems: You would need to store and keep track of all those materials. This is actually not that bad, but would be really annoying, and a waste of memory for a big map. Every material forces a draw call. This is the bigger deal, since lots of draw calls is bad for performance. By using vertex colors, the entire map is just one mesh with one material (using a custom shader that displays vertex colors). And it’s super fast to update the colors, as opposed to rendering onto a texture or something. The other thing apparent in this demo is the sphere moving around. I threw that in as a quick demonstration of mouse interaction. By doing a raycast against the map mesh, I can easily determine the triangle that the mouse is over. I can use that to index into a list of tile data that was generated along with the mesh, returning (among other things) the center of that tile. You can’t see it in this recording, but the debug console is also printing the name assigned to each tile. So like I said last month, this kind of proc-gen mesh is really useful for doing a strategy game’s map!

## Interview With the Co-founder of Bottlespark about his new book, “Start Streaming”!

I recently got the chance to interview Travis Shreffler one of the co-founders of Bottlespark about his new book, “Start Streaming!: 100 Definitely Real Tips for Becoming a Successful Twitch Streamer” “Remember when your parents told you that you’d never be able to make a living playing video games? Well just like everything else, their generation was wrong about that too. However, the road to success can be long, hard, and sometimes hairy. You’ve been looking for something to make it all easier, right? Well this is it! The tips in this book will help guide you to being a successful Twitch streamer before you can say “What do you mean there’s no retirement plan?”. In this book you’ll learn: -What you need to get started (Hardware, software, and hair color)
-How to utilize social media to grow and network (mostly TCP, FTP, and HTTP)

## Doom Challenge + Other Things

I haven't been too active on here in the past few months since my last blog entry back in June when I finished up that side scrolling challenge. I also haven't posted about my 3D Chess challenge yet, but I did complete the game fully back in June as well (less the music track), and I just haven't bothered yet uploading the final blog entry (part 2).   I've been pretty busy with work and dealing with some other issues the past few months but I'll be starting up again soon.  I'll work on finishing up a music track so I can put a nail in the coffin on the 3D Chess Challenge I did. I will also be doing a full re-work on the side scrolling challenge because it's way below anything I would've liked to release, but I honestly spent little time on it. This will happen after the DOOM challenge has been completed. DOOM Challenge below for those interested in taking part:     I'll post more about this in my Part 1 post hopefully sometime this weekend. I'll be keeping everything the same in terms of movement, and game play, even shooting. The main difference will be the graphics revamp.  I have a few ideas for enemies and weapons which I'll concept out. I'm very excited about this challenge and I hope to see a lot more people participate.

## A Brief Origin Story

“It’s a big idea, but we can do it.”
-Me, an optimistic idiot, paraphrased. Since 2014 I have had one night stands with programming and game development tutorials; only flirting with the journey of game development because committing to it meant work which significantly affected my privileged habits. Though I dreamt of doing so since youth, I never practiced the discipline required to do so. My responsibilities were and continue to be demanding as a husband and father, yet I believe something is better than nothing, and tortured myself over what could have been even with small portions of work. Summer 2018 was one such season; I loaded tutorials and thawed old ideas frozen in procrastination carbonite. I settled on a vision and got to work. By autumn I realized my insufficiencies meant an extensive timeline to accomplish all ideas in my large scope. I was going nowhere fast and considered giving up game development for good. Instead of following the advice of successful creators to simply narrow the scope, I banged my head against a wall I didn’t need to climb. Winter-ish 2019, I get a message: “I’m a dope programmer that can’t decide what game to make.”
-Dave, unsuspecting idiot, paraphrased. Dave and I became friends about 5 years ago when we worked together at a restaurant where we bonded as husbands, fathers, gamers, and other similarities. We’ve kept in touch since we left the restaurant now and again, but being in such a similar headspace still amazes me. He had the skill, but not the design.I pitched the idea, and God knows why but Dave agreed; a thrilling survival game set in the first era on a new world where you play as a primitive alone in the wilderness. It’s a ridiculous design for a first game. Every tutorial I watched preaches some iteration of “start small, learn, go bigger”. Perhaps if the prototype fails we’ll scale back, however this feels worthy of extra effort and delayed gratification. I believe with Dave’s and my talents combined, love from our family and friends, a God portioned miracle, and a little luck; we’ll have something worthy of your time that brings you joy. Or so we hope.

## What do an Architect and a Neurologist have in common?

Blurb about game: Our first project Pop the Line, is the ultimate time-killer, or so we hope! It’s a casual mobile game where you have to tap with you little popper at the right colour at the right time to Pop the Line. Switching colours fast and synchronising your taps perfectly gets you extra points.  It’s simple enough that our parents and 5 year old nephew can play it but there are many additional challenges through the game: movements, rotations, fake lines, darkness and many more!  What inspired this game? We both “enjoy” long commutes to our day jobs and spend hours listening to audio books/podcasts and playing mobile games whilst on the train. We wanted to make a game that other people stuck in public transport like us can enjoy!  Also since we are new to game development, we wanted to start with a relatively simple project that we could learn from and grow, before moving to more ambitious games. Pop the line was the winning combination! What makes it unique? Hundreds of levels with many many challenges. Although the gameplay is simple, the game grows with the player and becomes more difficult to master with each level.   What will make it a success? It’s simple gameplay. Pop the Line is easy to get into but difficult to master. Even we don’t get three stars all the time and we have played each level countless times! It’s great fun too!  Who do you think it will appeal to? Everyone stuck on a train, tube or bus or forced to endure a boring meeting or lecture! Number of people working on the project and skillsets: Just the 2 of us and we have done every single thing ourselves.   How are you handling art? Created by us in house with some icons from noun project.  What tech/stack do you use? Unity Also gimp, krita, inkscape, hitfilm express, ocenaudio and others depending on the specific task at hand. Are you full-time? If so how did you make the switch to working full-time in game development? We both have full time jobs; game development happens early in the morning, late at night and on weekends… We would like to have more time to focus on game development in the future though. Is this your first game? If not how many and what other sorts of projects have you worked on? The very first! But we went through many prototypes for games until we ended up with this idea.
What’s been the hardest thing about making this game? Maintaining motivation. Finding the time and energy to develop after a difficult day at work has been a constant challenge. We try to keep each other enthusiastic though and definitely being a team (even a team of 2) and not a solo developer has been a huge help in maintaining motivation levels.  Anything else you would like people to know about you or the game? We are always looking for feedback and a chance to improve! If you have a moment please take a look at our game or even better download it here https://play.google.com/store/apps/details?id=com.Versality.PopTheLine and let us know how we can improve it!
The post What do an Architect and a Neurologist have in common? appeared first on Gilded Octopus.

## Doomed Beginnings

I started the Doom game dev challenge. Wrote out all the things I'll need to make and develop. Like all project starts, it's still looking good. UE4 is the engine I've chosen. It will be fun getting that engine to behave more like Doom. So far I've created a few graphics (about 65% of them done so far). I decided, against better judgement, to make the enemies in eight different directions. This is for a few reasons, one is that I want the mobs to wander a bit until they see the player, and the other is that for the GemDev.net power up, I want to slow the mobs down to half speed, which would allow the player to move around them and I didn't want the mobs to always face the player. I'm only planning on doing three mobs for the challenge, a zombie, a demon, and a hell puppy. I dropped the detail from the original by about half, I hope that I can still get a good looking aesthetic. Also some power ups, an ammo box, a medium health pack, a medium armor pack, and the GameDev.net power up. I'm going to try to finish all the graphics this week, then start in on the programming. The hell pup took a lot more time than I wanted.

## Interview with the #GameDev Behind Shores Unknown!

Ilya Rudnev Twitter Handle/ Other Social Media:
Personal: https://twitter.com/Irufufu Game: https://twitter.com/ShoresUnknown One interesting and random fact about you that people would not necessarily guess:I picked up most of my spoken/written English by playing online games, Diablo 2 and World of Warcraft to be specific. I also speak conversational Japanese. I picked up most of my Japanese by… playing more games and chatting in Skype to the person who is now my wife. What country you live/work in:
Japan The video game company producing the project:Vallynne The name of the project:
Shores Unknown Estimated release date:Q1 2020 on Steam and Nintendo Switch link to website/blog/steam page/Youtube/other:https://store.steampowered.com/app/899460/Shores_Unknown/http://shoresunknown.com/ How did you get into making video games?I started making games in early childhood, initially using pen and paper, then moving on to making maps in editors for games such as Warcraft 2. I was always fascinated by fantasy storytelling and dreamed of, at some point, creating my own videogame world.Eventually (in 2009, to be specific), I got a job in game QA, which was my first step in the professional game industry.

What is your background in?I studied physics of plasma (seriously) for 3 years, then quit that and did another 4 years in business IT. Blurb about game:Shores Unknown melds tactical JRPG combat and Western RPG storytelling, dropping you and your mercenary company into the midst of a hidden war. On the run and seeking retribution, unravel the mysteries of the Murk – a wall of fog from which no ship has ever returned… Until now.
What inspired this game?Oh, many things. I initially started working on this project while learning UE4 to make a tactical RPG inspired by The Last Remnant’s approach of combat with its multiple player parties (it wasn’t supposed to have plot back then).As the project grew, core mechanics changed, we dropped the multi-party “indirect control”, and also decided to make it a story-based experience, influenced by classic RPG titles such as Planescape: Torment and Baldur’s Gate and literary works of Steven Erikson (Malazan: Book of the Fallen) among other things. What makes it unique?The game takes place in an original fantasy setting, in which it is implied that the world is heavily shaped by will and belief. That’s one of the main themes we wanted to explore in Shores – “how does a strong will affect the world, and what happens if wills clash?”We also designed our own combat system, which mixes some well known-concepts from other RPGs into an experience not quite seen before. It’s turn-based, split into two phases: order (in which you assign commands to your characters) and action (in which the characters resolve their orders automatically). The characters maneuver around the battlefield automatically, and, unlike most tRPG these days, there’s no grid. There’s a lot of focus on keeping the amount of micromanagement the player has to do minimal, and while the combat is turn-based, it’s still quite fast-paced and dynamic.

What will make it a success?We hope that Shores’ combination of original story, emphasizing player choice and consequences, beautiful music, colorful stylized low-poly graphics and engaging strategic combat will make it popular among the players! Who do you think it will appeal to?CRPG and JRPG players, people who like a good story, people who enjoy tactical games (but are maybe a bit tired of grid-based tactical games), people who like atmospheric experiences and medieval/fantasy settings. Number of people working on the project and skillsets:14 including outsourcers at the moment. I do game design/programming, then we have 3 scenario writers and 3 level designers, a composer, and the rest are 2D/3D artists. How are you handling art?General approach is create a 2D concept based on references that I provide, then transform result into a low-poly 3D mesh. In some cases, we skip the 2D concepting step and jump to modelling right away. In that case, usually we at least make a whitebox mesh to help guide our 3D artists. What tech/stack do you use?Unreal Engine 4 + Blender.

We also have a Discord server which we’re planning to use to run some closed beta tests later year, so consider joining that as well: discord.gg/q8VcWeB The post Interview with the #GameDev Behind Shores Unknown! appeared first on Gilded Octopus.

## GTD Videos

Add good links on GTD videos here. Please, use spoilers. David Allen's Top 10 Rules For Success GTD in Trello - Getting Things Done Tutorial David Allen - How To Get Things Done

## Game engine devlog new video

Hi all,
here is a new video about the engine and the game that I work on in my free time after work.
This time I hope nothing happens to the frame rate of the video...

## Snake - The game menu

The game menu is coming along quite well.  You can interact with the menu items with the keyboard or mouse.  It highlights the focused item, and shows some descriptive text along the bottom.   I'm actually quite pleased with the way it's structured as well...  though I'll admit to having quite a few frustrating moments fighting with the C++ STL classes. 🤣  For the game options, I'm going to implement a simple slider UI -- that'll be the next thing to tackle.  Once I have that, I should be able to blaze through the rest of the game options. There's a whole lot I could say about how I structured the menu, but as I have to head off for family stuff right away I'll just let the latest GitHub commit do the talking!

## #WeekInReview

Week In Review: ‘The Mill’ and shaders, shaders, shaders… Let’s bring you up to date with our weekly summary! Visuals Second scene ‘The Mill’ Main character design and animation in progress Sprite distortion via shaders for dynamic wind visualization Shader for 3D mist effect Dithering shader for new field of view visualization Unity Implementation of our second scene WeatherManager refactoring Manual and dynamic weather feature LockDirection feature for upcoming combat system Learn the ropes of shaders Several fixes and minor improvements Combat system performance boost Combat system in progress Character editor in progress   Check out our recent weather teaser and don’t miss our main character revelation on next #ScreenshotSaturday! Take care!   http://rubikon.dev
https://www.instagram.com/rubikongame/
https://www.reddit.com/r/Rubikon_Game/

## Snake - Moving on to game options

The most basic version of my SFML "Snake" clone is now playable, including background music and some rudimentary sound effects.  (The "eating an apple" sound was literally just me making a mouth sound.  I guess that makes me an "ASMRtist"?) I tagged this as "snake_1_0_0" over on my Github repository. Now I'll be moving along to adding game options.  Everything in the image below is still part of my "phase 1".  I'm happy with where things are at, but also slightly bummed because it'll be back to my regular job in a few days. 😥   Some things I feel I'll need to improve upon when I get to "phase 2" (the story mode with level progression)... Loading and managing assets.  So far I've done this with member variables for music, sound, and textures.  If I want to be able to improve the graphics, and perhaps include animations, I feel I'll need some kind of asset management structures. Spawning game objects.  Spawning of the apples is also controlled by two member variables:  "appleExistsFlag" and "applePosition".  That approach definitely won't scale well if I want to have, say, multiple apples or a row of carrots pop onto the field. The "QuickGame::update" method is kind of getting out of control.  Now that I'm typing this, I think I'll add an issue for that over on Github so I don't forget...

## IGN interviews Andres Bordeu and Juan Pablo Lastra at Gamescom about Rock of Ages 3 (new footage)!

Let's keep it rolling! Starts at 1:03:59! Rock of Ages 3 Website --- Follow ACE Team: ACE Team website Steam group Discord Reddit Twitter Facebook "ACE Team fans" Facebook page YouTube Twitch Player me Tumblr Instagram Minds Gab ВКонтакте

## Communicator up and running

Hey all, I just got my communicator working. It's not glamorous art, but it's good placeholder for now. I have 4 counselor robots for the 4 pillars of the game: Build, Navigation, Research, and Military. The communicator blinks a button when we queue up a dialogue. The screen will then fade to the dialogue screen, where we display the character portrait, and run through the dialogue. Lots of placeholder art. We run through the dialogue, we have lots of choices in the bottom portion of the screen when we get to options, and when it's done, we go back to the last screen we are on. The DialogueDB keeps a dictionary of all the dialogue in the game, and we send it an enum to pop out the dialogue. The dialogue is queued with the respective counselor button, so if we get 3 messages at once, we will run through the dialogue when the player wants to deal with the messages based on which one came first. If there's more dialogue, the communicator will pop back up and the player can choose to run through the next dialogue. So the next part is something I've spent all week trying to figure out how to handle. How does the game know when there is dialogue? I've thought alot about the observer pattern, but how do I hook up the observer pattern all throughout my code? I want dialogue to trigger when certain events happen. I want dialogue to trigger when you max out your resource stores and lose material. I want dialogue to trigger for ANYTHING. So how do I have my code listen in throughout without using monobehaviors and also not violating SOLID principles or the state of objects or anything that could possibly go wrong? I came up with an idea to have a DialogueTrigger class. This is something I think I'm willing to sacrifice some SRP by having these triggers inside the classes of my Colony Map, or map tiles. For instance, if we max out our storage, and we are now not being inefficient, we will call the dialogue trigger class. Inside the trigger, it can count down, or if it's just an event, it will trigger the event. This will send a message to our dialogue database to trigger a dialogue, and then my dialogue system handles it from there. So I can have these "portals" with dialogue triggers. The code doesn't know what the trigger is, it just sees a trigger and calls it. The class itself decides when to send the dialogue. I really can't think of anymore elegant solution, so this is what I will be going with for now. Visual Studio is actually pretty good about keeping tabs on when these dialogue triggers are called from, so if I need to remove them, I'll have an easy reference back to them. So the first step to game flow is to get these dialogue triggers working, which honestly shouldn't be hard, and then start polishing the game flow from start to finish...what do I want the player to see or do? This will be the next step to getting a playable prototype to start running it by some gamedev forums.

## Event system

When I realized that the classes are getting really big and complicated, I splitted them into smaller classes. So the Actor class doesn't do everything anymore, but has some components that do the work instead. A Common problem with this approach is, how do Compositors (in this case the Actor) and Components communicate? Some might say they shouldn't communicate at all, use something like an ECS etc. I looked at ECS et al., and they may be fine when you design your application around it, but I didn't. Up to now I just friend'ed everything and called private methods, but that doesn't seem to be very elegant. Another approach is some event/messaging system. So interested parties subscribe to interesting events, and other may trigger those events. There are many such event systems out there, but all seemed to be too heavy for me, so I made a minimal implementation of such a system. I think this implementation has some Pro's and many Con's: Pros Type safety Event function can have any signature even with return value. The CallOne() and CallAll() functions returns the same type as the called function (or a vector of it). You must define at compile time the signatures of functions your a going to call, and you can not call anything else. You get a compile error when a function signature is not found. A called function may be a std::function or Lambda. No inheritance needed. Single header file events.h, only ~110 lines. Minimal run time overhead. Cons Function signature must be passed to each call of Subscribe(), CallOne() and CallAll(). You must define at compile time the signatures of functions your a going to call If you do anything wrong (e.g. wrong function signature), you get weird error messages Increased compile time, because a lot is done at compile time. But what you can do at compile time, doesn't have to be done at run time. You can not unsubscribe from events :(. Examples Lambda sa::Events< int(int, int) > events; events.Subscribe<int(int, int)>(1, [](int i, int j) -> int { return i * j; }); auto result = events.CallOne<int(int, int)>(1, 2, 3); static_assert(std::is_same<decltype(result), int>::value); assert(result == 6); Lambda 2 sa::Events< int(int, int) > events; auto func = [](int i, int j) -> int { return i + j; }; events.Subscribe<int(int, int)>(2, func); auto result = events.CallOne<int(int, int)>(2, 4, 5); static_assert(std::is_same<decltype(result), int>::value); assert(result == 9); Event not found When an event does not exist or nobody subscribed to the event it returns a default value, e.g. 0 for an int: sa::Events< int(int, int) > events; events.Subscribe<int(int, int)>(1, [](int i, int j) -> int { return i * j; }); auto result = events.CallOne<int(int, int)>(2, 2, 3); static_assert(std::is_same<decltype(result), int>::value); assert(result == 0); Methods class Foo { private: sa::Events< int(int, int) > events; int Bar(int i, int j) { return i * j; } public: Foo() { events.Subscribe<int(int, int)>(1, std::bind(&Foo::Bar, this, std::placeholders::_1, std::placeholders::_2)); } int DoBar(int i, int j) { return events.CallOne<int(int, int)>(1, i, j); } }; Foo foo; auto result = foo.DoBar(3, 2); assert(result == 6); Different signatures sa::Events< int(int, int), bool(int), void(void) > events; events.Subscribe<int(int, int)>(1, [](int i, int j) -> int { return i * j; }); events.Subscribe<bool(int)>(2, [](int i) -> bool { return i != 0; }); events.Subscribe<void(void)>(3, []() { std::count << "No arguments :(" << std::endl; }); auto result = events.CallOne<int(int, int)>(1, 4, 5); static_assert(std::is_same<decltype(result), int>::value); assert(result == 20); auto result2 = events.CallOne<bool(int)>(2, 5); static_assert(std::is_same<decltype(result2), bool>::value); assert(result2 == true); // void events.CallOne<void(void)>(3); Multiple subscribers sa::Events< void(const std::string&) > events; events.Subscribe<void(const std::string&)>(1, [](const std::string& s) { std::cout << "Subscriber 1 " << s << std::endl; }); events.Subscribe<void(const std::string&)>(1, [](const std::string& s) { std::cout << "Subscriber 2 " << s << std::endl; }); events.CallAll<void(const std::string&)>(1, "Hello Subscribers!"); Should print: Subscriber 1 Hello Subscribers! Subscriber 2 Hello Subscribers! Conclusion I was able to get rid of many virtual functions and the classes got lighter. But the usage is a bit cumbersome, because you always have to pass the function signature of the event as template argument, but you get type safety in return. Download Get it from the Github respository if you are interested (MIT).

## #ScreenshotSaturday

Last week was mainly influenced by shader work and bringing the mill to life. The sunset hits the land when we arrive the farm. But there is nobody home yet...
Maybe our real character will find him on next #ScreenshotSaturday? Check out our second scene with weather effects.
http://rubikon.dev
https://www.instagram.com/rubikongame/
https://www.reddit.com/r/Rubikon_Game/