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

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - myroidtc

Pages: [1]
1
SFML projects / Millie Megavolte 8: Millie and the Mole King
« on: November 21, 2023, 07:56:56 pm »
Millie Megavolte 8: Millie and the Mole King



1. Background
Millie Megavolte was a Flash-based game series that ran from 2007 to 2013. I made a spiritual successor Zeran's Folly in SFML (and the sequel Leowald) but now I'm making a proper new Millie installment in fancy HD resolution for PC with SFML instead of Flash since, you know, Flash is kinda dead.

I moved from Flash to SFML back in 2013 as a school project to port Millie Megavolte 7. I felt limited by Flash and was impressed by what I could do with SFML, particularly with the gamepad and shader support. I liked SFML so much I made a couple big games with it with more on the way!

After completing my last game Johnny Lionface in Unity, I wanted to go back to SFML. Johnny took over three and a half years to make so I wanted to do a shorter project. The Millie games were always small so I decided to make another one. While gutting a copy of the Leowald engine to use for Millie, I had a lot of ideas and decided to refactor the engine to make it easier to add lots and lots of content.

There will be the base small game of a story mode for Millie and her friends but there will be tons of content to come as the game and engine will be my sketchpad. Whatever stupid characters, levels, and ideas I want will go in. I'll keep working on it until I run out of ideas.

I plan on releasing the small game on Steam for free with a paid DLC that unlocks everything else. The previous Millie games were all free so why not this one too?

https://www.youtube.com/watch?v=nh0Y7c1tAPE

2. Why I (still) use SFML
I (still) use SFML because it's exactly what it says: simple and fast. The library abstracts a lot of boring implementation details but is still powerful enough to do almost anything you want.

SDL doesn't appeal to me because it's based on ugly C and isn't as easy to use.

Unity doesn't appeal to me because I prefer keeping things simple enough to where I know everything that's going on. If there's a camera system, I know how it works because I coded it, not because the software provided it.

Overall, I'm familiar and comfortable with SFML so that's what I use instead of other libraries. Maybe newer libraries are faster or whatever but that's not important to me. A lot of beginners will agonize over what library or software to use to make games and the answer experienced people give every time still holds true: use what you like. I like SFML!

3. Additional Libraries Used
SQLite3: The game uses databases for level data, text strings, object information, and more.
GLM: Math library used for trig and vector functions.
Spine: Bone-based animation library from Esoteric Software.
Box2D: Used only for the shape collision check functions, none of the simulation stuff.

4. Game Basics
Millie 8 is an action platformer. Gameplay consists of running, jumping, and using directional-input attacks to fight enemies and bosses. The game has a Sonic-inspired physics engine meaning characters can run along curves and jumping is affected by angle and momentum. Some attacks also affect momentum.

There will be several game modes:
Story Mode: Levels bookended by cutscenes
Adventure Modes (regular, all levels, endless): Pick a team of four characters and fight through a selection of random levels. You can switch characters during gameplay.
Roguelite modes: These modes will be more complex and have upgrades. Instead of being linear, levels will be a collection of rooms organized in a maze.

Playing the game awards a meta currency called Gelder. Gelder may be used to buy characters, outfits, levels, and more.

There will be many playable characters. No two playable characters will play exactly the same. Currently
there are 10 playable characters partially-done and there are plans for more than 30. Making new characters and stories is one of my favorite parts of making games.

What sets Millie Megavolte 8 apart from other games? Simple: style. It has a tone and sensibility you won't find anywhere else, at least not these days. My games have been compared to mid-2000s edgy webcomics but I like to think they're at least a little more refined, ha. Everything in the game has to be cool, cute, funny, or sexy. I'm also making an effort to step up the stylishness compared to previous games. You can see this in the main menu with the custom font and lively background art. I want the game to be pure MTC--nobody makes games like I do.

5. Example Technical Things
Water Effects

Reflection: The part of the screen above the water is copied, flipped upside down, shrunk vertically, and drawn with reduced opacity on the water.

Animation: There are two scrolling repeated images. Their speed is set to different primes so they line up less often. To achieve the scrolling effect, the sprite simply moves the textureRect (since the texture repeats).

Waves: The part of the screen below the water is run through a shader. The shader has timers that offset the pixels to give the wavy effect.



Drawing on transparent layers:
I figured this out the other day. If you draw things with reduced alpha (between 0 and 255) to a transparent layer then draw that layer onto another layer using renderTextures, you MUST use a different blendMode in your drawing states! In this case, what worked for me was sf::BlendMode(sf::BlendMode::One, sf::BlendMode::OneMinusSrcAlpha).

Comparison using bad blend mode (left):


Comparison using good blend mode (left is directly drawn, right two use a transparent intermediate layer)


6. Current State
The game is playable but lacks core features such as particles, bullets, enemies, attacks, pretty much everything that isn't running around and jumping.

There is no timeline for release. I'm doing this as I go along and putting in whatever I want until it gets around to being done.

7. Links
MTC YouTube - I may post more videos here when more of the core systems are in.
Official MTC Website - For completeness' sake.
VERY NSFW: MTC Discord - I post about the game's development in a dedicated channel and explain my process occasionally. It's mostly naughty drawings and harsh language though so be warned.

2
SFML projects / Leowald
« on: July 10, 2018, 09:02:38 am »
After releasing Zeran's Folly (SFML forum thread here) last year and finishing the last updates, I am now working on a sequel called Leowald! Like all my previous games, this one is another iteration on the formula and bigger and better than the last one.

General game stuff: It's 20 years later after the events of Zeran's Folly and you play as Lone and Abby's firstborn on their first big solo adventure. From the Big Chest Adventurers' Guild in Leowald Kingdom, you'll set out and deal with things from mole sky pirates to hard-drinking dorfen kings to strawberry-obsessed necromancers. There are eight weapons in total, each with their own unique moveset.

SFML and technical stuff: I use all pieces of SFML except for the Networking module. RenderTextures and shaders are used extensively to generate the level art, using input from a custom level editor I made. The other major libraries and tools I use are Spine for animations, Box2D for collision tests (not simulation), GLM for some math functions, and SDL but just for the controller rumble functionality. (I like controllers... a lot)

I like SFML because it's simple and fast. It's even right there in the name! It's simple enough in that it gives you the building blocks to do whatever you need. Can't recommend it enough and the team behind it is great.

Some random musings on the sequel: A recurring thing in my games has been multiple playable characters. The problem is, it's tough to reconcile it with the story since you control only one at a time. Where is everyone else at the time? You're exploring alone and when it's cutscene time suddenly everyone is there? Kinda weird.

Instead of playing as one of multiple characters that coexist like in Zeran's Folly, you choose the sex of your character in Leowald at the start and that's it. It has all the benefits of multiple characters with none of the oddities. Still get to choose a character, still get to have different interactions. Win-win. I don't know why I didn't think of it sooner. It's better than choosing one of two distinct people because then what happens to the person you didn't pick? In Leowald, the character is still the same entity, you just get to choose what they were born as. Here's the New Game sequence:

http://www.youtube.com/watch?v=dILah9NkZmE

The mechanic of multiple characters in Zeran's Folly has been replaced by weapons in Leowald. There are eight total weapons with their own movesets. A lot of them are based on the movesets of characters in Zeran's Folly but some are new, like the Golem Meteor which is a ball and chain:

https://www.youtube.com/watch?v=N1vTfmBjBVA

Character talents are now Weapon Runes which work the same way. However, a few of the runes have been reworked to make them weapon-specific instead of a general effect exclusive to that weapon. For example, Penelope in Zeran's Folly had the talent "Revenge" which made enemies take damage when they hit her. In Leowald, this effect has been rolled into a new equippable ring and the associated weapon has a new replacement rune.

Speaking of weapons, they can level up. Each weapon starts at Lv. 1 and you level them up by, what else, killing enemies. Focus Attacks unlock at level 3 and Rune Slots (for equipping weapon runes) unlock every five levels. Max level is 30 (for six rune slots).

Most enemies take 1-2 normal hits to defeat and I want to preserve that as long as your weapons are comparable level. So, damage works in 5-level tiers. If your weapon is within five levels of the enemy, it will do normal damage. Five levels above and it does 2x damage, five levels below it does 1/2 damage, and so on for each five levels after. It's a nice way to keep a feeling of progression without messing with the 1-2 hits feel of combat.

Another thing I'd like to do with Leowald compared to Zeran's Folly is have more interconnected character arcs. A guy you help out with one quest will reappear later to help you with yours, stuff like that. A lot of the characters in Zeran's Folly were one-and-done; once you saw them, that was it. There's still a little bit of that in Leowald but I want to keep the members of the adventurers' guild involved in your adventure from start to finish.

Here are some music pieces I already made for the game:

http://www.youtube.com/watch?v=emUcnHAIs2w

http://www.youtube.com/watch?v=aKkQ0GCl8WE

Self-promotion stuff:
Twitter: @myroidtc
YouTube Channel: Myroid-Type Comics
Discord: Myroid-Type Comics Server

3
General / Allocating the entire game on the heap
« on: August 12, 2016, 06:13:18 am »
I have an Engine class that holds the SFML loop and everything else the game needs to run. In the main() function, I declare the Engine with a unique_ptr and run it like so:

int WinMain()
{
    std::unique_ptr<Engine> engine = std::unique_ptr<Engine>(new Engine());
    engine->run();
    return 0;
}
 

Can anyone explain if/why this is a horrible idea?

4
Audio / sf::Sound and sf::SoundBuffer declaration order crash
« on: December 18, 2014, 04:31:57 am »
I'm not sure if this is on my end or not. I'm using static-linked SFML 2.2, VC 2012, 64-bit Windows.

This works:
Code: [Select]
int main() {
   sf::SoundBuffer buffer;
   sf::Sound sound;
   buffer.loadFromFile("foo.wav");
   sound.setBuffer(buffer);
   sound.play();
   return 0;
}

But this doesn't:
Code: [Select]
int main() {
   sf::Sound sound;
   sf::SoundBuffer buffer;
   buffer.loadFromFile("foo.wav");
   sound.setBuffer(buffer);
   sound.play();
   return 0;
}

Specifically, declaring the sf::Sound before the sf::SoundBuffer it uses causes a crash and references XTree and some iterator error. The crash happens during the SoundBuffer destructor. This is new to me in 2.2 and wasn't the case in 2.1 stable.

Is this intended behavior?

5
SFML projects / Zeran's Folly
« on: June 23, 2014, 04:47:52 am »
Zeran's Folly is a story-based action-adventure platformer with fluid combat and a weird sense of humor.

The game is being built in C++ and uses a custom engine. Except for networking, I use all of the SFML modules: graphics, window, system, and audio. I enjoy SFML because, well, it's simple and fast but also includes a bunch of useful little features.

I came to SFML from Flash back in 2013. At first I missed some of the basic engine stuff from Flash like rendering and asset management but I've grown to love the power and flexibility that SFML offers. One of my favorite parts is shaders--you can get some awesome effects out of them if you get creative. For example, I use shaders for the wavy water effects, some bloom here and there, and as a method to tint the level art in some sections of the game, mostly in the Manastery area. You can check out the effect in the "Miracle Juno Boss Fight" video below.

Zeran's Folly is out! Check it: http://store.steampowered.com/app/665030/Zerans_Folly/


http://www.youtube.com/watch?v=Af1wwCLzcLc

Some pretty pictures:







Here's a bunch of videos:

The first few minutes:
http://www.youtube.com/watch?v=RpdMlh5QIZE

Lone Clone boss fight:
http://www.youtube.com/watch?v=91jrjgKLSO4

Final dungeon gameplay:
http://www.youtube.com/watch?v=T0mVBkF6GqY

Miracle Juno boss fight:
http://www.youtube.com/watch?v=lrg4i2xZSbk

Let me know what you think!

IndieDB: Zeran's Folly
Twitter: @myroidtc
Subreddit: /r/ZeransFolly

6
Window / Joystick PoV Axes Flipped
« on: November 18, 2013, 07:02:51 am »
I'm using SFML 2.1 Visual C++ 11 (2012) - 64 bits and Windows 7.

sf::Joystick::Axis::PovX corresponds to the d-pad vertical instead of the horizontal for me. I've tested with two controllers (DualShock 4 and Xbox 360) and the axis names are consistently flipped. All the other axes are fine.

Is this a bug or are the names arbitrary? Might the OS have something to do with it? It's not that big of a deal, I'm simply curious as to why this might happen.

Pages: [1]