Author Archives: admin

Legacy Moves that never existed in PokemonGo

Elite Fast TM

I couldn’t find a place for this type of content on my website, so I thought I would dust off my wordpress

Im super passionate about Legacy moves in Pokemongo making sure they are recorded accurately

By introducing Elite TMs its a great opportunity to dig in and clarify some of the mistakes mentioned online in the past – lets talk about the Legacy moves that were never possible in PokemonGO.

Legacy Moves: – Moves that are no longer possible to acquire via items or under any circumstances in PokemonGo

Elite TM Release!

With the recent release of Elite TMs (ETMs) on 24-Apr-2020, the Legacy move list has shrunk immensely. By using the new ultra-rare Elite TMs, Players can now gain access to around ~150 previously un-acquirable special event moves in PokemonGo.

2022 edit It looks like “Legacy Moves” is the preferred term for Elite TM moves – despite them not being truly “Legacy” – So I will attempt to word things in a way that highlights “true” legacy moves (sometimes called “illegal” moves) which is all we really care about for the context of this article!

Due to an seemingly unspoken obligation between Niantic, Nintendo and The Pokemon Company to keep moves faithfull to the main series games – we still have a small list of Illegal moves – that are not recorded on the Elite TM list

These pokemon with rare moves are presumably never coming back to the game for newer players who didnt grab them back in the day, if you have one of these rare Pokémon, cherish it forever

There are no search queries specifically to isolate illegal moves in game
They do show up with the “@Special” query – but alongside your (less rare) Elite TM Pokemon.

Feel free to check out my (actual) legacy move list of illegal moves that you should 100% keep and collect –

Now that the true legacy move list sits at around ~18 Pokemon/Move combinations – I’m more inclined to call out all the errors still present on other popular legacy move lists, or circulating in the community.

GAME_MASTER files and proof

In the call-outs below I am going to refer to a file called the GAME_MASTER file which is basically a client side list that sits on everyones phones that stores all of all possible move-sets in PokemonGo (alongside other things) and is one of the key files that allows us to gain insight into which Pokemon know what moves.

If you have a library of old GAME_MASTER files, you get a traceable history into what moves were available and when, while its technically possible to forge a GAME_MASTER file, why would you bother?

As stated at the end of the post, if you know someone with one of these Pokémon/move combinations, take a video recording – post it online – everyone would love to see it – but unless a new glitch comes up (its Niantic after all) There is 100% confidence these moves don’t exist.

The Incorrect Legacy moves

Below is a list of Legacy moves that have NEVER existed in PokemonGo, but you might see commonly (and incorrectly) listed on other websites.

Zapdos with Discharge
This moveset can be seen in the GAME_MASTER file
up until 14-Feb-2017. however on 18-Feb-2017 we see Zapdos have its fast move replaced with CHARGE_BEAM_FAST. Zapdos wasnt officially added into PokemonGo until 6 months later in August of 2017

Moltres with Ember
Moltres with Ember can be seen in the GAME_MASTER file up until 14 Feb 2017. Just like Zapdos, on 18 Feb 2017 – Moltres had its fast move replaced with FIRE_SPIN_FAST. Moltres also wasnt added until August 2017 (6 months later)

GAME_MASTER files for Zapdos and Moltress were not heavily documented back in 2017 – and there are no posts from that time discussing it heavily – so at the end of the post I have included screenshots of old GAME_MASTERs as proof for the dates listed.

Delibird with Ice Shard / Quick Attack
This ones a fun one!
Delibird was released 21 Dec 2017 and during its debut it actually DID have these moves listed in the GAME_MASTER file, However; Niantic trialed a new server side change that forced all Delibird to have the fast move “Present” (the same thing happened with Pikachu) for the entirety of its debut festive season – and thus it was never possible to get either Ice Shard or Quick Attack on a Delibird in 2017 due to the server restriction forcing Present (and a cool 250 stardust). After Delibird left for the Holidays the GAME_MASTER was re-aligned, making it seem like a potential Legacy move was created.

Loudred with Crunch
A seemingly in-consequential move that occurred alongside a bunch of other moves – not sure why this one is so prevalent on lists!
Maybe it was overshadowed by Kyogre losing Dragon tail on the same update
Crunch Loudred was removed from GAME_MASTER on 12 Jan 2018
Loudred was officially released 11 days later on 23 Jan 2018

The below listed moves are reported less often – but for completeness sake I will include them for anyone that might be interested.

Kyogre with Dragon Tail
This one was followed closely by the community for a week, as this potential moveset would have been key to defeating Rayquaza in the following month. So naturally people were disappointed when it was removed – and thus it was common knowledge that this move-set was not a possible one.
Dragon Tail Kyogre was removed from GAME_MASTER on : 4-Jan-2018
Kyogre was released 8 days later on : 12-Jan-2018

Milotic with Water Gun
A downgraded move from what it Milotic actually released with
again the move was datamined before its release.

Water Gun Milotic was removed from GAME_MASTER on : 9-Dec-2017
Milotic was released 12 days later on : 21-Dec-2017

Latias with Dragon Claw
Everyone was pretty in-tune with how pre-release move balances at this point, also Latias was outshone in popularity by Latios, this one didnt gain much traction despite how close the change was to Latias release.
also happened over the span of a few hours
Removed from GAME_MASTER: 2-Apr-2018 @ 18:00 UTC |
Latias Released 3 hours later: 2-Apr-2018 @ 21:00 UTC

If you have (or know anyone who has) any of these Pokemon – definitively reach out to me on reddit = /u/p337_info – or post it yourself!

Nearly a new set of Legacies!

Humorously Niantic nearly created a brand new set of Legacy Moves with the release of Elite TMs by presumably copying incorrect lists of legacy moves found online

These mistakes were quickly corrected before the Elite TM feature went live.

These are some of the moves Niantic nearly incorrectly included in the Elite TM List
(and very quickly reverted before release of the feature)

24/Apr/2020 | Corrected Moves from the Elite TM List by /u/NianticSucksBooty –

Again – If you’re keen to check out my always updated Legacy move list,
feel free to do so – but I will go through the caliber of which moves nearly got added:

Close re-introductions of actual legacy moves

The Pokemon listed above that would have been re-introductions of actual legacy moves (as seen in the image above) : Diglett with Mud Shot, Chansey with Psybeam and Lileep with Bullet Seed. None are really that game breaking balance wise, their only significance is lore related, as they’ve never been possible in any other Pokemon Game.

Close introductions of NEW legacy moves

Also in the pre-release ETM list (in the screenshot above – had it gone live) Niantic nearly added new legacy moves such as : Moltres with Ember, Zapdos with Discharge, Delibird with Ice Shard / Quick Attack – but as we know, this was reverted in time for these moves to (yet again) never have existed

It seems bizzare that Niantic presumably used other websites data to populate their ETM feature data… especially by using websites with the wrong information 🙁

Proof for the Legendary Birds

GAME_MASTER files were not heavily documented when Zapdos and Moltres had their moves changed, however I have tracked down some old GAME_MASTER files that record their move changes months before their release. See this zip file for decoded files

If you trust my sources – here are some screenshot comparisons of Zapdos and Moltres, you can see a distinct change in decoder patterns between the file dates – I cant remember if I did that – or the decoder I was using was date sensitive.

Zapdos (Above)
Moltres (above)

Userscript for highlighting reposted songs on soundcloud

Download provided at the end of this post.

If there is anything wrong with the script or Soundcloud does a redesign, feel free to reach out to me via my contact form.


Very occasionally I head on over to SoundCloud to check out some local artists or mixes from various artists.

I dont really classify myself as a music nut, I just want to load up my stream page and see a bunch of curated music.

However a couple of years ago I noticed that “reposts” appear to be a trend with the new soundcloud design.

I understand there is a need for artists to bump their music to promote it, and ensure it isnt immediately buried, However it makes finding new music really hard to find – and most of that can be attributed to soundcloud. I cant find any easy way to hide reposts. Maybe an option already exists – or maybe one will get added after I make this post.

Anyway I finally bit the bullet and wrote a really basic user-script that will very in-elegantly differentiate the reposted songs from the newly posted songs.

The script implements a static button that follows you as you scroll through stream page of SoundCloud. Because the stream page lazily loads more content as you reach the end of the page, you will have to press the button each time more content is loaded.

Snapshot of the script in action

What are Userscripts?

Userscripts are almost like modifications for websites that anyone can write (in this case I wrote this one myself) they run java-script on the page after it has finished loading.
WARNING: never install user-scripts from unknown sources (even be careful on pages like mine)

Install TamperMonkey

If you don’t already have TamperMonkey we will need to install it to use this script
Tamper monkey is a plugin that allows you to run Userscripts on webpages.

Chrome: Search “TamperMonkey” on google, or the google Appstore
Firefox: Search for “TamperMonkey” on the Mozilla plugin store

Install the Soundcloud Repost Highlight script

Once you have the required plugins you should just be able to click the link below and the plugin will handle the remaining installation.

Download Soundcloud Repost Highlighter Script

Each time you load the /stream/ page on SoundCloud you should be able to use the new button to colour the reposts.

Best new mute config for CSGO

Ive always been frustrated with the options available to mute other players in CounterStrike: Global Offensive,

Whether you’re getting yelled at in a clutch round or just joined a noisy server where people are spamming their music, you cant be expected to mute and un-mute individual players in dire situations. I found that some of the existing mute functions online are not easy to use, require too many keys, or can be accidentally kept on – leaving you clueless when your team mates are actually communicate to you in future rounds – My bind aims to solve these issues.

Before I show you the bind, lets first look at the current alternatives available for muting all players in CSGO:

The existing solutions
Below are the common techniques of muting players in CSGO:

Block individual players via the UI
Blocking players individually requires you to open up the main menu during a firefight and be vulnerable for at least 2 seconds while you go through and manually mute each noisy teammate.
Set up a voice toggle key using: bind BindToggle “[KEY]” “voice_enable”
This works well, but there is no indication if your toggle bind is on or off, as enabling mute hides the visual popup of a player talking in the server, ive left on for hours using this setting without knowing it, and missed some vital callouts.
configure 2 separate mute / un-mute keys using: voice_scale 0 / voice_scale 1
Including your voice chat button, this solution requires 3 keys, while its one of the better solutions, I would prefer one single mute key, as I always forget which key is mute, and which is unmute.
Autoexec mute scripts
there are many one page scripts you can find online,
but as a developer I want to understand all of the code inside them, especially when I have issues trying to get them to work or modifying them.
I also dont want to have to find all my autoexec code to deploy on any new PC’s I play on
(Tip: with the solution im about to show you, you can just google “best mute config” and this blog post comes up)

The actual code
Today I will be documenting my new mute function I wrote for myself:

bind "KP_UPARROW" "voice_scale 0;";
bind "v" "+voicerecord; voice_scale 1;"

Note: Only copy code from my post seen in the code boxes (like above)
there are issues copying the double quotes into CSGO from anywhere else in this article.

How to enter this mute key bind
You can enter the mute bind seen above by:

– Enabling the developer console (Options > Game Settings > Enable Developer Console – 5th from the top)
– Then Opening the developer console (default “~” key)
– Then Pasting the commands into the console (together, or each line individually) and press Enter.

How to mute people
The above bind sets your mute key to NUMPAD 8 on the right number pad.
it mutes everyone by setting their voice transmit volume to zero,
This means you still get to see when people are talking (eg Fig1)
but you wont’t hear them until you start talking yourself (by pressing the voice key).

Muted preview

Fig.1 – Muted preview

How to unmute people
Once you are ready to hear people again, you just go ahead and press the “push to talk key” which is now set to “V”
The beauty / simplicity of this bind is that using voice chat is also the un-mute key!!

Explanation and Customization
I will go on further to explain how you might want to customize the commands for yourself.
(Eg. if you dont want “V” as your push to talk key)

The first line

bind "KP_UPARROW" "voice_scale 0;"

The first line is a single command, we are binding voice_scale to zero (silencing players) to the NUMPAD 8 key
You can swap “KP_UPARROW” out with any other key such as “K” (especially if your keyboard dosnt have a full numpad)

The second line

bind "v" "+voicerecord; voice_scale 1;"

This is actually 2 commands – which both happen at the same time – when pressing “V”,
– the +voicerecord action (the action of using voice chat)
– then sets everyone’s voice scale (you loudness you hear people at) back to full volume

How to customize
So lets say you want to change your mute key to “M”,
your voice chat key to “K”,
and for some reason you want other peoples voice volume audible to you at 75%
You would customize the binds to read as per below:

bind "M" "voice_scale 0;"
bind "K" "+voicerecord; voice_scale 0.75;"

Upsides to our new solution
– “voice_scale 0” (
which we are using) is a more elegant alternative to “voice_enable 0” because when using “voice_enable 0” you never actually know when people are muted, you dont get the visual reminder on screen (seen above in Fig.1) when a muted person is trying to talk to you.
– No autoexec requirement
– No Aliases (Aliases are stored binds that are removed when you close CSGO)
– Doesn’t require you to remember 3 dedicated keys for “mute”, “unmute” and “voice chat”
– you’ll never have the frustration of playing half a comp game and realizing you haven’t heard your teammates all game because you accidentally had “voice_enable 0″ ages before the  current game even started.

Downsides to this solution
You have to hardcode your “voice_scale” setting(volume at which people speak to you)
If you go into the menu and change this value with the slider, every time you use the voice chat key, it will override that value to 100% voice receive volume.
(not a big deal for me, I always use 100%)
You have to use the push to talk button to un-mute people (small drawback for simplicity)
you may occasional have to quickly tap voice-chat to hear people again during games, which is visible to everyone.
Needs to be configured once on every computer (most mute configs require this anyway)
But you can easily find this bind again by typing into google “Best mute config” and using this post!

This mute option isn’t going to be for everyone,
this is simply the closest I could get a mute config that worked the way I wanted it
a mute config that actually informed you when you had people muted. not requiring 3 pages of auto exec to apply, or multiple keys to manage it.
I hope some others can also get some use out of my new mute binds!


Steam Marketplace script updated!

For years I have been developing a userscript for the steam market, and slowly adding features to it. I’m taking some time out to post about it here!

To use this script, you need to install an addon for userscripts
Greasemonkey (for Firefox) or TamperMonkey (for Chrome)

Lets run through the current features!

– increased visibility for firefox users using enhanced steam
– Be able to hide “My Active Listings” section to reduce clutter if you have heaps of items listed
– Clearly details CSGO skins that have nametags attached on listing pages
– Calculates totals for all your “Active Listings” on the market menu
– Compacts the css theme so more listings fit on the page when searching
– A toggleable feature, for searching CSGO items with nametags, that instantly closes the tab if no items on the page has a nametag

This script is designed to by run along side enhanced steam!

Download Link: [Current version found on my Dropbox]

I may make an instructional video later on some of the features!

Disclaimer #1: Enhanced steam already does some similar things, but I recreated them to suit my personalised taste, also Enhanced steam is no longer supported on firefox,
whereas my script works perfectly fine on firefox
My script also fixes a lot of issues with the abandoned version of enhanced steam for firefox.

Disclaimer #2: Steam inventory helper also shows you which csgo skins have nametags,
but with my script  its much more obvious as it makes it blatantly obvious when the first few items have a name tag on the marketplace.

CSGO Operation Release Order


Operation Shattered Web was the last operation.

The current operation is:
Operation Riptide

When I first made this blog post in 2016 it was the longest break between operations after Bloodhound ended. so I decided to made this post to detailing all release information about the previous operations.

Some of the initial data was sourced from the csgo wiki

The Table below shows info on: Release days of the week (PDT), Release Time (PDT) and duration of all of the previous operations

Order Operation Release Date Day Time Duration Extended Gap
1 Payback 25-Apr-13 Thu 4AM 128 Yes
2 Bravo 19-Sep-13 Thu 5PM 139 Yes 19
3 Phoenix 20-Feb-14 Thu 9PM 111 Yes 15
4 Breakout 1-Jul-14 Tue 4PM 93 No 20
5 Vanguard 11-Nov-14 Tue 10PM 140 Yes 40
6 Bloodhound 26-May-15 Tue 4PM 128 No 56
7 Wildfire 17-Feb-16 Wed 7PM 149 No 139
8 Hydra 23-May-17 Tue 3PM 174 No 313
9 Shattered Web 18-Nov-19 Mon 6PM 134 No 735
10 Broken Fang 3-Dec-20 Thu 10PM 151 No 247
11 Riptide 22-Sep-21 Wed 2AM N/A N/A 142

I will be updating these details over time as new operations are released.

  • The “Gap” and “Duration” columns are measured in Days
  • Gap” indicates the time where no operation was active, or the time it took for an  operation to start after the preceding operation ended.
    (Eg. Operation Bloodhound ended a 56 day gap in which no operation was active.)
  • The heading “Release Time” is the rough time measured in Pacific Daylight Time (PDT) the update was released, rounded to the nearest half hour
  • Please contact me if there are any errors or outdated data!
  • This page was last updated on 7-Jan-2022

This post was created off the back of an existing page that proved quite popular with people: CSGO Case Release Order – check it out if thats something that interests you!

Operation Release Order FAQ

Which operation took the longest to release:
On the 18th of November 2019 – Operation Shattered Web took the cake for the longest time between releases. It took Valve 735 days to drop Operation Shattered Web after the conclusion of Operation Hydra ending (Operation hydra officially ended on 13-Nov-2017)

What is the average duration of an operation?
From the above table, we can see that the average duration of all Operations is 134 days (or just under 4.5 months) also, the new trend appears to be that operations are no longer extended after their initial end date that gets set at the start of the operation.
This may change in the future if valve decide to shake up the Operation formula.

What is the average time between operations?
Again using the table above we can see that the average gap between operations is 172 days (or nearly 5.8 months) so basically waiting for operations occurs more often than they are active. However this changes if we remove the giant break that occurred before shattered web (only 110 days / 3.6 months between Operations)

Get fitbit steps on your personal website [Revised]

So someone on the /r/fitbit page asked a general question about how to get fitbit steps on your personal website. I had previously asked this question before, and answered it myself. However since then my solution has changed, and I failed to document it. I promised I would update him, and here I go.

Assumptions / Pre-requisites
Here are the things you are going to need to set this up
– A fitbit API key (there are lots of guides like this one to request an API key)
– An understanding in Web Technologies (HTML, CSS, Javascript) and more importantly a web programming language – I will be using PHP
– A web server that supports your languages of choice.
– You have a google account which you can use google drive on

Step 1 – Outsourcing Oauth to Google Drive

Step 1.1 – Information
I am not a web developer, I make websites as something fun to do, so naturally, oAuth scares me. luckily there is a Google Apps script that does all this for me.
All of this step 1 is dedicated to whomever wrote this article

Step 1.2 – Make a (depreciated) google spreadsheet

We need to make a google drive spreadsheet, but it needs to be the old version of sheets,   you NEED to request an old sheet with this link –
This is because the sharing functionality in the older spreadsheets are superior to new spreadsheets. Hopefully google never fully deprecate these spreadsheets styles, because the whole of this process relies on old versions of google sheets.

– Request a new spreadsheet with the URL above (
– Give them a valid reason you are using an old sheet style (they seem to be asking for it now)
– Name the spreadsheet something meaningful
– Save the spreadsheet

Step 1.3 – Add the script to your Google Spreadsheet
Google drive spreadsheets (in this case sheets) have the ability to program back end scripts in javascript, The next few steps will be dealing with what is called “Google Apps Script” which link to our Google Spreadsheet.

Go to your new spreadsheet we made in the last step (Should still be open)
Go to Tools > Script Editor

If the “first time” Google Apps Script menu pops up, cancel making sure you select “Dont show again” and “close” to close all dialog popup boxes, You should now be looking at an empty page, or a blank JavaScript function currently in the script editor.

This is where we need to place the script that will do all the oAuth work for us.
Delete everything in the script box (there should be a blank function – make sure you have a blank script)
Then paste the script (Found Here: Original GitHuB Source or Rehosted on Pastebin) so that it is the only thing in your new google apps script code area.

Press the save button and name the script if necessary

Step 1.4 – Run the functions to configure the script

From the “Select Function” drop down
You want to run the functions in this order order

1.4.1 – Run the Authorize Function
(Note: This will allow Fitbit access to your google apps data)
Select “authorize” from the drop down
click the button that looks like a “Play” button
(Which is 2 buttons to the left of the “Select Function” drop down)
once you run the function, a popup box will appear.
click authorize and login with your fitbit account to finish this step.

1.4.2 – Run the Setup Function
Next run “setup” function with the same method as the above step
(NOTE: you will have to alt tab back to your Google Drive spreadsheet,
because a popup opens there asking for more details.- see below)

Once you see the above popup on the Spreadsheet tab, Enter:
a. Your API key – This need to be filled out with a valid key – unlike mine seen above.
b. Make sure you enter today’s date, unlike my screenshot above (setting a super old date will result in an error because these details are not longer request-able from fitbit)
c. Make sure you select all of the “Data Elements” by using CTRL when you click.
(Make sure they are highlighted)
Then click “Save Setup”

1.4.3 – Run the Sync Function
After you have successfully configured “Setup”
Go back to your script and run “Sync”

All your data should now be in the spreadsheet.

Step 1.5 – Add an automated trigger to your script
We now need to tell google scripts to run the “sync” function every 15-30 minutes (up to you)
You should still have the script editor open in a tab. Go back to it
(if not, go to Tools > Script Editor on your spreadsheet)
Click on the speech bubble looking icon, when hoevered over the icon will say “Current Projects Triggers”
On the dialog menu, select “Add a new trigger”
And set “Sync” to run every 15 minutes.

Your spreadsheet will now stay updated!

Step 1.6 – Set your spreadsheets share settings to Public
Navigate back to your Google Spreadsheet, (you may close the script editor if you like.)
From the “File” menu, select “Publish to the Web”
A popup should appear, Make sure “All Sheets” is selected before you click “Start Publishing”
You should now be able to “Get a link to the Published Data” which is a web link.
Make sure that link works in a browser. if it does we are ready to do some web coding!

Step 2 – Show the Google Docs Data on your Website

Step 2.1 – Upload my API to your site
Go to pastebin and get my API  –
This API basically reads in the google spreadsheet
Using string manipulation, it finds the values for todays step values (using the server date)

Step 2.2 – Configure my PHP API
There are 3 variables you want to configure in my API, I have detailed them pretty clearly.
1. The location to your google spreadsheet, this is obvious, the API needs to know the URL of the spreadsheet we set up earlier.
2. If you want the API to output JSON or not
3. Set your timezone – Setting your timezone is crucial to ensuring you get todays step total.

Step 2.4 – Load the page in a browser
Once you’ve configured the settings,
And uploaded the page to your web server
You should be able to load the page in your browser!
navigate to the URL of where you uploaded the php page
And remember to add ?ddos=1 to the end of the PHP URL address, because that’s how I avoid web crawlers pulling fitbit data accidentally.
an example of your URL would be http://website/directory/fitbit_and_gdocs_api.php?ddos=1

Step 2.3 – Consider application design and page load speed
the API I have provided is not designed for fast page loads.
If you include this code in your homepage, it will slow your site load times down considerably, as you are now not only requesting your homepage, but also loading a google spreadsheet every page load.
I run this page and load the values into a MYSQL table once every 15 minutes.
Because a Mysql table statement is 100 times quicker than loading a google spreadsheet.


In theory we have now included fitbit data on your website!

CSGO Case release dates

When working on my CSGO Skin evaluation site
I noticed there wasn’t a place where I could easily look up the release dates, and order of CSGO cases. Which prompted me to make this blog post

The most recently released case is the
Revolution Case

The table below orders all the CSGO cases by release date, and shows how many days it took for valve to release each case.
It also shows the day of the week, and date (in UTC time zone) that the case was added to the game.

OrderCaseRelease DateRelease DayCommentsWait Time
1CS:GO Weapons Case14-Aug-13WedArms Deal Update
1ESports 2013 Case14-Aug-13WedArms Deal Update
3Operation Bravo Case19-Sep-13ThuOperation Bravo36
4CS:GO Weapon Case 26-Nov-13WedArms Deal Collection 248
5eSports 2013 Winter Case18-Dec-13WedWinter Offensive Update42
5Winter Offensive Weapon Case18-Dec-13WedWinter Offensive Update0
7CS:GO Weapon Case 312-Feb-14WedArms Deal Collection 356
8Operation Phoenix Weapon Case20-Feb-14ThuOperation Phoenix8
9Huntsman Weapon Case1-May-14Thu 70
10Operation Breakout Weapon Case1-Jul-14TueOperation Breakout61
11ESports 2014 Summer Case10-Jul-14Thu 9
12Operation Vanguard Weapon Case11-Nov-14TueOperation Vanguard124
13Chroma Case8-Jan-15Thu 58
14Chroma 2 Case15-Apr-15Wed 97
15Falcion Case26-May-15TueOperation Bloodhound41
16Shadow Case17-Sep-15Thu 114
17Revolver Case8-Dec-15TueR8 Revolver Release82
18Operation Wildfire Case17-Feb-16WedOperation Wildfire71
19Chroma 327-Apr-16Wed 70
20Gamma Case06/15/16Wed 49
21Gamma 2 Case18-Aug-16Thu 64
22Glove Case28-Nov-16Mon 102
23Spectrum Case15-Mar-17Wed 107
24Hydra Case23-May-17TueOperation Hydra69
25Spectrum 2 Case15-Sep-17Fri 115
26Clutch Case15-Feb-18Thu 153
27Horizon Case3-Aug-18FriPanorama Update169
28Danger Zone Case6-Dec-18ThuDanger Zone Update125
29Prisima Case13-Mar-19Wed 97
30CS20 Case18-Oct-19Fri 219
31Shattered Web Case18-Nov-19Mon 31
32Prisma 2 Case1-Apr-20WedShattered Web End135
33Fracture Case7-Aug-20Fri 128
34Broken Fang Case3-Dec-20ThuBroken Fang Start118
35Snakebite Case3-May-21MonBroken Fang End151
36Operation Riptide Case22-Sep-21WedRiptide Start142
37Dreams and Nightmares Case21-Jan-22Fri 121
38Recoil Case1-Jul-22Fri 161
39Revolution Case10-Feb-23Fri 224


  • On 2 occasions there were 2 cases released simultaneously, which is reflected in the column named “Order”
  • The heading “Wait Time” is the time (in days) it took for Valve to release the case, prior to the release date of the previously newest case.
    (Eg: While the community waited the release of the Shadow Case, there were 114 days the Falchion Case was the newest case in CSGO.)
  • People seem to really like this blog post, so I have made a similar blog post about the CSGO Operation Release Order which outlines similar things like duration and downtime between operations.

CSGO Case Release Order FAQ

When are new cases released in CSGO?

The average wait time between case releases is currently 93.7 days
Valve regularly shifts priorities within the company so its not possible to know the exact date when new case will come out.

What is the longest wait for a new case?

The longest time it for Valve to release a case has been 224 days! The Revolution Case released in February 2023 was released 224 days after the Recoil Case from July 2022, which was a much longer wait time than the average.

What is the most common day CSGO cases are released?

Looking at the entire dataset, the most common day cases release is a Wednesday

However if you take only the last 15 cases released, the most common day is a Friday with 6 cases released on Fridays

Are cases available in every country?

Despite the contents of CSGO cases being purely cosmetic – cases can be considered loot boxes or a form of gambling depending on your countries laws and online regulations. so far there are are some restrictions in European countries.

  • Opening cases is not possible in Netherlands and Belgium
  • Opening cases in France requires a P250 Xray to first view a cases contents, then purchased
  • Also in France, Cases cannot be purchased from the Steam Community Market.

Why are some cases so expensive?

Some of the cases that released close to the Arms race are either no-longer dropping anymore, or are very rare to get from the drop system.

This means they are much harder to get, and people pay more to open these cases, because the skins inside are also quite old and rarer than the cases currently in circulation

Bro update the page!

I have transitioned to a casual CSGO player these days

however I do very much want to keep this page up to date!

reach out to me via my contact options, or steam if the page is out of date!

This page was last updated on 10-Feb-2023

My Current Progress with the CSGO API

Its been a week or so since I launched the CSGO Evaluator site I made, and its died.
Didnt really expect much out of my free hosting, but its something im working on.
I want to grow my web skills and figure whats causing this one myself.

Essentially the error ive been getting is in relation to the PHP function that actually gets the data from the steam API, not reciving any data at all. Hence my site cant talk to steam at all.

I have done some troubleshooting, and there is something wrong with my host.
I still have functional get_file_contents() requests going on with other pages I have made. its just my webhost has decided that steam API requests should be blocked.

I am currently awaiting a response from my web hosting support ticket.

I have attempted to join another free hosting site, to see if I have the same problem on their site with similar code, but I cant get dotabuff get_file_contents calls to work either.  This isnt conclusive however, because I didnt rule out the possibility that they block ALL file_get_contents() requests.

Anyway, thats the updated situation with my downtime at the moment.

Steam Marketplace UserScript

I have since updated this script, Read the newest blog post on this topic here:


So I spent last night trying to combat an issue with the Steam Marketplace,
CS:GO is my new favorite game, and offloading all the sticker capsules and skins has left my marketplace transaction sales list quite long,  Meaning I have 14 items to scroll past before I get to the actual sales items


I don’t know if anyone could actually benefit from my UserScript,
But It adds the ability to hide your listed marketplace items, and additionally load one of the tabs automatically in the “Market Activity” section further down the page. (instead of always loading the “Popular Items” – which rarely changes)


with the settings seen above, my page now loads like the below screenshot without any clicking;
notice That the “My Activity Listings (14)” is collapsed, and “Newly Listed” is already selected by default


This user-script utilises HTML5 localStorage functionality in JavaScript, and at the moment is only compatible with Firefox (now compatible with Chrome if you install Tamper monkey), your Firefox version must be above version 3.5 and “” set to true (you’ll only need to check this for per-historic version of Firefox) and you’ll obviously need Greasemonkey installed to run User-scripts.

Ive been using this script for the last 2 years, and editing as I go, I might make a major update soon.

If you are sceptical about whats inside, you can view the code below on Pastebin
As with any external script, make sure you be careful and know what you’re running.

Current Version

EDIT: This is no longer the way I get fitbit steps in my website,

Please see this new post on how I currently get data on my wesbite

Below is the old post that serves historical purposes only.

Ive had a Fitbit Flex for roughly 3 months now, and enjoying every step and achievement that comes along with the band, and the motivation provided by the web dashboard.

However last month I had decided to give my website a complete redesign, and with my new wristband, I felt that I had the ability to display some personalized dynamic content in the form of my daily step total would be awsome, as I had done a similar things when displaying my “Last online” status with the Steam Web API and PHP. Boy was I in for a surprise.

The process for the Fitbit API was immensely more complicated than that of the Steam Web API, Using an authentication process called OAuth, Essentially the process you see when you “Login with Facebook” on several websites, meaning that your PHP application needs to send the users attention onto Fitbit to authenticate the access to their data.

Not to mention, this required me to install “Oauth” PERL script onto my Website, Which I could not do due to the limitations set by my free web hosting setup. This had me trawling through countless 3rd party OAuth PHP Libraries over the last 3 weeks, Which I understood barely any of.

Eventually I found an Oauth setup utilising Google Spreadsheets and Google Scripts, which allowed me to work around my free web-hosting limitations; technical steps being outlined below

If you’re following everything I’ve said up until now, you’re most likely familiar with API’s and more specifically Want to actually use it. Please note: You will also need an understanding/access to a PHP capable server for the implementation of this.

What to actually do

Step 1: Go and get a API key from their website,
(recommending you get a “Browser” and “Read only” API key – See more at wikihow)

Step 2: Login to your Google Drive Account, (as we will be using a Google Script to retrieve Fitbit data for us) and create a new spreadsheet.

Step 3: Once you’re in your new spreadsheet, we will need to open up the Gogole Script Editor (This will open up in a new browser tab)




Note: Once in the script editor; a “Blank project” will be fine to create if you haven’t ventured into script editor before)

Step 4: I used the script from the following GitHub repository (or additionally copy fitbit.js from here) and paste it in a new Blank Google script (remove any code in the blank project you just created), and paste Fitbit.js into the code area.

Step 5: Select and Run “renderFitbitConfigurationDialog” from the drop down menu on the top toolbar, and press the button with the Play symbol.


Some pop-up windows for google will open; Click accept or next on all of the authentication steps to allow the script access to your newly made Google spreadsheet

Swap browser tabs back into your Spreadsheet; you should see a configure window shown below,


After entering your Consumer and Consumer Secret key like the above screenshot,
Make sure everything else is as you desire, and select “Save Configuration”

Go back into script editor and run the “Authorize” Function

Then proceed to run the “refreshTimeSeries” function to populate your data

Swap back to your spreadsheet, and we should see the below setup.
Cell B3 is the value were interested in as it displays our daily total (and gets replaced each day)


Step 6: We need to make sure that our spreadsheet stays active and our steps get updated regularly, so head back into the Google Script Editor, and click “Current Project’s triggers” button


My triggers look like this


(This will update my spreadsheet from the Fitbit site every 30 minutes)

Step 7: Getting a cell to display on our website
Heres the part where we need to get our value out of the spreadsheet,
Whilst on our spreadsheet = Under “File> Publish to web”, we can extract a cell in a webpage.


Copy your URL seen above, we will need it for our PHP manipulation.
(Open the URL in a new browser window if you want to check it is the right cell)

Step 8: Create a new php function or page, and use some basic sub-stringing to get your “B3 Cell” in a form you can use!

function printFitbitSteps() {
$content = file_get_contents(“PUBLIC URL FOR GOOGLE SPREADSHEET CELL B3”);
$content = substr($content, strpos($content, “<td  class=’s0′>”)+16);
$steps = substr($content, 0, strpos($content, “</tr></table></div>”));
echo $steps;

The above code reads the HTML given to us in the URL as a variable, and splices it with sub-stringing so that only our step total is left over!

You should now be done,
This assuming you can utilize PHP on your website, and have a knowledge of how it works, but the basic steps are in those lines of code above. Its probably considered dirty coding, but it works for me.

Here is the footer from my website, focusing on the “Steps today” value.

Hopefully this can help someone out!!


Special Thanks to Manuel Lemos who put in heaps of effort to try and teach me his Oauth PHP Library (I just wasnt smart enough)