forum

Should I implement a new skinning system: GSkin?

posted
Total Posts
2
Topic Starter
Garygoh884
Hi everyone,

I'd like to make this topic because the new skinning system that I have in mind, which should replace with the current skinning system. The current version which, had limited support for freeform skinning, and had some issues. Some examples are:

  • - Inability to change fonts separately for score and combo
  • - Inability to use separate menu-button-backgrounds for separate fields (used for each)
  • - Inability to use different sprites for different gamemodes
  • - and few others...
In order for me to compensate these issues and to expand this freeform, I'd like to find out if I could implement a new skinning system, called GSkin. GSkin is a layer-based scripted skinning system which the designer utilizes sprites to create additional custom effects for every gameplay, mostly for osu! and osu!mania.

Not only playing osu! with GSkin resolves these issues mentioned, but induces additional features:

  • + Using separate menu-button-backgrounds for separate scenarios, each for difficulties, beatmap sets, beatmap groups, and rankings on song selection screen
  • + Repositioning and restyling scorebars
  • + Use custom "difficulty systems" for beatmaps while keeping its calculated star rating constant
  • + Use localizable sprites (use "menu-back-en.png" when user plays in English, "menu-back-jp.png" for Japanese, etc.)
  • + and many more...
Skins used for every screen of gameplay are programmed with a particular .gsk script file. In each .gsk script file, it comprises of "fixed" Main Layers in a fixed order, and can either be editable or non-editable (probably you can't get away with FL cheating). Designers can also use built-in or user-defined variables, be it in a string, a number, or a Boolean value. Variables can be global throughout the entire .gsk file, or local within a Main Layer.

Below is part of an example of a .gsk file used in osu!gameplay (gameplay-osu.gsk):

Code sample
//The following piece of code deals with osu! gameplay without any mods used
MainLayer "HitObjects" //editable, used for hitobjects
{
foreach O in orderedHitObjects //orderedHitObjects is a collection of ordered hitcircles and sliders (within this Main Layer)
{
if (O.Kind == "hitcircle") //O.Kind is a string and it can be "hitcircle" or "slider". Different sets of variables are stored for each Kind component.
{
//Below is a simple code of how a hitcircle is drawn (without numbers)
//Define the draw properties first
draw.alpha = clamp(0, (gameplay.SongPosition - O.startingVisibilityTime) / (O.visibilityPeriod/3), 1) //these time variables are in milliseconds
draw.positionX = O.positionX;
draw.positionY = O.positionY;
draw.blend = O.comboColor; //Color is defined in Hex values, e.g. $FF9AA0

//Drawing required sprites with the currently defined alpha, position and blend
draw.sprite("hitcircle.png"); //Default origins are centered

draw.blend = $FFFFFF; //Resetting blend to no blending (white)
draw.sprite("hitcircleoverlay.png"); //Draw properties will be used previously

//Draw properties are reset at the end of this codeblock.
}
}
}

Do you think my skinning system should replace the current one, or to remain as usual? Post your questions within this topic about what you think. Thanks for reading, it takes me minutes to type this out.
peppy
You do realise that all of this needs to be implemented at an osu! level, as well as skins. Implementing something like this from your end is not going to actually make it work.

The actual technical details of what would need to go on behind the scenes for this to work makes for a very very large scope. Don't expect to see anything like this anytime soon.
Please sign in to reply.

New reply