5,481 reputation
11229
bio website vyznev.net
location Helsinki, Finland
age
visits member for 3 years, 4 months
seen Dec 16 at 0:11

I'm a PhD student in biomathematics, working on stochastic individual-based models of evolution in spatially structured populations. My other interests include cryptography, programming games and puzzles, photography and graphic design.

I'm the main author and maintainer of the Stack Overflow Unofficial Patch (SOUP), a user script for browsers with GreaseMonkey-compatible user script support (Firefox, Chrome, Opera, possibly Safari) that fixes or works around a number of outstanding issues with the Stack Exchange user interface.

I tend to answer a lot more questions than I ask. Some answers I'm rather proud of:

CC-Zero Please consider any (original) code I post to Stack Overflow and other Stack Exchange sites to be released under CC-Zero unless stated otherwise. You may do whatever you want with it and don't have to credit me in any way, although of course that would be nice.


Jun
4
answered Technical differences between square and hexagon for a grid?
May
25
comment Visual effect with dark overlay gradient surrounding the center of the screen
+1. In the second screenshot, it might also just be a non-uniform lighting effect. Hard to tell with a still image and the cartoonish shading, though.
May
21
comment Networking for Real Time Strategy games
@MooingDuck: Good point. In fact, I'd suggest transmitting the current RNG seed at every turn, so that RNG desynchronization is immediately detected. Also, if your UI code needs any randomness, don't pull it from the same RNG instance as used for the game logic.
May
21
answered Networking for Real Time Strategy games
Apr
25
comment Can I prevent diagonal movement from exploring more of the map?
@supercat: True, but that would leave the E, NE, E, NE, ... sequence noticeably less efficient for exploring than straight orthogonal / diagonal movement, which might not be desirable either.
Apr
25
awarded  Nice Answer
Apr
23
answered Can I prevent diagonal movement from exploring more of the map?
Mar
20
answered Midpoint Displacement 1D - How to properly reduce my random number range?
Mar
11
reviewed Approve How do you prevent AABBs from passing through each other?
Mar
11
awarded  Custodian
Feb
22
comment Demo (and real game) Protection
One more trick would be to hardcode the MD5 / SHA hashes of each individual demo level file into the demo version. This has the advantage that, whereas just changing a single hash / signature key is fairly easy with a hex editor, increasing the number of hashes (to increase the number of playable levels) is somewhat trickier, at least if there's lots of other data following them.
Feb
2
awarded  Good Answer
Jan
24
awarded  Revival
Jan
21
awarded  Nice Answer
Jan
7
comment How does A* pathfinding work?
This answer could use a mention of what makes a heuristic admissible, in the sense of guaranteeing that A* will find the shortest path. (Briefly: To be admissible, the heuristic must never overestimate the actual distance to the target. Non-admissible heuristics may sometimes be useful, but they can cause A* to return suboptimal paths.)
Jan
5
comment Why don't we use octogonal maps instead of hexagonal maps?
3D does have a regular analogue of the hex grid, namely the FCC lattice, whose unit cell, the rhombic dodecahedron, is a Catalan solid (i.e. all its faces are identical and symmetric, even though not all the corners are). Haven't seen many games using it, though.
Dec
26
comment Controls: Rolling on a ceiling
Add some practice levels?
Dec
22
answered Trying to project a point onto a cubemap
Dec
22
comment Trying to project a point onto a cubemap
Do you want the point to stay stationary on the screen, or stationary with respect to the environment projected on the cubemap?
Dec
16
comment How do I synchronise real-time moves of players on a grid?
@DMGregory: That would still be forgeable, though, although not as easily -- a hacked client could pretend to be on a badly lagged connection by holding messages in a buffer for a while before sending them. This would allow it to edit the messages while they're in the buffer, effectively pre-dating the changes.