#Pebble Park: Online MMO (ALPHA TEST LIVE!)

1 messages · Page 2 of 1

verbal hinge
#
  • Messaging: could just be canned, but it would be sweet to have dictated too. that may be out of scope for the start
  • Scaling up: that’s getting the app able to handle more players, the server to handle more players, and ultimately testing that somehow
    • I may be able to do testing by creating bot players on the server, tbd
merry ledge
#

aplite support when /hj

verbal hinge
#

for a real answer: i’m already squeezing out every byte of the 64kB RAM that the watches have for this app, and even that’s a challenge. Aplite unfortunately only has 24kB of RAM, which isn’t enough space for the code, much less the runtime assets 😭

merry ledge
#

damnn

verbal hinge
#

to get Pebblemon to run on Aplite I had to remove like 90% of the features 😵‍💫

merry ledge
#

oof yeah

verbal hinge
novel vapor
#

I’ll be on a plane during the time I voted. We’ll get to see how optimized you are now for airplane WiFi

verbal hinge
# verbal hinge
poll_question_text

Holiday in the Park! This week! Pick a day (we’ll do time later)

victor_answer_votes

4

total_votes

12

victor_answer_id

2

victor_answer_text

Mon Dec 22

verbal hinge
#

If anyone knows a better way to figure out what time to do this, let me know. I could do a when2meet or something 🤔

verbal hinge
# verbal hinge
poll_question_text

Round 2: time for the holiday meetup on Mon. Dec. 22

victor_answer_votes

2

total_votes

10

verbal hinge
#

Ok let's aim for 2:00 PM EST on Monday Dec. 22

#

I know this time won't work for everyone, so if anyone else is interested we could do another either Friday or Saturday

young magnet
#

Discord has a cool timestamp feature that can show relative time and also convert to the local timezones.
<t:1766430000:f>
<t:1766430000:R>

verbal hinge
#

ooo that’s pretty slick!

#

This is the latest version btw

verbal hinge
#

I’m on 🙂

harsh mural
#

I'm on my way!

novel vapor
#

i'm running in circles

#

trying to take down the server single handedly

verbal hinge
#

MrPizzaBoy could you try reconnecting? 🤔

novel vapor
#

done

#

I am a lowly iOS user

#

I'm on some public wifi, captive portal thingie

#

I think the sync is pretty good on iOS all things considered. I can't see your walking animation but I do usually see every tick you move

verbal hinge
#

oh i haven’t added walking animations for others yet 😎

novel vapor
#

OH! Then it's flawless

#

It'd probably make sense to make that all client side. Just start populating the "next position" of every user and just let them move on my watch even if they're behind by like 3 squares in reality

verbal hinge
#

yeah that would def be the way to do it

novel vapor
#

Until you add the go kart racing mini game

verbal hinge
#

ah there’s no disconnect/connection failure notification yet, so i’ve been relaunching the app every now and then to make sure I’m still on

novel vapor
#

Mine has 3 bars does that not mean I'm super online

#

or does that mean the opposite and i'm super not online

harsh mural
#

I'm waiting for my pebble time to do a firmware update 😬

verbal hinge
#

It means low latency! but uh i haven’t put a disconnected check in on the watch side, just the pkjs

#

so those bars will get stale and lie if you get disconnected

novel vapor
#

oooo. that's what I think I am noticing. I can tell I'm "offline" because they stop bouncing around

verbal hinge
#

i’m making notes of all of these bugs/missing features ✍️

novel vapor
#

i just unlocked my phone to like 5 "Pebble Core Crashed" notifications

verbal hinge
#

uh oh, i’d say submit a bug report

harsh mural
#

I'm in

#

Do new users automatically get a friend request from you, or are you just that fast?

verbal hinge
#

yeah i set it up for automatic 😆

novel vapor
#

A real MySpace Tom

harsh mural
#

Can I change my name?

verbal hinge
#

not yet, i’m debating if/how to do it

novel vapor
#

You gotta charge us $5 per name change

verbal hinge
#

come join me in the meadow 👀 (top left)

novel vapor
#

The iOS Core App definitely still has a rough time still but it even working given the limitations at this point is crazy

#

I've had the app crash for less though so who knows why exactly

harsh mural
#

Big up

#

It's working well for me, though I'm on the OG pebble app

novel vapor
#

Oh look at the colors

#

I'm about to board a plane so I'm gonna hop off. I'm hyped for this. This is such good work already

harsh mural
#

Rebble discord integration so we can use our discord names 😁

#

Oh shit there's zoom??

verbal hinge
#

i gotta figure out a good way to show that it’s an option 🤔

harsh mural
#

If there's no nametag, are they an NPC?

verbal hinge
#

it’ll only show when you can interact with someone, which is off of the main roads

#

the idea is that the main square and stuff might be too crowded for like 20 nameplates on screen

novel vapor
#

I was imagining it was the RuneScape Wilderness rules

verbal hinge
#

ohh i’ll look into those

harsh mural
#

Do you mind if I post about this on bluesky with some screenshots?

verbal hinge
#

go ahead!

harsh mural
#

Do you have a bluesky account?

verbal hinge
#

no only twitter unfortunately

#

btw where in the world is everyone playing from? i’m in the eastern US

#

i think the server is located in boston?

harsh mural
#

I'm in the UK

sick hatch
#

eastern europe

harsh mural
#

Feature idea: A step counter and a step count leaderboard

#

This is so well done

#

Is the map embedded in the pbw or serverside? I presume the former

verbal hinge
#

pbw, would be interesting to make it server side 🤔

#

whoops my watch died, maybe I should’ve brought something other than my ptr to work 😅

harsh mural
#

Suddenly I'm all alone 😁

#

Great work dude, it's really cool

verbal hinge
#

Thank you, and thank you to everyone for joining in!! 😄

pale leaf
#

I like the idea. Make it also work on OG Classics like the Steel too

pearl pagoda
#

Looked fun. Excited to try again soon

verbal hinge
#

Pebble Park: Online MMO (ALPHA TEST LIVE!)

verbal hinge
verbal hinge
#

Yeesh just including dictation takes up almost 4kB of memory 😬 And that's not including any code or other variable overhead to support it

young magnet
verbal hinge
#

Aw man I tried this a while back. it took me a while to learn why it wasn’t working: memory fragmentation. Essentially when the heap is empty there’s plenty of space for an 8kB map. once the map is freed, the next code runs, and then frees up the memory. Even though there’s, say, 11kB free now, there’s no longer a single 8kB of larger chunk available to malloc (it could be, e.g. a 6kB and 5kB chunk instead)

#

I do have some ideas for being smarter about map loading, i.e. chunk rendering (which could cut that 8kB at least in half). It’s complicated though so it’ll take a few days to implement

#

That and I’ve been aggressively cutting back everywhere I can in terms of code size, which has diminishing returns

novel vapor
#

Are you just doing row loading right now as the player moves in a certain direction?

#

Oh or are you just loading the entire map at once

verbal hinge
#

Yeah the whole map buffer is 8kB. the actual rendering space within the graphics engine is only 1kB (by design), so I do tile-based row loading from the whole map buffer into the graphics buffer.

novel vapor
verbal hinge
#

Nice if my current implementation plan fails I’ll see what I can glean from that project

novel vapor
#

I don’t think it’s anything fancier than arena allocators and then loading the chunked up tile set into those spaces

#

So maybe just the way the map got chunked might be interesting in Engine/Maps more than the actual code

#

Luckily with C someone figured out how everything works 50 years ago and you just have to pull the scraps together across the internet to relearn it

#

Somehow one day your project will only use 1 byte of data at a time due to dynamic streaming and you’ll be half way to C memory management perfection

verbal hinge
#

Hehe I came up with a chunk loading system and with the code overhead I've squeezed out another 4.5kB. I did it at a sweet spot of minimizing the number of storage resource fetches (since each fetch is a significant amount of time and lags the game) while still getting a significant memory gain

#

It doesn't change how the game plays, but I can finally move past optimization for now (until i add another 6kB of code and have to reoptimize 💀 )

verbal hinge
#

aw geez, it turns out that dictation has a memory leak, so now I’ve got to include even more overhead for that 😔

#

every 25 dictation requests is going to cost 900 bytes of unreclaimable memory, so if someone wants to do a lot of messaging in one session it may crash the app

#

I’m frustrated that I’ve been so diligent in avoiding leaks and now there’s one in a critical feature that I have no control over

#

but i guess a lot of this project has been working around difficult limitations/shortcomings of systems that are out of my control 🤷‍♀️ (vent over)

stuck zodiac
#

You need to take a couple days for rest 🤗

wind berry
#

so it's at least fixed for people on core watches

pearl pagoda
pearl pagoda
verbal hinge
#

Yeah the only thing to add is messaging. I think it's critical otherwise there's no reason to come back after trying it for the first time 🤔 and of course making sure the game actually works with more than 5 ppl

verbal hinge
novel vapor
#

Are you trying to reuse the sessions or are you destroying it after each single use?

verbal hinge
#

i’ve done both to see if that did anything. terminating the dictation process before it displays the transcribed result doesn’t have a leak, so that’s a lead.

verbal hinge
#

ok you know what fixing the firmware is beyond the scope of this project, if it breaks, it breaks 🤷‍♂️

verbal hinge
merry ledge
#

awesome!

verbal hinge
#

Bit of a jank video, and I forgot how the alphabet worked for a second

#

Also there’s a profanity filter in there, hopefully it’s sufficient, i’ll probably still add a report option tho for bad actors who get around it

merry ledge
#

hdr video jumpscare

#

but yea nice :D

lost oasis
#

Looks great so far! Very nice to finally be able to use our own usernames instead of the random ones it gives you

verbal hinge
#

omg i forgot to include in the 0.5.0a patch notes that other users have walking animations

harsh mural
#

I can manually edit patch notes if you send me the new text

verbal hinge
pearl pagoda
#

Do you have any telemetry?

#

Or an idea of how many users are checking it out

verbal hinge
#

Only 2 people since the 0.5.0a update, probably just 6 or 7 in total so far? I definitely want to have some good metrics to track before the beta, do you have any recommendations?

novel vapor
#

I am currently being perplexed how you were able to make this app now with the memory constraints. Are your sprite sheets pretty small overall since it's just walking animations at the moment?
I really want to see the magic you did to get this running now because I'm just trying to load up a fairly static set of sprites to animate on a watch face and I can't run this on anything lower than Emery due to app size.

verbal hinge
#

I’ve heavily modified the v1.5.1 release of the engine for this project, though. Happy to go through it with you if you’re interested! Lmk if you have a project thread or anything

sick hatch
verbal hinge
sick hatch
#

Oooooooooooooo

verbal hinge
#

Random Q: does anyone have any strong opinions on the initial username screen being blank or having a prefilled random username (like it does now)?

novel vapor
#

Prefilled random is probably fine. It doesn’t hurt anyone that wants to set their own and makes it easier for anyone that doesn’t

verbal hinge
#

Uhhh ok the latest iOS update has killed the old pebble app, if I cannot get it to work again then I may be 50% screwed until core gets ios websockets working

low ore
#

i am trying this right now. I really wondered how the controls would even work but they actually work pretty well. It's a fun idea.

#

A bit quiet right now! haha

verbal hinge
#

dang i’d join if the pebble app was working, thanks for trying it out even though it’s empty

novel vapor
#

I’m looking to add support for using the accelerometer to scroll list and scrollable view. The way your Tilt Controls works is really good so I’m curious if you’d have any secret sauce you used or if it was a pretty straight forward implementation of the API (can move out of this thread too, just relevant because it’s good in this app)

verbal hinge
#

I’ll try and rip out the relevant parts of the code and put it in a public repo for you to take a look at

verbal hinge
verbal hinge
verbal hinge
#

Damn. I'm officially locked into the new Core Devices Pebble app on iOS, no turning back now. I'll have to deal with all of the bugs/crashes (and try to figure out if it's my app or the core app), plus the whole no-websockets deal. This sucks.

#

I'm grateful that @novel vapor requested getting it working on this coreapp/ios combo because otherwise I would be much much sadder right now 🙂

verbal hinge
#

hmm, no eta for ios websockets, so for the foreseeable future i’m going to assume that they’ll never happen and design around that https://forum.repebble.com/t/websockets-for-ios-eta/168

novel vapor
#

I think that’s the correct assumption to make.

Are you just doing long polling right now /+ Are you wrapping that in the WebSocket API or just as a standalone hack in the meantime

verbal hinge
#

For rest i send the same binary packet just through a post request (then I catch that on the server and push it through the same data parsing as WS)

#

The big difference is rest polls every second vs in WS the server pushes every half second

novel vapor
#

So are you sending GET (or POST depending) requests to your server every second and if it has nothing to say you just do it again?

#

If yes, any reason to not just open a request and then wait until the server has something to say. It’d be more work on the server to hold onto that request, but then if 5 clients have open requests, you can respond to them all at the same time

#

E.g. player 1-5 have an open request and player 6 moves, you just respond to all 5 of those open requests with that then the clients just re-open requests
I’m simplifying what your server is doing a lot here in my head so it’s just guessing

#

I guess you’d have to keep like a rolling 5 second log of everything that has happened to be able to inform a client what has happened since the last time their request was resolved though

verbal hinge
#

Huh, never realized that holding a request like that was possible, so essentially the user would make a fetch request (rising edge), then the server would hold that request until the next tick, at which point it pops the queue and sends a response (falling edge)?

#

I do indeed have a queue for all of the things that happen between ticks

novel vapor
#

Yeah. It’s commonly called HTTP Long Polling

https://datatracker.ietf.org/doc/html/rfc6202

IETF Datatracker

On today's Internet, the Hypertext Transfer Protocol (HTTP) is often used (some would say abused) to enable asynchronous, "server- initiated" communication from a server to a client as well as communication from a client to a server. This document describes known issues and best practices related to such "bidirectional HTTP" applications, focusi...

#

You’d end up with two streams. One is your POSTs to inform the server of client changes and keepalive notifications if the user is doing nothing

One is your GET which is the long polling request that is resolved by the server when it has something to say. Once it’s resolved the client re-opens it right away. You could probably open X number of GET requests to avoid downtime between the server and client as much as you care

#

If nothing is happening, like I’m standing alone in the server, I’d expect that a GET would just stay open indefinitely (or you resolve it every X seconds of idle to let the client know the server still exists) and periodic keepalive POSTs to tell the server the client is still there but idle

#

You could probably group up your open requests and resolve them as a big chunk every time and then just keep doing that with your rolling log of events
The client can send a new GET with a header indicating the last time it had a resolved request so there’s server knows which updates to send along from the rolling log (you might already do this)

#

If you wrap this behind the WebSocket API, on the client you can pretend everything is fine

verbal hinge
#

Wow this is awesome information, thank you so much for sharing it with me!

novel vapor
verbal hinge
#

The way I’ve got it, I already have a keepalive/send updates separate from the fetch, plus the way i queue data and send down in websockets on server ticks will translate nicely to a long poll

novel vapor
#

And that’s as far as my brain goes right now

verbal hinge
#

Ooo i’ll read that when i get home from work 👀

novel vapor
#

I found Faye, that seems to try to handle this both server and client side

https://faye.jcoglan.com/browser.html

if it helps anything. It has both WebSocket and Long Polling transports supported so you’d land with the same API either way you end up going (not necessarily to use this library but to observe the API to see how it could be laid out)

verbal hinge
#

Wow with long polling, the iOS app can match pace with the server tick rate finally 🥳 It was a quick implementation, so expect it in the 0.6.0a release!

novel vapor
#

That’s good! For heavy traffic it probably won’t be a lot less heavy than constantly pinging but it’d hopefully be a bit more optimized to only need to do the client<>server negotiation actually when it is needed and at the actual points in time it’s needed rather than randomly every 1s

Long polling shows more benefits in things like the Claude app or Bobby for example where you can publish an event (LLM request) and then subscribe to the result if that event that could take some long amount of time.

verbal hinge
#

thank you for sharing your knowledge!

verbal hinge
#

I’m taking canned message requests! I’ve got basics like “Hi!”, “Bye!”, “Let’s meet!”. wanted to see if you guys had any fun ideas

haughty star
#

What about something like "let's go to " for the different zones?

haughty star
#

Oh, and a way to compliment each others appearances

novel vapor
#

(I’m using tilt controls)

wind berry
merry ledge
harsh mural
#

This might be helpful instead of posting the pbw here 🙂

verbal hinge
harsh mural
#

Hmm. The only trouble with this is that I don't think you can go from the store url to opened in the core app just yet. I think core app gets upset or something

merry ledge
#

it wouldnt be coreapp if there wasnt random arbitrary basic stuff that didnt work 😭

verbal hinge
#

I have messaging working, with canned messages!!! But there's one major, major issue: there's not enough space for all of these menus on the older watches (which is why this is an emulator time 2 recording...)

#

So the gist is that I will need to spend a long while figuring out how to optimize out like... 2kB of code? idk how much exactly, and it may be more... But! Everything else for it is in place

#

I also will say this means that dictated messages aren't going to fit into Pebble Park, so Pebble Parlor will really be where custom messaging will happen

novel vapor
#

I think the separate apps is the smart way to go so you don’t have to conflate functionality across apps since you just won’t be able to do it.
(Apps being able to launch other apps would be really neat if both just registered each other’s UUIDs to do so)

novel vapor
#

(Maybe for smaller watches if you can’t optimize away 2K you can simplify the menu structure and provide only a subset of messages? Or selectable via Clay?)

novel vapor
#

If you see me use any other message in Pebble Park, I was hacked

merry ledge
#

real and true

#

if you see me on pebble park anytime before late february i am being impersonated

verbal hinge
#

Lol midnight release before I sleep, I did a database reset so everyone will need to make usernames again

#

Let me know if you have any new message ideas! I set it up so that I can add in a ton of canned messages without running out of memory, so I'm all ears!

#

also lmk if you get crashes, etc.

#

For the beta release I'll use the hidden dev portal feature 👀

novel vapor
#

Gangs all here

#
  1. Not a single iOS crash just wandering around
  2. Maybe an option to force the backlight to stay on would be nice. I think thats something you can do because I believe Pebbletris Redux does
novel vapor
#

Wow wait did you get the server latency on the Core iOS app down to the same as the other clients? It really “just worked”?

verbal hinge
#

Sure I can add a toggle for backlight always on in the settings!

#

Yeah I just had to do a bit of logic change on the server side to hold the response object until the next server tick and on the app side make the requests happen asap. that’s it!

novel vapor
#

How much space do you think you have. Is Pebble Park’s map size maxed out or is it just the size it is for demonstration purposes.

verbal hinge
#

Fundamentally it can be larger, thanks to chunk loading I could increase the map size indefinitely with no ram impact, only restricted by resource storage (which i’ve got a lot left)

#

It’s this size because i felt like 5x5 screens was large enough for Park specifically, but it can be larger (or have multiple kinds of maps) for other apps

verbal hinge
novel vapor
#

Me and the gang

#

All using tilt controls with backlight on

pearl pagoda
#

pumped to check this out

verbal hinge
#

I'm adding a username confirmation in the next version, accidentally went too far before finishing a new name 🥲

verbal hinge
#

Pushing the limits and further optimizing (primarily for space), here’s 16 NPC players (from the server) rendered at once

#

Performance suffers a bit, but is it better to have perfect frame rate or as many players as possible on screen?

#

There are other high-volume concerns to address (e.g. appmessage bottlenecks), but for now i’m starting with straight up rendering limits

sour swan
low ore
verbal hinge
#

The Playdate is a super cool piece of tech! If I carried one around as much as a Pebble then I’d definitely be developing for it

sour swan
#

@verbal hinge well said👍

verbal hinge
#

It won't help with clustered folks but still nice in general i think

low ore
#

I'm just waiting for you to implement the pebble-paper-scissors global leaderboard!

verbal hinge
#

2,025 players (NPCs) on the server at once (plus me so 2,026 total)

#
  • Server sends down all player information.
  • phone keeps track of all of the players
  • phone filters out the 15 closest players and tells the watch to render those
#

15 other players on screen is kinda the limit of how far I'm willing to sacrifice frame rate, at around 20 it's nearing the memory limit for the watch

novel vapor
#

If you’re zoomed in does it adjust to be less than 15 closest?

#

(Also this is huge and I’ve no notes. This is really good work on performance)

#

(Maybe one note is to de-dupe players standing on the same square based on the last one that stood there but that’s it)

verbal hinge
novel vapor
#

You should give your life over to RuneScape to get performance ideas

verbal hinge
verbal hinge
pearl pagoda
#

dang so much development haha

#

wow you are an optimization wizard

novel vapor
#

now make them move

#

Realistically every day is just a step toward Link realizing they actually COULD port Final Fantasy 1 to the Pebble. Then it’s a waiting game for me.

pearl pagoda
#

I'll for sure be playing some type of Links Awakening on my Pebble some day... I just know it

novel vapor
#

Once they realize they can that burden of knowledge will drive them forward

verbal hinge
#

v0.7.0a - The Alpha Finale

This is the final major update for the Pebble Park Alpha! Thanks for joining in and giving me advice, knowledge, and feedback early on, I couldn't have gotten this far this without all of your support... and it's not over yet!

verbal hinge
#

(there are only 16 npcs on the server now, so not as crowded as this recording)

pearl pagoda
#

that's killer

novel vapor
#

I’ll note I haven’t had a crash of the connection between phone and watch since the release that included long polling

verbal hinge
#

ideally i was hoping to do the beta test including the PT2 to, you know, beta test on new hardware. i could still do it, i guess but:

#

the final release should come after PT2s have started arriving. otherwise people will say “oh wow that’s cool i can’t wait to try it when my watch gets here!” and then forget in however many weeks

#

tradeoff is that i have a bit more time to do things:

  1. i think that message notifications are critical. personally i’d forget to go back and check the app!
  • painfully there’s no timeline server, so i’ll have to do a wakeup event -> poll -> push notification sort of deal
  • and not use up too much code space…
  1. it would give me time to work on a second app to be part of the Pebble Land ecosystem, probably bombleman
#

who knows, maybe in these 6+ weeks core will come out with a timeline server alternative and apps-launch-other apps and websockets! (haha…)

pearl pagoda
#

I sold my P2D for a reason

#

figured I'd rock the old hardware that works till the new hardware starts working

#

no shade on the Core team; they're doing what they gotta do

#

but yeah, not holding my breath till its running at full steam

#

yeah bro lets get that bombleman going xD

verbal hinge
#

Hmm… all of these talks of discord servers reminds me that it might be worth setting up an external discord server for the Pebble Land ecosystem so that people can match up e.g. for playing games together, know about updates, provide feedback… 🤔

low ore
verbal hinge
#

For the 5 person Pebble Park alpha, sure. Park is pretty self contained anyways. But for other apps like Bombleman, how is someone going to organize a lobby to play with 3 other people online? What about the other apps that will come out in the Pebble Land ecosystem?

#

I’m absolutely open to ideas, I think I might need to expand beyond this one thread in some way

novel vapor
#

If these get so big that discussion breaks out of the Rebble Developer Community (this), forum.pebblepark.com doesn’t sound awful. But as it is now, probably utilizing the existing community spaces (forum.*ebbl.*, the subreddit (?)) probably makes getting initial engagement more streamlined.

verbal hinge
#

Staying in the preexisting communities is wise, even though they’re limiting in their formats

#

I think I’ll try to make a static landing page that looks kinda like this, accessible via a QR code in the app

alpine olive
#

Just tried this out. Nice app! Never expected an mmo

verbal hinge
#

Y’all got me thinking and I could def do something like this to compose longer messages

snow nest
#

(i like how you use hatching to show a highlight, it looks neat)

verbal hinge
pearl pagoda
#

That's awesome

novel vapor
#

Oh that’s so nice! I bet you could handle localization nice now too since it’s still nearly full sentences rather than having to construct sentence structure.
The logic just needs to know the that User A sent the message containing the key greetings_1 and it could show up in English even if it originated as another language

low ore
#

I love how this project is taking shape.

Have you thought about creating something like RetroAchievements or PlayDate Achievements for the mini-games? Perhaps with a library so that other developers can integrate it into their own games built for Pebble, which can then make use of Pebble Park's social network. This way user's could have a way of competing with their friends in games that are not necessarily multiplayer. Imagine having a leaderboard for a game like PixelMiner. e.g. Who has mined the furthest amongst your Pebble Park friends? There could be a friends-only leaderboard and a global leaderboard.

verbal hinge
#

Also... i uh kinda forgot about localization...

verbal hinge
harsh mural
#

Omg we could build it in to RWS

novel vapor
verbal hinge
#

WHAT

#

yippee party

novel vapor
# verbal hinge Uh oh I already designed the messaging system to work in full strings, in antici...

Yeah with dictation I dunno what you’d do for translating messages which I think the answer for any long term is you wouldn’t.

https://developer.rebble.io/guides/tools-and-resources/internationalization/

Handling strings feels fairly simple with this but I’ve never done it this way. I don’t know if this causes your app to have all of the languages embedded on the watch binary but it reads like it does.

If that causes too much of an app size bloat for certain platforms, you could just have the watch hold the keys for all strings. Then at startup it can just ask the phone for a language to be provided. I do this fairly poorly in Kagi News because there are like 100 categories available and I don’t want to store all those strings on the watch when only like 6 are to be used at once

pearl pagoda
#

another random idea I had for communication was: separate app

#

friends app

#

and then people can become friends and can play different games but all the communication and friend stuff can be done in that standalone app

#

Pebble Park is the mmo

#

but go over to bomberman and play there too

#

all the while if you want to chat, just open friends app

#

you can manage the friend there and other friends

#

and in each app in the borders you could see some indicators notifying you of a message, friend request, etc.

#

that way the apps are still social but you don't have to bloat each app with communication

pearl pagoda
#

in friends app you can customize your avatar, set status message, hold an item, etc.

#

I realize this is basically like hacking apart all your apps

#

to stitch them back together

#

lol

verbal hinge
#

Yesss that’s the vision! (Also why I’ve requested from core some way to launch an app from another app)

#

The two I didn’t consider are were (1) including message, etc. indicators in other apps and (2) an independent friends app 🤔

verbal hinge
#

Could also do server side translations, store messages in english and translate when sent down

pearl pagoda
#

always a step ahead of me haha

novel vapor
# verbal hinge Could also do server side translations, store messages in english and translate ...

Yeah this is sort of what I meant but just doing it from the local PKJS Companion app instead of the server so the server isn’t concerned about strings as much. Unless you put the messaging feature in all of the apps then it’d be unified by the server.

Storing all of the languages on the watch doesn’t seem necessary for something that needs a connection through a companion app anyway in order to function

verbal hinge
#

good to think about, i really appreciate you bringing it up!

novel vapor
#

Am I off base on this solution? This is a horrible diagram missing some steps but I think it’s reasonably possible with a very light weight notification web app that can install to a users phone. notification.pebblepark.com

Pebble Park can have a section to generate a short lived token on the server for me to provide to the notification web app. When I do, now the server knows that when User A sends User B a message, it should push that message to User B’s notification app.

It’s an app on my phone, so my Pebble will display the notification.

#

The notification app doesn’t actually have to do anything but take the token to validate the user, receive the messages from the server, and push out notifications to the device it is installed on about them. It can just be a web app so no App/Play store needed

#

(You have to manage sessions from the notification app now but you could treat it the same as any other front end you have, it’s just linked back to some related account, as of now, Pebble Park)

#

This same system of one time tokens could be used to connect users between different Pebble apps, unless you’re already able to do that by inferring something about their pebble they have. But I could create a one time token in Pebble Park and enter it into the set up of Bombleman and both apps will know it’s probably me. This isn’t high security but it isn’t nothing.

novel vapor
#

(If there is no actual auth occurring internally before this though this is basically nothing because otherwise you’re trusting the client)

verbal hinge
#

That's definitely a good idea for a workaround. I thought about it for a bit, and I've got the following conclusions:

  • An external phone app is the only way to get notifications to the watch without wakeups at this time. They won't be timeline pins so I can't launch the watchapps from the notifications, can't do much about that
  • Building a single webapp is much more approachable (at least it should be) than building both an iOS and Android app
  • My hope was for the user experience to be entirely contained in each of the watch apps, but unfortunately that's not a possibility given the current state of Core's web infrastructure. I need to move on from that mindset
  • Bonus benefits of notifications being handled externally:
    • If the watchapp is uninstalled or the watch is off, users can still get notifications!
    • I don't have to reimplement a notification handler on every watchapp
  • Also... it will get the ball running on your desire for a social hub app lol
#

Oh and I should probably explain some of the server structure

#

There's an overarching Pebble Land server that handles authentication, user info, and friends.

Pebble Park uses it for registering, logging in, user info. Then Pebble Park has its own server for handling game logic, messages (although maybe I could pull that out into the Pebble Land server)

Bombleman will use Pebble Land for logging in, getting friends. Then use its own server for matchmaking, game logic.

#

Here's the park authentication process for reference

verbal hinge
#

if, for some reason, Core ends up adding a timeline alternative all i have to do is change the endpoint of the server when it sends notifications down

verbal hinge
#

(this is the most barebones test docker setup webpage of all time)

alpine olive
#

can this game just be a watch version of the gameplay from PSO?

verbal hinge
#

Phantasy Star Online? Not this one, but maybe another app...

novel vapor
#

Also get your legal team ready smh /s

#

(Maybe not /s I don’t know the conditions around which you can call this Pebble Land or Pebble Park on the platform itself. I’m fairly certain that was not allowed in the past but I dunno if anything changed since Pebble no longer exists and Core holds the trademark. I assume you can’t still)

verbal hinge
#

oh... well that's good to know, worst case I rebrand and buy a different domain

verbal hinge
novel vapor
verbal hinge
#

wow that's more strict than I thought, but it makes sense! Maybe things are a bit more lax these days

verbal hinge
#

v0.8.0a

  • Biggest change for the app: messages can be longer and more complex!

(Note: pbw removed, see pins for hotfixed 0.8.0a pbw)

verbal hinge
#

A couple new issues have arisen:

  • The iOS websockets in the Core app are... there? But aren't really working. So unfortunately everyone gets Long Polling for now since I can't distinguish between working/non-working websockets anymore.
  • There's some weird bug with the core app where app messages get queued or something, and when I exit and relaunch the watch app all of those queued app messages get sent out immediately to the phone, so I put in an initial login delay which is a bit confusing for the user
novel vapor
#

Blessed Long Polling 🙏 it never fails you

verbal hinge
#

This undertaking finally got me to fully split the Land and Park servers as shown in the diagram from a while back. That combined with learning how to do a reverse proxy means that I can have a front end webpage (https://pebble-land.com) with SSL that can access the two servers! And it sets up better for Bombleman (and more!) to interface with the core Land server.

novel vapor
#

I don’t think that’s a bug. I think by design app messages are queued now until PKJS start up. Is that what you are seeing?

verbal hinge
novel vapor
#

1.0.10.8. If I’m interpreting that right

verbal hinge
#

it's definitely related to that fix, but may have introduced this other issue

#

I'll get like 20 app messages from the previous session sometimes, which is super annoying

novel vapor
#

A less sane person would send a session ID as part of the app message and drop any that aren’t associated with the current session

#
  1. Watch app starts. Generates a random session ID
  2. Sends session ID to phone
  3. Phone stores session ID
  4. Phone includes session ID on every message it sends
  5. Watch checks session ID and if it mismatches you know it is in a queue from a previous session and the app is playing a prank

But the app can’t keep getting away with making you do these things

novel vapor
verbal hinge
#

wait like 1 sec then try to log in

#

like open app -> wait 1 second -> press select

novel vapor
#

I waited like 10 just now just to be sure

verbal hinge
#

hmm hmm ok let me see what's up

novel vapor
#

Deleted. Reinstalled. Opened automatically. Closed. Reopened. Waited a bit. Pressed select. No log in either.
Just so I know the flow.

#

0.7.0 doesn’t work anymore either but I expect it wouldn’t since you removed the WebSocket support for iOS from the server presumably

verbal hinge
#

0.7.0 wouldn't work because I added app authentication in addition to player auth on the server

#

Does it get to the username selection screen?

novel vapor
#

No it just sits here

verbal hinge
#

The last option I can think of (before I sleep) would be to try: (1) close the watchapp (2) force close the Pebble app (3) launch the pebble app (4) launch the watchapp

#

if that doesn't do it I'll try to get the same setup going in the morning (I don't have my P2D connected to my iphone)

novel vapor
#

Did that to no avail just now. I rolled back to my app version 10.0.10.6, right before that app message buffer change just to see if that was it and no fix either (but doing so did resolve a crash I was seeing in my app, so neat)

verbal hinge
#

At the very least I know you're hitting the server because I can see the 0.7.0a attempts lol, I'll try to recreate tomorrow. If you're willing, any logs you could capture from the watch (from dev connection maybe, there are a few debug statements still in there) would be super helpful. It doesn't need to be formatted nicely or anything

#

Thanks for helping me figure out what's going on!

novel vapor
#

Sounds good. Tomorrow after work or during lunch or something I’ll try to get you some logs

verbal hinge
verbal hinge
#

@novel vapor Try this one out

#

I switched back to SDK (4.9.77) and it's working as expected. I... think there's something incompatible with the latest SDK (4.9.127) and the latest P2D firmware (4.9.125). I ran into some strange issues:

  • The not being able to log in issue
  • When I tried adding logs, I couldn't even launch the app anymore (the watch would just freeze)
  • Actually every subsequent build with the new SDK had that issue
  • But no issue on legacy watches!
verbal hinge
novel vapor
novel vapor
verbal hinge
#

Why start small? Unreal Engine 5 AAA games coming soon to a watch near you!
-# jk jk

verbal hinge
#

ugh all the stuff i worked on today is boring

verbal hinge
verbal hinge
#

… which is still a workaround for a core app bug

#

Speaking of core app bugs, the reason why websockets only sort of work on iOS is because whatever backend the app uses ends up converting binary data (e.g. Uint8Array) to strings!! So if I send a uint8 array of [1] then it gets converted to ”1” which is [49] instead. the websocket auth and close messages are sent over stringified json (which works fine) and led to my confusion

novel vapor
#

So given this are we all going back into the hellish clutches of WebSockets again or is it still blocked by something?

verbal hinge
#

Websockets are blocked until that bug is fixed. For a more complete example, a 4 byte array [1,133,128,3] becomes a string "1,133,128,3" which is an 11 byte array: [49,44,49,51,51,44,49,50,56,44,51] (44 is an ascii comma, for reference). I can technically parse that, but should I keep compromising with workarounds for (hopefully) temporary bugs?

#

Also there's a firmware(?) or sdk(?) bug with ScrollLayers where the width/height are stored as 1 byte or something so anything larger than 255 wraps around and breaks it (aka crashes the app). With Gabbro being 260x260...

#

And uhhhh I may have some similar breaking issues with my graphics engine since all of my coordinates are also 1 byte whoops

#

fortunately i think i've got enough workarounds for everything at this point that I can get back to developing the fun stuff

verbal hinge
#

Ok well unfortunately I'm stubborn and will keep making workarounds 😤 Websockets are back on the menu, and the way I implemented it I shouldn't have to change anything once the coreapp bug gets fixed. Expect them in 0.8.1 (or 0.9.0 depending on how bloated this update is)

verbal hinge
verbal hinge
#

(NPC_0004 and NPC_0002 weren't invited to the group picture but I let them hang out anyways)

novel vapor
#

inb4 0.9.1 - Long Polling Returns

#

I think I see what you’re going for with the chat and the menu layer on the bottom. But I think you need some sort of separation between the upper text area and the menu on the bottom

#

(I logged in and am finally testing stuff)

verbal hinge
#

Any feedback like that you've got is super helpful 👀

novel vapor
#

When it’s not in motion I think it is okay but when it scrolls it looks unintentional

#

If you could make the menu layer taller so you can see there is more up and down it’d be good too but I know there is a height limit you’re dealing with for entering text. I don’t think anyone will enter messages that long though

verbal hinge
#

I should be able to make it a bit taller, I'll figure out what the tallest a message could be. And throw in a line between the two or something

novel vapor
#

No disconnects though

#

I don’t think I saw any lag either while you were walking around

verbal hinge
#

Nice, that's good to hear

remote totem
#

I am very late to the game, but I was perusing the rebble channels and found this. OMG! So cool! Just a spot for fellow rebblers to hang. What a sick project!

#

So uhh...can i connect my xbox controller for this 😆

verbal hinge
#

If you ever figure out a way, let me know 👀 🎮

wind berry
#

wouldn't be impossible with a companion app!

remote totem
#

haha. The idea materialized, but you'd need a companion app. Could capture game controller inputs. I am not suggesting you do this! LOL! Just what was swishing around my brain.

#

you beat me too it ! haha

verbal hinge
#

uh oh, i don’t even know it was possible! I’m writing this down for later…

remote totem
#

are the charaters I'm seeing rn NPCs?

verbal hinge
#

Yeah, i can log on though

remote totem
#

just about to bring my son to the school bus. 🙂

#

I'm going to mount my pebble to my other watch band so i can have pebble land as a hud for my day

#

nice! I see you running laps around me 😛

#

this is pretty cool.

#

gotta re-3d print my watch band brackets, my prototype broke.

verbal hinge
#

woah I don’t know that I’ve seen those

remote totem
#

I could feed you track info from songs playing and it could show what people are listening to 😆

#

I'll throttle my ideas I don't want to overwhelm you haha

#

and when you're close to someone listening to music you can select to dance ! ok for real stopping now. going to bus! 🙂

verbal hinge
#

Actually though I am considering opening up an API for other apps to access user info like that: friends, what they’re up to, etc. A Music Boss integration would be 🔥!!!

remote totem
wind berry
verbal hinge
novel vapor
verbal hinge
#

Peeble Park 🤔

novel vapor
#

bepple park

verbal hinge
#

"I paid for the whole [screen] I'm gonna use the whole [screen]"

#

Realized that with the chunk loading system I could make the screens larger finally, I just need to expand the edges of the map

#

I'm curious if I can also increase the max # of players on screen on emery/gabbro since there's more memory and cpu speed available. I won't know how badly performance is impacted until I've got hardware to try it on

novel vapor
#

Oooo on Gabbro you could load all the way to the edges too since there is no HUD There. Big big screen

snow nest
verbal hinge
#

Fun fact: the Game Boy Advance was only 240x160, the above Gabbro screenshot is using 240x224!

#

(240x240 is the most realistic limit for this graphics library without rewriting it)

#

Here's an example of the GBA screen dimensions compared to Gabbro

novel vapor
verbal hinge
#

To accomodate the much larger watches, I needed to double the area of the world map. Mostly just adding on to the edges of the map.

#

An added bonus of the larger watches is that they have enough ram to hold all of the map in memory, no need for random stuttering through chunk loading

novel vapor
#

You approach the fence and try to open a gate.
You receive a notification to purchase Pebble Park Gold.
RuneScape terrors come flooding back

That’s a lot of water for boats though

verbal hinge
#

Well, one of the recent core app updates broke or secretly removed the user account token provided in PKJS. This means that Pebble Park is completely unusable unless either (a) they fix it or (b) I come up with a brand new user identification system 🙃

novel vapor
#

I don't know if it has to do with it, but some sort of Rebble auth stuff is currently occurring
#web-services message

Since Core is making some sort of auth changes, maybe it's all related and will one-day-soon-fix-it

harsh mural
#

I'm just adding some user management API stuff

novel vapor
#

Oh I just didn't know if maybe you knew something related to why that changed in the app and were trying to get ready / fix things. darn

harsh mural
#

Yeah, this sound like something only fixable in the app :/

verbal hinge
#

I actually noticed it yesterday or the day before, so something core side for sure

harsh mural
#

Pebble Park will definitely be a testground for micropebble

novel vapor
#

"you probably should have a separate auth system that isn't based on the app's ID system" has just been sitting in my message box for a second. Deciding if I want to send you spiraling

harsh mural
#

Tbf the app should not change these things on a whim

novel vapor
#

I agree but if I were to move from the Core App to MicroPebble, unless the identification system results in the same values the account is tied to the app, not the user

#

(If both should result in the same ID though then yeah the app probably shouldn't change this)

verbal hinge
#

Time to work on the umpteenth workaround for this, I guess 😐

#

Man, the account token was the only thing that was persistent across watchapps, watch hardware, and phones. Now I not only have to figure out a system for single app user identification, but also how to bridge across other apps (e.g. Pebble Park <-> Bombleman accounts) and other watches for the same user

#

Also missing features is one thing, but silently removing features (whether by bug or intention) is not cool

novel vapor
#

It might be worth just raising it as an issue if you really want to rely on it before jumping deep into auth

#

Otherwise I await pebble-land.auth0.com

verbal hinge
#

i did raise a bug report, and I'm grateful that they're relatively quick to address bugs if they're not too difficult. They had an app release that fixed binary websocket data out within a couple days

verbal hinge
verbal hinge
#

I'm actually almost entirely out of the pebble-specific ecosystem at this point, especially since I'm not using the timeline api. I think at this point the account id as part of the user id is the only remaining piece

verbal hinge
#

Back to the grind, I have vibration & in-app popup notifications for new messages working (i just realized there’s no way to tell there’s a vibration in the video lol)

#

This is also an informal request for custom messages (again)!! It’s a way that I’d like to show appreciation for everyone that’s in on the ground floor early, supporting me through this journey

verbal hinge
#

Ok so setting up my own oauth-ish system is going to be necessary no matter what, and the implementation makes 90% sense:

  • first time setup w/ qr code + login code, server verifies and gives access token + refresh token, and the rest works like it does now
  • BUT the part I’m hung up on is cross-application verification. does that mean I need to have a username/password system in place? i really can’t think of any ideas that don’t require a login of some kind
novel vapor
#

Best practices are just best practices. If you aren’t handling PII (you aren’t) you could probably just hand out API keys and say “don’t forget this or you’ll cry”. So sky’s the limit from there

verbal hinge
#

gotta dream big, the future of the Pebble Land Empire™ is at stake

remote totem
#

Keep on keeping on!

novel vapor
#

(I use n8n for prototyping service integrations sometimes before implementing it end to end into my server. If you’re looking at a big rewrite)

#

You’ve got enough diamonds and rectangles there. If I was a product owner I’d rubber stamp your entire plan right away

verbal hinge
#

Thinking about adding accessories/alternate hairstyles or outfits, some of which the player would have to unlock. E.g. by playing Bombleman you get the bombleman helmet + outfit to customize your character. Link with music boss and get some headphones. Beta test and get... a crown

#

One limitation is there's not enough ram and/or power on legacy watches to store and render accessories separately, but maybe if I replace some heads instead it could work? And reduce the max # of players on screen

novel vapor
#

So if like 8 people were on screen all with different outfits, the watch has to have all 8 different outfits streamed down somehow?
Maybe instead of skins everyone else can see you let the player skin all of their local client skins. So I can't see their Bombleman but you replace all of the rendering of their skins on their end, for all players, with a set of Bomblemen?

verbal hinge
#

I don’t think that’s necessary, there are already 100 outfit combos (plus color swaps) that can be rendered at once with the current system. The CPU limitations:

  • each player is actually 2 sprites, a head and a body
  • rendering sprites is heavy on the cpu (but low memory impact). there’s a fundamental limit to how many sprites can be on screen before the game is too laggy
  • If accessories are a 3rd sprite, the # of max players on screen decreases due to lag
    The memory limitations
  • right now, I load all of the heads/bodies into ram
  • 400B each, 8kB for 10 heads and 10 bodies (100 outfits). color swaps are free
  • If I load in just one player’s sprites at a time, that’s 800B per player, so > 10 players it doesn’t make sense
    • additionally loading each player’s sprites (either from storage or server) lags the game a bit, and realistically players are constantly going on/off screen and being loaded/unloaded
  • I can maybe add two more heads before I push the final memory limits. that’s where cutting the rendered players from 16 to 8 would come into play, since each player also takes up memory
#

Most importantly, I don’t think this is an issue on the new big watches at all. I could add like 20 accessories as a 3rd sprite no problem (so much memory to play with), and still render 32 players at once (ok that one I’ll have to check on real hardware, the emulator is slower than the real thing!)

#

So after writing this out, maybe I can add accessories, but only for beefier hardware. Older watches will just not render them

remote totem
quartz hearth
verbal hinge
#

Oh this too, I didn’t notice it earlier

  • Fallback to rebble token if account null for whatever reason
quartz hearth
#

awesome. I just ran through a number of tests myself and it does seem that the account token is being successfully passed to our watchfaces once again

verbal hinge
#

Phew thank goodness 😮‍💨

quartz hearth
#

yeah! have you tested yours again?

verbal hinge
#

Just did and looks like it’s working as expected!

quartz hearth
#

hell yeah. I woke up this morning thinking I'd have a crisis to deal with, but crisis averted

novel vapor
#

I’m so worried you’re gonna get juked like the WebSockets again

verbal hinge
#

don’t worry i’m already working on an independent account system, another good learning experience for me 😅

novel vapor
#

I think you need to fork the OS and Mobile App for this project for sure

#

All these things you’re learning doing this makes it worth it. Plus you’re hitting all the bugs before anyone else because of it

soft sonnet
#

So any idea when an ETA is due?

#

Will this work on my OG pebble?

verbal hinge
#

it can be played now!

#

but not on an og pebble unfortunately

soft sonnet
verbal hinge
#

sadly no, it took an insane amount of optimization to get it to work on the non-og watches. the og has less than half of the runtime memory to work with! 🫨

#

hmm… i suppose that it *might * be able to fit on the og if I remove the game part and slim down the menus… just the messaging/friend/outfit system 🤔 i’ll think about it

novel vapor
#

#mobile-dev message
👀 maybe yet Pebble Park launching Bombleman

remote totem
#

I can add a button in my own companion app "Enable Pebble Park Link" and I could send you all sorts of fun stuff

soft sonnet
remote totem
#

Is there an updated version of PebblePark? I'll scan chat and delete this message if I find it

Pinned message. found it.

remote totem
#

Final hour additions just before I roll out the new update from v1 to v2 of my companion. Gotta be able to launch pebble park and Pebblemon 😊

#

Kicking off the collab 🕺

verbal hinge
#
  1. Did core app end up getting the ability to send messages to/from pkjs and a companion app?
  2. Would it be helpful if i published the app to the Rebble store (but hidden)? That way you get an actual link
#
  1. Would you need an actual appmessage value rather than the MESSAGE_KEY_... part? I haven't done any companion app interactions so I'd need to learn how that's done
#

What's next on the radar (although a bit further out): I'm in the weeds of account/api setup which will enable much more interesting integrations.

The way I'm planning on the API integration working is:

  • Music Boss gets an API key to access the server which would give you:
    • Access to view basic user info (username, outfit, whatever you'd like really)
    • Access to view a user's friends
    • Access to view/update a user's status (20 chars, e.g. "Music Boss: Jamming")
  • There would be an oauth(?) process though where:
    1. User gets link to login page (which will include a 2fa code either on-watch or in-app)
    2. User authorizes music boss to do the above
    3. ACCESS GRANTED
remote totem
# verbal hinge 1. Did core app end up getting the ability to send messages to/from pkjs and a c...
  1. I am not sure about that. What I believe could work is me sending this AppMessage directly to your pebble app, using your app UUID (which i grabbed from the PBW). You could grab it and updated your JS companion with it.
  2. I was looking for it on the appstore, but I was able to use your pbw to get the app uuid.
  3. Would you like me to send you an app message when the user starts playing music/pauses music so that their character can have headphones on when listening, off when not? I'll send a sample message below one sec.
#

PebbleDictionary playStateData = new PebbleDictionary(); playStateData.addInt8(0xF1, (byte) playstate); PebbleKit.sendDataToPebble(context, MBConstants.PEBBLE_PARK_UUID, playStateData);

#

I could do something like this. I'm still on PebbleKit Classic. I will move to V2 at some point, I've just been so busy with work that I'd rather focus on app functionality vs migrating to new pebblekit for now.

#

I could pack all sorts of stuff into an app message at the same time, we could agree on a schema and you could extra anything you want to use.

#

0xF1 message key is the next one in my list of keys currently unused.

#

and likely far enough away from any you've used.

remote totem
verbal hinge
verbal hinge
#

@remote totem For your knowledge:

  • I set up an app message for 0xF1 to start with:
    • 1 indicates that music has started playing (player puts on headphones)
    • 0 indicates that music has stopped playing (player takes off headphones)
  • Good chance I didn't do it correctly on my side, I did an offset of 10000 to align with the message keys? So 10241? Let me know if it doesn't work and i can change it
  • For now it's client side only. I think doing anything more complicated will require an API integration, so stay tuned for that
novel vapor
#

Never been a more beautiful banner

verbal hinge
#

Once I get an API up and running, us iOS users can rejoice!!

novel vapor
#

How so? What’s the plan for iOS? I didn’t see it above (if you could subscribe to music events from the system that’d be cool but you can’t 😢)

verbal hinge
#

Ohhh i think i misunderstood, are you talking about music boss on ios? in which case shambles are still in place

novel vapor
#

Yeah that’s what I meant. I’ll return to shambles then

remote totem
#

I could also pack a string "song title|artist" with another message key in the same app message.

#

Gonna play some air hockey and hang out with my son but at the same time I've got my brain... Brainstorming 😎

remote totem
#

hey! so the offset thing isn't needed for how I normally send messages. Here's what i suggest.

I don't use package.json messageKeys at all. My keys are raw hex integers defined directly in a C enum and read with dict_find() using the raw number. No auto-assignment, no offsets. 0xF1 = 241 is the key, that's it.

Step 1) Add the constant to your enum
Wherever you define your message key constants, add:
MUSIC_PLAY_STATE = 0xF1 // 241 — 1 = playing, 0 = paused
Step 2) Read it in your inbox_received_handler
Use this exact pattern:
Tuple *music_state = dict_find(received, MUSIC_PLAY_STATE); if (music_state != NULL) { uint8_t is_playing; memcpy(&is_playing, &music_state->value->uint8, sizeof(is_playing)); // is_playing == 1 → headphones on // is_playing == 0 → headphones off handle_music_state(is_playing); // whatever your function is called }

#

I'm working on this now a bit, my son got distracted by a friend coming online 😆

verbal hinge
#

I pushed a quick release that changes the key to match straight 0xF1 rather than the offset one! It'll be 0.11.0 on the store.

You're welcome to pack other things in, but I won't be able to really use them until I get through that larger API change, which is going to be volatile, just a warning 🤫

remote totem
#

thanks for the quick release, i'm excited to give it a try.

#

doing debug build then rolling out this internal release.

remote totem
#

Yoooooo

#

Don't mind my screen, I'm in the process of sanding it smooth

verbal hinge
#

Niiiice! rockon

remote totem
#

I'm sitting here playing and pausing just to see it go on and off. It's the small things that give the most pleasure. Gotta get you on internal builds.

alpine olive
#

Where's the app?

#

if it's hidden how do i install it? the store isnt a web browser... I can't paste a url

lost oasis
alpine olive
#

don't see a get

#

I see an app button that does nothing

lost oasis
alpine olive
lost oasis
#

I use Chrome on Android, maybe try another browser?

alpine olive
#

Ok

#

Im on firefox

#

Oh it works on Samsung internet

lost oasis
# alpine olive

Seems like Firefox is somehow bringing up the desktop version of the store page?

alpine olive
#

Oh when I go to the mobile site it works on firefox too.

#

I prefer desktop view of the internet cause I have a trifold

#

Thanks for help

alpine olive
#

so besides walk around, I got that figured out, what am I supposed to do?

remote totem
#

For this next trick I'll overload a developer with ideas for the park: set up a picnic, rides like a ferris wheel, maybe voice to text for chat bubbles? Uh oh! 🤣

verbal hinge
#

Pebble Park is just the first piece in a larger Pebble Land ecosystem. You can interact with other players (when they’re online) and send messages to each other!… And that’s all that will fit in a single app (on the legacy watches, at least).

The idea is for this to be a hub world for players. Other apps can hook into the Pebble Land servers to utilize a shared friends list, messaging system, and more!

The apps i’m currently working on integrating are:

remote totem
#

I love this, i want to live in a 2d pokemon world, red/blue/yellow live in my heart even at 40.

#

When/if you're ready for more goodies from Music Boss say the word.

cedar sonnet
#

Wow that's pretty amazing, would it be possible to do the same with a work out app like jayps? Like have the little guy run in place or even have him wearing headphones and running in place if doing listing to music at the same time?

remote totem
#

In its current form any developer can receive the play state and do something with it (headphones while running, sick!)

soft sonnet
verbal hinge
#

That will probably end up being a standalone messaging/friend manager app! Designed to fit within the og watch constraints

verbal hinge
#

finally got a chance to try out the music boss collab!!

#

(also got around to setting up this phone stand arm thing that attaches to my desk for better watch video recording!)

remote totem
#

Yes!

#

Oh man. I've pieced together something similar

#

I keep collecting various things. I have a camera from the OG pebble days I use for recording. Still amazing

verbal hinge
#

Big screen 👍

remote totem
#

I love that you did more visible map vs larger assets.

#

Seeing so many people receiving the PT2s has been so amazing. Glad you got yours

granite tangle
#

WTF, I downloaded it and this is the coolest thing to have graced this watch

verbal hinge
#

looks like i’ll be figuring out how to do web app notifications after all 🥲

snow nest
#

there is a PR to coredevices/mobileapp adding rebble timeline

#

let me check on it

verbal hinge
#

Interesting, looks like it’s configured for local development still 🤔 Wonder what it would take to finish that PR?

tiny wren
verbal hinge
#

Just movement around the world, not the time for menu navigation

#

I realized that the PKJS app token is different when the app is sideloaded vs installed via the rebble app store. Maybe it uses core account for the former and rebble account for the latter? Either way I learned how to manually edit databases on the server via command line (without dropping any tables 😮‍💨)

wind berry