|
BraveCoder
|
 |
« on: November 15, 2017, 05:36:22 AM » |
|
Sling Ming is a puzzle adventure where you help princess Ming save her kingdom by slinging her around on a leash. It's coming to Steam, iOS, Android and an unannounced platform in 2018. STORYPrincess Ming finds this really old transportation system called the Oxylane. It let's you breathe fresh air through a tube, kinda like those really old diving suits. Back in the days the environment was so polluted, it was the only way to get around.
Anyhow, recently the kingdom has been plagued by earthquakes and Ming really needs to stop them. She uses the Oxylane to explore the catacombs and there's this huge evil door down there. Turns out that it's locked with three keys, hidden on other planets. What are the odds, right? Gotta get those keys, so she sets off in her rocket looking for them. TRAILERSCREENSHOTS    ABOUT USMe and my twin brother have worked on this game for a while now (haha, that's an understatement). Our "game studio" is called Good Night Brave Warrior, but it's literally just us two working from our bedrooms. STATUSAfter an exhausting marathon, the game is finally on the homestretch. Being able to say that it's coming out in 2018 is such a relief! We still need to tweak levels to get the difficulty right. And polish, ever more polish.
What we haven't done at all is marketing. We are basically invisible, which is super scary. This devlog might end up talking about our desperate attempts at getting attention, who knows. Before posting, I contemplated if that would bring anything to this forum. I think it will. Development is well-documented, but marketing guides are super vague and hand-wavy. I'll try to be specific whenever I can.
As always, ask us whatever you want to know. There's not a whole lot we cannot talk about.
|
|
|
|
« Last Edit: March 08, 2018, 05:11:59 AM by BraveCoder »
|
Logged
|
|
|
|
|
zenassembly
|
 |
« Reply #1 on: November 15, 2017, 06:18:39 AM » |
|
I like the style and the game looks interesting, but I'd be lying if I didn't say the screenshots kinda look like she's swinging around by a noose tied to her neck :/
Idk if it would make sense to have it tie around her waist, or have some visible "hook" on the helmet or something. It was just like the first thing I noticed!
|
|
|
|
|
Logged
|
|
|
|
|
BraveCoder
|
 |
« Reply #2 on: November 15, 2017, 06:50:07 AM » |
|
A noose around her neck, how morbid!  It DOES look like that, now that you mention it. The tube/rope is attached to the tiny harness around her shoulders (you can see it in the poster). It's too small to be visible in the game.
|
|
|
|
|
Logged
|
|
|
|
Brave Artist
Level 0
Artist and bro-founder at Good Night Brave Warrior
|
 |
« Reply #3 on: November 22, 2017, 02:38:45 AM » |
|
We actually tried at one time to attach the rope to the top of her helmet but the physics felt weird. Hello!  I'm the artist half of Good Night Brave Warrior. I will just start off by posting the first mockup I found for Sling Ming. Since i knew it takes a looong time to make a game i wanted to keep it stupidly simple. I considered this to be final polish  . Oh boy, did it evolve from that! 
|
|
|
|
|
Logged
|
|
|
|
|
BraveCoder
|
 |
« Reply #4 on: November 24, 2017, 06:15:30 AM » |
|
This week was spent improving support for different control schemes. It's an ongoing struggle which just never seems to end - there's like a million edge cases!
First a bit of background. Sling Ming started out as a simple mobile game, touch only. To speed up development and testing, the game runs on my Windows computer using the mouse. As the game grows (oh, how it grows!) we talk about releasing it on Steam. It already runs on Windows, right!? After being greenlit we realize we're trying to peddle a mobile game on Steam - we'll be eaten alive!
 In an attempt to look like a REAL game I decide (against my brother's better judgement) to investigate joystick support. Despite the gameplay being heavily based on touch input, I think we managed to design a pretty good control scheme. If the game detects a joystick at startup it brings up a "Choose input method"-popup, making the game playable from start to end with only a joystick. Slap a "Full controller support" label on the game and we're done! Well, not quite.
 There's a rumor going around that gamers are entitled - I heard it myself through the grapevine. Especially PC Master Race. "Are you honestly confessing, good sir, that you do NOT support arbitrary joysticks through the so called DirectInput API?" Wouldn't want to dissapoint anyone, now do we. Turns out that all bets are off when using DirectInput! You get a bunch of axes and buttons, but absolutely no information on which axes go together (they're only good in pairs, for god sake!) or how the buttons are placed. Only reasonable solution is to let the player configure the mapping on her own.
Here's a conundrum for you: How can a player navigate the joystick mapping menu with a joystick which isn't yet correctly mapped?
There's also a very real possibility that there's more than one joystick connected. Easy solution: detect which joystick is used to press the "Use Joystick" button in the "Choose input method"-popup and make that one the primary joystick.
What if the primary joystick is disconnected (or the batteries die)? You could simply prompt the player to reconnect the joystick. However, there's at least one platform on which the touch input disappears when docked. Prompting the player to undock isn't a good solution. You see where I'm going with this, right?
 Whenever the current input method is unavailable, bring up the popup which lets the player switch input method. This can happen AT ANY POINT in the game, and it must gracefully switch between touch/mouse/joystick. Talk about having the rug pulled from under your feet!
*** insert funny Alice in Wonderland-quote about the rabbit hole ***
P.S. I know that joysticks aren't called joysticks anymore, they're called joypads or controllers or joy-con or whatever. When I grew up, they were called joysticks and I'm sticking with that! D.S.
|
|
|
|
|
Logged
|
|
|
|
|
io3 creations
|
 |
« Reply #5 on: November 24, 2017, 11:46:56 AM » |
|
A noose around her neck, how morbid!  Technically, you are priming people with: princess on a leash
 P.S. I know that joysticks aren't called joysticks anymore, they're called joypads or controllers or joy-con or whatever. When I grew up, they were called joysticks and I'm sticking with that! D.S. [/size]
If you're calling it "JOYSTICK" then you better go ALL IN and use a joystick icon! Otherwise, people might get confused.  p.s. What is D.S.?
|
|
|
|
|
Logged
|
|
|
|
|
BraveCoder
|
 |
« Reply #6 on: December 03, 2017, 09:17:00 AM » |
|
LEVEL CREATIONI always find it fascinating to see the workflow of other developers and how they create their game worlds. Today I'll try to give back a little and show how we create levels for Sling Ming.
Our level editor is a stand-alone application, but it includes all the game code and runs the game engine in a special mode which renders the level in the editor viewport. I prefer a stand-alone editor (as opposed to one embedded in the game) because it gives more UI flexibility and allows for separation between edit-time and run-time data (using a compile phase). OVERVIEWA level is constructed from many different parts: layers, rectangles, navigation nodes and links, avatars, items, logic, etc. The editor has different modes for each part. Most modes only differ by what panels and tools are available, but the logic mode shows the visual scripting graph instead of the main level view.
LAYERSThe most basic building block is a layer, onto which you can draw both graphics and physics. Layers are sorted by ZFamily (back/front/cover) and ZIndex (-127 to +127). Parallax movement is controlled separately for the X- and Y-axis.
Depending on the motion type of a layer, its transform (position/rotation) is either controlled by a timeline or by the physics engine. Each layer has its own timeline, built from keyframes, that can be played using different speeds and loop modes (clamp/wrap/pingpong). Physics layers have properties like damping and gravity multiplier.
LAYER GRAPHICSLayers are created using only three graphical primitives: triangles (colored or textured), sprite frames (static) and sprite anims (animated). Textured triangles are used for the majority of the graphics, with sprite frames/anims mostly placed as decals.
Normal editing tools are available: select, move, transform, clone, draw, solid fill, vertex paint, split edge, etc.
Texture coordinates can be generated (planar mapped based on level coordinates) or edited in the texture coords popup by dragging vertices or transforming them (scaling/rotating/translating). The level view is updated in real time as you're transforming texture coords.
How a layer is rendered depends on its technique (default/masked/crystal), blend mode (opaque/alpha/additive/multiply), texture modes (repeat/clamp) and color.
LAYER PHYSICSTriangles are used to construct the layer physics, with each triangle having properties like density, friction and restitution. Physics triangles are also used as triggers, area identifiers, secret areas, etc.
Setting the solid property to false causes a physics triangle to act as a sensor instead of a collider. Specifying a trigger collider family mask will cause the triangle to report to the logic system whenever a matching collider touches the triangle.
Areas are created by setting the area id of a bunch of connected physics triangles to the same number. Areas limit the movement of navigation nodes.
ITEMSPretty standard stuff, really. The game defines a number of different item types, all of which can be placed in the editor. The editor knows nothing about each specific type, only base type stuff like GUID, attachment and transform. Every item defines properties, which the editor exposes in a property panel.
RECTANGLESThese are used to define level bounds and goal areas. A rectangle can also be used to guide the camera focus system, defining a view which the camera should try to show as much of as possible (depending on aspect ratio).
LOGICSling Ming uses visual scripting to define level logic, like making a button open a door, but also to tween stuff like layer colors for pulsating effects, texture coords for scrolling effects, etc.
The logic system consists of logic machines, each of which has one or more logic states, each of which contains a set of logic nodes. Logic machines are best describes as state machines, always in one (and only one) of its states. Only the nodes in the active state are executed. State switching is performed with a special node, as is state init/exit. One logic machine is allowed to switch state on another machine.
Integration with the level is done through logic variables, which can be of either boolean or number type. For example, a level trigger sets the value of a boolean logic variable, which can be checked in the logic to open a door when true. FINAL NOTESHaving a level editor is crucial if you intend to make at least half-decent levels. Be prepared to spend some time on the editor, you'll earn back the time when you design levels. And implement the undo feature before you implement all the tools, otherwise you'll never get around to it!
|
|
|
|
|
Logged
|
|
|
|
Brave Artist
Level 0
Artist and bro-founder at Good Night Brave Warrior
|
 |
« Reply #7 on: December 11, 2017, 03:02:57 AM » |
|
Made a simple zoom effect for the trailer from scaling the 15 layers in the composition. The rocket is not perfect but goes by so fast you won't notice (i've slowed down the gif above). The smoke is made up of a few overlapping sections that I scale and fade out. Then I have an animated mask that hides the smoke in front of the rocket.
|
|
|
|
|
Logged
|
|
|
|
|
|
|