RSSAmplifier

Blog

Blog on johnsto.co.uk

johnsto.co.ukRSS feed ↗134 posts

Latest posts

beebPlayer

On the evening of Friday 14 May 2010, I received a PDF from the BBC. Eighteen pages of screenshots, trademark registrations, and a demand: remove beebPlayer from Android Market. What I had started as a Python script had become an Android app installed on over 50,000 phones, but the BBC’s lawyers were somewhat less impressed. beebPlayer was born from scratching an itch. Three years earlier,…

Blackholing My Email

In my own experience, it’s not particularly often that you find yourself asking your email provider to blackhole your primary, personal email address. But in 2002, a unique series of turn-of-the-millennium events had me doing exactly that to prevent our broadband account from being terminated. Back then, I was the owner of dv@btinternet.com - proudly so, as all other acceptable variations of…

2024 Dev Notes

A review of the software and dev tools that I couldn’t have coped without this year. ASDF ASDF is a staple of my shell environment since 2023 and has ensured access to bleeding edge (or at least recent ) versions of tools across a variety of environments and distributions that don’t push updated packages out quite as fast as I’d like. Somehow - despite how much I rely on ASDF - I…

Noclip Documentary

I had the honour to be invited by Noclip to take part in a documentary about Dust 2 - it was great fun rewalking those memories, and the crew did a great job marrying it up with relevant footage! Thanks especially to Jeremy for putting me at ease and asking such well considered questions. (I promise to speak a tad slower and into a better microphone next time!)

25 Years of Counter-Strike

Embarrassingly, I nearly missed the news that Counter-Strike has turned 25. Twenty-five!!! It’s fair to say I didn’t expect CS to be as big as it has become. I didn’t actually start playing until beta 2; the first one crashed every time my character took damage from anything (most memorably from the fire in cs_desert ) so I’d mentally written it off and may not have…

Dockge

I’ve recently moved a bunch of containers off my Raspberry Pi to an HP EliteDesk. For extra challenge points, I also decided to drop the venerable combination of Portainer and Nginx Proxy Manager for something else. Principally, all I care about is being able to easily self host various web apps on my home server, make them accessible to the outside world, and in some cases gate them behind…

Configuring LXC GPU Passthrough

I recently bought a HP Elitedesk 800 G4 off eBay. Bearing an i5-8500T with a 35W TDP, it should be a reasonably low-power solution to deal with the more resource-intensive applications my Raspberry Pi 4 was struggling with - such as Immich . I decided to try Proxmox (8.1) for this box - rather than my usual go-to of Fedora - and also ventured into LXC for the first time. Knowing that Immich now…

Updating Fedora on Raspberry Pi

I use a Raspberry Pi 4 running Fedora 38 for home automation and a few small other services. Last week I wanted to update it to Fedora 39, but encountered a surprising problem - when DNF rebooted to apply the changes offline, the upgrade would not be applied. dnf system-upgrade log revealed the packages were failing verification due to signature is not alive errors: Mar 11 00:02:38 spud…

Comments

Dreadful news, everyone. There’s an insidious new computer virus on the loose that has only one target on its kill list - your precious, precious source code. As it rampages its way across the world, it scrambles anything that looks like a programming language - and won’t terminate until every line, token and delimiter is muddled up. (Yes, that includes Brainf*ck , and isn’t even fooled by…

de_dust_infinite

I’ve been wondering for a little while how one could generate new Dust-style maps. Map generation itself isn’t new - generators that produce acceptable results have existed as far back as Doom (see ObHack , which is based off even earlier work) - so this isn’t a novel idea by any stretch. Witnessing the progress made with AI-driven techniques to create ’new’ artwork ,…

Netlify

tl;dr: if you’re reading this, then everything went exactly as hoped and my website is now served via Netlify. Only carry on reading if you care about the why and how or desire useless historical details about this stuff. This site has gone through a few changes over the past 19 years. Initially I wrote it all in PHP, with a MySQL database serving up XML-formatted content that was…

Depressurising

The exact moment I gave up my teenage ambition of becoming a level designer is seared into my memory. Half-Life’s unassuming arrival was nearly a year away, and Counter-Strike’s conception even further. Quake 2 was the game of the moment. I was plummeting towards a murky pool of water. Moments earlier, I had collected the recently-respawned rocket launcher on the outskirts of Q2DM1 and…

On the origin of colour spraypaint

(original link)[https://web.archive.org/web/20000815070055/http://www.planethalflife.com/davej/]

51 Half-Life Editing Tips Errata

20 years ago to this day, I published my 51 Half-Life Editing Tips onto the Valve ERC. It contained 51 nuggets of advice for keen level designers who were new to making Half-Life maps. What the article didn’t mention is that I, too, was new to making Half-Life maps; Half-Life itself had only been released a few months prior and, at 16, I certainly didn’t have quite enough experience to…

3D Printing

Earlier this year, desperate for a new toy, I purchased the cheapest 3D printer kit I could find, in the hope it would give me hours/days/weeks of fun (a) trying to make it work at all, and (b) trying to make it work well. I settled on the Creality Ender 2, a 3D printer that’s delivered in kit form and requires (a little) assembly to get it going. I chose it over the alternatives primarily…

A Third Dust Map

The CS:GO YouTube video machine 3kliksphilip has put together a wonderful video about the third Dust map, aka de_dust_pcg. Have a watch: It was quite nice to be reminded about this map as it turns 12 next year. I’d originally made it as part of a two-part tutorial for PC Gamer, so it never quite got the attention and iteration that Dust and Dust 2 benefitted from. In fact, I’d honestly…

Doom School

Wolfenstein 3D, if you recall (and I hope I’m not spoiling the ending for anyone who hasn’t yet finished this 23-year old game), ended with B.J. escaping the dark, gloomy Castle Wolfenstein by running down an open corridor. A corridor that, at the far end, revealed a glimpse of the bright blue skies and rich green grass outside. Freedom. Half way down the corridor, the game fades to…

Barcelona

Back from a week in Barcelona, here are my trip notes for those that asked. Accommodation Staying in Barcelona, being a major European city, is not as cheap as some other destinations. So balancing the books for a relaxing holiday was a bit tricky. In the end, we ended up staying in a B&B for the majority of our time there, then switching to a hotel for the final few days. So the first 5 nights…

Go Package, Go

One of my favourite aspects of Go is the lively and growing ecosystem for third-party libraries, and I’ve ended up using absolutely dozens and dozens for little projects here and there. Compared to other popular languages, Go has made it easy to write packages in a consistent style that are easy to read, use and contribute to, by virtue of standard tools like go doc , go fmt and go lint .…

Why I quit level design

On the Splash Damage Twitch stream the other day, someone posed the question, “ Dave, what made you quit level design and become a programmer instead? ” This was tricky to answer - I didn’t remember quitting level design, nor did I do so to become a programmer. I’d being doing both long before either became my career. The fact is though, I haven’t designed a map for…

Just Go Things

I’ve been using Go for a while now, and really rather like it. However, the web doesn’t need another article fawning over why Go is better than language X or why it’s inferior to Z - there are plenty of those. I’m not writing another one. The thing is, I don’t think the Go language is its strongest selling point. Python, Rust, even JavaScript have a number of superior…

Christmas Countdown

With Halloween completely over, done and dusted for another year, spooky avatars and haunting usernames firmly put back into storage, Twitter was feeling a little less scary than usual this morning. Fortunately, I found a solution that is guaranteed to terrify everyone who dares nudge against my Twitter feed: Yes, now each avatar-laced tweet of mine will advertise the number of days remaining…

Cobbles and Castles

The map after Dust was always going to be a bit of an odd one, and that’s pretty much what happened with Cobble (or ‘de_cbble’ or ‘Cobblestone’ depending on who you talk to). Originally, Cobble wasn’t a Dust-ish take on an English farmhouse-esque villa-ish collection of buildings. I had wanted to make a castle. An enormous castle. A haunt for tourists, and…

Function Timeouts in Go

Recently I was working on a Go program that kept blowing up as I cranked up the test load but was struggling to determine why. After spending far too many hours trying to track the issue, I found it to be caused by a slight misunderstanding of how to implement function timeouts efficiently. I was using a third-party Semaphore implementation to protect access to a constrained resource. The issue…

Mission Not Accomplished

I’ve missed blogging. As much as I enjoy using Twitter , Google+ , Reddit , Hacker News et al, nothing quite comes close to being able to devote an entire page to a thought, knowing the content is actually mine rather than the product of another social news machine. So the bloggy thing is back. Changes! No more comments The web has moved on since I started johnstoblog nearly 10 years ago. As…

Mission Accomplished

This is the bit where we end. Over 100 or so posts, and that’s all from me… it seems blogging about level design isn’t quite as easy as I hoped it would be. That said, it’s been great fun. It also demonstrated to myself how difficult it is to convey certain level design principles and practises. Finding words and diagrams proved far trickier than I imagined. I guess that…

Cruelneth Returneth (part 2)

Ok, this one’s a bit mean… Lord uNsaIN The Second I first annoyed uNsaIN on April 24th , where I said his map ‘ol_bunker’ had an unoriginal name and was “another bunker map.” I stand by this. You see, not a lot has changed. Sure, it’s a little nicer looking - the crazy slug-like bushes have been removed - but it still reminds me of John Major; grey and…

Cruelneth Returneth (part 1)

‘Cruelness’ has returned, but with a slight lisp. Today’s casualty: de_strata Kevin Anderson (The Wiser) Kev The Wiser’s original attempt to overthrow Dust was documented on April 18th . In the following 4 (FOUR?!!) months the cretin ignored my layout advice, and instead focussed on making the map look like a cheap clone of that ‘Nuke’ map I keep on hearing…

Cruelness returning...

Just a quick request to anyone who had their map featured in the ‘Cruelness’ series I did a few weeks back: It’s time to see the aftermath! So, if you want to be featured, please send me another e-mail (website at johnsto dot co dot uk) with some screenshots of what happened and any other comments you have (like how mean/wrong I was.) I’ll then try to be double-cruel and…

Preachin' Day 5

Last one! (Note to self: add confirmation for ‘delete post’ button…) Lighting means shadows too Lighting is not about making sure everything is perfectly clear and visible - if it were, we could make everything bright to start with. Lighting is about making the environment look convincing, and changing how the player perceives different areas of the world. It’s about…

Preachin' Day 4

Don’t model with brushes Some things are better created with brushes, as part of the world. Others are best modelled-up and added as a prop or entity. Typically, the more detail something requires, the greater the likelihood it should be a model. If trying to create something intricate is too difficult with brushes, then it’s a prime candidate for a model. Understand that the engine…

Preachin' Day 3

Don’t force it There are times when a change has to be made, but making the change will be tricky because it’s being retrofitted to existing geometry. The temptation is to force the change in with minimal alteration - this often results in brushwork doesn’t quite fit, or becomes very untidy. It’s key to remember that it’s generally easier to delete’n’add…

Preachin' Day 2

Design is everything Without a good design, your map is essentially wasted - unless that was the whole idea. You might have the prettiest map in the world, but if it turns out to be less fun than eating wooden spoons, then you’re better off investing in a wooden spoon factory. Appearance is everything You could have the best CS defusion design ever known to man, but if it looks like an…

Preachin' Day 1

Hooray, a week of me pouring out my brain about stuff! Level Design vs Mapping Don’t confuse ‘mapping’ with ’level design’ - my loose definitions are as follows: Level design is high-level: it refers to determining how the map should play, what sort of problems/solutions it will require, and general appearance/design issues. Level design is done on paper. Mapping is…

Doodle-storming

Now, I was going to write about something dull like how to get the most out of level geometry, but I had a far better idea before I got the first word out. A week or so ago I had a little idea for an HL2DM map, pretty much following the same rules as football (aka ‘soccer’), so nothing very special there. I drew up a little plan, which consisted of one long stretch of road, with a…

Low-level 'design'

In the past I’ve written quite a bit about high-level level design, specifically, getting a good overall layout for multiplayer maps that isn’t too convoluted nor over simplistic. What I haven’t touched on is the more low-level part of this process, where an area from this overview is taken and changed into something much more interesting and enjoyable for the player. An area may…

How to topple Counter-Strike

Everyone who wants to make a mod wants it to be a popular as Counter-Strike. They want the fame, the fortune, the fans, and/or the flames. That’s why searching on Google for “hl mod” gives 5 million results, and 95% of the mods listed are touting themselves as “better than Counter-Strike.” Below I reveal the secret “10-step process” that these CS beaters…

Texture-tastic diagrams

I was looking for some textures earlier today, and came across a few of the original files I used when creating Sienna. Creating textures sounds like witchcraft sometimes, so I’ve put together a massively-oversized diagram showing how I put some of them together and the bits that went into their making. It’s only really this size so I can show off my amazingly beautiful, hand-crafted…

Playing by the rules

Many of the principles of game design rely on consistency - if a distinctive yellow-coloured barrel explodes when shot, players will expect this to be the same for all identical yellow-coloured barrels and will hopefully learn from it. Moments like this are especially important when the stakes are high - if a rule like this is broken later on in the game, exactly when the player needs it, they…

Giving the player purpose

I’ve been playing more TFC lately, and whilst it may not have the bells and whistles of DoD:S or CS:S, it’s still remarkable fun. What surprises me is how despite being the first true multiplayer class-based game, and how despite lots of games and mods trying to copy it, none have ever succeeded in being more entertaining. A fun aspect of TFC is the choice of classes and approaches…

Rabbits, Carrots and Werewolves

Consider a rabbit. Picture yourself holding a carrot in front of it. Note how the rabbit heads towards said carrot. Show the rabbit a second carrot and it will continue to eat the first. Only once it is done will it try to get the second carrot. Move the carrot away and the rabbit will follow. Move it too far away and the rabbit will stop. Add a werewolf between rabbit and carrot and you’ll…

Cruelness... the end!

Ok, over the past 4 weeks I’ve written about 11 maps whose screenshots were sent to me. I’ve pointed out features I like and flaws I didn’t like, potential problems and possible solutions. It was fun, although not nearly as mean as hoped. Next time I’ll have to be extra cruel and merciless. The maps featured were picked to pick as broad range as possible, to prevent…

Cruelness (part 4-ish)

Much later than I anticipated, so I’m gonna get this up and posted while I can. I’ll do the final one next week now (hopefully…) then normal service can resume. Probably. Paul ‘Neat and Tidy’ Schmur This map is called de_parkade. Good start. First impressions: it looks good. Second impressions: not so good. I’ll cut to the chase: it looks fake. I can’t…

Im**rsiv*nes*

Where I live is quite industrialised. Despite being a fairly small town, it has many buildings and warehouses dating back a hundred or even two-hundred years. Big, brick buildings, some amalgamated onto modern processing facilities and others left abandoned. Some of these buildings are pretty huge considering their age, many floors high and a good hundred or so metres long. Some are longer, or…

Cruelness (part 3)

Another two this week. I keep writing too much! Sylvain ‘something something’ Douce This is an odd one. This is partly because it’s a map for Warsow , a game I’ve never heard of, and partly because said game is a ‘fast paced FPS game’ based on Quake 2, which I have heard of. Hell, I mapped for Q2 for years before HL1 arrived. It was brill. Very different to both…

Cruelness (part 2)

Off we go again! Not too cruel this time, focusing on theme, style and architecture. Mikael ‘I have no’ Surname This is an interesting one, mostly because I think it represents the stage that a lot of mappers find themselves at: they know the tools, and they have a good idea of what they want to have at the end, but the bit inbetween is where it all goes pearshape. Judging from the…

Cruelness (part 1)

My request wasn’t a complete failure! I got screenshots! And pleas! And loads of exclamation marks! Whooray! I’ll do some today! Then some more in a few days time! I wrote too much today! Exclamation! etc. Chuck ‘Chuck’ Wilson First off, the dim-witted Chuck Wilson, who mentioned in his e-mail, “feel free to rip in.” He sent a selection of ugly and distasteful…

Copy'n'paste

One of the benefits of working on HL1-based maps was that it took an order of magnitude less effort and less detail to create an area. Case in point, all of Dust was basically created from two brushes that were duplicated over and over and then tweaked into position (these were the surrounding walls with the trim at the top.) The roofs all over Cobble were the same. With Dust 2, I was even…

Something a little different...

Ok, this should be fun. I want people to do is send me screenshots. Send me a couple of screenshots from your map, maybe of an area you’re proud of, or an area you’re not. An area you’re unsure of, or something you feel is so unique and amazing that the second I see it, my head will kerplode in delight. What I’m going to do is as many as I can (if I get any), and for each,…

Big airy bits

Sometimes, I can’t help but see something on TV and want to recreate it as a CS map. A few seconds thought and suddenly I’ll be visualising what something would look like once all mapped out, textured and populated for Counter-Strike. It happened again this weekend whilst watching Spooks. The area below caught my eye: I have absolutely no idea what this place is in real-life, but in…