Tuesday, August 17, 2010

Hotel Solipcyst - Official Teaser Trailer

http://www.youtube.com/watch?v=sYWCLx9pKiA

Well, there it is. The culmination of another summer's work. Thanks to Paperjack for post-processing the audio, and sorry for my horrid narration.

Well, as I've hinted, I start college in a few days. The time I've spent on MnemonicRL has been drastically dropping even before this point. Basically, the project is being shelved for now. All along, I haven't developed to create a game people would enjoy. I don't game much myself anymore. The fun in this for me is playing around with algorithms for monster behavior or dungeon generator, or dabbling in procedural animation or networking. Even some level design forces itself out every once in a while.

I've never enjoyed the step from transforming a tech demo into a game, though. The code for combat's there, I made up visual effects and rules for many attacks, but when it came time to get the numbers right for leveling and damage and such, I quickly grew bored. With Hotel Solipcyst, I tried to replace combat with other gameplay elements -- exploration, dialogue, treasure hunting, even a version of Snake where you herd a guest's unraveling thoughts into new patterns. But after implementation, tweaking them to be fun to play was again a boring task to me.

So the lesson I've learned through all these years of off-and-on roguelike development: I can't do this alone. Thankfully I'm about to be surrounded by a large group of wonderful, talented new people. I've never done a team project before for lack of a partner, but I look forward to it. Therefore, this is not my parting message from rgrd or game development. I am much more interested in simulating traffic than developing games, but thankfully games (or at least game-like things) happen to be a great place to showcase and play around with new algorithms. The next project will come, just maybe without masquerading as a game.

Thanks for reading, unknown readers. It's been a fun trip. I'll keep this blog updated with my exploits at UT Austin. Until then,

~ Dustin / Da-Breegster

Sunday, August 15, 2010

Quick update

Hrmm, I'm really not good at this. In the last few weeks, I've been preparing to move, working with my company on web development (of the server-side sort, of course), and -- yes! -- filming the trailer. It's in "post production" now, I guess, which means that I have to record the narration, or sucker somebody with a better voice and no lisp to do it for me. Overall, it hasn't turned out anywhere near as good as the first did last summer. But I'll explain more in my message with the trailer... which should release in two or three days guaranteed (because after that, I won't have time for this sort of optional project.) Woo!

Saturday, July 31, 2010

3 Weeks

I guess I should really get back into my old pattern of updating regularly (and having things about which to update?)... there is news though. It finally has a name... your delusions manifest in Hotel Solipcyst. The word comes from solipsism, this desperate idea that only your mind surely exists. The beauty is that this paranoia is not even enough... the whole point of this segment of the story is that memories are as mutable as anything as well. So what can you trust? Oh, and "solipsist" became "solipcyst" by an esemplastic whim -- "cyst" has that excellent parasitic connotation to it. Yeah, I saw Inception recently too -- but I've had these ideas for millenia prior.

In my last three weeks (officially yesterday) before moving, I will produce a trailer to something that isn't quite yet a game, something that won't be finished. I have a vague inkling why a trailer could still change things, but for all purposes, my motivation is the same as ever -- my own enjoyment. As always, I like creating effects, ideas, behaviors -- not necessarily fun ones or those with win conditions.

My goal right now will be excellent if it works how I envision -- basically, think spotlights for mood lighting. More later...

Sunday, July 25, 2010

Floating Points and Floating-Point Arithmetic

My Java experiment, which has been eating much of my development time lately, should soon be playable. Frame-independent movement (don't move 1 pixel per frame, move 15 pixels per second and track dt) and rounding issues were finally remedied, and I got my logic improved for jumping from rising platforms. I also briefly implemented a scrolling background layer that doesn't seem to eat too much more CPU. Net effect of all this work? I could have my falling Santa game going within the week. Which means I could bug people who won't have time to help for sprites.

Mnemonic-wise, I haven't done anything. I really would like to turn out a trailer before school starts -- making the one last summer was really fun. As for making an RPish game playable and -- more importantly -- fun in three weeks, it won't happen. That doesn't bother me, so I guess if anything, my goal would be to finish fleshing out the environment for a future fun experience. My sense of time and haste will be inverted a bit tomorrow, so I'll try to focus on Mnemonic instead for a day, see what happens.

Monday, July 19, 2010

Another Return, not a Yield

I haven't done enough parallel programming to really make that joke in the title yet. But anyway, I am back from UT Austin (technically have been for a few days, but stayed really busy until today). I remain astounded by orientation, the OAs (student leaders/RAs there, basically), the friendliness of everybody I met, my own unexpected socialness, the city's breadth and the campus's depth, and the spectacular advisors and students from Dean's Scholars and Turing Scholars. I'm taking 17 hours this fall -- Vector Calculus, CS theory, CS data structures & algorithms, a philosophy of the arts, and two two intriguing classes associated with DS. I guess that means Mnemonic really will fall on the wayside. Nevertheless, I will work on it when time is available. More importantly, the work I do continue all started here... ultimately I've created a playground for multi-agent experiments, a bestiary of pathfinding techniques, a home where a few people hung out, if only for a few minutes in passing...

But it's a month too early for sentiment. In my few days back, I tweaked guest crowd behavior again to time their routes through the Hotel better. I'm not happy with their "pace around aimlessly in a room for 30 minutes" behavior yet, though. Since I'm diffusing this bloody useful influence gradient from each staircase/exit on each level at init-time, I decided to use it not only for pathfinding between rooms but also for wandering around. Pick a staircase and a random scent level (not 0, which would be the staircase itself) and hill-climb up or down to reach that point. Continue for as long as needed. This works for the most part, but I'm observing lots of agents getting caught in local minima -- they'll spazz out between a few tiles. Gotta examine the scent levels there to figure out why.

I've also been continuing my Java experiments. Today I got "frame-independent" movement going... rather than trying to run the game at 60FPS by sleeping variable amounts of time, I'm having the thread/game loop sleep a constant time and tell movement functions dt -- that's change in time since the last tick. This lets me specify velocities way easier anyway -- 50 pixels per second? No problem, it's been 349/1000 seconds since last tick, so a touch of dimensional analysis (fancy-speak for "multiplication" in this case) and some floating-point positions, then things are moving consistently no matter how well the game is running. Sadly, my collision response-fu isn't quite as strong -- my trick to fix overlap by the axis over which the instigating entity was originally trying to move, it isn't working so great when you're constantly falling and also trying to move left/right. Once I fix that, hopefully the other major issue will clear up too -- movement isn't fluid at all. My numbers are probably way off -- and the keyboard repeat rate bug isn't helping (more on that another day) -- but acceleration due to gravity feels clunky still.

Well, it is late.

Friday, July 9, 2010

Cyclic Graphs, Rejuvenated Lifestyles

I haven't vanished. Today I felt claustrophobic in the Hotel, so I finally filled out two areas. First we have the vending hall...
Followed by the laundry room, with animated washing machines! The phrases floating around are relevant and will eventually be animated and helpful as well. For now, little jokes in Latin are sufficient.
Lastly, we've got the gift shop. I wanted that Earthbound-esque mall look, hence the second floor. A valid use for escalators! Not sure how the 'interact' command will work with things like shelves of items yet... it's no fun to go press the spacebar next to each shelf until you find the clue you need.
So what else has happened, and will happen? A new joy has entered my life in an unexpected way and remains on a distant pedestal for good reasons. This next week, I shall be away from any form of a computer, so sorry, I will be composing ideas only. It's for university, though, so I'm quite happy! I suppose once school starts and I have less time to work specifically on MnemonicRL, I'll tag some posts as UT (UT Austin, that's my home) so I can show off my baby steps in the world of formal Computer Science education. Anyway, I'll be working harder than ever once I get back so I can release something by the summer's end. Await with curled toes!

Oh, and Java. I'm liking it. Sometimes choice is a bad thing -- SDL, Allegro, OpenGL with a 2D perspective matrix...? Swing and AWT just work, and they just work everywhere. I fixed the flickering issue in the detangle-the-strings applet, and I'm about to start on a new idea for a game. More tomorrow, hopefully, before my great journey begins.

Tuesday, July 6, 2010

Appletizing

Eh, today wound up with my eyelids numb and pupils dilated. Curse you, optometry! I wound up playing with Java much more than working on crowd behavior. Finally appletized my detangle-the-strings game. Click and drag the circles till no lines intersect. Try it? Server might go down anytime, and the flicker is a known issue. Guess I'll start tagging non-MnemonicRL posts, since as university starts, I'm sure to be talking about different projects. No fears, I'll get back on track with the Hotel tomorrow!

Monday, July 5, 2010

My own Personal Army

Sometimes I just have to start with a picture. Basically I've got 100 guests running around the Hotel (which still needs a name, blast it!). Already it adds mood. Once I time their movements better and create a cyclic logical graph for them to traverse and add waiting regions near tables and such, it'll seem much more immersive.

I'm going to be very busy next week (more on that later) and indeed my summer's hours are spiraling away, but I'm going to try my best to get both a new trailer and a complete, playable, and fun game segment out by August.

Saturday, July 3, 2010

Java Adventures, Mostly

I somewhat sheepishly offer a screenie of the new ripple effect in the Atrium.
I also began drafting the first guest's schedule, personality, and backstory. I think they'll have the appropriate balance of intrinsic creepiness and charm.

Most of today I have spent beginning my first experiments in Java. I love the concept of interfaces and am still working my current idea of callbacks and the observer pattern into this. My first project is to implement a simple tangled strings puzzle, where you move little "knobs" around to detangle the attached strings. I've got the knobs moving by mouse, presently, after an hour or so of work. The Java API is clearly the toughest part for me, so I'm still learning lots of details about AWT and Swing, the drawing and GUI libraries. But I'm really enjoying it -- it's a fresh idea for a project to do, and a new language... one that I'll be using extensively at university in... well, less than 2 months now!

Friday, July 2, 2010

Animating ASCII Water Ripples

See rec.games.roguelike.development for an explanation of my algorithm.
The results are reasonably pleasing. The wave interference passes at a glance. Here the effect can be seen in the hotel pool:
The aqua ~'s expand in a random blob shape outwards, and interact with other ripples.


Improvements are still needed. Large areas with many ripples bottlenecks, but this can be alleviated by giving ripples a certain lifetime rather than permitting them to expand until they exhaust the body of water. Tomorrow I shall try to connect more of the hotel and work on guest pathing behavior. Excitement soon!

Thursday, July 1, 2010

A new overworld

Because the old one wasn't cutting it. I mean, it had no hotel vibe at all. So I present... the Atrium.

A grand staircase, tiled floor, two floors.

And there's the fountain... look familiar? Gonna work on a few effects for it. From the atrium are connections to the elevator, giftshop (working on this), laundry/vending room (another new one), kitchen, ballroom, pool, and themed guest floors. I really feel that this area has a better hub vibe to it. I'm working on connecting all the areas and fleshing out a few more, so guests may be trodding within the walls this weekend. Feeling much more enthused about the project again.

Tuesday, June 29, 2010

New Places

After a haze of Bioshock, reading, and sketching, I've regained some momentum. Lots of new ideas for hotel layout, slowly being converted to ASCII. Also a more logical graph of the layout:
Once more of these places are set up, I'll get started on the Hotel's first special guest... he should be a familiar one. Guests follow a scheduled path, so how should they react to collisions? How definite should their path be? I'm voting waypoints, to allow them to sidestep players. Well, not quite waypoints, but connected-regions. Ah, this brings me back to the good old days of science projects... I can't wait to return to pathfinding. Anyway, your task is to interrupt their schedule with relevant diversions. Hopefully there should be several different sub-activities to that part...

  • combat
  • conversation, followed by hunt-down-clues
  • ESM tracing at night for more clues
  • kitchen minigame to upset their stomach
  • snake minigame to help sort their thought-stream

I also separated the MnemonicRL content and hotel content a bit more strictly. The server running now only has MRL stuff, although I could make it run in Hotel-mode just as easily. This first chunk of the game doesn't involve Cyphen quite so immediately, so it's better for me to encapsulate my thoughts strictly within the Hotel. Well, off to it.

Monday, June 28, 2010

Return, Barely

My surgery (wisdom teeth) went fine; I've technically been back since Saturday. Code hasn't captured me, though -- focus is lost. The multiple projects thing doesn't seem to help. I also tried playing with Perlin noise, which could greatly help with animating water or clouds, but I'm missing some of the math background. All I've really managed is a half-hearted stab at a ballroom:
But where's the old sense of charm? The magic is in detail, not breadth. Gameplay-wide, I'm split among traditional roguelike combat, the herding puzzle in the kitchen, the snake sentence-munging, and the guests trodding their eternal paths. Bleh.

Thursday, June 24, 2010

A brake

I'm taking a brake for a few days due to some medical things. Train company's gonna be pissed, but they don't need to stop anyway. Server should stay up, but in my painkiller-induced haze, who knows. I started work on a snake-type creature (think the old game, snake); got an idea or so on how it can be used in the hotel. Also worked a bit on (ideas for) combat mechanics, but no new revelations that'll help. Ultimately, what's the most comfortable way for non-programmers (read: you) to tweak monsters' stats up or down a bit?

  • Editing a self-explanatory text file
  • A web interface with nice forms
  • Some built-in editor... most work for me, I'd have to draw up a nice interface for that.
Ideas? Well, I'm out.

Tuesday, June 22, 2010

A Different Pace

I tried something new today to escape the rut, and it worked rather pleasantly: I didn't touch Mnemonic till an hour or so ago. Instead, I worked on my heat distribution Python program -- tomorrow, I'm going to generalize and implement a strategy for partitioning a map among N processors, complete with ghost zone handling. Next I delved into openscenegraph and emerged with 10^4 colored cubes arranged properly. I could never get ogre deployed properly on Debian. Tomorrow I hope to get my own camera controls going. Oh, and I started exercising more as well -- that greatly helps my state of mind.

Oh, I guess if you're following this blog, you want to hear about Mnemonic. Well, too bad, because you're going to see instead.
Oh, nothing new, you say? Go login. It swings. To and fro, parabolically... I might animate the candles, make them aflame...
And then here's the lobby in general, touched up just a taste with some color and a tree. I haven't figured out how I want to animate the fountain yet, nor will the lobby remain so plain-looking.
So tomorrow? Who knows. Within Mnemonic, I'm splitting my focus between adding new maps to the hotel and stabilizing combat for normal gameplay (oh, did I mention the revamped battle bar? Still a few tweaks I'm working on though). We'll see.

Monday, June 21, 2010

Direction

Well, I gave up on the web layout and 3D dungeons. Got it working more or less, but realized it wasn't what I was shooting for. Worked instead on adding real-time lag back in. After you move, individual maps can control when you can move again (don't worry, this is always in the milliseconds). I vaguely want to get combat stable to a point where people might play, but I'm not sure if I want to work on this or not.

Beyond Mnemonic, I cleaned up the Python code for heat equations that I wrote during camp. I'm challenging myself to get it working in parallel properly. I'm also struggling with OGRE yet again... Zombissault has been on hold since I returned to Mnemonic. I'd like to get myself in the pace of working on a few projects at once to avoid stasis in any. More later, maybe.

Sunday, June 20, 2010

Time and Again

Home has become a place of sleeping, eating, and showering the past few days, but my schedule is winding down again. I vaguely remember getting the web-type dungeons working a few nights? days? ago, but it doesn't seem that I've written about that yet. I was waiting to get 3D dungeons working, which aren't tough at all -- I'll elaborate tonight with results, provided I don't wind up with friends again. Ah, the busy life.

Wednesday, June 16, 2010

Well, something

Another day with an ample magnitude in the time category. Camp got me thinking about collaborative diffusion (an old pathfinding technique) in a new way at least... the concept of ghost zones and "adaptive mesh refinement" sound suspiciously like fancy terms for things I've ended up figuring out for myself in previous years.

I didn't too much today, but I do have a sample random curve:
My algorithm is recursive. Breshamn (misspelled and verbified!) a line between the two points. Unless the line's shorter than a threshold, then find the center and project a third point perpendicular outwards a little bit. Then draw two lines, instead. It certainly does produce... unique paths, perfect for the level style I have in mind. The problems:

  • Gonna have to modify my current border() cellular automata method to handle paths this thin. I don't quite remember why I ever wanted " . " to not become "#.#"
  • Sometimes the path isn't continuous, and I'm not sure why there are breaks. My guess is rounding errors; grid's limited to integers
  • The path can end up crossing itself because the angles and amplitudes permit this. Actually, I guess that's technically permissible -- not for a curve-generating algorithm, but within the context of the maps they'll be used in, it'll add flavor.
So that's about all. I have a vague idea in my head to use cellular automata (or similar) to produce a random curve, but only time will reveal how useful this may be.

Tuesday, June 15, 2010

Exhaustion

Camp is now taking away from my develoment time, ironically enough. Python frustrates me with its awkward syntax, intrusive print statement, wacky data structures. I'm biased from my Perl/C++ background, but by the end of the week, I will have a justified list of complaints. :)  We start MPI / parallelism tomorrow, although I won't exactly be there for that lesson.

Anyway, I have so little time this week to do anything. I've got an hour or so before exhaustion (and the dusty overlords shall claim me for the next chunk of days), so I'll see about those new guestroom maps. The pace will pick up again, I promise.

Monday, June 14, 2010

Lexical Jiffy Cult Bees

Ehem, or technical difficulties. It's been a long day. "Boot camp" proved sufficient, provided the other four days of it pose better challenges than haggling with a new associate. So I come home without a parallel computation mindset, but with a nice sketch of my final idea for the area preceding random guestrooms... a maze. Picture winding corridors, twisting and bending and diverging constantly, overlapping in three dimensions... imagine tracing an Esemplasma (if I haven't explained this before, I will later) trail through these paths. Imagine that your means of detecting ESM must be fueled by vanquished memories. Oh, and imagine that the room becomes more angry and potent if you wander off too far.

You've got my idea.

So although the server is down and I have no access to anything (currently fixing Western Digital's wretched sector alignment bug from a live CD), I am working on some "simple" code to generate a sin wave between two points. The geometry of rotation is proving slightly fickle, but I shall prevail because there's nothing else to do.

Sunday, June 13, 2010

A boring 30th post

No fun extras yet, sorry. Old dungeons are reopened -- had to fix a staircase and map generation regression. Auto-explore mode should be mostly working once again, press the "O" key on a map that isn't lit up yet. I've had several confirmed cases of the Windows install working just fine now, so if that's been holding you back... now's the time to play.

Except there's still not much to do yet. What's the quickest way to balance the game? Should I focus on old monsters and items and the old dungeons, or work on just the kitchen puzzle and guestrooms...? I could really use some help.

Saturday, June 12, 2010

Early update means more later

Well, swimming was refreshing. Remember that wretched screenie last night? Yeah, forget it and take a look at what I've cooked up today:
Don't the stoves and tiles look better? I'm chasing the green ingredients into the yellow pots... or trying to. Their movement is still slightly buggy, but the local minima should be easy to fix. Herding actually doesn't take an influence map... it's easier to restrict the vegies' path to a linear one. That makes sense visually, anyway... you don't want vegies near the sides. Anyway, I need to come up with a good placement for the pots to make compiling dishes fun. More later? Quite possible.

Deceptive beginnings

Today, I made minor changes to the map editor; fixed the standing wave implementation for wavy paths (thanks to simcop); successfully got a Windows friend running the game; and transformed a perfect maze into a perfect maze... of stovetops! The others are outright banal, so that last one... Yes, yes...

If that's not disorienting, I don't know what is. So once I get the ASCII art right, you'll basically be in a maze of connected stovetops. The hotel has a kitchen, after all. You will chase/herd ingredients towards a destination pot to create different concoctions for guests. Meanwhile, the staff will be pissed.. chefs can pop out of nowhere, spring traps on you. I hope this'll be a good blend between combat and puzzle. If I get the visuals right too, then hey.

I'm going to engage in recreational activities outdoors tomorrow, and this upcoming week I'll be attending a series of lectures and workshops on parallel computing. But I'll see what I can cook up in my spare time.

Thursday, June 10, 2010

Abstractions only, please

No pretty pictures today, sorry. I accomplished three simple but vital tasks today...

  1. An in-game clock that'll run at whatever rate I tell it to, and not necessarily a consistent one.
  2. Regions within a map that may print descriptions when you enter them. There's that interactive fiction element.
  3. And also an interact command, currently bound to the space key, that may trigger something within a region.
Random guestroom dungeons are still bugging me. I had a few ideas for the bulk of the room before you get to the giant silhouette  furniture. There could be a floating path to follow, a maze... but underneath is a giant colored checkerboard. A second maze is superimposed there. You have to solve the first maze while minding what sort of large tile is beneath you. To complica make things more interesting, the path could sway back and forth... I have a great visual image of this, but it turns out to be a taste tricky to implement. I was going to use a standing wave with 3 stationary nodes (the path sways by pivoting around you) but my parametrization of this isn't working out too well. Plus, I'm not sure standing waves with a moving center node even exist, let alone a nice equation to model one. I have consulted my old physics teacher with this problem...

But anyway, the issue stands -- what should happen in a randomly-generated guestroom? Bugger if I know, I'll figure it out tomorrow.

Quite a bit more than yesterday

Maybe I was just being wicked and saving the good stuff for today. First off, I forgot that I've never posted a picture of the Lock & Key Suite... so here it is with the new auto-generated doors and room numbers:
I promise it really looks like a key, it's hard to capture zoomed-out renderings. More interestingly, each of these doors leads to a randomly generated "guest room dungeon." Two instances:

So right now, it's just some randomly chosen and placed furniture. Boring, I know, but I'm still trying to work out how to make the moving walls into a good puzzle. There will be combat in the guestrooms, but not with traditional monsters. I'm also playing with interactive fiction-style regional descriptions and an interact command.

Next plans are more suites (I really need mappers, pleaase?), coloring in everything to give it atmosphere (oh, and I haven't forgotten about lighting effects either), and the clock. Recall, the same 24 hours loop... I want to wrap a game-time system around my POE timers and configure things so that game-time might slow down/speed up in player-time. Once this and more of the hotel are fleshed out, I can begin implementing guests and their memories... this means actual gameplay at last. Try to control your salivation.

Wednesday, June 9, 2010

Solamente un poco

You don't get much out of me today, sorry. Just an elevator that's always going down to pursue an abstract noun...
Like the checkerboard effect? I'm voting this thing won't actually work to get to most suites... otherwise, my beautiful overworld would go to waste. We can't have that, no. If I manage to conjure myself from sleep early tomorrow (urgh... today), the existing suites will hopefully get doors (with room numbers!) that will lead to the random guestroom dungeons which... I still need to work on. I could really use some help with mapping... I wonder where the best place to look would be.

Tuesday, June 8, 2010

Reflection on the Self

Two simple updates today. First, a suite that hearkens back to "S lf Hotel," the poem I wrote ages ago that inspired this entire idea. Criminal on the run from thought, you must examine yourself. Introspection in a roguelike, naturally, means an @.



Second, we have the antechamber of the random guestrooms. First, before many of the numerous sliding-wall traps have been activated. And second, after most of them are firing. They'll be hidden much better, as will other traps, but basically you follow a little corridor before you reach the actual guestroom. The rooms won't be all that random; I'm whipping out some ASCII art skills and funky perspective to make them look interesting. I still wanted a random component, thus antechambers. 


So, progress. I have ambitious plans for tomorrow as usual, and I will deliver what I can. Few new ideas crept in for guests and their stories today, but I really feel like I need a sprawling hotel with tons and tons of floors before I can implement these guys. Plus, some of my work tomorrow will be working on an interact command and textual descriptions of regions all interactive fiction-style. Things're coming together. I smell a trailer once this "episode" is playable.

Sunday, June 6, 2010

Eight-legged Torsos

I revoke my previous post; dual screens are absolutely worth it once set up properly. The trick was Twinview and trusting xfce over compiz. I have free time the next few days, so expect more progress.

Oh, and the pool's open.

More like a sauna, really. Not sure what should happen in here... I guess some intimate players might want a little section of their own. Surely some of the guests with steamier memories might visit this place... More soon. :)

Saturday, June 5, 2010

More trouble than it's worth

You have no idea how guilty I feel about skipping a day. Well, good and bad news... Yesterday, I created the lock-and-key floor, pimped out the overworld with more coloring and signs, and got a great start on the spider-themed pool (oh yes, prickly).

I would've had everything up, but I went out and didn't come home early, as usual. So today I have spent all of my time home trying to get dual monitors set up properly. If you just want a super-wide screen, Twinview's great, but I can't stand that setup... I want certain things to be bound to each screen. When I alt-tab, I don't want compiz grabbing from both screens. Compiz can't bind a screen to a workspace. So apparently what I want is not Twinview but to run separate X screens. This nearly works... except xfce and every other WM can't handle this so far. Lovely.

Anyway, I'll be out again tonight, but the server's up, and hopefully I'll have the pool done (right now, pool's closed -- couldn't resist) and corresponding pictures. Cheers!

Thursday, June 3, 2010

The Spider's Thread of Thought

The map editor now correctly handles conveyor belts... making new ones, deleting them, storing properly in files, moving, resizing... this was rather taxing on my analytical skills, but in the end, the code is well-designed and functioning. I've used it to considerably sharpen up the hotel "overworld," somewhat inspired by Hogwarts' staircases of doom. How's it look?



I've yet to really play with lighting on these new levels. The traditional orb-shaped FOV really doesn't apply. So I'm still pretty awake; my DVI-VGA adaptor hasn't arrived yet, so the novelty of dual monitors isn't there to distract me. I just might update later with a fleshed-out lobby, new floor, or random room design... who knows, maybe all three.

Maintenance

But not quite on MnemonicRL. Today I had work, and then my new hardware parts came in (800GB drive -- internal, kthx, DVD burner, and Geforce 210). I've spent most of the evening slacking around and copying partitions. However! I revamped the now less hideous "BDSM::Toy" class... meaning very soon, you can move and resize conveyor belts and other fun dungeon features in real-time in the editor. This is much trickier than it sounds. I haven't felt like mapping today, but I may unwind later by fleshing out the random rooms... I found lots of inspiration for furniture and other things within. Later!

Tuesday, June 1, 2010

To be in a place

What is the difference between looking at a map in its entire glory and actually walking through, playing on the conveyor belt staircases, casting your shadows upon the walls...? See for yourself... the Hotel is now accessible from the left-most staircase in Cyphen. That includes the lobby (needs the chandelier and some color), the overworld (needs color and possibly real-time degradation of the rings as the delusions increase, and the keyboard symbol dungeon.

I didn't accomplish everything I wanted to today, but with my time left tonight, I'm going to sketch some random room designs, try to fix the parent.pm bug that is more present in the Windows releases than I thought, and finally work on the conveyor belt dungeon feature and try to get that integrated in the map editor. You have no idea how tough it is counting coordinates to place these buggers.

Monday, May 31, 2010

Oh yes, I have pictures

Changes, ahoy? Alright, first we've got animated water... it's not perfect yet, but basically you will be able to see a river flowing or a fountain gushing. Because my cleverness occasionally rivals my ego, this effect actually adds very little lag to levels. Still needs tweaking, but checky:











Alright, next we've got a map that resembles something... oh hey, it's a giant keyboard. Each key is a room... but what will be inside? What could this be for?


Finally, we have a lobby of a hotel... officially my new focus. The chandelier will swing, that's a fireplace to the left, and an elevator to the right. So what's the deal with the hotel, anyway?

Well, some guests in Cyphen seem to cling to their old memories a bit too much... this is dangerous for them, according to the conspirators. The hotel does everything it can to 'accomodate.' So the best the staff can do is keep the guests trapped in a time loop... they re-live their last 24 hours of life over and over and over... your job is to break this pattern. So you talk to them, slowly unravel their memories and the secret of their death (don't forget, Cyphen is a purgatory for suicides...) by following them, discovering mementos, and ultimately triggering total recall by interrupting their routine. Roguelike elements remain... hopefully I can get their paths, memories, stories, and locations randomized. Also, there will be much fighting in the randomly-generated hotel rooms and "boss battles" with staff members who fight to maintain their guests' delusions. I have a great many ideas for floor layouts and room designs, of course, and I will be posting screenshots as I get them translated from paper sketch to ASCII. I also hope to have the maps online and accessible sometime tomorrow.

So you can't say I haven't been busy.

Sunday, May 30, 2010

Don't feel abandoned

I just haven't been awake or home. My schedule grows ever more sporadic. I feel bad for the lack of updates yesterday, so I've improved the lighting/field-of-view effects. Only trick I haven't managed just yet is colored lighting... The masterpiece of interactive fiction called Phototopia proved how well color influences mood. The player's shadow may do the same, particularly in a desolate hotel's twisting hallways.. Any overhead game risks losing mystery since so much of the level may be seen at once, and proper lighting can remedy this. I am frantically sketching drafts of our future home... Then even when you leave your room, you will never be able to leave your room, eh?

Friday, May 28, 2010

On the seventh day

He shall rest! Mostly because I'm going out with friends. Rest assured, late last night after my analytical mind had dozed off, my creative came alive and furnished my idea of Cyphen's hotel with a plethora of fantastic ideas. I'm going to experiment with the gameplay style of Earthbound... combat's quite present, but exploration and storyline and puzzles are just as vital. Attacks won't go to waste, but since nothing is well-balanced yet, leveling and grinding is not a focus at all. More later.

Thursday, May 27, 2010

Map Editor

I do think I kept my own bet o_O. Go grab the latest update, then check out tools/editmap (run it from tools, aka cd tools and then ./editmap). Your maps will be saved to saved_maps (go figure) in the same directory where perlrl/ and mnemonicrl/ and the rest stay. Should be very self explanatory. Copy over Cyphen's map from mnemonicrl/content/cyphen.map to the saved_maps directory and try playing with that. Basically I have a few features left to add to make editing faster for us humans, but it's perfectly usable. It'll be completely done in an hour or so. Huzzah!

Targeting

Through the magic of non-blocking input loops and POE, targeting works great -- even if the thing you're targeting moves. Pressing capital H, J, K, or L will quickly fire in that direction, since that's often what people intend to do.

So as usual, I'll be busy later, but I'm making a bet with myself... can I find and fix up the old map editor by tonight? The old one got a bit convoluted... messing with the different layers is annoying. New things I want:
  • Easy resize command
  • Menu for opening/saving files
  • A way for players to go play on their map
  • Perhaps -gasp- online editing while they're on the map?
  • A mode to simply freely type in the symbol layer
  • A way to select a chunk of map and make some change to it
Sounds reasonable enough. I have ideas for maps I want to quickly try out; this'd help. For moving obstacles or anything fancy, a BDSM::Agent::Sprite is ideal. If it's movement pattern is periodic (hence pattern), there should be a simple way for a non-me (yes) to specify it. Perhaps letting them control it, recording the movements. Then asking if they want similar timing or not.

Wednesday, May 26, 2010

Sixteen Days

Slightly over two weeks after poking at year-old code, I have finished recovering all of MnemonicRL's old functionality. Attacks weren't bad once I had the revelation to standardize networking and graphical patterns. All of them seem to work fine -- do pipe up if one doesn't -- including my favorite, the Alchemist's flood attack. I'm rather worn out, but I just wanted to post to encourage people to go play. It'd be great to have some company.

So what are my next priorities? This is new terrain...
  • Find mappers for static areas or just to make an example of a level so I can randomize it. Gotta clean up the old map editor, make it easier to use.
  • Play with my idea for a hotel dungeon set.
  • Work on monster behavior and decide -- just for starters, to avoid making the turn-based/real-time debate a prerequisite -- how quickly an initial batch of them should move in multiplayer and singleplayer.

Tuesday, May 25, 2010

Attacks and a Theme (Of the Literary Sort?)

Sorry for the slow pace. Basically, I've figured out how to separate attacks properly. The BEFORE stage (fullsim only, recount) merely handles checks, intelligently serializes the data, and the ON stage shall now handle range-resolution (finding targets) and damage calculation. This is simple, actually. Now timing can be internally implemented with my snooze() function, a little POE trick to blockingly idle inside a subroutine. In the client or singleplayer mode, the View may inject its code to draw animations. Anywhere that's fullsim (server or singleplayer), the appropriate snoozing will occur and then the attack is executed as usual.

The short of it, though: I'm off to visit friends. If I make it back before the A.M. (dubious), I'll have it working.

My other idea... I want a themed dungeon set as soon as possible for people to seriously play. Aether Plains is a grand idea, but cloud generation and elevators and such is incredibly tough. It still works from last summer, but improvements will require rethinking and... you should all know about how long that takes now. So I'd like to expand another idea, instead: the Hotel Asymptote (probably to be renamed) in Cyphen. My jumble of ideas:
  • Players may create and furnish their own rooms
  • Playing with the concept of height / moving between floors
  • Messing with your conception of whether you are inside or outside... which walls may be hollow? Why assume walls do not slide, rotate, pivot...?
  • A fully trained staff to cater to your every needs... but do you remember what it is you were looking for...?
  • A way to use your attacks and gain experience without fighting monsters... per say.
  • Parties. The sort  with music and dancing.
  • Visually, light will become a much more valuable commodity than it is in the perpetually lit (or unlit?) Cyphen.

Monday, May 24, 2010

Server down tonight

On account of me physically bringing it somewhere. Sorry. I haven't forgotten about attacks either, don't worry.

Sunday, May 23, 2010

Sunrise of Bugs

But they're all fixed now. There were numerous issues with logging errors, timers, snow, and even one client changing maps and causing everybody else's client to run naughty code as well. All fixed. Thanks to the one tester who invoked these errors; I remember your name from last year. I did not wake up with a magic solution for attacks yet, but then again, I haven't really thought about it yet. Work soon and a quest to acquire a second monitor, so wish me luck. More updates tonight, mayhaps.

Saturday, May 22, 2010

Rethinking Attacks

So it's been a quiet release day, especially considering the time I posted. I cleaned out the 'EventDB' class which used to handle the wacky reaction dispatch as well as POE timing. Now it's just the latter. I had started a crappy attempt at a turn-based mode as well last summer, but I've cleaned all that code out. I'll start fresh later. It's easiest to think in terms of normal time... action order will easily translate; take the "2.5 second lag" after casting a spell and compare it with the "0.9 movement lag." Presto, a priority queue.

But right now I want to think about attacks, the last thing left to "fix," and also the thing that's keeping cool tricks like the explosion effect working. I'll talk about what exists from the old client-server days, and that process will probably help me realize how I should design it now.

Attacks have effects aside from immediate damage... draining a stat, preventing a stat from regenerating, preventing movement or attacking, stealing an item from the victim, suicide of the attacker, summoning more monsters, cursing an item... really simple stuff, actually. Some of them entail things happening on the clientside, which gets confusing of course when client and server are technically one (the standalone/singleplayer version)... but that just means take out networking and run "fullsim" (full simulation) and graphics code.

The tough part seems to be my stage system. Right now, actions are split into 4 phases... PRE occurs only for human players, that's to figure out an action entirely, as in choosing what to drop or what ability to use. BEFORE happens only in fullsim (server or standalone, not multiplayer client) and ensures the action is valid. I also cheat a few times and perform fullsim-only things. Then ON and AFTER happen everywhere. Most graphical things occur in AFTER's, my new trick is to "inject" these actions into the appropriate object rather than muck about with a wacky event dispatch system or if (we're supposed to draw stuff) { then draw it }. So anyway, the stages presently:

stage 1: transform 'aim west' or whatever into a list of targets. "ranges" could be: adjacent, custom (for fun fireball effects), a straight line that terminates or continues as it hits targets, and a block shape. The challenge is that most of these ranges, even if the attack fails or doesn't hit anything, entail something being drawn. Stage 1 is called in BEFORE, so it's a tad messy to just send a list of map tiles to update if we're the server, yet... we do that! I'm thinking of determining targets in stage 1, serializing that information intelligently, and simulating stages 2 and 3 in ON and AFTER like normal.

stage 2: Ah, I remember why I split these. What about delayed attacks? We calculate targets as soon as the attack is requested, but we don't want to deduct HP and print messages until the attack would hit the right target. The timing right now is completely graphics-based, but it actually makes sense to separate this out a bit.. graphics and damage both depend on timing, which is a game-state concept. (The fireball travels at 1 square per 0.25 seconds) Confusingly, stage2 / ON also calculates damage.. That's problematic. Damage calculation involves random numbers often, so it's too late to distribute more information. But since all stats are maintained by the full-sim component and sent to the client if we're networking... things should still work out.

stage3: Pretty much run through effects. Oh, and this is where I was printing damage messages. Hrmm.

Well it's late now, but I have a better idea of what to rehaul in the morning, and I've given you a startling insight into my thinking process. My apologies.

Alpha Re-Release

It's here! You should play. There are still bugs galore, but the Windows port works just as well as the native after some help from cygwin. I was considering swapping the current "download code and unpack" update system for version control like bzr (which I use internally), but then I have to assume source users have bzr and get it working in cygwin. No thanks. Besides, the project encompasses about 4 separate source trees, and I haven't tried a super-tree yet.

Anyway, I'm exhausted from work (my job relates to one of the playable classes somehwat... guess which one?), so I'll bugfix later. Hopefully everything will be as it used to be (but with proper design internally!) in a few days. Then I can work on recruiting gameplay balancers to make this fun...

Friday, May 21, 2010

The Frustrating Things are... Frustrating

Well, I actually spent most of the day so far fixing the code more, so that makes me happy. Attacks still don't work, but there are fewer and fewer regressions since the peak of MnemonicRL last summer. As promised, I've worked on deployment today as well. I've got the Linux/source version running exactly how I want it. The Windows version is going to be fickle, but I'm pretty much borrowing most of the setup from last summer. That nasty 27MB download and install is pitiable but unavoidable... Cygwin. Pity building Curses.pm on Windows is nigh-impossible, and POE::Wheel::Curses depends on some odd select() wizardry that Windows can't handle. Ah well.

I've decided to publicly announce the re-release tomorrow if I can get Windows built, but with the disclaimer that things are probably still broken. People with high expectations can just stuff it; this is hard work. All the same, I enjoy it, and it is so worthwhile when the first player logs on...

Thursday, May 20, 2010

Don't attack, Pacifism reigns

Work has kept me busy today, but I've still managed to bugfix like mad. Everything seems to work equally well on both versions of the game... except attacks. Admittedly, these're the fun things to play with... even items like bombs with an exploding effect use the attack system, so it is a great priority to fix these!
As promised, I will stop wherever I'm at tomorrow morning and haggle with cygwin for a few hours so I can have a release ready for Saturday. I'm conflicted about where to announce the re-release, however. I don't want too much attention before I've got something really new to show off. Does the public understand how busy I am and how quickly I try to get things done?

Wednesday, May 19, 2010

Three Faces, One Mask

Client, server, and standalone are now properly separated. Components include graphical bits, hooks to fully simulate game-state, and client/server networking, thanks to the awesome Perl modules POE. Basically the release this weekend will have something new -- working singleplayer. Fighting monsters and stuff will still be buggy, but that is my next focus. Well rather, I will find a way for you to help me with the gameplay side of things. I'm rather fatigued, so later.

Ahead of Schedule

When have I ever been ahead of schedule?! I've allocated today and tomorrow for simply rehauling the code and getting old things to work again. However, last night I finished separating the bulk of the UI/networking code from the gamestate stuff. During a walk, I also had another thought -- why stop there? In the future, if I write lots of code related to item-handling, why not group it in a file? The Character object is responsible for drop/grab/equip/unequip, and the item is responsible for whatever it does, but it makes sense to have the code in one spot. There's no reason I can't use the same simple action injection trick (fancy wording for "switch to the right package and declare a new subroutine") I am now for the other components.

Anyway, I have to serve the dusty overlords today (I work ^^), but I've got all of the old MnemonicRL content working again... that'd be the playable classes, monsters, and items. Being ahead of schedule perhaps means I will have time to get the single-player game working before the release. So at the front menu, you could change your online character and connect or start a temporary game. Exciting!

Tuesday, May 18, 2010

On Separating Minds from Caffeine

Why am I not working on new gameplay right now? What could be more important? Well, the problem I ran into last time was simple: I can't balance a roguelike to save my life. What factors determine how much damage a weapon-based attack does? The player's strength, skill with the weapon, the weapon's power, the enemy's armour, skill with the armour, and their defence. Oh, and aside from balancing those stats relative to one another, also note that the distribution of healing items and equipment is relevant. And of course when you throw in multiple players or make the dungeon real-time... oh, the details, how they pile.

So that's the part of game-making that I absolutely loathe. However, I have friends who love to critique games for being too easy or difficult due to over- or under-powered items, monsters, etc. After all, wouldn't you enjoy helping out? I'm working on a way for players to edit the game as they play. You guys are going to help make this.

On the technical side, online editing of game content isn't that tough at all. It is a hefty addition of code, though. Since I've decided to allow for both multiplayer and singleplayer gameplay, I have some code to organize. Everything that happens under the hood in Cyphen either consists of this abstract game-state with tons of interactions; graphical nonsense so it looks pretty on the screen; and networking code to make sure the client and server are properly communicating. Slapping 'if we're the server, do this... if we're the client, do this.." everywhere gets... ugly. So I'm engineering something better.

Game actions have always been split into parts, so that the server might check to see if a move is permitted before wasting all 30 players' time with the information. I'm uninventing one of the wheels I reinvented last summer... multimethods. In traditional object-oriented programming, methods may be overloaded based on the caller. However, the action of an Artist quaffing red paint juice could be different than a Historian downing green paint. Rather than my nasty old event-reaction table, I've reverted to callbacks for the direct objects of actions. This simplifies things.

So, status update: I'm making great progress with my changes. I said a release by the weekend, which means I only have another day or so to rehaul code before I dig up the old Cygwin nonsense to get you Windows folks your executable. Wish me speed.

Welcome

I started MnemonicRL in the summer of 2009. My previous roguelikes were all duds; EmotionRL had a mildly amusing demo that some people actually took the time to beat, and HalloweenRL would later become Rigor Mortis Online, an unrelated game. However, it only took about three months to release a multiplayer roguelike. The trailer caught attention, and the debates about permadeath in a non-MMORPG MMORPG on rgrd began. Meanwhile, August arrived, and I suddenly had to concentrate on life again.

So I apologize for my length delay, but I am back for another summer, at least. With college in the fall, I can't make any promises about time, but I will try my best to keep the project running.


My current goals are to get the game running again and released so the players that were kind enough to playtest last summer may return. At present, I am in the middle of overhauling much of the code -- I'll talk about that in other posts. Once things run, I will ensure that they run in the client/server multiplayer mode and with a singleplayer option. The best way to appease traditionalists who want a coffeebreak game and role-players with the desire for permanence is to support both gameplay styles. This isn't that hard to do, actually. Another debate I haven't settled yet is when to employ real-time vs turn-based gameplay. I think both are useful in different situations, so I'm working to support them.

Well, I'm going to add more pages to the blog. If you'd like to support me, comment on my ideas -- this is a game for you, after all -- and play when I get the release out. I'll see you soon in Cyphen (or perhaps Uben)!