Stencyl 3.4.0 is now out. Get it now!

[PAID] A shopping list of mobile-focused extensions / behaviours I'd like to see

thechaosengine

  • *
  • Posts: 307
Hey gang!

I mostly use Stencyl to make mobile games, and I'm interested in taking advantage of features that Stencyl doesn't support out of the box (yet). I'll try and be as detailed and clear as possible with my requests, feel free to go through the list and if you think you can make any of them happen, post a reply (so others know who's working on what)  and PM me to discuss price.

I have no idea whether these are realistic requests or totally impossible, but let's find out!

Wanted:
- Sync support (iOS / Android): The ability for games to sync progress between devices. Technically I would accept any option that allows players to sync progress on either platform but obviously iCloud-based would be highly preferred on iOS. Note that I'm not talking about restoring purchases, I mean that if I play a game on my phone and then open the same game on another device, I have the same score and unlocked characters etc available. EDIT: on iOS this HAS to be iCloud syncing, Apple won't allow data to be stored on outside servers.

- 3D Touch support (iOS): The option to use 3D Touch inputs on devices that support it.

- Extended Game Center features (iOS): Ways to access more info and functionality from Game Center. An example would be showing another player's score along the way while you're playing (like in this Steppy Pants screenshot. I think Crossy Road does the same thing as well, but with just names instead of avatars, which I'd be happy with)

- GIF recording and sharing (iOS/ Android): The Simple Share extension allows the player to take a screenshot and share it, but the ability to tweet GIFs of gameplay would be huge.

- Multiplayer over wifi (iOS/ Android): Colburt187 and myself have made a good amount of games that have same-device multiplayer, which is of course not ideal. A way to allow people to get on the same wifi network and play against each other on their own device would be awesome.


Currently Being Worked On:
[nothing rn]

 
Done:
- Orientation detection (iOS / Android): Made by Squeeb and Robin! Will be available publicly as well via Squeeb, I believe.


« Last Edit: April 20, 2017, 01:51:09 am by thechaosengine »

squeeb

  • Posts: 954

- Orientation detection (iOS / Android): The ability for the game to register whether the device is being held upright or sideways. Ideally of course, having the game auto-rotate to adjust between portrait and landscape is preferred, but I would be happy enough with no rotation at all, as long as the game tells the device which way it's being played. What I want out of this is to make it so that if a game is flipped from portrait to landscape, the device itself shows notifications / Game Center banners / etc correctly. Basically when you start making a game in Stencyl, you tell it what orientation the game is in, right? I want to be able to change that in real time.

I have done this natively  in android.. im sure i can get this to work

ceosol

  • *
  • Posts: 2091
Quote
- Multiplayer over wifi (iOS/ Android):

mdotedot has worked some on this. I think he was implementing a bluetooth connection or something for his Stencyl game console idea.

Quote
- Orientation detection (iOS / Android):
This is actually easier than you think and does not require an extension. You can use basic accelerometer detection. I don't have the exact numbers in front of me, but it is something like:

start from portrait orientation with home button at the bottom
x is close to 0
y is close to -1

turning to the right, with home button on the left - landscape
x is close to +1
y is close to 0

landscape on the left, with home button on the right
x is close to -1
y is close to 0

upside down portrait with button on the top
x is close to 0 again
y is close to +1

In case you were curious, +1 z is the device flat facing down and -1 z is the device flat facing up.

thechaosengine

  • *
  • Posts: 307

Quote
- Orientation detection (iOS / Android):
This is actually easier than you think and does not require an extension. You can use basic accelerometer detection. I don't have the exact numbers in front of me, but it is something like:

start from portrait orientation with home button at the bottom
x is close to 0
y is close to -1

turning to the right, with home button on the left - landscape
x is close to +1
y is close to 0

landscape on the left, with home button on the right
x is close to -1
y is close to 0

upside down portrait with button on the top
x is close to 0 again
y is close to +1

In case you were curious, +1 z is the device flat facing down and -1 z is the device flat facing up.

I know that, but I don't know how to use that information to make the device act like the game's orientation changed. So for example: Say I have my game set to Portrait in Stencyl, and then I tilt my device sideways to landscape when starting up the game. when I log into Game Center, the "welcome to Game Center" notification will still assume I want it to show up in Portrait mode, and thus appear sideways.


ceosol

  • *
  • Posts: 2091
This stuff, probably :)

package react.native.orientation;

@:jsRequire('react-native-orientation')
extern class Orientation {
   public static function getOrientation(cb:Dynamic->OrientationDirection->Void):Void;
   public static function getSpecificOrientation(cb:Dynamic->SpecificOrientationDirection->Void):Void;
   public static function lockToPortrait():Void;
   public static function lockToLandscape():Void;
   public static function lockToLandscapeRight():Void;
   public static function lockToLandscapeLeft():Void;
   public static function unlockAllOrientations():Void;
   public static function addOrientationListener(cb:OrientationDirection->Void):Void;
   public static function addSpecificOrientationListener(cb:SpecificOrientationDirection->Void):Void;
   public static function removeOrientationListener(cb:OrientationDirection->Void):Void;
   public static function removeSpecificOrientationListener(cb:SpecificOrientationDirection->Void):Void;
   public static function getInitialOrientation():OrientationDirection;
}

@:enum abstract OrientationDirection(String) {
   var Landscape = 'LANDSCAPE';
   var Portrait = 'PORTRAIT';
   var Unknown = 'UNKNOWN';
   var PortraitUpSideDown = 'PORTRAITUPSIDEDOWN';
}

@:enum abstract SpecificOrientationDirection(String) {
   var LandscapeLeft = 'LANDSCAPE-LEFT';
   var LandscapeRight = 'LANDSCAPE-RIGHT';
   var Portrait = 'PORTRAIT';
   var Unknown = 'UNKNOWN';
   var PortraitUpSideDown = 'PORTRAITUPSIDEDOWN';
}

mdotedot

  • *
  • Posts: 1168
Creating a Near Real Time Multiplayer game is really advanced stuff with a lot of challenges.
A good multiplayer game uses a server that runs dedicated software = specific for ONE game.
All position based objects are calculated on that server so everyone looking/playing the game gets the same data.
As this is not something that I wanted I looked into other things. A local WIFI system:

Below is a clip of my console/controller system with which a couple of games have been successful during a test-drive.
One of the devices acts as a server and other devices can be used as controllers to control the console.
It waits launch by my business partner to make it into something that can be used by multiple developers

<a href="https://www.youtube.com/v/AZre2fFjfhk" target="_blank" class="new_win">https://www.youtube.com/v/AZre2fFjfhk</a>




Currently I’m working on another system that allows multiplayer without a shared device on the premises. But as I mentioned this
is a lot of work to get right. I’m working towards a system where one of the devices acts as a server, but also if that device lost connection that another system can take over the server-aspect of the game.

Once I have something that works for my needs I could team up to see if some of your games could use the same system.
Best regards from
M.E.
Hanging out in the Chat:  http://www.stencyl.com/chat/

thechaosengine

  • *
  • Posts: 307
This stuff, probably :)

package react.native.orientation;

@:jsRequire('react-native-orientation')
extern class Orientation {
   public static function getOrientation(cb:Dynamic->OrientationDirection->Void):Void;
   public static function getSpecificOrientation(cb:Dynamic->SpecificOrientationDirection->Void):Void;
   public static function lockToPortrait():Void;
   public static function lockToLandscape():Void;
   public static function lockToLandscapeRight():Void;
   public static function lockToLandscapeLeft():Void;
   public static function unlockAllOrientations():Void;
   public static function addOrientationListener(cb:OrientationDirection->Void):Void;
   public static function addSpecificOrientationListener(cb:SpecificOrientationDirection->Void):Void;
   public static function removeOrientationListener(cb:OrientationDirection->Void):Void;
   public static function removeSpecificOrientationListener(cb:SpecificOrientationDirection->Void):Void;
   public static function getInitialOrientation():OrientationDirection;
}

@:enum abstract OrientationDirection(String) {
   var Landscape = 'LANDSCAPE';
   var Portrait = 'PORTRAIT';
   var Unknown = 'UNKNOWN';
   var PortraitUpSideDown = 'PORTRAITUPSIDEDOWN';
}

@:enum abstract SpecificOrientationDirection(String) {
   var LandscapeLeft = 'LANDSCAPE-LEFT';
   var LandscapeRight = 'LANDSCAPE-RIGHT';
   var Portrait = 'PORTRAIT';
   var Unknown = 'UNKNOWN';
   var PortraitUpSideDown = 'PORTRAITUPSIDEDOWN';
}

Good stuff! Squeeb is working on it anyway so maybe they'll use this info to make something happen :)

Creating a Near Real Time Multiplayer game is really advanced stuff with a lot of challenges.
A good multiplayer game uses a server that runs dedicated software = specific for ONE game.
All position based objects are calculated on that server so everyone looking/playing the game gets the same data.
As this is not something that I wanted I looked into other things. A local WIFI system:

Below is a clip of my console/controller system with which a couple of games have been successful during a test-drive.
One of the devices acts as a server and other devices can be used as controllers to control the console.
It waits launch by my business partner to make it into something that can be used by multiple developers

<a href="https://www.youtube.com/v/AZre2fFjfhk" target="_blank" class="new_win">https://www.youtube.com/v/AZre2fFjfhk</a>




Currently I’m working on another system that allows multiplayer without a shared device on the premises. But as I mentioned this
is a lot of work to get right. I’m working towards a system where one of the devices acts as a server, but also if that device lost connection that another system can take over the server-aspect of the game.

Once I have something that works for my needs I could team up to see if some of your games could use the same system.


I understand that this one is a tall ask, and it's cool to see you tackling it!

thechaosengine

  • *
  • Posts: 307
- Sync support (iOS / Android): The ability for games to sync progress between devices. Technically I would accept any option that allows players to sync progress on either platform but obviously iCloud-based would be highly preferred on iOS. Note that I'm not talking about restoring purchases, I mean that if I play a game on my phone and then open the same game on another device, I have the same score and unlocked characters etc available.

Been getting a lot of requests for this one in particular, so *bump*

My last game did p well so I'm willing to pay good money for any of these. $100 - $250 range, more if you can make a case for it. Also ok w making them public , that's up to you as the creator if you want to keep it exclusive or sell it to more people or put it out there for everyone to use, I'll invest in it regardless.

squeeb

  • Posts: 954
I heard that we should wait on android extensions because Justin is updating android build to use gradle. . When they do an update the extensions will break. is this true.  Or does anybody know a time frame or how hard it'll be to update the extensions to work on android again?

Justin

  • *
  • Posts: 3704
It will be very easy to upgrade existing extensions to work with gradle. Don't worry too much about it.

For Live Support: Join our discord channel and ping me @justin.


ceosol

  • *
  • Posts: 2091
- Sync support (iOS / Android): The ability for games to sync progress between devices. Technically I would accept any option that allows players to sync progress on either platform but obviously iCloud-based would be highly preferred on iOS. Note that I'm not talking about restoring purchases, I mean that if I play a game on my phone and then open the same game on another device, I have the same score and unlocked characters etc available.

Been getting a lot of requests for this one in particular, so *bump*

My last game did p well so I'm willing to pay good money for any of these. $100 - $250 range, more if you can make a case for it. Also ok w making them public , that's up to you as the creator if you want to keep it exclusive or sell it to more people or put it out there for everyone to use, I'll invest in it regardless.

That one is not incredibly difficult. I made http://www.stencyl.com/game/play/35753 in 3 days for stencyljam. If you open it, you will see room 1 has 2109xxxxx vs. 2603yyyyy. If I open the game, I will see the same. If I go on gamejolt, I will see the same. If I open it on mac, pc, whatever else, I will also see the same two players. Even if I check out my server (screenshot attached), I see the two players are in room 1.

Having values become cross platform (flash-mac-pc-ios-android) simply takes having a server and sending/retrieving the values. Just like in most games with a "cloud storage" option, you can have a button to upload - its sends the data - then open it on any other device and download the data.

thechaosengine

  • *
  • Posts: 307
Having values become cross platform (flash-mac-pc-ios-android) simply takes having a server and sending/retrieving the values. Just like in most games with a "cloud storage" option, you can have a button to upload - its sends the data - then open it on any other device and download the data.

I appreciate it, but how would you do that for a million players?  I don't think I have the chops to make these requests happen myself, which is why I made this thread instead of asking for help in making them myself :)

You seem to have a good grasp of the technical knowhow, feel free to give it a shot yourself if you're up for it.

ceosol

  • *
  • Posts: 2091
I appreciate it, but how would you do that for a million players? 
The way I usually do it is assign a random number to the player. In the example I showed, it was a nine digit number. Having nine digits already allows for 999,999,999 players. If you have played Nintendo's new Fire Emblem mobile game, you'll notice that they also used a random nine digit number (e.g. my player number is something like 555556053). Another way to do it is with a login. An example of that is for Crashlands they created a butterscotchID platform where you can log in to all of their games from any device under the same account. FYI: This is also a good way to retain a player base for any games you want to release in the future.

Each time you get a new player that has elected to start from scratch, create a random nine digit number and check the server for availability (and repeat the creation/check until it goes in). Then, each time they hit the cloud-save button, send the info to the server. When the enter a game and choose to type in their nine-digit number (or login), you pull the information back from the server.

thechaosengine

  • *
  • Posts: 307
That's a cool idea in theory, but it would be a gigantic waste of time for most games, definitely for mine. Nobody would actively press a Cloud Save button and then input a nine digit number on another device to restore the hats they unlocked XD

The way iCloud syncing works is all data gets saved, and when a player grabs another device that is logged into their iCloud account (which like 90% of them are by default), it loads the data. The sync button itself essentially just logs people into their iCloud account.

If I were to implement a cross-sync function, it'd have to require zero effort from players to succeed.