I really suck at keeping CYMOS publically up-to-date, eh?
Anyway, I've added some more stuff and a new beta release may be released in a bit.
Oh, and I do plan to simplify app devlopment a tiny bit by mirroring variables for slight Midori OS / SKKBAUI compatibility through a MidoriOSParity% toggle.
The beta release will not yet have the package loader but all the other features I just mentioned here.
WIP Desk Icons
I'm working on adding the desk icons using the new DESKSVC% service. As you may see, it doesn't work at the moment but it shows already how CYMOS apps tend to work, they load things slowly so that apps can co-exist without long lag spikes.Window buttons
After god knows how long I scrambled to implement these, here we are. They are made out of sprites and they function via SPFUNC.Taskbar improvements
The way I previously added the taskbar caused weird moments when refreshing the screen. It would sometimes eat away other windows' sprites and the sprites were in a limbo state effectively. I remembered SPFUNC and am using it for function instead. I'm still puzzled how that previous taskbar caused issues exactly... If a task is scheduled to close but doesn't want to finish, you can kill the task right from the taskbar. Note that if the task does WM_DiscardClose you have to grab the task manager from Security Options to kill it.Sound effects and BGM channels
Windows can now allocate BGM channels for themselves. By default, the system service takes the last 2 channels for sound and music-like sounds respectively. Adding custom MML is also a thing windows can allocate for themselves. Yes, I go for a more locked down approach. You can't use the provided functions to write or play BGM that the window didn't allocate. Here's some sample code of it:DEF _PROP_APP_TEST OUT WN$,WX%,WY%,WW%,WH%,WF% WN$="Test window" WX%=50:WY%=50:WW%=144:WH%=64 WF%=WMFLG_BtnClose%OR WMFLG_BtnMin 'Yes, the window buttons are invoked with these flags. They can be changed while the app is running with WM_SetFlag. END DEF APP_TEST(WID,SX,SY,EX,EY) IF WM_IsInit(WID) THEN EAT WM_NewNamedBGM("My BGM","@9O4CDEFGAB<C /Although SB3 doesn't natively support in-MML comments, I added it in here just for this./") 'NewBGM would return the BGM index - 128 IF WM_AllocBGM(WID)>=0 THEN 'It returns the channel to play stuff with WM_PlayBGM WM_GetBGM$("My BGM") 'PlayBGM inherits "WID" from the window manager directly, I should probably do this for more things where you really shouldn't mess with other windows on 'GetBGM$ scans the list for only sounds the window allocated. ENDIF ENDIF WM_ThemeSetup GPUTCHR SX+4,SY+4,"Hello there." GPUTCHR SX+4,SY+14,"I'm playing a sound." RETURN 1 'Close immediately when scheduled to ENDThere's more commands to play either at different volume, do a volume sweep or even a stop timer, so the WM stops the sound for you. Of course, when the window is closed, all sound effects and channels allocated get free'd. The system sounds can still be played with WM_PlaySystem.