Let me know what you think
Let me know what you think
Hi ! This is our first Ludum Dare entry. Hellbound is a 2D action/adventure game, in which you play a demon fighting to escape his cell.
The game is missing a few details, such as a boss fight, and lacks an ending. That will be added in the following days. The update will be available on https://nym-and-permilias.itch.io/ .
Directed by Martin Jacob
Programming by Léo Marambat-Patinote
Art by Sacha Rivière and Alexis Descamps
Additional graphics by Charline Hedreville
We are first year student in a video game school ! We hope you enjoy our work.
— CONTROLS —
Use Z,Q,S and D to move.
Spacebar to Dash. Move the mouse to look around.
Left click for a short-range attack, right click to cast a fireball (5 seconds cooldown).
Took a while (too many projects at the moment; loving it!), but here it is: Part 2. The basis of the system is still a reactive AI using heuristics. It doesn’t plan ahead at all, which is good enough even if it does show every once in a while.
The full AI code can be found here, if you care for that sort of thing!
Heatmap, the main technique utilized, simply stores values in an extra tilemap (int array!) for spatial information evaluation. In this case the heatmap stores threat and support values used in choosing the AI attack target and movement path.
The recursive heatmap function is called for each enemy and ally on the map
Calculating the threat (and support) values is a cinch: Add up the probable averages of all usable weapon types of your allies and enemies. There is a bit of quess work involved if the enemy ammo counts are not known already.
Nothing out of ordinary here I’d hope
New feature alert! Taken that we already have threat values for each group and location data about safe areas, we might as well have a bit of fun with them! Every time a group gets into a fight its support value is compared to the threat level around it. A high enough difference will send the group in panic, running away from enemies and finally fleeing if reaching the level border. Now you can bully your enemies to submission!
Panic also ensues if the total enemy force is overwhelming, but that is checked elsewhere
Simple and seems to work alright. In the next project I’ll be using Monte Carlo Tree Search, no doubt about that. It is much less work with potentially more intelligent results. Working on a generic version at the moment.
seththefirst suggested taking a look into AI utility functions in part 1 . The threat level comparison turned out to be sufficient so I didn’t implement anything like it, but maybe you (yes, you!) will find it useful.
The Post-Jam version is still far away (I’ve hardly had any time to work on it yet) so I might as well talk about the AI of the Jam version and the plan for the Post-Jam AI.
The first version of the AI was finished in the morning of the second day. It had one goal and one goal only, EXTERMINATE! In simple terms each unit finds the closest enemy and moves towards it. They also check that the path to the enemy is not blocked, by simply finding a path to it. This could cause slowdown with bigger maps and larger unit counts, but here it is just fine and dandy.
So far the AI doesn’t take into consideration the main mechanic: scavenging technology. Implementing such behaviour, the quick and easy way, requires nothing more than adding technology distance checking into the previous code. If there’s technology closer to the unit than enemies, then that is what the unit will go for. On top of this the unit won’t move until it has completely excavated the technology.
I could have stopped here, but there was an annoying deficiency in the artificial thought process. The units don’t prioritize actions; In other words, an attacking unit is sometimes blocked by a scavenging unit.
The fix is slightly more elaborate than the previous step, but by no means complicated: tally up the best actions from all units and choose the most important one based on the target type and distance. Here’s the final AI in action.
There are still a few things I’d like to implement in the AI, namely threat assessment and intelligent positioning. As luck would have it, there’s a single technique which can be used to achieve both of these goals: heatmaps! A heatmap is simply an extra tilemap which contains values based on unit proximity and threat level (if you are lazy you can even reuse the world tilemap objects for this purpose). Heatmaps can be used in selecting the target (lower threat value is preferred) and in pathfinding to choose the safest route to the target.
Keep it simple and you’ll go surprisingly far.
Click for the free version!
Unity is powerful, but hard to use for non-programmers. So, a drag-and-drop framework that eliminates the need for coding or visual logic editors, MultiGame is a comprehensive game development framework for Unity.
It’s easy. Want health? Add it. Inventory? Click. Combine objects and components together to control Unity itself directly. Full documentation is built in to the editor! Just click “help” on any MultiGame component, or hover your mouse over field names for a helpful hint. The full version of MultiGame includes over 130 components, and growing every week. Powerful Managed Message functionality lets MultiGame command any script component even if it’s not included with MultiGame! This free evaluation version contains a few dozen of the most useful components in MultiGame. You can even use this in commercial projects, free of charge! But, if you like MultiGame please send feedback!
MultiGame is intuitive. Use it’s robust Interaction system to receive events such as player input, triggers and collisions, broken joints and send Managed Messages using an intuitive and consistent interface.
MultiGame has an ever-expanding feature set and the full version already contains over 150 components including:
-Robust Message Manager that can send commands to any script
-Motion for transforms and rigidbodies
-General game functionalities and scripts
-Modular AI system
-User created content and construction/destruction systems
-Combat system including health, damage, projectiles, and melee with combos
-Save/load entire game to binary
-Multiplayer support with Photon Cloud
-Mecanim state machine behaviors (state machine visual scripting with Mecanim editor)
-Level and prefab generator (beta)
MultiGame is great for adventure, physics, tower defense, RTS, RPG, FPS, MMO, open world, action, racing, arcade, or really any real-time genre or combination of genres you can imagine.
I would appreciate your feedback before I go for the full release so please:
This is the result, made by one single person. I would like to add more puzzles, would you like to have more thinking-puzzles, or adding a deeper meta-game, like the fish (player) is an AI and the whole game is running as it was a simulation inside a computer, so it can learn and when you finish the training you let it free in the real world where it can posses a robot-fish and swim and help animals and protect nature?
I want to start with a big thanks to every person who’ve played my entry so far. You are the best!
After each LD, I like to write about what went right and what went wrong (which is normally an extensive list of hilarious fails and the occasional random good decision), but this time I’m doing something a bit different. I’ll be focusing on something that a lot of people seem to be intrigued about: The AI for the enemy spaceship in my entry; R-ADIUS:
I didn’t think it was something worth writing about, but surprisingly a lot of people seem to think it is and have shown interest on a full write-up on how it works, so I guess I’ll do exactly that, hoping that it would help someone out there… somehow….
I don’t know.
If you are one of those who wanted to know the magic behind the “clever” ship, you’ll be incredibly disappointed, though.
I have have to say that I hate this theme. Really, there were so many good themes there, why this one could win? Damn you!!!! The theme isn’t an excuse to not do a game, but I spent so much time thinking of what I could do with this… A game not based on fights? Weapon is love? The weapon must be abstract! This is clichê? Oh damn… I finally came up with an idea, after 14 hours (counting sleep time)!
My game entry is about “democracy”, with quotes. The democracy and progress are the weapon of the government in the game, they want you to attack other species in order to “spread democracy and progress through the galaxy”. The player controls the invasions to planets inhabited by bugs with the goal to kill the natives and collect the planet resources.
The game is a very humble tribute to starship troopers (novel by Robert Heinlein and film by Paul Verhoven and Edward Neumeier). I wanted to create, somehow, the sense of order and progress presented by movie.
I always start by the core mechanics because it is the main component of the game – if I can’t find time to make graphics, at least I have a block-based game.
I also always wanted to create a game in a circular world, that was my excuse. I had no idea how to do that, but at is was pretty simple. You have a world centered at (0, 0) with radius (r), than you can set the origin of all objects in the world to (0, r) and only manipulate the rotation to place than in the world.
After the basic world structure, I could drop structures, and these structures could create units. To control the units, I created a behavior tree to control each unit – the first time I really use behavior3js – and a behavior tree to control the bugs strategy. Figure below show these behaviors trees:
Then it came to particles and easing! Man, I love these two. The animation below shows the game at this point:
After 28 hours I started to create the sprites and visual things in the world. I was stupid enough to lost time adding some details to sprites that don’t even will see because the sprites are very small (about 20 pixels). I also spend a good time trying to create a futurist screen aspect, which ended up very cool.
I added some scenes, UI and some other effects to the graphics:
When the clock marked 5 hours to end the competition I started create sounds effects and music. I was desperate because of the time, I still had to adjust the levels of my game and I didn’t know what to do with sounds. At the end it was pretty simple and I didn’t do much, actually recorded some sounds with Audacity, generated most of them in BFXR and generated the music in SoundHelix.
I finished the game in the packing hour, the extra hour after 48, the time to deploy and write about your game.
I’m very critic about my games, I really fell for to not balance properly and create more content to the game, but well, it was made in 48 hours and this time the good stuff was really good! Moreover, this was the most complex and complete game I ever made for LD, it was really hard to do, thus of course some things would be missing.
This is my 5th LD and I am in again. But this time I have a request for you: please do more games with artificial intelligence! I mean, you don’t have to make an awesome stupendous incredible AI, a simple and functional AI is more than enough. There is a lot of libraries out there, and a lot of easy techniques to use: minimax, finite state machines, subsumption, utility functions, fuzzy, behaviors trees, boiding… (note: you probably will want to take a look at these before the compo if you want to use without prior knowledge).
Try something new, try some new game AI!
My personal goal in LD is to use artificial intelligence algorithms as part of the core mechanics of all my games. I have 3 games out of 4 so far, and I want to increase this score within this compo. I’m planning to use Behavior Trees properly this time (especially if Companion wins!).
Three days and many laughs later, “Blue Screen of Love” is finally complete. For myself and my team it was our first Ludum Dare, and despite a curveball with the theme we charged head-first into a ridiculous yet heartfelt dating sim between a person and their computer.
We used twine to create the story and HTML/CSS to make the interface.
Finally I finished my entry for this Ludum Dare (LD31, the theme is The Entire Game on One Screen). This time, I am so exhausted that I couldn’t do any progress report during the weekend, but, on the other hand, I could finish the game, including the mechanics, graphics and sounds.
My idea was creating something with artificial intelligence (again) and for some reason, after the theme announcement, I remembered that I never touched at a flocking algorithm and this would be a good opportunity for it. The game idea is to take some sheeps from one point and bring them to another, without letting them to leave the map or to be killed. The player uses the mouse to herd the sheeps, which will behave accordingly to their neighbor mates and some tiles in the environment.
As tradition, I writing here a summary of the competition:
Straight to the point, these are some scripts I wrote in C# for Unity 2D stuff that I’ll be using – feel free to use them any way you want.
This script is ment to make creating platformer scenes a bit easier. Assign it to the tile you are using and then give it six sprites for said tile – it will detect nearby tiles and automatically select the appropriate sprite to use, then rotate as needed so that you can place tiles and leave it to the rest.
Pretty self-explanatory, this is a simple script to act as a sort of 2D CharacterController for the player. Comes with a debugging option. Requires a trigger collider to detect whether or not the player is on the ground.
Also rather self-explanatory. Simple script that doubles as very basic A.I. and physics handler for enemies. Physics is nigh-identical to player physics. Also includes debugging option and also needs a trigger collider.
Decent health script I wrote for whatever needs it. EnemyLogic will need this to deal damage properly to the player properly. Includes logic for invulnerability periods after getting hit. Debugging on this will only display health in the console.
This is my 3rd ludum dare and I am going to use the same tools as always:
Independent from the theme, I’m hoping to use behavior trees to control some NPC’s (I wrote a 3-part tutorial on behavior trees on my blog) and I am praying to all gods to elect “You Are Already Dead” as the final theme!
So in the process of preventing the enemy from tripping backwards and suffering a gran maul seizure, we’ve apparently given him the ability to glitch through walls. Like I said, I suck at A.I.
In other news, the base construction and terrain are coming along nicely. The basics of building is done, and what’s left is to allow for multiple block types and defenses. On the front of enemies, we’ve got to create spawning, give them health and actually make them dangerous.
In short, we’ve got a long way to go and a lot to do. Even so the knowledge gleamed learning to not suck at Unity will really help in the long run, and will prove valuable come August’s Ludum Dare. Besides that, watching the A.I. I wrote fail miserably was incredibly funny. Hopefully we’ll pull this off, but even if we don’t, fun was had.
Oh, and I am so including an option to ‘un-fix’ all the glitches on the A.I. – there’s no way I’m restricting that fun!
A Fuzzy Associative Memory (FAM for short) is a Fuzzy Logic tool for decision making. Fuzzy logic FAMs are highly applicable in Game AI.
A Fuzzy Associative Memory uses Fuzzy Sets to establish a set of linguistic rules , e.g.:
The linguistic rules, and the fuzzy sets they contain, are defined by a human “expert” (presumably, you). That is to say, the rules codify intelligence and map this knowledge from the human domain to the digital.
After the rules are defined, a FAM is consulted to help your AI make a descision:
As you can see, the fuzzy rules are deliberately vague and use qualifiers like “a little” and “a lot”. Furthermore, the lines between fuzzy sets are intentionally blurry. This is the nature of fuzzy sets; they capture such human fuzziness in a way that extracts highly natural behavior from the fuzzy rules. When defining these rules, it helps to imagine interviewing a bona fide expert in the domain and writing down the skills necessary to be successful in the domain.
Learn more, and get the Ruby Gem for your own game: