medleystudios
125 posts
Hi there! We’re the indie dev team working on our first game Super Plexis. Feel free to reach out to us anywhere @medleystudio !
Don't wanna be here? Send us removal request.
Photo

Just finished a round of updates to our good ole battle texture atlas (specifically for new changes to abilities! But more on that later...) While nice to look at, we won't have atlases in this form once the new engine is done, they'll be made automatically. #beautifulmess #spotthedifference
2 notes
·
View notes
Photo

Putting that color info to work: a new block variation! ( #autumn ?)
0 notes
Photo

Researching colorblind-safe color palettes for a new block design. Found this chart pretty interesting since it simulates what the original colors look like to various types of color blindness. #colorblind #palette #spectrum
0 notes
Photo

We couldn't be more excited to have come this far! Wouldn't have been possible without the support of our backers. Let's finish this campaign strong! #halfwaythere #kickstarter #excited
0 notes
Photo

Join us even if you're not joining the tournament! But if you're interested, check out the link in our bio for more info and to secure a spot. #tournament #competition #matchmakinghappyhour
0 notes
Photo

Just a quick heads up to our competitive puzzle fans out there, Puzzle General will be hosting the first official Super Plexis tournament this Sunday! (April 23rd). There will be more info and posts coming soon but in the mean time use the link in the bio to claim your spot! #competition #tourney #tournament
1 note
·
View note
Photo

Thanks to all our backers so far! If you know anyone that is a fan of puzzle games (classic retro ones or not) tag them in this post! #kickstarter #tetrisattack #puzzles #paneldepon #puzzleleague #retro #games
2 notes
·
View notes
Photo

New #kickstarter video is almost finished! With the new campaign coming in the next couple days, keep an eye out!
1 note
·
View note
Text
Our Roadmap for Super Plexis - Dev Blog
It’s been a crazy past few weeks for the team! We released the first taste of our new single player experience, Adventure mode, then dived right into Kickstarter with their time-sensitive promotion for 1 week projects.
The First Attempt
We knew this next stage of development was going to be a challenge, another huge time commitment that, without funding, might have to be completed at a part-time rate. So when Kickstarter presented itself as an option, it felt right, and looked like our chance to continue working full time on the game as we bring it to a wider audience. While I was preparing promotional materials and writing, Andrew started work our brand new game engine, re-designed from the ground up to support Android devices and beyond. Our 1 week campaign proved to be a risky bet, but despite the final numbers the reception overall was inspiring and eye-opening (turns out people really want more games on the Nintendo Switch! But more on that in a bit).
We’ve learned a lot over the course of that one week, not just about Kickstarter itself, but about who are audience is and where Super Plexis fits in the gaming community. This is by far the most public we’ve been with our game, which has been both exciting and terrifying. We face the challenge of pitching our dream game and our long-term vision for it as a multi-platform title, but while only being able to show the current mobile version: a platform which comes with all sorts of complex stigmas and expectations. Not to mention the puzzle genre itself! But all reactions aside, one major thing has been confirmed: there is a passionate community ready and waiting for the return of classic puzzle action games.
The Refreshed 30-day Kickstarter
About halfway through our first campaign, It became clear that we didn’t give ourselves enough time to prepare. From confusion about the “All in 1″ promotion and what that really meant, to our rushing to get it live before March ended, a few major details were missed or glossed over in our urgency. It was our crash course on all things Kickstarter. We’ve since gained a lot of advice and had people encouraging us to try again, this time with a full 30 day campaign and revamped goals/rewards. Our original funding goal was based on our ideal year-long road map for development, a full package including: a brand new game engine, the Android port, the fully completed adventure mode, and any associated equipment/living expenses. But that amount proved to be incompatible with our uniquely short 1 week funding duration. For this refreshed Kickstarter, we’re splitting our goal into stages, just to ensure we can at the very least fund the most important part: the new engine. The rest will be up to our backers! With the ultimate prize being a version for the Nintendo Switch. In our first campaign, that Switch stretch goal ended up being an unexpected focal point for peoples excitement. So in our new campaign, we’re happy to announce that we’ll be prioritizing the Switch version as soon as we launch on Android. This means the stretch goal will also be much lower and hopefully obtainable!
Edit: here’s the link to the new campaign!
https://www.kickstarter.com/projects/1997496052/super-plexis?ref=nav_search
New Things on the Horizon
There’s a lot keeping us busy at the moment, some of which we aren’t allowed to talk about! But we can say it means good things for the future of Super Plexis. This coming month is likely to be our biggest and busiest yet! And a final, huge thanks for everyone who’s supported us to this point.
Stay tuned here or on our other social media platforms @medleystudio to get the latest updates!
2 notes
·
View notes
Photo

We launched a #Kickstarter for Super Plexis, live now! If you'd like to see the game on new platforms (Android, PC, and maybe the Switch!) share with any friends or family that might also be interested! This came as a bit of a surprise for the team, thinking it might not be live until this coming Monday, but here we are! Thanks to all our followers so far for supporting us to this point!
0 notes
Photo

Adventure mode is so very close to its debut! The longer wait is paying off with even more content/polish being added everyday. Here's just a peak at some of the new achievement icons #achievements #colors #itsalmosthere
1 note
·
View note
Video
instagram
Work on Adventure mode continues! Implementation of certain ideas ended up taking a bit longer than anticipated but we think it'll be worth the wait (and will mean that future adventure mode updates can come out quicker). In the meantime, I'm working on polishing and preparing new sound effects. #sounddesign #sfx #magical #pop
0 notes
Photo

The all new single player Adventure mode for Super Plexis is almost here! Unfortunately, we might not get the update approved in time for the originally listed date of March 1st. But keep an eye out for release soon after that! This release features the first set of levels, with many more new levels, areas, and mechanics to come in future updates. #adventure #update #comingsoon
0 notes
Photo

Just a liiittle hint at some art assets for the upcoming Adventure mode! It all begins in Aria and Cleffs homeland: Loftwood. #pixelart #worldmap #sneakpeak #adventure #woodland #cabin
0 notes
Photo

Matchmaking happy hour this weeken, starting tonight! Get your friends, family, and heck even your grandparents online and let's battle! #matchmakinghappyhour #letsdothis #reddit #please #be #kind
0 notes
Text
How we solved our “Persistent Data Problem” - Dev Blog
Made this post over on reddit today but figured we’d archive it here! If other devs would be interested in more posts like this about our game or gamedev in general let us know! Even though Super Plexis is our first game, we committed ourselves to make something great from scratch without compromising the fun, the performance, or the original vision. But as I’m sure many of you know, developing for mobile is not always conducive to lofty ambitions, and creating our game’s back-end turned into a year and half long boss fight. We’d like to share what we’ve learned since it might benefit other indies (especially those with little-to-no budget) starting with: persistent data.
Here’s two things we can probably all agree on: 1) Independent mobile games tend to have issues syncing account data between multiple devices. 2) It’s frustrating when a mobile game that doesn’t require multiplayer still requires an internet connection to play.
These two problems usually intertwine into what we call the “persistent data problem”.
So here’s the cool thing about the account system we created for Super Plexis. We solved both of these problems without any monetary overhead or delayed user experience. We don’t spend a dime on servers (if we could afford it we wouldn’t be opposed to that), we don’t make users sign into iCloud or anything like that, and users can play offline if they want. Here’s the real kicker! All players’ customizable profiles are publicly viewable in the ladder, and the system is very fast and memory efficient.
How did we do it? I’ll be speaking in terms of iOS because that was our launch platform, but rest assured, these tricks with GameCenter also have an equivalent in Google Play for Android devices (for which we’ve recently started developing) . I won’t be talking too much about how we prevent cheating because that is a variable and game dependent subject. Here are just the basic ideas and feel free to ask any questions in the comments!
Pre-emptive TL;DR We found a way to use Game Center leaderboards as a server for our player data, bypassing the need for a paid server, and avoiding messy private databases like iCloud.
User requirements: As long as the user is signed into Game Center, all of these features become available. A guest account is provided for users that don’t want to be signed in.
The server: Time to get comfy with binary arithmetic! We store entire accounts using hidden leaderboard score values / meta data. Each Game Center leaderboard score gives you 16 bytes of data (a 64 bit integer value named “score”, and a 64 bit unsigned integer value named “context”), and you can store 100 leaderboards if you want to. The trick is to string the leaderboard scores together. For example, in version 1.1.9 of our game, we are using 599 bits of data (75 bytes, 5 leaderboards) to store all of the ranked progress, unlockables (characters, portraits, skins, achievements, block sets), game-mode dependent progress, important user preferences, stats, and account meta data. We scramble this data to prevent cheating and unscramble it when we are reading from it. In Game Center, leaderboard scores are usually “loaded” and “reported”. For more information on that implementation, check out the GameKit API documentation regarding the GKScore object. In our game, we report and save the most recent score as opposed to “best” or “highest” score as that wouldn’t make sense even for a poor man’s server like ours.
Offline accounts: On each machine, we create one offline guest account and one offline player account for every Game Center user that opens the app. There are billions of ways to save / load account data on any machine. On iOS, “name.plist” files are the easiest solution. We use a combination of encrypted plist files and serialized binary files. In general, it��s important to try to make these files unreadable so that you can minimize cheating. Anyway, whatever the user does on that device is always saved to their offline account. The localhost’s Game Center playerID looks like this: G:##########. In short, that is their sign-in username and password, so it is most convenient for the user to log them in immediately. If a change-of-users is detected, interrupt the game, immediately cancel any important background operations, save / sync the last user’s game state, and ask the new user to restart the app (or send them back to the title screen, this is also game dependent).
Online accounts reflecting offline accounts (longest and most important section): TL;DR, “GL HF” If the user is signed into Game Center and has a stable internet connection upon opening the app, we search for their scores in our leaderboards. In Super Plexis, this is when the first load screen says at the bottom “Retrieving data from Game Center…”. If this user’s score does not exist on a leaderboard, a new score is generated and submitted to that leaderboard. This just sets them up with some space in the online world. Now we have to use that space. Recall “The Server”, and lets use a small example. Suppose that we only had 16 unlockables in our game and they were all achievements. We only need 16 bits (2 bytes) to store the state of all these achievements in the leaderboards. It may look like this, I’ll separate my binary into byte sizes (pun very intended).
Achievements: 00000000 00000000 -> no achievements unlocked Achievements: 00000000 00000100 -> achievement #3 unlocked Achievements: 00000000 00001101 -> achievement #1, 3, and 4 unlocked Achievements: 01010000 00001101 -> achievement #1, 3, 4, 13, and 15 unlocked
How to know which bit index reflects which achievement is up to your implementation. In Super Plexis, we created a parser object that links ambiguous bit indices with offline account object values. This way, when we set the offline value “Super Cool Achievement Bro!” to “unlocked”, the leaderboard bit that is linked to that achievement is set to “1” from “0”. There is one parser object per update, that way we can view player profiles in the ladder who have not yet updated to the most recent version (because your “newer” version remembers their “older” versions). This also allows us to rename data, move data, and resize data, without corrupting your progress when you update. As you can imagine, you cannot view the player profile of someone who has a more recent version of the game than you. Also we do not allow players of different versions to match with / invite each other in online multiplayer because we may have renamed, moved, added, or (hopefully never) removed a character. For things like selectable characters, portraits, and block sets, you would normally store the related identifier string value in the server. We definitely do that for the offline accounts, but not the online reflection of them. As I said earlier, we have so little space to work with, so the data has to be very small. In this case, your best bet is to put all the character identifiers in a static array like this: [“my_character_id_0”, “my_character_id_1”, ….]. For N updates, we require N of those arrays (one per version, again incase we rename, move, add, or remove one). Now we can just use the index of the identifier as the online data instead of using the identifier itself! So now, the offline account says your selected character is “my_character_id_1”, but the bits that are linked to that account object value (the same bits that we are storing in the leaderboard to keep your data synced) say that your selected character is “1”. I.E, if you have 16 characters, you only need 4 bits to store which character the player has selected. When we save data to your offline account, we also try to report this compacted version of your account data to the Game Center leaderboards.
Syncing between multiple devices: When the user is opening the app, we make sure that we are storing the identifierForVendor (returns from [UIDevice currentDevice].identifierForVendor) on the user’s leaderboard data. This is 16 bytes of data, so it takes up an entire leaderboard score. If the score does not exist, then we report a new one where those 16 bytes are set as the identifierForVendor. This is going to be used to check if the user has changed devices. Each time we report new data to the leaderboards, the current “identifierForVendor” is reported as well. This does not have to be saved as offline data. Also, we want to store some offline data like “lastAttemptedReportTimestamp” which will be updated and saved each time the user “tries” to report some data. The report can fail if the user is in offline mode, so we must track the last time this current device attempted to do that. Here are the three cases we need to look at: 1) If the user has not changed devices (if the offline identifierForVendor = the online identifierForVendor): We do not need to sync at all. The best option is actually to report all of the user’s offline data to the leaderboards. 2) If the user did change devices, but the last successful report timestamp (the GKScore’s date) is more recent than their offline data’s “lastAttemptedReportTimestamp”: Take all of the previously loaded leaderboard data and sync it to the offline account of the user. Save the offline account and report the current identifierForVendor so that we can record the next time a device change occurs. 3) If the user did change devices, but the last successful report timestamp (the GKScore’s date) is older than their offline data’s “lastAttemptedReportTimestamp”: There is no way to know what we should do in this case. This usually never occurs but it is possible if the player is constantly switching devices and playing some of them in offline mode, then playing the same ones in online mode later. The trick here is to prompt the user and ask them to upload or download their data. If they don’t know which one to choose, we offer a “play offline” option where they can check their offline account’s progress. If there is no missing progress, the user is guided to restart the app and tap “upload”, because the user would have been satisfied with their offline account. Otherwise, the user is guided to tap “download”, because the only way for there to be missing progress at this point is if their progress is in the leaderboards and NOT on their device.
That’s the gist of it! I left lots of small details out, and believe me there are many. This how we solved the persistent data problem in our game without paying for a server, using private databases like iCloud, or delaying the user experience. But when we are able to afford our own servers, we definitely will upgrade for all the obvious benefits (like cross platform play between iOS and Android devices, something that is not possible using this method). But for a dev team of only 2 guys, this method has been a life-saver on a budget. Hopefully it will help some of you as well!
0 notes
Photo

Valentines update is live for Super Plexis! Along with some UI changes that hint at something big coming soon... #valentines #valentineday #heart #holiday #whatcoulditbe
0 notes