Introducing: Nuclear Throne Together

Perhaps you've already heard that I've been recently developing a mod for the current version of Nuclear Throne. And not "just" a mod, but quite an impressing one:

  • Adds Steam-based online multiplayer support to the game.
    That means invitations, public game list, and no port forwarding.
  • Replays
    Easily record and review your runs to learn from mistakes.
    Or even attempt to correct them by dropping into the game at any point of a replay.
  • Better coop
    Nuclear Throne never was a coop-centric game, and thus coop mode didn't receive enough attention, remaining ridden with various small bugs. This mod changes that, fixing pretty much every known issue, and giving coop some much-needed polish.
  • Bugfixes
    While fixing coop-related bugs is an obvious choice given the scope of the mod, I didn't stick to just that, and also fixed a handful of other issues with the game. Bugged "crown vaults"? Fixed. Game hanging in certain areas? Fixed. Occasional crashes during an intro to an important boss fight? Also fixed. The full list is long (200+ items) and available in the "readme" document.

So it works, it's nice, and you can download it right now.

Or continue reading on process and potential questions.

Continue reading

Changing scroll speed in Firefox using CSS

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam fringilla, turpis eget vestibulum vulputate, enim orci tempor enim, vel consectetur ipsum orci sit amet enim. Aliquam nec viverra justo. Pellentesque viverra cursus quam eget maximus. Nullam iaculis mauris leo, et pharetra nisi ultricies in. Mauris varius hendrerit nulla, quis aliquet sapien. Pellentesque eu ultrices nibh. Nunc mollis porta tincidunt. Praesent risus nibh, vestibulum eu gravida et, dignissim eu velit. Mauris quis iaculis mauris.

Nulla facilisi. Suspendisse malesuada tortor sed augue tempor sodales vitae vitae felis. Suspendisse urna nunc, luctus sit amet libero et, vestibulum pellentesque sem. Vivamus mollis felis id nisi ultricies, vitae lacinia est egestas. Pellentesque quis quam non dolor ultricies pulvinar. Nunc sodales diam tristique pharetra vehicula. Fusce consequat eu turpis vitae consequat. Ut aliquet sem felis, vel venenatis mi commodo a. Donec volutpat egestas enim, at vestibulum ligula vestibulum eget. Nunc facilisis ex felis, et fermentum arcu pellentesque sed. In molestie eros nec metus molestie iaculis. Cras eu sem consectetur ex consequat blandit at auctor lacus. In finibus dolor vitae leo dignissim, non egestas dolor consectetur. Vestibulum sit amet sem sit amet nulla dignissim rhoncus sed nec est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam fringilla, turpis eget vestibulum vulputate, enim orci tempor enim, vel consectetur ipsum orci sit amet enim. Aliquam nec viverra justo. Pellentesque viverra cursus quam eget maximus. Nullam iaculis mauris leo, et pharetra nisi ultricies in. Mauris varius hendrerit nulla, quis aliquet sapien. Pellentesque eu ultrices nibh. Nunc mollis porta tincidunt. Praesent risus nibh, vestibulum eu gravida et, dignissim eu velit. Mauris quis iaculis mauris.

Nulla facilisi. Suspendisse malesuada tortor sed augue tempor sodales vitae vitae felis. Suspendisse urna nunc, luctus sit amet libero et, vestibulum pellentesque sem. Vivamus mollis felis id nisi ultricies, vitae lacinia est egestas. Pellentesque quis quam non dolor ultricies pulvinar. Nunc sodales diam tristique pharetra vehicula. Fusce consequat eu turpis vitae consequat. Ut aliquet sem felis, vel venenatis mi commodo a. Donec volutpat egestas enim, at vestibulum ligula vestibulum eget. Nunc facilisis ex felis, et fermentum arcu pellentesque sed. In molestie eros nec metus molestie iaculis. Cras eu sem consectetur ex consequat blandit at auctor lacus. In finibus dolor vitae leo dignissim, non egestas dolor consectetur. Vestibulum sit amet sem sit amet nulla dignissim rhoncus sed nec est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.

(live demo - compare scrolling speeds in Firefox)

For quite a while now, a thing that bugged me in Firefox was the inconsistent scrolling speeds across the pages. On some it would seem just fine, while on others you could have a list that scrolls at a ridiculously slow pace. My searches on the subject were inconclusive - while, of course, you can regulate the scroll speed via scripting, that definitely wasn't the case on all these pages.

The culprit, as it turns out, was pretty simple - while most of the browsers scroll the elements for an amount of (screen) pixels per key press or mouse wheel change, Firefox scrolls the elements based on the their font size. Which, on one hand, makes sense, but there's a catch - it's based only on the scrolling element's font size. Content' font sizes are ignored.

So that is why you get odd scrolling speeds - people most often set up styles for the actual content (paragraphs\labels\etc.) and not the scroller\container element.

Luckily, this also means that scrolling speeds can be adjusted easily - you change the container font-size to (100*X)%, and then add a rule to change it's child element sizes to (100/X)%:

Continue reading

C#: Get current keyboard layout\input language

Get current input language on Windows with C#

On some occasions, you may want to get a "global" input language - that is, the keyboard layout used by the current foreground window\application\whatever. Basically, simulating the behaviour of the language panel on Windows.

The common use cases are on-screen keyboards, fullscreen applications, and widgets.

While I wasn't able to find a premade function that get this particular thing during my searches, it turned out not to be too hard to assemble:

Continue reading

Adding hotkeys to switch to N-th screen on Windows

Keyboard shortcuts for switching between desktops on Windows

For quite a while, the multi-screen setup on my desktop was powered by Synergy.
Which, I should say, is pretty neat, aside of it's complete unwillingness to send non-English keystrokes to additional devices.

Slightly more recently I've switched to using a more conventional dual-screen setup.
Which, of course, is more convenient (being able to drag a window to the second screen without having to sync the related media first), one thing would seem to be missing — the "hotkeys".

Moving the mouse over an entire monitor (or two) only to click something and move it back is not all that exciting, and Synergy's keyboard shortcuts for moving the mouse to N-th screen (while remembering the old position for returning) were a welcome feature.

Windows, unfortunately, does not seem to have any "built-in" keyboard shortcuts for swithing to a given screen, but that can be easily fixed with help of an AutoIt script:

Continue reading

C# + .NET: Minimalistic asynchronous UDP example

Recently I have been experimenting with networking in Unity3d.
As you may know, there are various systems to aid you with building networked applications in Unity, ranging in approaches and capabilities.
However, if you are more familiar with the regular socket APIs, or just need to port a bit of existing code, you would probably rather have a couple of simple methods to send and receive data.
So here's just that, using .NET's System.Net.Sockets.UdpClient to asynchronously receive and handle data as it arrives:

Continue reading

Few notes on SolidFiles

SolidFiles: File hosting without the bullshit.
— company motto. TL;DR: more like, with some bullshit.

For a while now I spend my time correcting old links to my examples hosted on SolidFiles whenever I spot one. Mostly they are on forums or my blog and I can correct them relatively easily. Sometimes I cannot edit them and they just stay like that.

Since it's no fun, and I do get complaints about leftover links somewhere every now and then, I've thought that I may as well make a small post highlighting my concerns.

Continue reading

Introducing: Spelunky SD!

If you've been following me on the social networks, you may already know, that for the past three months I was working on a Spelunky Classic modification called Spelunky SD. It is a pretty broad project, implementing a number of fixes and improvements to the original game, and, most importantly, adding a 2-player cooperative online game mode.
Today, I am proud to announce the first public release of this project.
And this is a blog post about my experiences.

Continue reading

Simple GameJolt API plugin for Construct 2

GameJolt API plugin for Construct 2

As you may know, there's a program called Construct 2. You can make games with it. While I'm generally not a huge fan of built-in scripting system (scene editor and idea of behaviours are pretty great though), some people make nice games with that.

Also there's Game Jolt. Game Jolt is a site you can host your games, devlogs, and related media upon. It's great. I'm not sure which of Saturn's moons you are living on if you haven't heard of it by now.

Then when two come together... you can upload Construct 2 games to GameJolt, but you cannot use any of it's quite so nice Game APIs (such as high score tables, trophies, data stores...), since, well, noone made a plugin for that so far.

Seeing that, I thought that I may as well fix that part (a bit). So I have devoted a bit of time over few days and have made a plugin that provides basic functionality, such as sending scores and trophies. Everything is pretty straight-forward and easy to get hang of.

Installation is simple also - download ZIP file below, and unzip contents (a folder called "gamejolt") into HTML5 plugins directory (Construct 2\exporters\html5\plugins) in your Construct 2 installation. Upon next launch of program, GameJolt plugin will be available in "Platform specific" category alongside of Kongregate, Scirra arcade, and other items.

That's pretty much it, I guess. Download links are below. If there are any questions, feel free to ask.

Download ZIP Example (CAPX) View Demo

Update (August 2014)

Extension has been updated to include additional functions. So have been links in this post and files on GameJolt.

Minecraft: A small large bug in Lockette and LWC

Image of a stereotypical happy chest protected by Minecraft' Bukkit' Lockette server plugin

Lockette. What a wonderful server-side plugin for Minecraft' Bukkit servers. Being a plugin that allows players to protect their chests from being opened by other players, it is often the heart of survival-oriented servers, and the primary protection method for players. Unlike some other Bukkit protection plugins, it doesn't give you up if your database goes down or something else breaks. So it would seem that it would mostly prevent players from stealing items from each other...
Well, currently it does not.
Nor do some other plugins. This post explains how and why.

Continue reading