roncli.com blog
The blog of roncli
roncli.com blog
roncli.com
blog
Profile
roncli
Houston, Texas, United States
Labels
Coding
CTG Music
Editorials
Games
Miscellaneous
Music
Servers
Silliness
Software
Sports
Trax in Space Beta
Weather
Recent Posts
The Overload Teams League
Steak Burrito Recipe
The Descent DXX-Retro 1.4 Roadmap
Observing the Swiss
BlizzCon franchise roundup
Attention - Gullibility
AMD 16.5.2 error "Qt5Core.dll is missing from your...
The Observatory
Six Degrees of Confusion
Report Card: 2015
Archives
February 2005
March 2005
April 2005
May 2005
June 2005
July 2005
August 2005
September 2005
October 2005
November 2005
December 2005
January 2006
February 2006
March 2006
April 2006
May 2006
June 2006
July 2006
August 2006
September 2006
October 2006
November 2006
December 2006
February 2007
March 2007
April 2007
May 2007
June 2007
July 2007
August 2007
September 2007
October 2007
November 2007
December 2007
January 2008
February 2008
March 2008
April 2008
June 2008
July 2008
September 2008
December 2008
February 2009
July 2009
August 2009
September 2009
October 2009
November 2009
February 2010
March 2010
April 2010
June 2010
July 2010
August 2010
September 2010
October 2010
November 2010
December 2010
March 2011
June 2011
July 2011
August 2011
September 2011
October 2011
December 2011
January 2012
February 2012
April 2012
July 2012
November 2012
July 2013
April 2014
July 2014
August 2014
November 2014
December 2014
March 2015
April 2015
May 2015
June 2015
July 2015
September 2015
January 2016
February 2016
May 2016
July 2016
November 2016
March 2017
January 2018
May 2018
June 2018
Friday, June 08, 2018
The Overload Teams League
Posted: 6:37:00 PM 0 comments
I wanted to put together a bunch of my thoughts regarding the possibility of creating the Overload Teams League.

Those who played Descent 3 might remember that I took over something called the Descent 3 Teams League from bash and Sirian, and ran it for a number of years. I kept it going until well into the second half of the aughts, with help from Matrix and IceHammer to keep things running smoothly. Eventually the game dried out, and with it the league was retired.

With Overload, the potential for Six Degrees of Freedom competitive team action returns. I've recruited Chilly Bus and MobMessenjah to bounce some ideas off of, and wanted to list out what we've come up with so far.

The Spirit of the OTL


The OTL "spirit" borrows a lot from from the D3TL. Essentially, teams get together to play competitive games against each other, and the system is there to facilitate the games with as little interference from administration as possible. However, we are planning on having a few notable differences for the OTL.

First, seasons are being planned. While there will be lifetime standings, we want to rotate out the standings every 6 months to keep the leaderboards fresh.

Second, we're going to want to keep big rosters down. The D3TL team NT was a unique idea, but we really don't need to have teams with 50+ players on it. This means that large clans would have to enter multiple teams on the D3TL, which means more people will be able to play, and even allow for intra-clan matches. Right now, we're looking at rosters being between 5 and 8 players, although we're leaning towards the higher end of that list.

Third, we're looking to keep the game time down. D3TL games averaged an hour in length. Overload right now only allows a MAXIMUM of 20 minutes, and that's the standard we're looking at adopting. If Revival raises that maximum, I don't think we're going to want to follow suit.

Fourth, we think map, opponent, and mode diversification is unnecessary in 2018. To keep teams from playing the same map over and over, we're likely going to borrow the "home map" concept from The Observatory. To keep teams from not wanting to play other opponents, we want to implement a ranking system that's more than just wins and losses. And, there's only 2 real modes in Overload right now, and both are team anarchy... one with friendly fire off, and one with friendly fire on.

Finally, we want to do frequent events. Three kinds of events we're thinking of:

  • Regular events, perhaps monthly, that are at different days and times, where people can get together and play a small Swiss tournament for a few hours. Similar to The Observatory's tournaments.
  • Mid-season events, a top 6-team invitational knockout tournament, perhaps with something on the line like a guaranteed spot in the knockout tournament of the end-of-season tournament.
  • End-of-season events where we pull out all the stops... qualifiers for people to get into groups, a group stage round robin, and concluding with a knockout tournament. You win this, you're the season champion!

Choosing Maps, Servers, and Colors


I mentioned using The Observatory as a way to determine what map to play, but I wanted to go into more detail on map selection, and other selections that may give advantages to one team and not the other.

First, here's what we're thinking for maps. Teams will have a pool of "home" maps, and when they are the "home" team, their opponent will choose one of those maps. Who gets to be home? That'll alternate every game between the two teams, with the first game being random. What if both teams want to play a map that's not their home map? Teams will be able to agree to play any map available, overriding the home team concept for one game.

Servers will work the same way. One team will be assigned to start the game, which allows them to pick the server of their choice, and the next game between the teams your opponent gets the choice. Every 2 games this resets. However, you can agree to play on a particular server (provided you have access to it) to override this behavior for one game.

Finally, colors will just be assigned in a similar way to servers. Unlike the servers, though, your team color shouldn't be something to agree upon. Sometimes you'll be orange, sometimes you'll be blue.

Game Rules


Overload has a lot of ways to play team games, but we obviously want to standardize them for fair competition. This is what we're thinking:

  • Time limit: 20 Minutes
  • Show Enemy Names: Team Only
  • Respawn Time: 2 to 4 Seconds
  • Respawn Shield: 2 Seconds
  • Powerup Overall Frequency: High
  • Powerup Initial Secondaries: Low
  • Powerup Super Frequency: Low

All powerups are allowed, largely because we can't disable anything non-weapon.

As for Friendly Fire, we're actually thinking of making that a separate "mode". If you recall, the D3TL had separate rankings for each mode, but there was an overall ranking as well. We'd probably do something similar for this.

The Ranking System


Let me come out and say NO ONE is going to like the ranking system. Regardless of what system we use, nothing's perfect. I am hoping that by using a combination of a ranking system and regular events, any decent ranking system will be accepted as long as it's not the final authority on "who is the best". With that said, I'm going say that naughty word: Elo.

Long story short, I want to have score ratio be a factor in Elo score changes, and have the rankings be somewhat volatile given that these are not lifetime ratings.

First, we have an idea to have the score ratio factor in the Elo "result" calculation. Normally, a win would give you a 1.0 result and a loss would give you a 0.0 result. In our version of the Elo formula, you'd only get 1.0 if you doubled your opponent's score, and 0.0 if your opponent doubled your score, with a logarithmic curve filling in the points in between. I came up with the "double" by examining the history of Team Anarchy scores in the D3TL Tournament. It maxed out at a ratio of 3.27 to 1. If you're beating your opponents 45 to 15, the team with 15 is going to need to improve dramatically to ever have a chance of winning. 45 to 30 feels more like that the team with 30 could eventually win. There's no real solid statistics on what exactly to use, but this feels like a good starting point.

Because we want a decent level volatility, K will need to be high. On top of this, because we're going to be using score ratio as the result, this requires us to have a higher K to keep things a bit volatile. I'm looking at experimenting with a K=50 for the first season.

Finally, we want to use a provisional rating so teams can't play 1 game and be ranked among the top teams. Teams that have 10 games in a season will have their full Elo as their rating. Outside of that, every game a team plays will give them access to 10% of their Elo. So, a team with an Elo of 1500 but has only played 2 games will have 20% of their Elo applied to their rating, so their rating will be 300.

We'll also have individual player stats, like total points, points per game, deaths per game, and efficiency.

Things We Want Revival To Do To Help


Revival has done a great job at making a game people want to play, but there's more that can be done to make this game really shine, as well as help out the OTL with doing what we want to do. To this end, we currently have a small list of ideas we'd like to pass on to them.

  • Overload NEEDS an observer mode. In 2018, it almost feels like an oversight to not have some kind of observer mode. Even Descent 3 had observing!
  • To keep games fair, all players need to be able to confirm the selected settings for a private match. Without this, the person starting the match could sneak in some setting that the other team won't be aware of.
  • Game stats from private games should be output to a text file. No funny key combination required, no UI element, just a way to always output private match results. It should include each players' score line (kills, deaths, assists, suicides), and each players' kills and deaths against each other. Again, something to take away from Descent 3.
  • Allow the player hosting to pick which region to start their game in. Right now it just defaults as the closest to them, but what if a bunch of US players want to play Germany players on a UK server?
  • Right now you can select which weapons to allow or disallow. Extend this to other powerups: Ammo, Energy, Armor, Invulnerability, Cloak, Overdrive... everything.
  • Make an option to disallow players from delaying their spawn in a private game. This would prevent cases where a team is in the lead, but the other team is making a comeback, except the team in the lead just stops spawning.

League Interface


The primary interface for the OTL will most likely be a Discord bot. I have a lot of experience with Discord bots as I've made 3 now, and having a bot to help out with managing things like rosters, game reports, and more will really make it easy to keep the league running without anyone getting involved unless there's a dispute that needs to be resolved.

We'd still have a website, but its primary focus would be to show standings, results, and more. All other communication would take place on Discord.

What's Next?


Discussion, of course! I am posting this on a Friday to give everyone some time to read it over and form their own opinions as to what might be fun in an Overload Team League. On Monday, I'm going to do an Overload stream at http://twitch.tv/roncli and hold an AMA regarding the league. I'm looking for your questions and suggestions, so be sure to add your questions on the Reddit OTL AMA comments thread so that I don't miss them.

Summary


Overload is pretty well-suited for a teams league like this, and I think that having an organized teams league will get people playing multiplayer, and especially team games. Additional support from Revival will allow the league to do more, drawing even more interest from players who would not otherwise play multiplayer.

Labels: , ,

Tuesday, May 08, 2018
Steak Burrito Recipe
Posted: 1:06:00 AM 0 comments
Presented with only this comment... if AI is going to take over the world, it ain't coming from New Zealand.

Labels:

Tuesday, January 02, 2018
The Descent DXX-Retro 1.4 Roadmap
Posted: 5:46:00 PM 0 comments
For some time now, I've been a Collaborator on the DXX-Retro project. Originally I just started helping out on various odds and ends, but lately my focus has been on the observer mode of the game.

Over the past two years, I've essentially been waiting on the project owner, Drakona, to work up the networking code to send client ship status to the observers. It's one thing to see the ships flying around in observer mode, but another entirely to know everything about those ships. That is, shields, weapon loadout, what weapons you're about to fire, etc. Unfortunately, her last commit to the project was February. Of 2016.

I get that priorities in life change, especially when you become a two-time parent. :) The Descent community, however, hungers for more, and as a result I've decided to finish off observer mode in Drakona's absence. There's actually quite a lot to make that happen, so I've created the v1.4 Roadmap. In this post, I discuss the rationale behind the roadmap, and what to expect from Retro in the future.

DXX-Retro has largely served its purpose to the competitive community, but two outstanding features remain to be added. Both of these were promised by Drakona to the late JinX. One of these features, observer mode, was even kind of named after him, "JinX Mode". The other feature was specific for Descent 2, and that is Capture the Flag Classic, which brings D3-style CTF play to D2.

In February of 2016, Drakona and I released an early version of DXX-Retro v1.4X5, which gave us a taste of observer mode. This only gave us the visuals. While we could see ships flying around, we didn't know anything about those ships other than what their opponents knew. This was always wanted, but we never really came up with a plan to do it. And, in the past 2 years, nothing has been worked on to support this. Unfortunately, Drakona just hasn't had time to work on it, and my work has therefore stalled.

While it hasn't been a great situation, the community has gotten a lot of mileage out of observer mode. So much so that a Twitch show was made out of it which continues to enjoy success among the community. However, there's a lot that we miss on the broadcasts because we don't have those shield numbers, the weapon loadouts, and whatnot. And after two years, the time has come to just get it done.

So, I'm getting it done. The roadmap includes 5 future releases along the 1.4 line. The first will be v1.4X6, which I'm hoping to finish this week. This will include the shield numbers appended to the pilot names under the ship. I want to also include a way to indicate damage, and will be working on ideas for that.

The second release will be v1.4X7, which will get the rest of the ship status in the game and make any necessary upgrades to the observer mode UI that we want to change from previous versions. I'm *considering* adding my custom-made Observatory UI to Retro, but am not sure that's needed.

The third release will also be v1.4X7, but this time for Descent 2! Once I know what I'm doing in D1, I can apply that to D2, and we can have an observer mode for both games.

The fourth release will be v1.4X8, also only for Descent 2. This will include Capture the Flag Classic, where instead of the "egghunt" style game where flags are worth 5 and kills are worth 1, we'll instead make the flags spawn in the base, only have teams be able to score if their flag is in their base, and have team points be based on flag captures only.

And finally v1.4 will be the final release for the 1.4 line, which will include any bug fixes, documentation updates, and any other housecleaning duties we need to do for a proper release.

After that, the future for Retro is murky at best. There are no less than 50 open issues on GitHub for Retro right now which vary from essential to nice-to-have to outright silly. Also to keep in mind, the DXX-Rebirth is nearing a v0.60 release that is essentially a codebase refactoring in addition to a ton of other updates. I would love to see a Retro v2.0 not only based on Rebirth v0.60 but something that can also follow that version as well, instead of being a complete fork that forgets where it came from. This in and of itself would be a monumental task.

Until then, however, we'll keep Retro focused on what we need to release v1.4, and if I can keep it going without the need for added help, perhaps that will be much sooner on the horizon than expected. Here's to some better Descent in the near future!

Labels: , , ,

Tuesday, March 07, 2017
Observing the Swiss
Posted: 2:29:00 PM 0 comments
Running The Observatory is super fun. Being a self-proclaimed 6 degrees of freedom junkie, watching pilots pull off incredible moves just to avoid taking an extra 10 points of damage here or there is fascinating.

The format of The Observatory is largely inspired by CoNDOR, the racing league for the game Crypt of the NecroDancer. Over there, they have their main commentator and several referees who work in the background to ensure that everything goes smoothly. However, on The Observatory, I am afforded no such luxury.

Therefore, I've tried to automate as much as I can to ensure that I can spend time focusing on the action rather than on administering of the tournament. To this end, drawing on my experience from making SixBotGG for Six Gaming, I created FusionBot for The Observatory.

This bot takes care of a number of fun (and not so fun) admin tasks, but the one thing I wanted to highlight was the algorithm I created to create a Swiss pairing system for the qualifier tournaments. In a Swiss tournament, everyone plays a round every game, with the idea being that as the tournament progresses you will play opponents who are closer and closer to your skill range.

A manually-ran Swiss tournament often will have the tournament director throwing players who have the same number of wins in a pile, and randomly determining from that pile who plays who. There are ways to ensure people don't play each other twice, and even ways to govern who gets a bye round.

For The Observatory, I had added constraints that required some custom programming. For instance, players can't play each other if neither of them can host a multiplayer game. But as a general algorithm, here's how I managed to get a working Swiss algorithm in node.js.

1) Get a sorted list of players


This part's pretty easy. You want a list of players sorted by their performance.

var eventPlayers = Object.getOwnPropertyNames(event.players).filter((id) => !event.players[id].withdrawn).map((id) => {
    return {
        id: id,
        eventPlayer: event.players[id],
        ratedPlayer: ratedPlayers.find((p) => p.DiscordID === id) || {
            Name: obsDiscord.members.get(id).displayName,
            DiscordID: id,
            Rating: 1500,
            RatingDeviation: 200,
            Volatility: 0.06
        },
        points: event.matches.filter((m) => !m.cancelled && m.winner === id).length,
        matches: event.matches.filter((m) => !m.cancelled && m.players.indexOf(id) !== -1).length
    };
}).sort((a, b) => b.points - a.points || b.ratedPlayer.Rating - a.ratedPlayer.Rating || b.matches - a.matches || (Math.random() < 0.5 ? 1 : -1));

Here, I get all of the players in the tournament that haven't withdrawn and return an array that includes the player's ID (which for a Discord bot is simply their Discord ID), their player information for the tournament, their ELO, the number of wins they have in the match, and the number of matches they play. We then sort this so that the people with the most points are on top, and break ties on ELO, least number of matches played, and in the case that everything is even we just flip a coin.

2) For each player, match them to a potential opponent


Here, we create a recursive function that attempts to match players based on a set of criteria. In that function, we get the players that have yet to be matched up, and find potential opponents for the first player in that list.

var remainingPlayers = eventPlayers.filter((p) => matches.filter((m) => m.indexOf(p.id) !== -1).length === 0),
    firstPlayer = remainingPlayers[0],
    potentialOpponents = remainingPlayers.filter(
        (p) =>
            p.id !== firstPlayer.id &&
            event.matches.filter((m) => !m.cancelled && m.players.indexOf(p.id) !== -1 && m.players.indexOf(firstPlayer.id) !== -1).length === 0 &&
            (firstPlayer.eventPlayer.canHost || p.eventPlayer.canHost)
    );

You see here that the list of remaining players can't exist in my "matches" array. We get the first player and a list of potential opponents. Opponents cannot be yourself, cannot have been already played, and as is a special case either you or your opponent must be able to host a game. Inside the recursive function, if there is only one player in "remainingPlayers", we check to make sure that the player hasn't had a bye before. That is, if they've played as many matches as there have been rounds in the tournament, the bye is okay. If not, we fail attempt at making a matchup. Failed attempts get interesting, and we'll get to that in a moment.

if (remainingPlayers.length === 1) {
    if (firstPlayer.matches >= event.round) {
        return true;
    } else {
        return false;
    }
}

Now we start a loop through potential opponents. As long as there is a potential opponent available, we will try to assign them the match until we run out of opponents. How we determine who to match an opponent up is where the fun math comes in:

let index = Math.floor(potentialOpponents.length / Math.pow(2, event.round + 1));

With this formula, in an 8-person tournament, the top player will play the 5th seed in round 1, the 3rd seed in round 2, and the 2nd seed every round thereafter (assuming all other conditions for being a potential opponent have been met). This is far better than throwing names into a pile and drawing randomly. Since it uses math, it makes later round matches more meaningful, and allows for earlier matches to be scheduled fairly. Here's the loop in its entirety:

while (potentialOpponents.length > 0) {
    let index = Math.floor(potentialOpponents.length / Math.pow(2, event.round + 1));
    matches.push([firstPlayer.id, potentialOpponents[index].id]);
    if (remainingPlayers.length <= 2) {
        return true;
    }
    if (matchPlayers()) {
        return true;
    }

    matches.pop();
    potentialOpponents.splice(index, 1);
}
return false;

We push the match onto the matches array, but if we don't ever return true because we run out of remaining players or we can't match future players, we basically back the match out of the matches array and try again until we run out of matches to try. The "matchPlayers" function is our recursive function this resides in.

3) Determine who's home


In chess, there's a concept of determining who gets the white pieces. In Descent, it's about whose home level you're playing in. Here in The Observatory, we don't want people playing home or away too many times in a row, so we have a way to make sure that happens as infrequently as possible:

match.sort((a, b) => (
    (event.matches.filter((m) => !m.cancelled && m.home === a).length - event.matches.filter((m) => !m.cancelled && m.home === b).length) ||
    (event.matches.filter((m) => !m.cancelled && m.players.indexOf(b) !== -1 && m.home !== b).length - event.matches.filter((m) => !m.cancelled && m.players.indexOf(a) !== -1 && m.home !== a).length) ||
    (Math.random() < 0.5 ? 1 : -1)
));
eventMatch.home = match[0];

The "match" is the array of players, and we sort the array in a way that makes it so that the player who has played home the least gets it next. In the case they've both played home and away identically, we flip a coin.

Summary


Putting together a Swiss algorithm for pairings wasn't too hard, and in fact was more about getting all of the nuances of a Swiss tournament just right. A lot of trial and error was had, and the first two seasons of the Observatory resulted in some pretty spectacular failures. But the code is pretty solid now, and you can find the whole function under "generateround" in fusion.js. I would like to break this algorithm out of the bot and into its own NPM module at some point, perhaps that's something for a future CodeShare episode!

Labels: , , , ,

Sunday, November 06, 2016
BlizzCon franchise roundup
Posted: 11:16:00 PM 0 comments
BlizzCon was as amazing this year as it has ever been. From the Sombra announcement to Weird Al closing out the show, there was more than enough to do this year. What I wanted to do with this post is roundup the six game franchises and give some commentary on their current state, going from best to worst.

Overwatch


Everyone was expecting the release of the new champion Sombra, and sometimes when you're expecting something you really don't get too hype for it. Sombra's reveal was definitely NOT one of those times, because the hype was real. They started the opening ceremony with a retrospective video of Overwatch's release. I thought it was pretty fake, with a ridiculously setup war room, some equally ridiculous lines, and in general a lot of small things that tipped off "this was not real". Sure enough, the video started glitching out, and eventually blacked out entirely before playing the reveal video. Everyone loved it, and it was as amazing as I had hoped it to be.

Overwatch has taken off in popularity since its release, and the main reason is that it makes a genre that was previously associated with hardcore gamers accessible to casual gamers, while at the same time making sure not to lose the hardcore crowd. The Overwatch World Cup was played at BlizzCon, complete with their own mini-stadium built inside of one of the halls. Overwatch is turning into a juggernaut that is continuing to gain momentum with things like arcade mode, new maps, and new game modes. They are constantly tweaking their matchmaking algorithms, improving their server technology to make the game smoother, and listening to fan feedback.

World of Warcraft


While Overwatch has all the hype, World of Warcraft is an established brand that has endured for over 10 years. However, their last expansion, Warlords of Draenor, hmm... sucked. No really, it was awful. They lost a ton of players, released very little content, and seemed to have no plan for the future.

Legion, on the other hand, has been an amazing expansion, with the new artifact weapons, a world quest system to replace the daily quests, other systems inspired by Diablo III, Hearthstone, and Heroes of the Storm, and a ton of content. So, it was pretty telling when on the first day, Ion Hazzikostas took the main stage and spent an hour talking about what was coming to future patches, and did so by himself. He went over the next two patches, 7.1.5 and 7.2, the raid content we'd see in it, and even gave a teaser for a 7.3 patch. This expansion is simply blowing the last one out of the water - not that it would be too hard to do so - and it's clear there isn't going to be any kind of content drought for the foreseeable future. Right now, WoW is pressing all the right buttons, and backing up their words with new content. If you've been wondering whether to get back into WoW after the failure of Warlords of Draenor, the answer is clearly yes.

Heroes of the Storm


Heroes is an oddity in the Blizzard world. It draws upon all of their franchises to take on giants such as League of Legends and DotA2. And to be fair, it does a good job. Again, it's another case of bringing a genre of gaming that is more associated with the hardcore gamers to casual gamers. They announced adding Varian Wrynn and Ragnaros to the game at BlizzCon, and continue to add more variety to the way you can play the game.

What I find odd, though, is that unlike a first person shooter, having all these different ways to play Heroes of the Storm just doesn't appeal to me as much as it could. It lacks player progression, and compared to Overwatch is significantly more difficult to pick up the cosmetics. Not to mention that with as many heroes as there are in the game, the learning curve is really huge when it comes to trying to figure out what each hero does, and how to successfully play against them. Having multi-class heroes like Varian is only going to make the curve grow. On the flip side, there is a plethora of things to do in Heroes of the Storm, so if you enjoy the game you're going to continually have more to do.

Hearthstone


Hearthstone is a fun, lighthearted game that tries not to take itself too seriously. However, I personally find that the game tends to move too fast, with multiple expansions per year and a constantly changing meta game. The speed of the meta changing is not a new complaint, but with the new expansion announced at this BlizzCon, that speed doesn't seem to be slowing down any time soon.

To me, Hearthstone is an incredible time sink if you choose to play it. Not only do you have to stay current on the meta, but you spend time analyzing your cards and assemble decks with hopes that you will put together something that will be useful. Not to mention the investment - either time or money - required to get the cards you need to be competitive. Hearthstone can be amazing fun, but to remain competitive you really have to be ready to make the commitment.

Starcraft


Starcraft II is definitely waning in terms of new things happening. Sure, the modding scene is pretty active, but there were no announcements related to Starcraft II, if you don't count the DeepMind announcement. They have completed the story with the 3 chapters of the game but do occasionally add new mission packs to the game which are fairly popular. However, this won't sustain the game forever, and unless they're thinking about moving along to the next chapter in the Starcraft series, there isn't going to be much to talk about when it comes to Starcraft any time soon. At least their e-sports scene is thriving.

Diablo


Where there is little to talk about for Starcraft, there is much to talk about with Diablo, and it's not very good. Diablo III has become a stale game, with the meta being exactly the same for the past 4 seasons. While they are adding some nice feel good elements such as the annual Diablo I event or the Necromancer, it really isn't clear what they have planned to allow the game to remain relevant. Challenge Rifts were a good thought, but even that will become stale after some time.

Diablo III almost seems like the red-headed stepchild of Blizzard. They have no e-sports scene, the content that gets added to the game tends to pale in comparison to other games, the meta has become stale, and they're even losing some of their top players to boredom. Are they doing enough to keep fans of the game playing it?

On the flip side, this sure feels awfully familiar. It's a long content drought, like those we'd get at the end of an expansion for World of Warcraft. Blizzard isn't dumb, they know when a game they've made is losing its appeal, and they tend to do something about it. They already did it with Reaper of Souls. Perhaps the next expansion or game is just around the corner?

Labels: , , , , , , ,

Tuesday, July 12, 2016
Attention - Gullibility
Posted: 10:05:00 AM 0 comments
Back in 2000, I used to have this completely silly thing on this site called "Letting Off Steam". Back then, I was a programmer and admin with Trax in Space, and I used to field a wide variety of absolutely ridiculous email. You can probably still find some of these out there on the Wayback Machine if you look hard enough. Mind the color contrast if you do.

And color contrast happens to segue perfectly into this email I received at around 3:30 this morning from, apparently, someone named Lily from The Humanity Campaign. It was so good (and by good I mean bad), I pretty much went all "Letting Off Steam" on it. The email should be rather self-explanatory. Enjoy.

Labels: , ,

Wednesday, May 11, 2016
AMD 16.5.2 error "Qt5Core.dll is missing from your computer"
Posted: 11:58:00 PM 15 comments
Sometimes software pisses me off. I mean, really. How hard is it to copy a file to a location on your hard drive?

Apparently, it's too much for AMD. I spent an hour tonight trying to fix an issue with my wife's laptop, and decided getting the latest video drivers would be the best way to do it. After wrestling with AMD's installer, which was stuck at "Analyzing System" until I ran their cleanup utility, I finally got everything installed. On reboot, when trying to run AMD Settings, the laptop got the error "Qt5Core.dll is missing from your computer".

Turns out, the installer fails to install most of the required files, and no one on the Internet knew how to properly resolve this. I went looking for the file myself in the package AMD provides, when I came across this gem:

C:\AMD\Non-WHQL-64Bit-Radeon-Software-Crimson-16.5.2-Win10-Win8.1-Win7-May11\Packages\Apps\CN\CNext\cnext64\ccc-next64.exe

This is the actual executable file that AMD uses to install AMD Settings. Simply double clicking on this executable and repairing the installation fixed the problem.

I don't know what AMD is doing with their installer, but the person who put it together should probably QA their stuff more, and save me from much frustration.

Grr!

Labels: ,

Thursday, February 11, 2016
The Observatory
Posted: 11:41:00 AM 0 comments


I'm starting a new Twitch show tomorrow, February 12th at 7 PM Eastern, called "The Observatory". This will feature the original Descent game, with 1v1 DCL matches being played. I will be observing the game using a brand new observer mode, and will be commentating the matches along with co-casters Entropy and Morfod.

Not sure what to expect? Check this out for a visual of observer mode, along with the neat custom HUD that will be used for the event.




Want to learn more? Check out my information page on The Observatory.

Labels: ,

Six Degrees of Confusion
Posted: 12:10:00 AM 0 comments
Note: I come down pretty harshly on a few titles here that probably don't deserve it. Every title listed here is a good title in their own right, and deserves to at least be played through. The point is, nothing, yet, compares to Descent.

As you may know, I'm a pretty big Descent fan. I would even go as far as to say I'm a pretty big fan of the whole Six Degrees of Freedom genre. Really, if you want me to buy your game, make it a first person, Six Degrees of Freedom shooter. I'll buy it.

With that said, I have been a bit confused by the rash of 6DoF titles that have come out claiming they want to be as close to Descent as possible, and yet are doing things that... well, aren't very Descenty.

The Pretenders


There's Descent: Underground. This title seems to be doomed with poor net code that micro-repositions your ship just enough to throw your aim off, and a confusing scoring system that they are stubbornly sticking to. They have the name, but in my opinion they seem to be making their own 6DoF game.

There's Geocore, which I can best describe as a project lacking direction. Its single player mode has changed up literally half a dozen times since I've seen I started paying attention to it, and lacks the polish of other titles. It has a slogan of "competition grade", which is shown in its well-done net code, but honestly the original Descent has much better-looking weapons, and the game taxes my GPU like no other.

There's Sol Contingency, the game that originally was going to be Descent but got yanked from under them. While it has a very polished look, there are definitely some contrast issues that make it difficult to see what kind of action is happening in the game. I am also not a fan of the slow startup on its vulcan-like weapon.

There's Overload, the game made by the original Descent developers, who want to give us a modern version of Descent. Except, they have no initial plans for multiplayer, which is very much a core part of the Descent experience to me.

There's Retrovirus, a Descent-like game with a beautiful single player story, but horribly bad multiplayer play. The MOBA game mode was poorly done, and the spaces feel so large that it feels like it's impossible to properly aim. Not to mention the tech trees that let the king of the hill continue to be the king by granting well-performing players extra powers. Descent was a game that already had a wide skill gap, why make it wider?

While each of these titles are very good in their own right, as a fan of the Descent series, all of these titles miss the mark in one way or another. I am beginning to wonder if the experience of Descent can actually be recreated at all. Did Parallax happen upon some kind of magic formula for success that made the original game still the best game of the genre, even 21 years later? Is this 6DoF revival period just a bunch of pretenders trying to recreate the perfect Descent experience?

Or maybe am I overshooting my expectations?

The New Originals


Take Sublevel Zero. I had no expectations that this would be Descent, or anything like it. However, it is probably my favorite of the modern 6DoF games because of its rogue-like replayability, its crafting system that allows you to play the game the way you want to, and some AI that, while it could be smarter, does just enough to be dangerous if you're not paying attention. It has no multiplayer, but it never claimed to be Descent, so I don't expect it.

Take NeonXSZ. One of the few 6DoF games without inertial dampening (in English: your ship continues to move in the direction you moved it even after you stop moving in that direction), this game takes elements from puzzle games, action RPGs, and of course the 6DoF genre and brings it into an engaging environment where, again, you can play the game the way you want to. I didn't expect this to be Descent-like, and therefore was pleased with the polish of the game, as well as the action that came out of it.

And how about little-talked about Kromaia, the 6DoF bullet hell? This is about as far from the original Descent gameplay as you can get, because you want to kill as LITTLE as possible, or else the difficulty ramps up FAST. It's a different way to play a 6DoF, but it was still a fun game.

It seems the games that I have the LEAST expectation of being Descent are the ones I have the MOST fun playing.

Maybe I should cut my expectations short with these new games and take them for what they are, rather than having them try to be the old experience in new clothes, but I tell you what, that can be really hard to do.

Labels: , , , , , , , , ,

Tuesday, January 19, 2016
Report Card: 2015
Posted: 12:38:00 AM 0 comments
I often do a "Year in Review", but this year I thought I'd change it up a bit. Last year, in addition to reviewing what happened the previous year, I added some goals for 2015. This year, instead of just reviewing what happened last year and adding the goals, I figured I would also add in a kind of "report card", where I grade myself on how I did towards those goals from the previous year.

I'll be honest. These goals stayed with me all year long. When I thought about what I want to do, I compared that to my goals. Having goals I actually thought about has made me learn a bit more about myself than I knew before.

So, without further ado, here's the 2015 report card!

Music


2015 Goal: Complete and release full versions of "All In My Head" and "Paper"

There's no beating around the bush here, neither of these goals happened. In fact, I was musically silent for the first half of the year. I did, however, come out with three different pieces of music, but none of them were original works.

In 2015, I started a podcast with Dr. Zing and Morfod called the Self-Destruct Sequence Podcast, which is a podcast all about Descent. Dr. Zing kind of dropped off the face of the Internet a few months ago, but Morfod and I picked it back up late last year, and have been having fun with the episodes this year. I mention this in the music section because when we were putting the first episode together, we wanted to have some Descenty music, and I delivered in a big way.

Our title music, Self Destruct Sequence, is a remake of the level 1 music, while our outro, Mars Processing Sequence, is a remake of the level 8 music. Both had electronic elements, and two guitar tracks each that I performed myself. This is the first time I've actually been happy with guitar tracks that I've created, especially the lead guitar parts. Hopefully I can take my experience from this and translate that into better guitar tracks in my music in the future.

The third piece was something I couldn't get out of my head, a piano cover of the song "The Wight to Remain" by Danny Baranowsky, which is best known as the music to Zone 4 Level 3 in the game Crypt of the NecroDancer. This has always been a beautiful track to me, and could be the launching point of a piano-only soundtrack to the game, if I get so inspired to complete some day. I even put the song's score up on flat.io if you so desire to try to play it yourself.

So while I kept the dust off of my music, I didn't do what I set out to do. At all. I tried to work on "Paper" once, but couldn't get any inspiration for the one part I still don't have a working idea for. Maybe that will change in 2016, but unfortunately, this gets poor marks this year.

2015 Grade: D

2016 Goal: Complete and release full versions of "All In My Head" and "Paper". For real this time.

Coding


2015 Goal: Finish the updated roncli.com site

Well, you're looking at it, baby. I'm still quite proud of this accomplishment, and it really took a load off my shoulders last year when I completed it. It's even gotten a few updates since that fixed some bugs and added (and, sadly, removed) some features.

So with the main 2015 goal accomplished, what else have I done in 2015? A quick glance at my GitHub profile shows I've contributed to Descent's DXX-Retro source port (this was the mouse fix), and started a series of Descent 3 tools written in node.js, including the rebirth of Descent DSN. However, in recent months, coding's not exactly been a priority to me.

The main project I have going right now is getting Six Gaming's official website off the ground. It is going to be started pretty much directly from roncli.com with a Six Gaming theme. At first it's just going to be a static page with links pointing to most of our presence on social media. Later, it will include episode-specific links for the Six Gaming Podcast, and the final version will be a full fledged social site where people can come to find other people with whom to play games they enjoy.

So 2015 was good, and 2016 has a clear goal. Looks good to me!

2015 Grade: A

2016 Goal: Finish the Six Gaming site

Gaming


2015 Goal: Grow Six Gaming into a bigger and more general gaming community

So at the beginning of 2015, I had this great idea to make Six Gaming a big community, not just for World of Warcraft, but for all the games we play. Over the years, we found that many of the gamers in Six Minutes To Release enjoyed other games as well, so it made sense to want to cater to that while keeping the close-knit community we've created from the core members of the guild over the previous 7 years.

Two major events accelerated this goal to fruition. First, Showsan got the jump on me. When he returned from his service in the military, he came in and lit a fire under everyone. He basically rebooted the Six Gaming Podcast, gave it a new format and new life. Since then, we've added a ton of cohosts that bring their own unique perspective on the games that we are playing. The Podcast has stayed fresh and has been enjoyable because of it, and we recently completed our 100th episode, which we call... Episode 48. Don't ask.

Second, Warlords of Draenor happened. What a bad expansion! I would rehash what I've already written, but suffice to say that not much has changed, and on top of it we're looking at another 6-8 months until Legion, which will make a 12-14 month content drought, similar to the one at the end of Mists of Pandaria, and exactly what the devs previously said they didn't want to do. Add in their stance on flying, and I honestly couldn't tell you if I trust Blizzard to get WoW right anymore. Legion is their last chance to get it right for me, and until then I am probably going to be doing some different things.

Like Descent. Descent: Underground made it known that Descent still exists for a lot of people, and despite the issues they are having (a topic for a future blog post), I am genuinely excited for a release of a new Descent game, even if it's not by the same people who gave us the first three. Naturally, a new Descent game has raised interest in the original games, and Descent 1, 2, and 3 have all seen an uptick in activity.

Case in point is the Descent Champions Ladder. It went from 1,408 games played in the fall 2013 season, down to 938 games in spring 2014, and down further to only 504 games in fall 2014. At the end of that season, Descent: Underground was announced, and the spring 2015 season saw a massive ressurgance with 2,218 games played. The late 2015 season, which was only 3 months, had 1,416 games played, and not even 3 weeks into early 2016 we have 510 games played.

Playing Descent again has been awesome, and has inspired me to learn a new control scheme. I used to be all keyboard, and now I do mouse and keyboard. I play at the high bronze/low silver level on the DCL currently, but I feel I have a lot to learn about the game both mechanically and philosophically.

I've also been involved with the Crypt of the NecroDancer community, racing most recently in CoNDUIT 7, and will be playing again on CoNDUIT 8 on the 29th. I'm not that great, which is why I'm in the "junior" league, but it's still a whole lot of fun getting some competition in. I still need to complete story mode and an all characters run to unlock Coda (I have no false impressions that I will BEAT Coda, mind you), so there's still plenty of room for improvement. I'm mainly known for having the Bard Deathless world record at 112 wins, and have performed fairly well at deathless mode with a few other characters as well.

I've also done a ton of streaming on Twitch. While I've stopped playing League of Legends, I still stream things such as my DCL games, Crypt of the NecroDancer runs, and even some Sublevel Zero speedruns. Basically, if I play it, it ends up on Twitch at some point.

Gaming has become a central part of what I do. I play a wide variety of games, involve myself in the Six Gaming, Descent, and Crypt of the NecroDancer communities, do two weekly podcasts involving games, and stream many times a week. I don't see this slowing down in the near future, so the only thing to do in 2016 is embrace it.

I have plans to start a regular Descent-themed competition show on Twitch, and am most interested in growing my stream large enough to get partnered. I don't think partnering will happen this year, but I at least want to get started. I've played with some ideas for growing my YouTube channel as well, but nothing's really stuck, but I'll keep trying.

2015 Grade: A+

2016 Goal: Substantially increase my streaming presence on Twitch

Life


2015 Goal: Get back to the Bay Area at least once

I think I nailed this one, at least in text. However, my experience thus far has been... less than ideal.

So instead of taking a trip to the Bay Area, I actually MOVED out here. In October, I packed my things, drove West a few days, and settled into the Belmont area. Central to everything, I've done... nearly nothing since I've gotten here. Sure, I've ventured to Pier 39 in the city, finally ate some Iguanas down in San Jose, and have occasionally taken in some of the area's scenic routes, I've yet to really do something... defining when it comes to the Bay Area. Seriously, I've seen more of the Bay Area the last time Kathy and I came out here in February 2013.

This is compounded by the fact that many of the people I knew and hung out with here are gone. One of the reasons I gave for moving out here was to be close to people I knew and give myself opportunities to "get out" every so often. I have done that a grand total of zero times since I got here.

There have been several reasons why I haven't really capitalized on my new living situation. The first is that I work remotely, yet am wanting to work locally. My job in Houston allowed me to work remotely when I told them I was moving and giving what I thought was going to be my two weeks. While the remote working part of the job has been going okay, I know through my experience with Sift that this isn't something I want to do forever. I have been really slow on advancing this agenda, however.

Second is that I've found myself in somewhat of a funk recently. I can't really put my finger on why, just that I find that I don't have the energy to do a whole lot since just before Christmas. My focus has been poor in coding-related projects, and I don't really feel that I've "settled in" very well. I don't at all regret making this move, in fact I think it's the best thing I've done for myself in a long time. However, I need to really break out of whatever it is that's causing me to, for lack of a better description, lose time doing nothing.

So, yeah, I made it out here, but... what next? Well, the first thing is going to be transitioning to a local job. Even before then, though, I need to find a way to get more active again. I have a plan, it's just acting on it - or more accurately getting over what's preventing me from acting on it - is proving challenging.

I hate these lethargic, stagnant days. I've had them before and have gotten past them, and have no doubt I will again. But the time until that happens can be downright depressing some days.

Oh, and there's this house thing. Yeah, we want a house. Soon.

2015 Grade: C

2016 Goal: Get more active, find local employment, and begin planning moving into a house

Overall


I've had an up and down year for sure. I recognize that my strongest point currently is with gaming, and recently that has been the outlet I go to in order to unwind and have a good time. I also find enjoyment in coding, but need to find a way to motivate myself to finish projects like I did with roncli.com. While my music still remains on the back burner, I am doing my best to keep sharp and avoid going flat... okay, I'll stop with the music puns! I recognize that I need to make some changes in order to improve my quality of life in my new surroundings, and am hoping that I can get those taken care of quickly.

2015 Overall Grade: B

Labels: , , , , , , , , , , , , ,