A Year of Dailies

May 17th, 2016 was the day that the Dustkid daily went live, a year ago today. Over this year we’ve seen a lot of data come in without any kind of visualization outside of the Daily page itself.  In this post I want to dump a lot of that data that I thought might be interesting to look at one day.  Additionally I’ve included complete data on some of what will be summarized in this post at Dustkid Daily Stats.

There have been 370 maps selected as dailies at this moment.  This is slightly over the expected 365 due to the “daily” not initially being a daily and a couple forced re-rolls.  Of those 370 the rest of the stats will be on only 367 as I’ve left out Peta Difficult, Titan, and today’s daily (stock maps were never meant to be dailies and Peta doesn’t even have a leaderboard).

Over these dailies we’ve seen 9,641 leaderboard entries averaging 26.3 entries per daily.  Of those, 8,353 of those (86.6%) were an SS on the ‘Score’ leaderboards.  Bringing renewed energy back to older maps has frequently resulted in new Score and Time world records.  Over the year 252 (68.7%) dailies minted new Score world records and 248 (67.6%) gained new Time world records.  Often, several people managed to beat the previous world records as new routes were found or new tech could be used.

The daily is selected from all visible maps on Atlas that are not part of the Community Map Pack (and haven’t before been a daily).  SS count is used a simple heuristic to favor selecting higher quality maps that got more play, initially.  I’d like to thank the authors of the selected maps and list those authors who appeared at least 6 times:

Shin Rekkoha 21
TheBirdOfPrey 18
Tropicallo 11
ShurykaN 10
Meark 9
DustCreep 9
TwinkieSWF 8
Giamma 7
Clearly Not a Towel 7
DoughNation 6
indapop 6
Krankdud 6
Jvcpro 6

And of course, I’d like to thank the people who actually participated in the dailies and gave this project life.  The following table shows the top 10 daily participation counts.

DG ‘Anand’ 319
msg555 309
indapop 293
EtherealSamantha 279
theduesta 277
Sunny 276
Brayd of Guy 258
mister__simon 248
DDFranky 241
Malice 232

To create a type of “Daily Composite Leaderboard” I constructed a basic medal system that awarded 100 points for first and 40% less points each rank thereafter ending at 1 point for 10th.  These are the top 10 on this composite leaderboard for Score including their top 3 medal counts.

Username Points 1st (100 pts) 2nd (60 pts) 3rd (36 pts)
indapop 13368 87 53 24
msg555 11979 61 58 27
Xiamul 4964 37 13 7
mister__simon 4461 10 19 25
Nighthawk 3819 19 21 12
TwinkieSWF 3139 11 15 18
Sunny 2987 1 18 19
Fishy 2929 10 11 19
Sivade 2889 16 10 10
TiMMaY- 2879 11 9 18

Similarly, these are the results for Time

indapop 13884 97 41 25
msg555 6492 26 32 19
Fishy 5508 28 28 14
TwinkieSWF 5164 25 26 18
Sunny 4893 19 20 20
Xiamul 4736 32 13 10
EtherealSamantha 3444 7 15 19
mister__simon 3160 10 8 22
Nighthawk 3094 16 12 11
DG ‘Anand’ 2935 17 14 5

Only 27 apples were hit during a year of dailies.

Dustmod Has Updated

7.3.1

  • Robot Science has donated several tracks from their album, “Square” to be used in Dustmod.  These tracks were used in the original Dustforce prototype.  These tracks are:
    1. Swimming Through Waves
    2. Teacups
    3. Minus
    4. A Square the Rectangle is Not
  • Additionally two tracks from Lifeform’s Fastfall that were not already in the game have been added, “Your Favorite Color” and “Light Pollution”.

6.12.4 Update

  • Several gameplay affecting tweaks to better match vanilla dustforce3
    • Dustmod simulated an extra world frame that only rarely happened in vanilla.  This frequently disturbed cycles and has been removed.
    • Fade ins are now 13 frames, were 15.  This effectively means that the level starts 1/30th of a second later than before.
    • Fade outs are now 16 frames, were 15 (iirc).  This means that you can early exit 1 frame earlier.
  • Completely rewrote save state code to be ~2.5x faster to improve network game performance.
  • Added special casing for particles in networking so they shouldn’t cause more lag than in single player.
  • You can now leave a network game by pressing F7
  • Patched memory leak that caused performance degredation in network games over time.
  • Supering in network games will no longer mark enemies already marked by another player’s super.
  • Your last loaded nexus script is remembered after you close the game, and can be started with F5 like you had already loaded it.
  • And ofc misc fixes

Hi everyone! After quite a pause in Dustmod update while I worked on making multiplayer work, I want to start pushing Dustmod updates again that contain the multiplayer logic.  Unfortunately due to including engine builds now it would be difficult for me to make the in game updater work so you’ll need to grab an appropriate archive below to install manually (future updates again will work in game).

Dustmod Archives

Pick the archive suitable for your version of Dustforce and copy the contained files into your Dustforce direction (the directory that contains the Dustforce executable).  Note that the installation now sits side by side with the existing installation of Dustforce so you can easily switch between vanilla or Dustmod.  If you’re playing on Steam you might like to add the Dustmod executable to your game launcher by navigating to “Games” ->  to “Add a Non-Steam Game to my Library” and finding the dustmod executable, typically at “C:\Program Files (x86)\Steam\steamapps\common\Dustforce\dustmod.exe”).  Steam will still recognize the game as Dustforce once the game is running.

I’ll work on getting a steam version for linux and osx available soon.

The Changelist

  • Added online multiplayer support via rollbacks
  • Added multiplayer nexuses now accessible where the multiplayer nexus use to be
  • Now sends replays to dustkid proxy without hosts file change
  • Added some polish to multiplayer mode
  • Support for multiplayer replays
  • Determistic menu/world step interleavings
  • Removed save/load checkpoint for save/load state in frame advance tools
  • Fixed excessive camera shake bug from last update
  • Properly track apple count in game for the meme
  • Added draw/input frame rate tracker
  • NG/NG+ will now properly reset nexus checkpoints
  • Performance improvements for those with a lot of custom level times (i.e. the pause when trying to open some doors)
  • Added dust projection visualization to help understand what dust gets cleaned by attacks
  • A ton of smaller things I don’t remember

Notes On Multiplayer

I’m still working on multiplayer so many things may not work.  You’re welcome to try it out but please understand that you may run into technical issues in addition to the lobby system being fairly simplistic.

Dustmod Multiplayer Prototype

The multiplayer prototype is now integrated with Dustmod.  Please visit https://dustkidblog.wordpress.com/2016/11/19/dustmod-has-updated/ to get the latest builds, this page will no longer be updated.

Update Nov 14th

  • Added dust projection visualizations
  • Enabled nexus checkpointing in multiplayer
  • Allow levels to be downloaded on demand in multiplayer (you only need to add the five nexuses to your levels2 now)
  • Level downloads now properly go into your user/save folder
  • Misc fixes

Update Nov 4th

  • Fixed a number of stability problems
  • Improved performance by tweaking garbage collecting
  • Implemented multiplayer replays
  • Fixed UI glitches
  • Fixed camera issues

Update Oct 27th

Updated the engines, game script, and level files.  Changes include

  • Significant performance improvements via multithreading
  • Resync PID controller works correctly now to keep both players at roughly the same frame.
  • Updated Nexus Levels

Please redownload your engine, main3 script, and multiplayer level files to try out.

Hi All!  I want to take a moment to introduce the latest Dustmod build that I hope to release properly soon.  Currently I’m looking for people to try this build and provide feedback.  I’m mostly interested in the following

  • Crashes
  • Performance during multiplayer (let me know if you stream multiplayer!)
  • Desyncs during multiplayer (what map, what was happening)
  • Any behavior that could be abused to cheat.

I’m aware there are visual glitches during multiplayer that I’ll work on addressing.

How To Install

The base install requires you to download the engine executable and the main3 script.

Engine

Download the appropriate engine and place it alongside the existing executable.  You may rename the executable to whatever you’d like; however auto updates will use the names “dustmod.exe” on windows and “dustmod.x86_64.bin” on linux/osx.  For Windows users I’ve offered DirectX and SDL2 based builds which you might give you different performance (SDL2 works better for me on Win 10).  If you want to try an SDL2 based build you’ll need to download SDL2.dll and put it in the same directory as the executable.

I’m not supporting Linux/OSX Steam just yet; I figure this will affect a small amount of people.  You can always setup the DRM free version on top of the steam installation which will work except you won’t get logged in with your steam account.

Script

Unlike previous versions of Dustmod there’s now only one version of the script for both drmfree and steam.  Additionally it uses the name ‘main3’ rather than ‘main2’ so it may sit alongside a vanilla installation.  Put the main3 file in your content/scripts directory.

What’s Changed

  1. Dustmod now includes a modded executable and uses main3 instead of main2.  This means you can have Dustmod alongside your vanilla DF installation and control which one is used
  2. There’s a multiplayer mode!  Additionally TwinkieSWF has selected maps and created nexuses to house them that are appropriate to 2 to 4 players.
  3. You can now save state and load state when frame advance is on.  This functionality has replaced save checkpoint and load checkpoint.
  4. The windows binary continues to run in the background.
  5. The DF client communicates directly with dustkid without modifying the hosts file.  I’ll be adding an option to switch this back to hitbox for those who’d prefer replays not show up on dustkid.

How To Play Multiplayer

If you want to play multiplayer you need to also download the multiplayer maps TwinkieSWF has prepared and put them in your levels2 directory.

Things To Know About Multiplayer

The multiplayer is based on rollbacks so that the movement of your own character can be done immediately and remote character movement can be fixed up after the fact.  Therefore you may see other players teleporting or even dying then coming back to life.

The most unfortunate side effect of this right now is if the remote player is near spikes or death zones they may frequently be seen as dying to the local player causing a fade out and input locking just for that death to be reverted. My current plan to address this is to allow players to die independently and avoid non-local interactions like this.

Additionally the following things have yet to be done:

  • Multiplayer Leaderboards

Things That Will Cause Problems

  • Using your mouse to navigate menus
  • Interacting with the leaderboards
  • Watching a replay
  • Downloading a level

There is nothing preventing you from doing any of these things however they each could lead the game states desyncing.

Nexus TASing with Dustmod

This blog post is meant to detail how to use the “Load Nexus Script” functionality in Dustmod.

What is Nexus TASing?

Nexus TASing allows you to feed Dustforce a sequence of inputs that can be played back directly in the game.  This is different then the normal replay system as the play back can function within the nexus and can navigate the menu system.

TAS Script Format

TAS scripts are text files that will be fed into Dustmod.  Dustmod will look for these files in a “tas” directory within the folder that contains the Dustforce executable.  The scripts use a line based format.  Each line is either a command or describes the inputs for a frame.  Trailing whitespace or anything after a ‘#’ character is ignored for a line.

Input lines

Input lines are a sequence of 9 ‘1’s or ‘0’s describing whether each of the below inputs is pressed or not during the frame.

  1. left
  2. right
  3. up
  4. down
  5. jump
  6. dash
  7. light
  8. heavy
  9. escape

Whitespace between each ‘0’ or ‘1’ character is ignored.  As an example the line “010011000” describes a frame where right, jump, and dash are each pressed.

Command lines

Command lines are assumed to be any line that does not begin with a 0 or 1.  Commands that take arguments should separate the command name and arguments using the ‘:’ character.

  • LOAD – The LOAD command takes 3 parameters; character_id, save_id, level_file.  character_id should be a number between 0-3 identifying the character to load.  save_id should be name of the save file (see the ‘Creating a save file’ section) to load.  level_file should be the file name of the level to load (e.g. “Nexus DX”).e.g.
    LOAD:0:outsidedahlia:Nexus DX
  • SYNCLOAD – Pauses the script until the first frame that your character can take inputs again.  While the script is paused all inputs are set to 0.
    SYNCLOAD
  • STATS – Load a stats file containing key state, door state, and level scores.  The command takes 1 parameter which is the identifier of the stat file to load which unfortunately currently needs to be an integer.  You can copy a stats file in much the same way you would copy a save file for the LOAD command.
    STATS:4 # Load in stats data from user/stats4
  • INCLUDE – Execute commands from a script file.  The script will begin executing this frame.
    INCLUDE:tunnels.txt
  • MOUSE – Sets the mouse state for the next frame.  This command should appear before the input line that is meant to occur on the same frame.  It takes 3 parameters, mouse x-position, mouse y-position, and mouse button state.  Mouse positions can be found using the extended debug data display.  Note that the origin (0, 0) is the center of the display and that the majority (all?) of menus in the game have fixed positions independent of game resolution.
    MOUSE:75:-25:10000

    Button state is a sequence of ‘0’ and ‘1’ characters that indicate the pressed state of the mouse related buttons in this order.

    1. Left Click
    2. Right Click
    3. Middle Click
    4. Scroll Up
    5. Scroll Down

Creating a Save File

Save files are used to initialize your position for a TAS.  These are simply the checkpoint files already generated by Dustforce whenever you leave a nexus level.  The intention is that this will allow TASers to accurately initialize their position in front of a starting door based on where it was originally entered in the previous segment.

Whenever you leave a nexus level your position information will be saved to “user/save/1_LEVEL_NAME”.  For example when you enter downhill the game will save your position outside of the downhill door to “user/save/1_Nexus DX”.

To use a save in a nexus TAS script you should copy this save file and rename it to something like “user/save/outsidedownhill_Nexus DX” and then load it with a command like “LOAD:0:outsidedownhill:Nexus DX” at the start of your script.

Running a Script In Dustmod

To run a TAS script first create a folder in the Dustforce directory named “tas” and save your script within.  Then within Dustforce navigate to Dustmod -> Tools -> Frame Advance.  Then type the file name of your script (including any extension) into the ‘Load Nexus Script’ text area and push enter.

If successful your script should begin to execute.  Pushing escape at anytime will terminate the script executation.  You may also press F5 at to reload the script from the same file.  If the file could not be loaded for any reason the text area will blank and nothing further will happen.  Any format errors in the script itself will be silently ignored.

Give me an example script

LOAD:3:tunnels:Nexus DX

# Give a couple inputs
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
100000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
010000000
000000100
001000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
001000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
100000000
000000000
100000000
000000000
100010000

Dustmod

This page has been replaced by https://dustkidblog.wordpress.com/2016/11/19/dustmod-has-updated/

 

Hello Dustfam!  This is your starting point for downloading the latest version of Dustmod. You can find the replacement main2 scripts below.  Dustmod now packages additional content which you can download in game using Menu -> Dustmod -> About -> Download.

Download links: Steam version – DRM free version

Installation Instructions

To participate and view Dustmod’s leaderboards and update in-game you should first consider setting up dustkid.com on your client.  However this step is not strictly required.

To install download the appropriate version of the main2 script (Steam or DRM free) linked above (use ‘Save As’; some browsers may offer to open it with a text editor which may damage the file’s encoding).

Next, locate your existing copy of the main2 script; for typical Windows/Steam installations this can be found at: (you can also find the directory from Steam from Properties -> Local Files -> Browse Local Files)

C:/Program Files (x86)/Steam/steamapps/common/Dustforce/content/scripts/

Create a backup of this file and rename the dustmod main2 file to “main2”.  Some browsers may save the file with a “.txt” extension, make sure this is not there.  At this point you should be able to restart Dustforce and access the Dustmod menu.

Features

  1. Gives access to the ‘Dustmod’ options menu in the Main Nexus.  From here all of the Dustmod options can be changed.Screenshot from 2016-07-05 14:27:54
  2. Extends the Main Nexus to include a door leading to the Community Nexus.Screenshot from 2016-07-05 14:29:06.pngThe community nexus includes doors to other Nexus’ that have been created by members of the community.  It also includes a door that will automatically load the Dustkid Daily, a daily challenge map for dusters to compete on.Screenshot from 2016-07-05 14:29:25.png
  3. Automatically integrates with dustkid.com to enable viewing character leaderboards and mod leaderboards in game.  Click on the character icons on the score screen to filter by character.Screenshot from 2016-07-05 15:27:29.png

The Minecraft Mod

Note: This mod has been replaced by Dustmod.  Play minecraft mode from this instead.

Hey all!  The Minecraft Mod is now ready for play with it’s own custom in game leaderboards so you can challenge yourself and record replays playing in Dustforce’s hidden Minecraft mode.

Screenshot from 2016-02-06 12:37:39

What is Minecraft Mode?

Minecraft mode is a game mode created by the Hitbox devs that was disabled prior to release.  When enabled, your light and heavy attacks gain the capability of destroying any tile type!  Check out http://www.twitch.tv/msg555/v/37261286 for an example.

How to play this Mod?

First, you must have dustkid.com setup to be able to use the leaderboard functionality.  You can find instructions on how to do that at http://dustkid.com/setup.

Next, find your current content/scripts/main2 file and make a backup. On most Windows installations this will be located at:

C:\Program Files (x86)\Steam\SteamApps\common\Dustforce\content\scripts\main2

Then replace this main2 script file with the appropriate modded script file.  Steam users should use main2_minecraft_steam while those using the DRM free version should use main2_minecraft_drmfree.  When you’re done playing in minecraft mode you’ll need to replace the main2 script with the original version again.

Where can I find leaderboards on the web?

Leaderboards for minecraft mode are managed by dustkid.com.  The top times for each stock level can be found at http://dustkid.com/records/minecraft/all.  For any individual level you can find the minecraft leaderboard by navigating to that level on dustkid and clicking the pixelated broom icon in the top right.

What are the features of this mod?

The current version supports the following

  • Minecraft mode disabled outside of normal levels (you cannot destroy your nexus)
  • In game leaderboards powered by dustkid.com
  • Modified upload script to avoid times appearing on Hitbox leaderboards