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 - tuckerlein

Pages: [1]
1
SFML projects / Squatbot: A Mobile Platformer
« on: May 01, 2018, 10:04:13 pm »


Squatbot is a mobile platformer made by ILD Games using SFML, released on iOS and Android.













Myself and a friend started working on a game engine using SFML a few years back as a hobby project. This engine set out to be suitable for 2D cross platform games targeting Windows, macOS, Linux, iOS, and Android. We chose SFML due to its simplicity in API design and cross platform capabilities for all platforms we desired. The engine is open source and can be found here:
https://github.com/ild-games/Ancona

Alongside the engine we developed an editor using web canvas technologies and Electron. The goal was to build an engine agnostic base for a game editor and then write necessary modules to make it compatible with our Ancona game engine. The editor is also open source and is available here:
https://github.com/ild-games/duckling-legacy

Eventually another friend approached us with the idea for a unique control scheme for a mobile platformer. Joined by that friend and another we decided to use the idea as an opportunity to actually build a game with our engine and that project became Squatbot.

Game Description
Squatbot brings tight, momentum-based platforming to mobile phones, with a control scheme designed specifically for touch screens. By tying the player's acceleration to their jump, Squatbot only requires two inputs - A tap on the left side of the screen to hop left, or a tap on the right side of the screen to hop right.

These minimalist controls open the door to challenging, kinetic level design, with Squatbot hopping, skipping, and jumping through exciting challenges.

Features
  • Tight, momentum-based platforming controls
  • Challenging, hand-crafted levels
  • An endless mode where the focus is on executing just one more perfect jump
Videos



We're putting the finishing touches on it and getting more levels done for a full release in the coming months. SFML's been a great library to work with, we've learned a lot and I wish I had the time to start fresh with the engine with all the lessons learned. Our biggest challenge has been mobile integration, but SFML is quickly nearing the point where it is definitely viable (hoping for a bump from OpenGL ES 1.1 soon!). SFML 2.5 will be a great release for mobile and I hope to see more mobile games on the market made in SFML in the near future!

EDIT: The game has been released and the links to the stores above have been updated!

2
Hello,

Note SFML version I'm on is commit 013d053 (https://github.com/SFML/SFML/commit/013d053277c980946bc7761a2a088f1cbb788f8c), which is only a handful of commits behind master at the time of writing this. On this version because of a few key iOS features.

I'm seeing behavior that is causing absolute corruption of the window's rendering when on Samsung devices (any other mobile device renders as expected, including all desktops (Windows, Mac, and Linux) that I've tested it on). The problem only happens when I use a RenderTexture to render onto, and then finally render that RenderTexture to the window. Sometimes, the output simply appears flipped, other times it's completely broken. Here are a couple of examples:



And here is the code used to render:
_renderTexture->clear(sf::Color(255, 255, 255, 0));

for (auto & camera : _cameras) {
    camera->Draw(*_renderTexture, delta);
}

_renderTexture->display();
_windowSprite->setTexture(_renderTexture->getTexture());
_window.setView(*_renderView);
sf::RenderStates states(sf::BlendNone);
_window.draw(*_windowSprite, states);

A few things to note:
  • The RenderTexture is being cleared with white clear color (saw the clear color suggestion here: https://en.sfml-dev.org/forums/index.php?topic=9350.msg83986#msg83986)
  • I am calling RenderTexture::display before actually rendering it to the window.
  • This does work as expected on almost all devices, just seems to be the Galaxy line of mobile devices that definitely don't work

It's also worth mentioning that I used to not do this and instead drew everything individually to the RenderWindow instead. This caused a weird visual problem when rendering textures that had setRepeating(true) called on them in certain scaled windows. At certain window scales you would see the repeating texture repeat 1 pixel too much and render where it shouldn't be rendering. You can see an example here: (note the thin green lines under the platforms, these lines are actually the top of the green ground being repeated in the Y direction)


These textures do not have setSmooth(true) called on them, so the OpenGL clamping should prevent this. Rendering out to a RenderTexture like my code example above does indeed fix this problem (maybe some auto sampling done by SFML when rendering to a non ideal window size?).

I've currently reverted since having this repeating texture visual bug is a lot better than the Samsung RenderTexture problem. Does anyone have any ideas on how to potentially address this?

Pages: [1]
anything