Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: [WIP] Racod's Lair - a coop dungeon crawler [Demo Released]  (Read 84491 times)

0 Members and 1 Guest are viewing this topic.

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #45 on: March 28, 2015, 03:37:33 am »
The major issues with the menu has been fixed by now. So I proudly present to you a brand new feature which will give a bit more customizability to the players: Changing the camera setup during game via pause menu:

Current project: Racod's Lair - Rogue-inspired Coop Action RPG

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #46 on: March 30, 2015, 01:10:09 pm »
At the moment, I'm working on the game art. So two tilesets (with higher resolution!) has been created: dungeon and castle. Also some addition shading has been implemented to get a nice gradient from wall texture to "void". Next on my todo-list are:
  • New sprites for player and enemy
  • (New) art for chests, arrows, fireballs
  • And an advanced set of animations including: Idle, move, melee attack, archery attack, cast and dying

Stay tuned 8)
Current project: Racod's Lair - Rogue-inspired Coop Action RPG

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #47 on: March 31, 2015, 05:24:34 pm »
Finally, I decided to keep low-res pixel art. So I created several layers and animation types:
  • 1 Frame Idle, 8 Frame Move, 6 Frame Melee Attack, 6 Frame Range Attack
  • Basic "Human" Sprite
  • Body Layer: Wizard Robe, Leather Armor, Plate Armor
  • Weapon Layer: Sword, Bow, Staff
Some (gimp-made) combinations of those layers are attached.
« Last Edit: March 31, 2015, 05:26:54 pm by Glocke »
Current project: Racod's Lair - Rogue-inspired Coop Action RPG

SpeCter

  • Full Member
  • ***
  • Posts: 151
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #48 on: April 01, 2015, 08:56:04 am »
I like the sprites, except for the rogue :D.
He either looks like as if he has really long arms, or he is holding a saw "gangster-style" in front of him.

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #49 on: April 01, 2015, 09:26:32 am »
He either looks like as if he has really long arms, or he is holding a saw "gangster-style" in front of him.
Well, thats actual a single melee attack frame ... so all sprites has a long arm while attacking xD But you're right: it looks strange if viewed out of context :D
By the way that "saw" was supposed to be a sword ;D
Current project: Racod's Lair - Rogue-inspired Coop Action RPG

SpeCter

  • Full Member
  • ***
  • Posts: 151
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #50 on: April 01, 2015, 09:49:11 am »
I know that it was supposed to be a sword but the weird arm angle made it look like a saw to me :D
I guess it's just the banana arm going on there  ;D

Edit: This will most likely look better in motion though.

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #51 on: April 01, 2015, 09:56:48 am »
This will most likely look better in motion though.
Stay tuned for the next video post .. hopefully all animations will be shown :)
Current project: Racod's Lair - Rogue-inspired Coop Action RPG

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #52 on: April 07, 2015, 01:28:17 am »
Meanwhile, initial pathfinding and dungeon generating algorithms have been implemented. Stay tuned for some weird maze chases.

Here's an example output (ASCII style, yet) from the dungeon generator
(click to show/hide)

The grid (sized ~120x120) was generated within ~21ms (@Netbook).
Current project: Racod's Lair - Rogue-inspired Coop Action RPG

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Posts: 6286
  • Thor Developer
    • View Profile
    • Bromeon
Re: Rage - a "modern" rogue-like
« Reply #53 on: April 07, 2015, 11:34:32 am »
This project looks promising! And you seem to be quite ambitious with it :)

I like the randomly generated dungeon, it will be funny once you populate it with all kinds of creatures and treasures. Also that you occasionally write about your code design, and the optimizations to run the code on the netbook. Even if it's sometimes a bit difficult to imagine without the context ;)
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #54 on: April 07, 2015, 11:56:26 am »
This project looks promising! And you seem to be quite ambitious with it :)
Thanks a lot! Reading those comments is always pushing me :)

Also that you occasionally write about your code design, and the optimizations to run the code on the netbook. Even if it's sometimes a bit difficult to imagine without the context ;)
I plan to write more about code design and netbook-related optimizations. Soon, my next semester will start, so time will be rare, so there won't be much progress. But in the meantime I plan to add lots of unit testing (which isn't always fun but useful). Also I plan to write more about e.g. my entity-component system or other parts (pathfinding, dungeon generator etc.).

So if someone is curious about some implementation details, just ask!
Current project: Racod's Lair - Rogue-inspired Coop Action RPG

SeriousITGuy

  • Full Member
  • ***
  • Posts: 123
  • Still learning...
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #55 on: April 07, 2015, 04:05:35 pm »
Also I plan to write more about e.g. my entity-component system or other parts (pathfinding, dungeon generator etc.).

So if someone is curious about some implementation details, just ask!

Well yeah, ECS is something I'm looking into right now, I nailed the theory down, but I cannot come up with a good implementation in C++. If you could show the basic concepts (Is there an entity class, or is there only an unique ID somewhere for example) and some headers, this would be awesome, cause I couldn't find such information on the net yet.

Thanks and keep up the good work ;)

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #56 on: April 07, 2015, 04:28:11 pm »
If you could show the basic concepts (Is there an entity class, or is there only an unique ID somewhere for example) and some headers, this would be awesome, cause I couldn't find such information on the net yet.
My basic concept is a clear seperation of system end entities, like the data-oriented design claims. So I built a generic ComponentSystem, which holds a std::vector<T> with the (homogenous component data).
If doing so, you are forced to deal with the fact, that resizing a vector will possibly move the current data out of its current spot to another location. That's why started to identify objects via an ObjectID (just a typedef to an unsigned int). So I changed the component systems' API towards querying via ID.
This leads to the next problem: If everything is querying the objects, you'll need to speed that up. So I introduced another container, which I call "lookup vector". At this point I decided to preallocate the data and lookup vectors to a specific size (which is for MAX_OBJECTS, just a const ObjectID that is very large). So all systems preallocate memory while startup. So data and lookup vector are preallocated. I limited valid ObjectIDs to be >0 to use 0 as "nothing is set" (like nullptr, but without having pointers here).

Btw data is reserved, lookup is resized and filled with "0". The lookup's value is the index within the data vector. But "0" is also used as "not in list". So when adding an object, a new T is emplaced at the end of T and it's index is stored within lookup via lookup[id] = index. So querying for an id will result an index (remember: index 0 is "object not found"). Around this basic concept, I built my entire ECS with the following systems:
  • Physics (component with position, face direction, collision info etc.)
  • Render (component with sf::Sprite etc.)
  • Animation (component with thor::Animator etc.)
  • Avatar (component with health, mana etc.)
  • etc.

At my design each object is just an ID (not an instance of a specific struct/class). When creating an object, an ID is (externally, via a seperate ID management system) fetched and a physics and render component are acquired. If the object is animated, an animation component is also created etc.
Because there's no object itself, e.g. the (later) AI Component will store it's target's object id (instead a pointer or so). So if the target is removed, the AI system can recognize this when asking the physics whether there's such a component or not.

Well, about releasing objects: I prefer adding the ids to a "unused" vector, because objects might be released during udpate iteration. So I collect all "should-be-released"-ids and call each systems' cleanup() method at the end of each frame.

I hope that helps :) If not, just ask :)

/EDIT: The component systems header looks like this (not exaclty, I removed stuff for simplicity):
(click to show/hide)
« Last Edit: April 07, 2015, 04:31:42 pm by Glocke »
Current project: Racod's Lair - Rogue-inspired Coop Action RPG

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #57 on: April 07, 2015, 06:53:06 pm »
Meanwhile, several things has been implemented, which I'd like to present to you :)
  • Dungeon Randomization: Size and number of dungeons can be adjusted when starting a game session. All dungeons are procedurally generated. Yet they are not filled with enemies, chests etc. but with stairs. Unfortunately, using stairs is currently not working with automatic camera (see below). This will be fixed soon!
  • Automatic Camera Handling: If enabled, the cameras are automatically splitted and/or merged when the players are moving. A player, who is moving far away is moved to a single camera, while all other players stay at a shared camera. And so on. If a player with a splitted cam comes closed to another player, both cameras are merged.
  • Manuel Camera Handling: If automatic camera handling is not what you want, it can be disabled at the settings (also while running a game session). If automatic camera handing is disabled, another pause-menu-option is available. It can be used to setup the camera system.

Current project: Racod's Lair - Rogue-inspired Coop Action RPG

SpeCter

  • Full Member
  • ***
  • Posts: 151
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #58 on: April 08, 2015, 10:25:55 am »
So your ComponentSystem is just a component container? Where is your logic?
I'm particularly interested because I made many different component-based systems before and this seems new to me :D

Glocke

  • Sr. Member
  • ****
  • Posts: 289
  • Hobby Dev/GameDev
    • View Profile
Re: Rage - a "modern" rogue-like
« Reply #59 on: April 08, 2015, 10:36:37 am »
So your ComponentSystem is just a component container? Where is your logic?
All component-related logic is inside the component-system. So all physics logic is handled by the physics system. Each system has a void X::update(sf::Time elapsed) method which updates all its objects (= object components of its specific type) in a "tight" loop (over the contigeous container inside the system).

So e.g. the physics system has some additional methods to e.g. check for collision of the given object, like bool PhysicsSystem::wouldCollide(PhysicsData const & data, sf::Vector2u tile_pos) const;.

I'm particularly interested because I made many different component-based systems before and this seems new to me :D
There are some interesting articles about component-based systems with data-oriented design (too many to post links, nearly each article is useful). Especially a talk by Mike Acton at CppCon was interesting (not about ECS but data-oriented design in general; https://www.youtube.com/watch?v=rX0ItVEVjHc).

But the entire system isn't just data-oriented. Some internals are data-oriented, some object-oriented. And the major API is also object-oriented. So I'm using a hybride of both approaches where it makes sense in my opinion :)
Current project: Racod's Lair - Rogue-inspired Coop Action RPG