Spokes and Hubs

Firefox is extremely annoying using Hubs in fullscreen. Open a tab, type about:config as location, and set:

full-screen-api.warning.timeout: 0
pointer-lock-api.warning.timeout: 0

This time I did the tutorial for Spoke—which you should absolutely sit thru, and try out as you go—and then made a scene based on the Material Test. Well, first I tried to edit the cafe, but it turns out that's a single model with 80K polys, not editable. Pity.

So you can make a scene by adding items from a library, Architecture Kit has most of the building blocks you'd want, mostly in 1x1 to 4x4m segments, and a small palette of industrial textures.

Google Poly and Sketchfab have hundreds/thousands of items to drop in.

Unfortunately, while you can upload your own textures, you can't put them on any object, they're just images. The best I've found for now is to just lay it down like a carpet, 0.01 above a flat surface so there's no z-fighting. Works but obviously stupid. The actual workflow is apparently to clone ArchitectureKit, edit it in Blender (oh fuck), upload.

Not a bad toybox, not as good as Second Life, Garry's Mod, or Unity, but usable, and a lot cheaper (paying SL $1 per 25 images sucked giant balls until later I made it back 1000x by selling things and coding services).

The Spoke controls continue to be awkward, and often contradictory to Hub's, but I got used to them.

There doesn't seem to be any way to select or group multiple objects and apply changes to all of them, except translation, rotation, etc.; texture remapping is kind of a pain. And there's no texture offset field, so if your objects aren't full-sized and don't line up exactly, you can't make them fit. Don't use hex or tile patterns on such objects, I guess, or hide the seams under carpets.

After a bit of work, mostly changing textures but adding some trim, adding a doorknob, fixing misaligned blocks, I got a slightly better version of their demo, hit Cmd-S to save (in Spoke), then Publish to Hub. Which takes >1 minute for a tiny default scene.

mozillahubs-material1

mozillahubs-material2

So starting over from the watery caldera template, and a "forest" model from Poly, I'm building up a dark twilight castle, we'll see how that goes.

Trying out Mozilla Hubs

  • Mozilla Hubs is a VR/3D chat room, sort of like IMVU, Second Life, etc, except semi-private instances. That should be quite interesting. It doesn't need a client, it uses the browser, so I opened it in Firefox, assuming they're favoring their own. Whoo, listen to those computer fans, this thing runs hot, to get me 30-45 FPS (admittedly on a 5K iMac…)

It uses a horrible no-password email-link token login flow. Almost just stopped right there. I have a password manager, I'm fine with entering long passwords; I don't like opening email every time I come to a site.

Picking name and avatar seems persistent, but the avatar choices are either box-headed robots, round-headed robots, or super creepy human busts on floating buttplugs. I did eventually find a Bender avatar, so that's sorted for now.

You start in a tutorial on a terrible little "River Island" with painted-on water. It took me a while to realize you can create and edit objects you place, but the "stuff" in the room is created in a world editor and you can't edit those while you're in the scene. Nothing can really be interacted with, you can't sit, but it doesn't matter because you don't have a moving body to animate. 1990 called and wants its VR back.

Controls are weird. It does WASD, but Q/E rotate you by 45° per tap, left-mouse drag turns you, right-mouse drag sets a destination, which is backwards from every MMO & FPS. Shift sprints, which annoys me since Minecraft has shift=crouch, ctrl=sprint, but whatever. Flight is G or /fly in chat, to go into no-clip flying mode, which can be disabled by the room's owner. Tab or space open a GIANT emote bar, which is frustrating since holding space is also how you edit items. I have to back way up to see the popup menu over the giant emote bar.

Hamburger menu, Change Scene lets you pick from quite a lot of worlds. Some you can bookmark/copy to "My Scenes", some you can't, and I don't know why. The scene list doesn't keep your place, each time you open it, you start at page 0 (actually, all pages say "0"; so you're just paging forever with no idea where you are).

Scenes I've liked so far:

  • morning dew: Nice open café.
  • Atmosphere Lounge: Cool cathedral floating in the void, but can't bookmark it.
  • Viewing Room: Nice little basement room with sofa.
  • Wizard's Library: World of Warcraft-y cute tower with two levels and little nooks.
  • Mad Scientist House: Rick & Morty's house. Not every room is detailed, but the doors are pass-thru.
  • TheNightClub: Dark hallway, dance floor, and stage. Tastefully black and purple. Seems useful.

But many others are weird models with no interiors, and almost no place you can walk. I've seen one scene so far that had sound effects, so it's possible, just nobody else bothered.

I'll probably go back in and try making a scene, and then make it permanent(?) and see how the user interaction is. I'm not expecting much given these terrible avatars, but world-building is fun.

SteamVR Drops Mac Support

Now, that's just their VR headset, which is an extremely low-volume, 1% of the market gadget; VR's kind of awful in practice, but it keeps being "useful next year" for the last 40 years, and someday it'll be right. Steam as it is, >50% of the games I look at have a Mac version; it's not dead yet, but it definitely smells bad.

I blame Apple and their terrible support for gaming, in fact overtly hostile attitude. They like the PR opps at WWDC, and they like taking 30% gross profit of gachapon/IAP ripoff games made by Chinese clone factories, but never do anything after that, never provide game dev support on the platform, or put gamer GPUs in common hardware. They do not hire gamers or game developers, and they fired all the engineers in upper management, so it's just sales weasels left. And then killing 32-bit app support in Catalina just put a knife in any classic gaming.

The Mac used to be fun, a great desktop UNIX workstation which could also run a fair amount of games. Now, nothing works.

Elder Scrolls Online on the Mac is a pain in the ass these days, about half the updates make your camera spin out of control because ZOS doesn't have a Mac developer or any testing, either, they just rely on a cross-compiled build and push it out.

The suggestion to use Windows Boot Camp is just a giant middle finger, but what else are you gonna do?

Well. Given my plan to switch my workstation to FreeBSD when Mojave is EOL, I may accelerate that to this year, and have a partition for Windows just to play games. Which is stupid, but there you go, this is the dumbest, worst decade already just 4 months in, so why wouldn't computing be as bad as everything else?

Certainly anyone who uses Windows to try to do anything productive is… well, more masochistic than I am. It's just unbelievably awful and un-designed. I have a VirtualBox of it that I use for some testing, and it's like a 10-year-old read about CP/M, windowing systems, and bad middle management systems like stack ranking, coded it in BASIC and C, and then billions of dollars of business software and games were run on it. No part of that is a good idea.

Linux is so unbelievably awful; it's a half-assed server or embedded system, but not engineered for safety and reliability like a real UNIX workstation, the desktop is even more amateurish, and "business software" for it is comically bad. I'm not going to do that for a few half-working games.

But here we are. If I want to play games other than Animal Crossing, I suck it up and run a garbage OS as a partition.

Animal Crossing: Minecraft Edition

Finally got my town rating up to ★★★☆☆, K.K. Slider to visit, and unlock terraforming! \o/, so I've been digging all day:

Before:

acnh-20200404-yama-island
day one island map

After:

acnh-20200426-yama2
terraformed island map

Not a huge visible difference, the basic layout was nearly perfect (I would've preferred a mirror image where my mountain estate was on SW corner instead of SE, but I'm fine with it; it's the same layout as my Wild World village), but I moved the river course up against town hall to make a lot more space, added chokepoints (marked with path dots visible on the map) where I can jump across rivers, I'm still thinking about a couple more chokepoints or maybe river stepping stones?. Put a secret passage (covered in paths so nothing'll grow there) out to the north beach where Redd's ship pulls up. The temptation exists to build complex mazes, wipe out all the random character of the island, but so far I'm resisting. A dungeon hidden behind a mountain might be fun, though.

One frustration of this is, you can't change beachfront or the big rocks. I have some very inconvenient rocks in my east beachfront; pulling the cliffs back a couple blocks helped, but it's still not a straight run.

Another is, the entire user interface for building is "press A to do stuff". What stuff happens depends on whether you're 1 pixel forward or back of a grid border. Maybe you'll build up, maybe you'll rip down and create a slope, maybe you'll lower the block. You can't tell until you do it, and there's no grid lines, laser pointer, or undo. There's 14 in-game buttons and 2 joysticks Nintendo could've used to put each function on its own button, but they didn't. Of course, the rest of the interface is Nintendo Awkward, so why wouldn't this be? But it's a long sight from Minecraft (Java edition) where you can instantly hit 1-9 for items/tools, left click to hit, right click to build/place. Maybe they think the target market only knows Minecraft (Pocket edition) which has equally shitty controls, so being usable isn't necessary?

Playing the stalk market (buying and selling turnips) requires a little accounting, so I made a spreadsheet:

acnh-20200426-stalkmarket
stalk market spreadsheet

Blank copy, if you use Apple's Numbers: Stalk Market blank.numbers

Nintendo Switch Friend Code: Kamimark SW-5075-6646-9991

(hello, Twitter, which gets to see my images twice because that's the only way to get them off device, then again when I write a post!)

Videogame Exploration

Which I've brought up many of these before, but Proteus, Dear Esther, and Bernband especially, everyone should play. I've played and enjoyed most of Connor Sherlock's sims, but they're ~50% half-broken and all very similar to each other; but still great art pieces you can explore.

I need to play Obsolete, it seems.

And more recent than this video:

What I'm Playing: Animal Crossing New Horizons

After 2 weeks of delay, my Switch Lite finally shipped. I should've got it earlier, I know, but there was nothing else I wanted.

The device is bigger than I expected, not easily pocketable (unless you wear a ScottEVest windbreaker with giant cargo pockets like I do), the screen's nice, the sticks are a little stiff and the D-pad's very stiff, but all those will loosen with use. Good but not best Nintendo quality hardware. Power brick is awkward, I ended up having to put it on an extension cord from my power strip. I haven't stress-tested battery life, but 1 hour of Animal Crossing = 10-15%, which means I need a recharge whenever I'm not using it.

There's no security to the device, AFAICT: I would like it to require a PIN to start, but instead it just makes you tap A three times and then anyone can play with it. At least I have my password on anything in the shop, but do not let anyone have physical access to your Switch!

I'm unpleased with the Switch UI, but that's true of most consoles. Half the time it's easier to tap on the screen than try to use the buttons to do anything. The main UI is fairly annoying: A single bar of games, sorted in order you last played. No way to pin "favorites" at the front. There's plenty of room to have a 2-high grid, but they don't. There's nothing like the Wii Weather & News apps, alas. Nintendo keeps having good ideas then giving up on them.

Note: I'm going to abbreviate all the Animal Crossing games: ACWW (Wild World, on the DS), ACPC (Pocket Camp, the mobile game), ACNH (New Horizons, on the Switch).

I did a digital purchase for ACNH, and it took a while to install but it's a straightforward process. And I got 300 "gold" on the eShop, which I used to buy Tetris, NES, SNES, a jigsaw puzzle, and a mini golf game, just to have something else in my game bar. The only other thing I'm really interested in is the new Clubhouse Games, coming in June. I have the old one on the DS, and it was a great pack of minigames, I'm expecting the new one to be even better.

So finally ACNH finishes downloading.

The avatar is still not a full Mii. I don't understand this; Nintendo has a perfectly nice, universal avatar-creation system. You can use it all over the UI. You can't use it in the damned games, you have to pick from a handful of potato-looking faces on a single head. My aquiline nose is reduced to a flat triangle. No beard. The only long hair either has bangs, or is wavy; so I went with that. It's better than earlier Animal Crossing games which lock you down to male or female, tiny set of very conservative Japanese hairdos, facial features chosen at random, but it's not good. Not every game has to be Second Life or Elder Scrolls with 100 sliders for lip twitch and eyebrow fluffiness, but the Mii editor is RIGHT THERE. LOUDEST DRAMATIC SIGH POSSIBLE.

I pick my island layout, which cuts off the north and east just like my old ACWW island, and name it the same, Yama (technically Naraka is more accurately the Buddhist underworld, but I prefer the shorter name of the lord of the dead; I've done the Kami/Yama thing in my videogame names for 35-40 years now). The downside of my layout is early game I only have 1/3 of the island accessible, until I get a vaulting pole, which hasn't happened on day one/night one. But later, I'll have splendid isolation for my base in the SE peninsula, put all the villagers & services in the noisy SW area, and my groves up in the north.

The buttons are never fully explained, at least not in the digital version:

L stick: Move
R stick: Shift camera up/down, left/right does nothing
A: Action, Hold in inventory to drag items
B: Cancel in menus, Run while moving
X: Inventory
Y: Take Item
D-Up: Unequip
D-Left: Prev Tool
D-Right: Next Tool
D-Down: Unequip
+: Confirm
-: Save & Quit
Left: —
Left Lower (LZ): Nookphone
Right: Chat
Right Lower (RZ): Reactions (unlocked later)
O: Camera
Home: Quit

If you were playing ACPC, then once you've linked your account, you can get access to a special store from the Nook terminal of several ACPC items. Linking instructions. I've so far only bought the Campsite sign and Market Square flags, but I might just get everything once I have the bells. ACPC also gets 50 leaf tickets, but I've quit cold turkey a couple weeks ago, it's over. Nintendo sent out a survey which basically asked if you were ever going to play ACPC again, and I said no. This is a little unfair, in that ACPC is a slightly entertaining Animal Crossing-themed game, it's not terrible, but it's not as good as having your own unique island, and all the furniture and clothing you can only get for paid currency leaf tickets in ACPC is annoying.

My starting animal friends are Diva (purple, elegant frog) and Lyman (green koala); Diva's OK, she was a regular in my campsite in ACPC, I don't know Lyman but he's been friendly and not too stupid. I know they've lightened up a lot of the animal personalities from the old games, so I keep expecting cruelty or idiocy and they don't do it. Still, I'm pining for some of my favorites like Bunnie, Fauna, Cherry, Tex, or even dumb jock Jay, I wish we got some choices here.

The Nook shop/Resident Services is your main HQ for a while. You need to turn in fish and bugs to Tom Nook until he calls Blathers over. Then you can sell everything, or stack it up outside your house to wait for the museum…

Timmy Nook buys and sells items; one thing I didn't realize early on was you can hit R on the buy list, and go from some crappy furniture (an oil drum and a water cooler, in my case) to a screen full of tools! Including the slingshot! I saw a balloon with a present first day and couldn't get it because I didn't have the slingshot yet! He also has several recipes, flower seeds, medicine, and such. That should be the front screen of this shop. I'm so mad at this UI now.

The "DIY For Beginners" recipe pack he sells includes Hay Bed, Stone Stool, Old-Fashioned Washtub, Frying Pan, Wooden-Block Toy, and Ocarina. To get into any furniture like the stool, you just walk into them, and can then rotate around with the stick. It takes a little getting used to, but my campsite's coming along; tho I'll have to move it soon.

Tommy Nook is useless so far, he tries to give advice but it's all pretty obvious.

Fishing is much easier than ACWW, not as trivial as ACPC. There's some aiming and luring skill needed, but not much. You can't apparently scare them off easily. Bug catching is about the same as ACWW, but you can't scare the bugs off as easily either; ACPC was savage in that, you'd walk by a bug you wanted and it'd vanish. Catching my first tarantula was a bit of a Most Dangerous Game hunt, but it didn't get me. The damned wasps got me twice on the first day, but then Diva gave me the Medicine recipe, so I won't have to pay for the stuff at least.

Crafting starts out with very limited recipes, nothing like the Minecraft grid where everything is possible if you have the materials. But turn in a few fish & bugs to Nook, talk to the animal friends, find bottles on the coast, or shake trees, and you'll find more.

Getting materials can be a little tricky at first. For instance, trees drop one branch on first shake, then often none for a few shakes, THEN they drop up to 9 more. So I spent one loop around the island getting only one branch per tree…

Inventory management is a serious pain, you can't move items between slots like Wild World, you have to drop items, then pick them up in the order you want. Every time I break a flimsy tool, I'm back to sorting inventory out. You also can't split stacks, except one at a time; if you want to keep 50 weeds but sell the rest, pound sand.

Of course Animal Crossing follows real time. You can lie about your time zone or change hemisphere, or "time travel" by screwing with the Switch's clock, but I'm not going to do that. Today is today. With my night/day schedule, I can see morning daylight when I'm about to hit the sack and do my final play of the day, and my wake-up/grind part of the day will mostly be at night, which works fine. Just make sure I keep a net ready at all times to catch tarantulas, because Animal Crossing tries to kill night owls.

I'll get my friend code tomorrow and post it in the next update, and in my About page.

To get photos off the Switch is kind of a pain in the ass. You can transfer them to microSD, do a hard shutdown (hold down "power" 10 seconds), move the SD to your computer, extract, put it back, power back on. UGH. Or spam them 4 at a time to Twitter or Fuckbook, so my post-syndication-only Twitter is now posting ACNH screenshots irregularly, enjoy.

PortalWorlds Progress

  • PortalWorlds 0.9 on mysticdungeon.club

  • 2020-03-18:

    • Mob names
    • Boss monsters (only ones with a nametag, and much tougher than the rest of the level)
  • 2020-03-17:
    • Structures: circle tower, box tower, campsite
  • 2020-03-16:
    • All levels are solveable
    • Map indicates map name and row/column of player

Pop back over to itch.io or my Patreon if you want to support this!

PortalWorlds Progress

Doing some more work on the post-7DRL version of PortalWorlds, will publish this when judging's done.

  • 2020-03-13
    • Message history, toggle with H.
    • World counter.
    • Terrain smoothing.
    • Rivers.
  • 2020-03-16
    • Longer tutorial level (and first predefined map, may add more of these later).
    • Messages display on screen instead of HTML.
    • Increased view distance/window size. Should make this configurable for small screens.
    • Physical layout for on-screen keyboard.
    • Started on making all worlds solveable.
  • TODO: I have a longer list, but these are Real Soon Now.
    • Finish making worlds solveable.
    • Structures and level bosses.
    • Audio.

Retrospective: PortalWorlds

What worked, what sucked, lessons learned, The More You Know, and knowing is half the battle, go Cobra, etc.

JS: Test Your Libraries -1

Especially the hard-to-test parts. I had one "obviously correct" array shuffle function I've been using for maybe 10 years:

WRONG RIGHT
function arrayShuffle(arr) {
    for (let i = arr.length-1; i >>= 1; --i) {
        const j = Math.floor(Math.random() * i); // WRONG. NO.
        const tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    return arr;
}
/** Fisher-Yates */
function arrayShuffle(arr) {
    for (let i = arr.length-1; i >= 1; --i) {
        const j = Math.floor(Math.random() * (i+1)); // RIGHT. YES.
        const tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    return arr;
}

And because of that, I got a distorted shuffle. I only noticed because no mob using my dumb-as-rocks not-even-AI would ever choose to move north… everything ended up piled up at the bottom of the map.

It's hard to test randomness, but you can check that values are in a sane range. For a decade I've had wrong code just copy-pasted into new projects because I never checked my assumptions.

JS: UI Libraries are Great +1

I mean, I knew that. But how easy it is to throw something up is a bit of a surprise every time I do it. It's a fast, dynamic, functional/OOP language that also has good graphics and sound libraries (I didn't do sound in PortalWorlds, but I will before 1.0), and tolerable event handling these days.

I'm not releasing the full source, but in a week or two I'll add a few more things and release my common library under BSD license. This is mostly stuff from my Learn2JS project, and some from TTMS-76, but those have a giant framework for running scripts, this is just a few functions for a pure JS application, and greatly condensed.

Pulling in common code makes this stuff so much easier.

JS: Application Structure -1

There's no proper "run loop" in PortalWorlds, and late in the process that bit me in the ass.

What you should do is, collect events, put them in a queue. Every X milliseconds (I usually use 30 FPS, so 1000/30=33.333ms) have setInterval do an event-update-redraw loop. If something takes a long time or requires animation updates, it must be done in chunks or in a background thread (using Web Workers ). This is true of any application, not just games.

What I did wrong is having events immediately perform actions, and the setInterval just does update-redraw. This is much easier, but it's wrong. I have no control currently over blocking user actions, and animation has to all happen at once.

The trick I used is to keep a "frame" counter, and that chooses animation frames, moves floating text and the tracers of missiles and fireballs. Next turn invoked by user event just wipes those out. An amusing side-effect is missiles vaporize corpses as they fly past.

Switching to a correct run loop isn't super hard, but does require changes to all my timing and animation hacks, so at this point it's not worth it.

JS: Fonts -1

I used Oryx's "simplex" font, which looks fine and bitmappy in web pages, but in Canvas it gets antialiased, and I wasn't able to make it stop. So I have to make all fonts slightly larger than I'd like, and they're still kind of blurry.

The smarter way would be to use a bitmap font, and a very simple bitmap text renderer. That's what I do in Perilar: Dark Weaver, with an ATASCII-inspired fantasy font. But in 7 days I didn't have time to write and test that.

That's on a "maybe later" list for 1.0. Alternately, I could figure out how to get them antialiased in Canvas?

JS: Minimizer -1

I used to use yuicompressor, which renames variables and aggressively minimizes your code into unreadable but very compact line noise. But with the long-drawn-out death of Yahoo!, that hasn't been updated in a decade, and it doesn't handle ES2020.

I could probably have run everything thru Babel and then yuicompressor, but it's time to move on? So I just used Crockford's jsmin which only removes whitespace. It might be a good time to look into compiling JS to WASM binaries.

My build.zsh script:

#!/bin/zsh
rm -rf portalworlds*.zip
rm -rf build
mkdir -p build
mkdir -p build/js

# *.js -> .min.js
for f in js/*; do
    n=`basename $f .js`
    perl -ne 's/const DEBUG = true;/const DEBUG = false;/; s/^\s*DLOG.*$//; print;' $f >build/$f
    jsmin-crockford <build/$f >build/js/$n.min.js "Copyright (c) 2020 by Mark Damon Hughes. All Rights Reserved."
    rm build/$f
done

# index.html
perl -ne "s/\.js'/.min.js'/; print;" index.html >build/index.html

cp -R favicon.* style.css i ttf build
cd build
zname=portalworlds-$(date "+%Y%m%d_%H%M%S").zip
zip -r9Xq ../$zname * -x "*.DS_Store"
cd ..
echo $zname

Game: Combat Design +1

So I knew I wanted combat to be very swingy (allowing anything from instant death to instant kill), but not have levels or many stats; I didn't have time or inclination to make another detailed RPG!

Instead, combat works by adding your current strength and enemy's current strength, rolling 2 dice in half that range, so central results are more likely, but it's easy to get results at either far end. Then apply the difference from your strength as damage to you or the monster, depending on which side of the line it's on:

const roll = Math.floor(dice(2, this.strength + mob.strength)/2);
if (roll <= this.strength) {
    const dmg = Math.floor( (this.strength - roll) * (100 + this.getDamage()) / 100 );
    mob.takeDamage(dmg, true);
} else {
    const dmg = Math.floor( (roll - this.strength) * (100 - this.getDefense()) / 100 );
    message(mob.toString()+" hits you for "+dmg+" damage");
    this.takeDamage(dmg);
}

Kind of ridiculously simple, but it makes for symmetric combat, so player-attacks-monster and monster-attacks-player have the same results. It's not practical for a tabletop game, but this is a really fun mechanic in a computer game.

Damage and Defense from gear just modify the result by percentiles, they don't affect attack roll at all. If your strength + defense % is less than the monster's strength, you can be one-hit-killed, and vice versa.

Experience adds to current strength, and increases base strength if you're near max; you need to finish fights against slightly superior foes unharmed to grind up strength.

Game: Spells +1/-1

I knew I didn't have time for a lot of magic, and I never feel like I'm finished with magic systems anyway. So here I just picked 4 types: AOE damage, AOE control, escape, and heal; or as the game knows them, Fireball, Sleep, Invisible, and Heal. Then rather than have MP and worry about regeneration, I just give you "base" spells in each based on class, and you can pick up scrolls to add new points to current spell total. When you heal with mana potions or going thru a portal, you get back your base spells.

Last three were trivial: Sleep just searches a radius and has a die(100) > strength chance to give humanoid or animal targets a sleep condition for 2d4 turns; if they're sleeping, they skip the turn. Invis just sets an invis condition for 2d4 turns; mobs ignore you if you have that condition. Couple places like melee and taking damage I manually clear the Invis and Sleep conditions. Heal just heals 50% of base strength, woo.

Even with just 4, doing Fireball turned out to be quite challenging (the Application Structure problem); how do I show it go across the board, maybe have a turn or two delay, then explode? Well, it does it by moving 4 steps every turn, and only having the fake animation for a tracer of where it's been.

Game: Permadeath +0

Permadeath happened more by lack of save state than any intention. I much prefer to have save slots, and then you can choose to save your game and reload last or earlier, or you can play hardcore and never reload. It puts the moral burden of choosing permadeath on the player, not the developer.

But JS localStorage doesn't really have room to stash a huge amount of data. In Reaper's Crypt I had a very aggressive compression for the map (which looks like a giant grid of tiles but it's really about 64 rooms per level), and it's still problematic, sometimes maps just can't be saved.

I could save the character as of last portal you entered, and regenerate maps. But that encourages "stair-scumming", which I do have a problem with. So instead this is very arcade-like, you just play until you die, then insert another quarter.

I do plan to add a scoreboard, both local and maybe server-based for a copy hosted on mysticdungeon.club.

Personal: Shipping is Awesome +1

Actually finishing something and making it public without a decade-long process is amazing. It's not perfect, and I know nothing is perfect, I should just ship things, but I can't normally do that. Having a hard deadline and meeting it was the best feeling.

Personal: Drone-Slack Balance -1

I was desperately exhausted afterwards. Bone tired all day Sunday, and I'm still feeling it on Monday. 7 days in a row, even with a couple shorter days, is about 3 or 4 days too many.

I'm nocturnal. I like to wake up ideally just before midnight (but sometimes backslide to evening if Real Life interferes), eat and coffee, then work until dawn, walk the dog at sunrise, maybe get my own walk in (tiny dog cannot keep up for a mile+), then finish up and goof off until early afternoon when I can sleep. The schedule weirds out some daywalkers, but it's quieter and more compatible with "morning people" (ugh) than waking in afternoon and sleeping at dawn, which I did for decades.

But normally that work is 3 days of code, 1-2 days of writing or art, 2-3 days of just playing videogames or going Outside, doing Real Life AFK stuff.

Drones who can work all the time frighten me, they're basically Terminators. People who Slack all the time frighten me, they're a waste of precious oxygen & water, and I may foolishly try to rely on these people and get nothing. You need to be in the middle area.

7 Days of Roguelike Development to Die

Well, I'm exhausted, but I have a working shipped. I may come back tonight and do some more, otherwise a post-7DRL update will fix the missing bits.

Play, and if you liked it, shower me in gold, or at least rattle some change at my tip jar. If you have other feedback, comment but be kind, I'm so very tired.

Archive of my dev diary/comments:

  • Day 1 (Sun, 2020-03-01)

    Getting started now. Will be working until next Saturday!

    Tiling, basic animation, and keyboard input.

    Minor annoyance, discovered Oryx’s “wee fantasy” figures, which are otherwise quite excellent, are left-handed. Flipping the images gets them all fixed except right-facing still has a shield in left hand. I don’t mind a few sinister figures, but that’s too much to ask of heroes not named “Link”.

    Basic random character and stat display.

  • Day 2 (Mon, 2020-03-02)

    Didn’t get a lot of uninterrupted time today, but made useful progress finally:

    Items now exist, can now be got (auto when you move; I might add a Get command), put down, readied/removed, and used.

  • Day 3 (Tues, 2020-03-03)

    Very productive day. Mana recovery, added a Get command, visibility calculations so walls occlude vision.

    Changed the way I write objects and monsters to use prototype objects (an object system on top of an object system, but it’s more convenient).

    Monsters (well, just Goblins today) are placed and can be fought. They don’t move yet.

  • Day 4 (Wed, 2020-03-04)

    Very little free time today, but I got a monster list completed, with a lot of tricky multi-level monsters, and I can spray them all over the junk level. Got some design notes for spells and missiles, and how I’ll split up the levels tomorrow. Then try some kind of AI once I have a place to navigate.

  • Day 5 (Thur, 2020-03-05)

    Floating damage numbers & effects. Basic mob AI, no pathfinding yet. Sleep, Invisible, Heal spells.

    Running low on time, so much stuff left to do and I just did some detail work today, didn’t even get missiles in (and Fireballs, which are a slow case of missiles that explode). Levels, absolutely first thing tomorrow.

  • Day 6 (Fri, 2020-03-06)

    DON’T PANIC. Well, panic a little. Got door opening (but not closing, needs a whole new command), Portals (AT LAST), and 6 level generators + tutorial level. They’re very simplistic levels, and it’s possible to be trapped in some, but usually works?

    Tomorrow I should really get missiles flying, trapped levels, maybe an overview map are optional. Strength/“experience” gain is a little harsh right now, but balance is low on my priorities.

    Found an absolutely horrible off-by-1 math bug in a library I’ve been using for years. Programming: It’s always harder than you think.

  • Day 7 (Sat, 2020-03-07)

    Exhausted, I don’t ever work this many days in a row anymore. So I got the overview map done, and rebalanced it a bit more sanely. It is playable and a fun challenge until you get curb-stomped by wights or stuck in a dead-end world.

    I have until tonight (Saturday) at midnight, so if I feel up to it later I’ll get to some of my TODO list.

    Playable version is up now, let me know what you think!

  • Day 7, Later

    Got back to adding missiles and fireballs! Done! Ship it!

    (Levels still kind of suck, I’ll improve those later. But the gameplay should be finished.)