Welcome to DASH: Danger Action Speed Heroes! A new creative 2D action/precision platformer creation tool for pc (Windows and Linux) Early Access Q1 2019. We began developing the alpha late 2017 and since then everything has grown into place: a growing game, growing community and lots of lots of great potential! Strap on and get ready to enter the Galaxy of Speed! Enter the Danger Action Speed Heroes!!
Last week I talked a bit about optimizing as well but we have finally gotten it all the way and here is a bit of what we are talking about:
At the end of last year we ended up with a solid alpha experience. But we all know that some parts of the game were totally non-optimized and sometimes a gamebreaker to some testers:
- It took too many seconds to load a relatively simple level
- It took a lot of time to Save your level
- It took a LONG time to save your world record replay!
This has been fixed. Philip Schubell who is the web dev and back end on the DASH Team, has optimized all the compression code even more, to fit a fast and creative game where slow-downs and limits are not very nice! After upgrading to Game Maker 2 we also had more space with the built-in zlib compression tools. This when added to Philips code makes a totally new game when saving and loading. Here is an example of Philips approach to de-serializing in GML:
//Find 'replay' value in ds_map
var _actions = ds_map_find_value(mapTime,"replay");
//Decompress it
var cbuff = buffer_create(1,buffer_grow,1);
buffer_base64_decode_ext(cbuff,_actions,0);
var buff = buffer_decompress(cbuff);
buffer_delete(cbuff);
global.lengthOfWRghostArray = buffer_get_size(buff); //string_length(decomp_WR_actions_string);
var currentChar ="";
var currentVal = "";
var step = 0;
var index = 0;
global.WR_actions = "not set";
for(var i= 0; i <global.lengthOfWRghostArray -4;i++){
currentChar = buffer_read(buff,buffer_u8)//string(buffer_read(charBuff,buffer_text));
if(currentChar == 44){ // 44 is "," in the ascii table
global.WR_actions[step,index] = currentVal;
currentVal = "";
index++;
continue;
}
if(currentChar == 125){ // 125 is "}" in the ascii table
global.WR_actions[step,index] = currentVal;
step++;
index = 0;
currentVal = "";
i++;
buffer_seek(buff,buffer_seek_relative,1); // advance buffer read by one
continue;
}
if ( (currentChar > 44) && (currentChar < 59) ){ // ascii 45 = "-", 46 = "." amd 48-58 = 0-9.
currentVal = currentVal + chr(currentChar);
}
}
buffer_delete(buff);
(A quick way to de-serialize a 2D array consisting of numbers in GML)
We are now looking at game running, saving and compressing levels in no time! Even levels with 1000 tiles are smooth. Even replay ghosts over 5 minutes long are saved and loaded in under 1 second. If you haven't played the game it might be hard to grasp so here's an example of the alpha vs the Early Access build:
(Alpha: slow compression time, example: when saving replay as you win a world record)
(Early Access: almost 4 mins = under 1 sec compression time, same example)
For the Early Access release we will be aiming for level sizes up to twice as big and no limits on tiles. Whether this will work or not we will see. But that's the goal.
(Super fast load time even on large levels with long replay)
(Super fast save time even with hundreds of tiles)
(Super fast upload time even on large levels with long replays!)
We are slowly moving office and workspace to a new and incredible place downtown Copenhagen! This week will be all about getting everything into place.
DASH ON!
- Jake and Philip