Torchlight Screenshots
Steam is is like an iTunes Store for computer games. It was recently released for the Mac, and Torchlight was among the first “Steam powered” Mac games available. It’s a dungeon-crawling action RPG reminiscent of Diablo – and that’s a good thing. I have to admit I’ve been playing it quite a bit since buying it as an early birthday present for myself. (I’m also pleased to report that, unlike many other modern games, it runs well on my first-generation MacBook, at least with the “Netbook Mode” setting enabled.)
Torchlight provides a built-in screenshot function to save snapshots of your adventures. The keyboard command is Shift-F9. The screenshots are supposed to be saved in ~/Library/Application Support/runic games/torchlight/screenshots/
. However, presently they are written to the torchlight
folder with a filename like screenshots\05222010_081129195.png
. If you look in ~/Library/Application Support/runic games/torchlight/local_settings.txt
, you’ll see that the SCREENSHOT PATH
variable includes a backslash, so the path gets misinterpreted as part of the filename on Mac OS X. Fix it to read as follows and your screenshots will be filed appropriately:
SCREENSHOT PATH :screenshots/
I’m sure that was bugging you.
Posted on Saturday, May 22nd, 2010.
Collective Behavior Model interface
Here’s an update on the model. As a convenience for the purposes of debugging and experimentation, I’ve added a “dashboard” readout that can be used to display any variable. I’ve also added manual controls to adjust the behavior parameters while the simulation is running. It’s fun! You can cause the agents to clump together, disperse, or exhibit other apparent patterns. Lastly, I’ve added a rudimentary pause mode (bullet time, as I announced to all within earshot upon implementation).
Pausing is handy, but I expect it will need to be rewritten in a way that allows more continuous control of the simulation speed – slow motion or step-by-step modes would also be nice.
Still lots to work on and review in the model itself. In particular, I want to examine the turning rate code; I see a lot of jittery motion that suggests something may be off.
Want to see and hear more of this project? I can continue to post updates. Some will be more focused on the concepts of the model and some will be more focused on the implementation – for example, I don’t really know much about Java, so I may post code examples of whatever strikes me as clever or confusing.
Posted on Thursday, May 13th, 2010.
Working on a Model of Flocking Behavior
A month or so ago I started working on a simple model of “flocking” behavior, based on work presented at a seminar I attended. I implemented most of the math, but left the visualization for later. It lay fallow for a few weeks. Over the past two days, I dusted off the project and added some simple graphics. It works!
Try it out for yourself right here (Java plugin required). The current camera controls are designed with a three-button mouse in mind, but support for the center button (scroll wheel) seems inconsistent across browsers. Hey, it’s just a demo.
Here are a few slides from a brief presentation I gave to my colleagues when I began this project.
Iain Couzin gave a talk in March as part of the EvoS seminar series. Iain’s research program involves computer modeling and experimental observation of collective animal behavior systems (schools of fish, flocks of birds, herds of ungulates). Rigorous feedback between theory and observation was evident in his work. It was inspiring.
Iain’s presentation catalyzed interest in agent-based modeling in our lab (I am an affiliated staff member). Others jumped in with NetLogo, but I decided to see what I could do with Processing due mainly to my recently rekindled interest in the language. The Obsessive Camera Direction library makes it easy to navigate the visualization.
My implementation is derived from two of the publications which formed the basis for much of the work displayed during Iain’s EvoS seminar. The first paper describes the basic rules from which a variety of flocking behaviors can be elicited, depending on particular parameter values:
Couzin, I. D., Krause, J., James, R., Ruxton, G. D., & Franks, N. R. (2002). Collective Memory and Spatial Sorting in Animal Groups. Journal of Theoretical Biology, 218(1), 1-11. [PDF]
The second paper adds goal-oriented behavior to the model and explores the effect of different proportions of “leaders” in a group (how many cooks constitute too many cooks in the kitchen?):
Couzin, I. D., Krause, J., Franks, N. R., & Levin, S. A. (2005). Effective leadership and decision-making in animal groups on the move. Nature, 433(7025), 513-516. [PDF]
My implementation does not yet include any goal-oriented behavior, but it is designed with the addition of this and other extensions in mind:
Here’s a conceptual diagram of how the pieces of the simulation are arranged. Every speck you see flying about is an Agent, and every agent may exhibit one or more Behaviors. A Collective behavior dictates the direction an agent will move based on its proximity to other visible agents. This design may be be extended to model the interaction of multiple agent types.
Whether I proceed with all or any of the potential improvements to this model is an open question. I may decide to apply this approach to other problems more closely matched to existing research programs at BU. However, I do think it would be swell to develop and test this implementation sufficiently to replicate the varied patterns presented by Iain Couzin.
Posted on Tuesday, May 11th, 2010.
Using LDView to make it easier to add parts to your LDraw library
A common concern among LDraw users is how to add new parts to their libraries. Often, “in-progress” versions of desired parts are available in the LDraw.org Parts Tracker (get involved!), but downloading and installing them manually can be tedious. If you don’t want to download every unofficial part, you can let LDView download and install the parts you want for you.
First, identify the number of a needed part. Let’s suppose it’s this brick:
It’s not yet in the official part library, but an unofficial version of 60475 is in the LDraw.org parts tracker. You can download the unofficial part and its prerequisites manually, or you can create a dummy model that requires it, and let LDView retrieve the files you. Here’s how.
Create a file consisting of a single reference to the desired part, 60745.dat:
1 71 0 0 0 1 0 0 0 1 0 0 0 1 60475.dat
Let’s call it download.ldr. Next time you want to download a new part, just change the highlighted part number (or add a new line for the new part; it doesn’t matter how the parts are positioned):
LDView can download missing parts automatically. First, make sure “Automatically check ldraw.org for missing parts” is checked in the “Updates” tab of LDView Preferences:
Next, open download.ldr in LDView. If it’s already open, reload it. (This will happen instantly if you’ve selected “Auto-update immediately” from the File → Polling menu.) When LDView loads the model, it will attempt to retrieve any missing parts from the parts tracker. After a moment, your new part should appear:
The new part (and any prerequisite sub-parts or primitives) will be added to your library:
To use your new part in Bricksmith, click “Reload Parts” in the “Parts” tab of Bricksmith Preferences:
The new part will now be available in the Bricksmith Parts Browser:
So, the point is that if you want to use a part that’s not yet in your library, just paste the part number in download.ldr, open it in LDView, and reload your parts library in Bricksmith.
Posted on Saturday, April 24th, 2010.
LDTrim Service
LDTrim is a little command line utility I wrote to help format LDraw code. Using Automator in Mac OS X 10.6, I made a Service that applies LDTrim to selected files in the Finder:
The screenshot above shows exactly how to set it up. So, if you’re cleaning up a lot of old LDraw files, now you can do it with nothing more than a right-click on the file or files of interest.
Posted on Sunday, April 18th, 2010.
NetNewsWire Folders
I use NetNewsWire as my newsreader. I like it, but I wish that it would display a list of posts (or even just unread posts) from subscriptions in a folder when that folder is selected. This is how Google Reader works, and it is a sensible behavior. Perhaps I’d like to read all bike-related news, instead of opening the folder to look at items blog-by-blog.
Is there an option I have overlooked that enables this sort of behavior?
Clarification: NetNewsWire does this with unread posts – all new items from subscriptions within a folder appear together when you select the folder – but I’d like to be able to browse all items, whether or not they’re new.
Posted on Friday, April 16th, 2010.
A Phenomenal Handheld Electronic Device
There’s been a lot of talk about incredible new portable computing devices recently. Well, the rumors are true – the TI-92 is a great machine. The hardware is solid, the software is sophisticated and extensible (lots of apps; the graphics were ahead of its time), and for all practical purposes the batteries never die.
Posted on Saturday, April 10th, 2010.
My Interpretation of the Litany Against Fear
Dune is a work of fiction, but it presents philosophies I accept as powerful kernels of real-world wisdom. Here is the Bene Gesserit Litany Against Fear, introduced in Herbert’s 1965 classic:
I must not fear.
Fear is the mind-killer.
Fear is the little-death that brings total obliteration.
I will face my fear.
I will permit it to pass over me and through me.
And when it has gone past I will turn the inner eye to see its path.
Where the fear has gone there will be nothing.
Only I will remain.
Confrontation and acknowledgement transforms fear into an understanding of risk. To face fear – or to embrace joy, for that matter – is not to be deluded by denial or delight, but to be human: to recognize emotion as an indicator of important experience.
As a cognitive tool, the Litany guides us to observe and identify sources of uncertainty. Observation changes challenges by changing how we see them; the paralyzing fog is dispelled by our gaze to reveal specific obstacles that can be attended to in turn.
I think this is especially useful as an approach to the anxiety that can sometimes inhibit opportunity or ambition. What will you tackle next?
Posted on Friday, April 9th, 2010.
Yank My Chain
My bike chain collects a lot of grit and gunk, especially when I ride in the rain. Grit makes the drivetrain operate less smoothly – I hate the crunchy, fragile feel of a chain full of road cinders. Hauling the bike in to the bathtub may be fun, or funny, but it is cumbersome. Of course, the chain is most easily cleaned by itself, but that still makes a greasy mess. So, I finally went the gadget geek route and bought a Nashbar chain cleaner.
Not that I mind the occasional greasy mess.
Haven’t used it yet, but I’ll let you know how it goes!
Posted on Wednesday, April 7th, 2010.
Hugo Nominations
The nominees for the 2010 Hugo awards were announced today at Eastercon. I mention this for three reasons:
- StarShipSofa received a nomination for Best Fanzine. This is the first time a podcast has been on the ballot for a Hugo award. I began listening to StarShipSofa late last year and quickly became a fan; many of the short stories I’ve mentioned here were heard on the ‘Sofa. In February, I voiced my support for the good ship’s nomination campaign in A Hugo for the StarShipSofa, so I am quite pleased to see this recognition for everyone involved in its production – especially editor Tony C. Smith.
- StarShipSofa qualifies as a “fanzine”, but there’s nothing amateurish or obscure about it or other popular SF podcasts. In the few months since I started listening to these shows, I’ve heard a number of the stories that were nominated and learned of a few more. (I suspect I may hear even more as I work my way back through the archives.) For example, I heard and reviewed The Gambler by Paolo Bacigalupi via ‘Sofa 121; on the strength of that story and other online recommendations, I bought, read, and enjoyed Paolo’s debut novel The Windup Girl, which is among the candidates for Best Novel.
- I take the remainder of the nominees – those I haven’t read, heard, or heard of – as worthy additions to my reading list!
A few notes on other notable nominees:
- I haven’t read Peter Watts’ Best Novellete-nominated story The Island, but I did read and review his novel Blindsight. I’m glad for that bit of good news amidst other dismaying developments in Peter’s life.
- Although I haven’t posted any reviews yet, I listen to the Clarkesworld magazine podcast and have notes on a few stories, including Best Short Story nominee Non-Zero Probabilities by N. K. Jemisin. Clarkesworld itself is a nominee for Best Semiprozine. Again, I emphasize that podcasts provide great exposure for some of the top content in the genre.
- Somewhat surprisingly, I’ve seen every film nominated for Best Dramatic Presentation, Long Form: Avatar, District 9, Moon, Star Trek, and Up. I’m not sure which I would vote for.
Posted on Sunday, April 4th, 2010.