[HN Gopher] How Dwarf Fortress is built ___________________________________________________________________ How Dwarf Fortress is built Author : andreareina Score : 643 points Date : 2021-07-29 14:04 UTC (8 hours ago) (HTM) web link (stackoverflow.blog) (TXT) w3m dump (stackoverflow.blog) | umvi wrote: | My favorite TIL about this game is that it is developed | completely without VCS like git. | smoldesu wrote: | Dwarf Fortress was a staple of my childhood, even if I only | understood maybe 5% of the mechanics going on at any given time | (even back when I used to play it). That was part of the appeal | though: if you could learn how to do something in Dwarf Fortress, | it felt like an accomplishment. Learning to dig better bases is a | several-hour research project, and simple tasks like brewing beer | can proliferate into any number of different problems. This kind | of trial-and-error problem solving is probably responsible for | getting me into development. | | Nowadays though, I mostly play Rimworld for my colony management | fix. I love Dwarf Fortress, but I could never comfortably learn | it's mechanics in a lifetime (let alone several). Even still, the | emergent, chaotic gameplay of Dwarf Fortress should be picked | apart by any budding game developers. Even after 15 years of | playing PC games, Dwarf Fortress still feels the most "next gen" | out of them all. | chaostheory wrote: | To me what was most surprising about Dwarf Fortress, given the | complexity, is that Tad didn't use git or any other code | repository until more recently. | AstralStorm wrote: | Well, if you deeply understand the code and reasons behind it | (or it's superbly documented esp. with tests), the tool does | not bring much beyond being a convenient backup or checkpoint | system. | | And especially if you don't have to work with a team. | reader_mode wrote: | I mean using SCM became the norm in maybe last 10-15 years ? | When this was started I don't think using SCM was as ubiquitous | as it is today, not to mention on a solo project. If you've | been hammering away since then I can see how you might have | missed it. | usefulcat wrote: | In 26 years I've never worked anywhere that didn't use SCM. | foobiekr wrote: | SCM was commonplace by the mid 1980s at the latest. My CS | program used CVS to submit code in the mid 1990s and as a | network engineer we used RCS in 1990. | smcameron wrote: | I remember using sccs in the '80s. | ska wrote: | > I mean using SCM became the norm in maybe last 10-15 years | | more like 30, at least in a lot of the industry. Even just | looking at open-ish systems, people were excited about SVN in | what, 2000?, because they had been working with CVS for | years, if not a decade or more, at that point. | dangoor wrote: | Pretty sure all of my professional work used SCM starting in | the mid-90s (CVS). May not have been the norm for solo devs | at that point, though. | reader_mode wrote: | https://www.joelonsoftware.com/2000/08/09/the-joel- | test-12-s... | | I've seen this post brought up as relevant regularly up | till 2010. | | You may have been lucky to avoid the dredges but SW | industry in the 2000s was a copy-paste fest (not in the | "copy from stack overflow" sense but as in "copy paste | instead of creating a function"), PHP with SQL in templates | and string concat queries all over the place, MVC was a | revolution. I'm not saying this was everywhere just that it | was very common. | | I'm sure some wise guy will come up with retort that MVC | was used in the 70s and what not, but my point is _a lot of | the industry_ discovered it with Rails and Django. | | The way that we teach programming these days and | languages/tools/frameworks just make some bottom tier | mistakes from the past impossible (or very impractical). | People often ignore this context when evaluating modern | framework | coliveira wrote: | In the Windows world SCM was not generally available | until SVN was released as a File Explorer extension. This | was sometime in the 2000s. Git took several years to | become viable on Windows. | GordonS wrote: | IIRC, Microsoft's TFS (Team Foundation Server) also came | on the scene in the early 2000's. I first used SVN around | that time, before TFS became the standard at Microsoft | shops. | andrewaylett wrote: | My first employer out of university kept their code in | Visual Source Safe, Microsoft's _first_ attempt at a VCS. | | It was really, really bad. | | My second employer used CVS. Tags were fun back then -- | each file was versioned separately so committing multiple | files while a tag was in progress might result in only | _some_ of your changes making it into the tag. My big | innovation there was to add a validation step to our | build machine to ensure that the tag matched the state of | the branch once the tag had finished, and add the tag to | the build version number. Presto: we can actually see | which code was built into that day 's full build :). | kryptiskt wrote: | There were plenty of proprietary source control systems | around. At my first job in 1998, we used Visual | Sourcesafe, later switching to Perforce. | | At another job I had the misfortune to get to know | Rational ClearCase. | Octopodes wrote: | Am I mistaken, or isn't his given name "Tarn?" | AnIdiotOnTheNet wrote: | Why would that be surprising? For a single programmer working | alone Git is an incredibly complicated tool. | | P.S.: A lot of you are confusing "complicated" with | "difficult". | Pet_Ant wrote: | Or any other is the point. I mean even locally I depend on | commits as save points to just allow me to go crazy and | experiment with the code. I mean you can just copy the | codebase elsewhere as backup but using git or mercurial is | easier than that. | nolok wrote: | Not saying you're wrong, but to explain "how is that | possible over 20 years without ever blowing things up": he | says he uses visual studio since the beggining (the full | blown ide). | | Since he's working alone, he can easily use the local | backup feature of it, which allow to easily rollback to | automatically made copies of files, diff and cherry pick | between current and backups, etc ... It's basically done | automatically for you. | | As long as you save your project regularly and don't need | to merge code with anyone, it can go a long way. | AstralStorm wrote: | Actually extremely easy. Git add -a, git commit, git push. | | It only gets complicated if you try to do complicated things. | nhooyr wrote: | I believe it's: git add -A | | With a capital A. | kapp_in_life wrote: | Is it? That's when git is simplest, having a single branch | and never merging removes most of the complexities of git. | AnIdiotOnTheNet wrote: | Sure, but it also removes most of the reason to use Git. | outworlder wrote: | The main reason is the ability to undo mistakes. Or | compare working code with non-working code (including | bisect) | | That's very valuable even when solo, and worth typing a | "commit" command once in a while. | burnt_toast wrote: | Personally, I started using git for my projects after I | accidentally deleted a good chunk of source code and my | closest backup was several weeks old. | GordonS wrote: | The exact same thing happened to me, and I kicked myself | hard for it. At the time I used source control at work | (TFS and SVN; git wasn't yet ubiquitous), so I didn't | really have an excuse. | | I've used source control for all personal projects since, | and it's in no way a burden. In fact, there have been | another couple of instances since the first, where I | would have lost a bunch of work without it. | potatoman22 wrote: | In my experience, most people use git as version control. | Branching etc is very useful, but not necessary for a | 1-person project. | flatiron wrote: | It is if you want to bug fix released items but keep | steam rolling features for the next version. | tonyedgecombe wrote: | I find branching useful whilst working on my own, I | certainly wouldn't want to go back to CVS/SVN. | hhjinks wrote: | Don't underestimate all the useful information a complete | git log contains, even for solo developers. You can look | years back and find out exactly why a change was made. | emteycz wrote: | I invite you to try using Git as much as possible for two | weeks. After a week I started using Git for branching out | of my main branch to test several different ideas and | then compare them at once with other developers - | colleagues or friends. I think that moved the meetings | and discussions with my teammates up a level. | AnIdiotOnTheNet wrote: | I have used Git when working with FOSS projects, and I | tried using it for my own but it never took. The sort of | workflow it is built for just isn't how I like to do | things when I work on my own. | mypalmike wrote: | Solo workflow is as simple as write code, git commit, | repeat. Throw in a git push every once in a while. All on | master, no branching or forking. | AnIdiotOnTheNet wrote: | That's a lot of commandline I don't normally have to | bother with. And if I'm not living in the commandline | then I only end up running git when I reach some | milestone I want to back up... which I can do just as | easily with 7zip without installing anything I don't | already have, and I can copy archives to my NAS without | having to set up some remote repo. | | You can try and convince me until you're blue in the face | dude, but I've tried it and I just don't like it. End of | story. | epolanski wrote: | Why tho? | | You can create as many branches as you want and do all the | experimentation you want. | | When I stopped caring about committing and branching | (something I've too long associated with pushing code, like | reaching milestones) and started doing both as much as | possible I really felt lots of freedom. | | Instead of overthinking I can create parallel different | approaches and see where they lead to. It's amazing. | darkarmani wrote: | What? How it more difficult that CVS or even RCS that lies | under CVS? | | That would have been the OS tool back in 1998. | AnIdiotOnTheNet wrote: | For lone developers in 1998 it's more likely they would | just occasionally make a copy of the code somewhere. That's | still more or less how I work on my own stuff. | fatbird wrote: | Change history, if nothing else. That alone brings a ton of | benefit, from being able to view earlier versions, to | recovering from mistakes or lost code. | | If you have a remote repo then, you can also have offsite | backups. If you never branch, it's still massively worth it. | asciimov wrote: | Does git have benefits, yes. | | Are git commands obtuse and unfriendly, yes. | | The problem is that git is not intuitive and isn't | automatic. I've seen more people loose code to git than be | saved by having their repo offsite. | godshatter wrote: | I agree with this. I've been using cvs as my source control | system of choice as a solo developer on my own projects for | years and haven't switched to anything newer. I use git at | work, but it's not worth the hassle for me at home. The | workflow with cvs for me is basically "cvs update" (in case I | need to know what changed) and "cvs commit". I rarely use | branches. I religiously make one small-ish fix per commit and | at least compile it, though I always run smaller things. | | If I switched to working with a team I'd definitely use git. | But for just me, cvs is all I really need. The most | complicated thing I do is probably tag a release or revert to | a previous revision of something, which is pretty rare. | Bayart wrote: | Basic git-fu (init, add, clean, commit, pull, push, branch, | merge, stash, log) goes a long way to make your life easier. | You can leave the fancy stuff for later. | | There are even git repos of 99% done .gitignore files for | most needs [1], which is most of the setup work for a solo | project. | | [1]: https://www.toptal.com/developers/gitignore | mwaitjmp wrote: | The official github desktop app is really nice to use as | well. At least on a Mac. | nhooyr wrote: | No it isn't! It's so easy and effective for keeping track of | your work and backups. | | If you want the absolute simplest way to use git, just setup | an alias to do: alias gcmp="git add -A && git | commit && git push" | | Now all you need to do is run gcmp every time you're ready to | log the new state of your codebase. How could it be simpler? | | git _only_ becomes more complex as your needs become more | complex. At which point I 'd recommend using something like | https://magit.vc/ which makes complex git operations far | easier. The CLI can only take you so far effectively | unfortunately. | Yajirobe wrote: | git commit to which branch? git push to which branch? | thebean11 wrote: | Master/main? It's a single branch workflow. | mypalmike wrote: | master, origin/master | wisemanwillhear wrote: | While Git is not without it's complexities, but as a | developer who must use it with teams anyways, I find there | are very simple workflows with almost no cognitive load that | I'm able to use for my personal projects. Not only does this | give me snapshots of my projects from any point in time, but | backups as well since I use a free GitLab account as well. | AnIdiotOnTheNet wrote: | Yeah sure, but for someone who's workflow started 20 years | ago without Git, it shouldn't be at all surprising that | they kept not using Git for a long time. | | There's really no reason to be surprised at all about this | unless you're the kind of person who never did any | programming before, like, 2010 and lack the imagination or | knowledge to understand how programming could be done | without it. | wisemanwillhear wrote: | I can't disagree with that. We must all make wise | decisions with endless competing "priorities" and limited | time. | | As someone who is on the other side and believes in the | value of continuously growing one's skills, I want to | convince people that Git has value in learning and using. | More tools in our toolbelt makes us more effective | craftsmen. Which the DF developer did get around to | doing... | dpcx wrote: | Did he finally start using one? I know that was one of the | things that blew most people away, is that he had no change | history for most of his code... | njharman wrote: | If you like "small time" devs / roguelike programming the | Roguelike Celebration conference YTs is excellent | https://www.youtube.com/channel/UCKv_QzXft4mD6TXmQBZtzIA | TheLocehiliosan wrote: | Once I spent about a week struggling to create a DF config that | defined the key bindings to be vi-like consistently throughout | the game. | | I failed. | jandeboevrie wrote: | Df is just like OpenTTD. Both are like Chess, easy to start, fun | to play casually but it takes years to master. Great games, | complex if you want to and a time sink if you don't keep an eye | on it. Have had many hundreds of fun hours in both games | DizzyDoo wrote: | I've played a fair amount of Dwarf Fortress and I'd never | describe it as 'easy to start'? The learning curve is notorious | and for most people involves watching a lot of YouTube | tutorials and copying actions. | | I'm hopeful that the upcoming Kitfox Games version makes it | very accessible to lots more people. | ALittleLight wrote: | Dwarf Fortress seems incredibly hard to start to me. The UI is | chaotic and the "graphics" verge on incoherent. | anthk wrote: | Eh, Chess it's much more complex than Slashem to me, and I | never ascended in Nethack/Slashem/DCSS. | short_sells_poo wrote: | I agree with the spirit of your post, but Dwarf Fortress and | Easy to Start do not fit in the same sentence in my opinion. I | mean, the game is legendary for it's arcane user interface and | the vast number of things that can go wrong even for experts. | | Dwarf Fortress is something like vim, where usually on the | first interaction people don't even know how to start the game, | let alone do anything in it. | | Chess is easy to start, the rules fit on a post it note | basically. Dwarf Fortress is difficult to start, and even more | difficult to master. | devenvdev wrote: | When I first started playing DF it took me all day reading | the wiki... | | Next week was spent on trying to survive the first winter... | | As a 15 years vim user though - vim has a much more gradual | but also much higher learning curve, I'm still learning new | tricks in vim on a weekly basis. | njharman wrote: | I thought it was developed by the two brothers? I've seen talks | and interviews by both brothers on DF. | | like this one https://www.youtube.com/watch?v=ZMRsScwdPcE | | and https://www.youtube.com/watch?v=HtKmLciKO30 | psyc wrote: | This is StackOverflow, and the interview is about code, so they | probably mean developer in that sense. Tarn is the only | programmer. | reidjs wrote: | I read everything about this game I can get my hands on. I don't | fully understand why I find dwarf fortress so intriguing. It's | such a pure passion project... that actually made it. | dexwiz wrote: | It's the programming equivalent to the people who turn their | houses into model train worlds. People dabble in it, or make a | few toys of their own, but its rare to commit so hard. | petercooper wrote: | Do you actually play it? I'm a bit the same about reading | _about_ it, yet I have never once played it for myself! | AndyMcConachie wrote: | If DF is too daunting try RimWorld. It's based mostly on DF, | but has graphics and is considerably more approachable. It's | also heavily modded and with mods can get just as complicated | as DF can. | Arrath wrote: | Hah, this is like EVE Online for me. I love reading about the | espionage and cloak and dagger and pure insanity, but other | than a brief toe-dip...oh no I will not play it. | | DF lives in my blood, however. | eigenvalue wrote: | Totally agree on reading about EVE Online. This is a real | classic if you haven't seen it before, and actually | contains a lot of very important notions for identifying | Ponzi schemes: http://web.archive.org/web/20091026234156/ht | tp://geocities.c... | reidjs wrote: | I tried playing it like a decade or two ago. Couldn't get | past the ridiculous learning curve. | andi999 wrote: | I just saw that O'Reilly published a book to help with | that: https://www.amazon.de/Getting-Started-Dwarf-Fortress- | complex... | LeegleechN wrote: | They're working on a Steam release with a more accessible | interface, including mouse support. I suggest trying it | again when that comes out. | opinion-is-bad wrote: | Is there any timeline for the stream release? The release | date on the store page just says, "Time is subjective." | tastyfreeze wrote: | Its worth the effort and likely easier now than before. The | myriad ways that a fortress can die amazes me. Its easy to | get a fort that can survive invaders but ultimately your | fortress will die. The number of times I have been | nonplused by a new fortress failure is amazing. Those crazy | dwarves keep finding new ways to destroy themselves. | tstrimple wrote: | This image is a reasonable estimation of the learning | curve. | | https://i.stack.imgur.com/iECXl.jpg | minsc__and__boo wrote: | I've put in probably over a thousand hours on it, and have | played it over the years as new releases come out. I've | gotten to the point where I usually hit FPS death (too large | a fortress that it overloads the CPU) even on the harder | starts and with dfhack to help. | | The draw for me was the steep learning curve that rewards you | with logical complexity when you finally understand it. The | lore that your fortress generates, as well as the random | stories, is just icing on the cake. It's definitely not for | everyone though since the UI requires additional programs | like DF Therapist and DF Hack to be manageable still. | outworlder wrote: | For me, the reason I have stopped playing is that I have | issues managing migrants. | | There are just too many dwarves to care for. Even DF | Therapist doesn't (or didn't?) really help micromanaging | jobs. It becomes tedious quickly. | | I remember seeing something about auto-allocating jobs, but | it didn't work for me. | praptak wrote: | Most hardcore players set limits on the number of | dwarves. This helps both with the micromanagement and | with FPS. | prepend wrote: | I love reading about it, but have played for maybe 30 | minutes. The game doesn't intrigue me, but the building of it | does. | | Same for Minecraft and similar. Figuring out the software and | the cool way it came into existence is the problem to solve, | actually playing it is (perhaps incorrectly) predictable | details and so boring. | milgrim wrote: | I am the same. I also started to play a few times, but not | knowing the mechanics and not having enough time/motivation to | learn them in detail is frustrating. But there's a nice | alternative: https://youtube.com/c/kruggsmash | | Watching someone else play Dwarf Fortress can be surprisingly | entertaining. Just start one of his series from the start. | devenvdev wrote: | My favorite gaming youtuber. | | They are somewhat similar with Tarn, also a pure passion | project that made it, with all the hand drawn pictures and | down to earth approach. | milgrim wrote: | I agree. That's why both get a bit from me on Patreon. | vtail wrote: | I know I will regret asking it... but what's the modern way of | starting playing DF? | andrewzah wrote: | You can use dfhack to run the game, which provides some | niceties [0]. There are graphical packs; many people like | Phoebus. You can also use an external program like Dwarf | Therapist for dwarf management, which becomes necessary once | you have a lot of dwarves. | | [0]: https://docs.dfhack.org/en/stable/docs/Introduction.html | hobs wrote: | An article for you | https://dwarffortresswiki.org/index.php/Utility:Lazy_Newb_Pa... | pradn wrote: | There's an officially-supported skin with good sprite-based | graphics. It's still a bit in progress however. | https://www.kitfoxgames.com/press/sheet.php?p=dwarf_fortress | legohead wrote: | failing is considered part of the fun of the game [1]. so just | download it and start going. | | [1] https://dwarffortresswiki.org/index.php/DF2014:Losing | AQuantized wrote: | The Wiki is probably the most up to date resource: | https://dwarffortresswiki.org/index.php/DF2014:Quickstart_gu... | | It's really not that difficult once you get started, especially | if you're used to learning some esoteric keybinds. | sjfkejrnakcijdj wrote: | Not exactly modern, but the Captain Duck Dwarf Fortess Video | Tutorial[1] is still a great tutorial. | | [1]: https://youtube.com/playlist?list=PL5A3D7682BDD48FC2 | Inviz wrote: | Wait for steam version | devenvdev wrote: | Or don't if you want the full "meta" experience. | mabbo wrote: | > What's your favorite bug and what caused it? | | > A: It's probably boring for me to say, but I just can't beat | the drunken cat bug... That was the one where the cats were | showing up dead all over the tavern floor, and it turned out they | were ingesting spilled alcohol when they cleaned their paws. | | I think that bug explains very well just how deeply complex Dwarf | Fortress really is. Drinks can be spilled. Some drinks have | alcohol. If cats step in something it sticks to their paws. Cats | clean their paws, causing them to ingest what's on them. Enough | alcohol will kill a cat. Put together: dead drunken cats. | devenvdev wrote: | Other amusing DF bugs: | | Dwarfs trying to clean their inner organs (dwarf wounded, | doctor closes the wound, dirt stay inside) | | Undying children in the moat water (for years... just swimming | there...) | | Killer carps (there was a long time during which carps were | really overpowered because constant swimming was buffing them | up really good, dwarfs getting close to water sources were | eaten by carps) | | Catplosions (Tarn loves cats, cats reproduce, too many cats | kills DF performance) | kd0amg wrote: | _Catplosions (Tarn loves cats, cats reproduce, too many cats | kills DF performance)_ | | This was a particularly insidious one because the usual | strategy of culling excess livestock doesn't work out when | applied to dwarfs' pets (pets can't be designated for | slaughter, and other means of making pets die will make their | owners upset). With most animals, you can avoid the pet | adoption issue by just not marking them as available for | adoption, so you wouldn't have to worry about a dogsplosion, | sheepsplosion, etc. Cats do not become pets through that | system. Instead, a cat adopts a dwarf. | bombcar wrote: | Verily, the dwarf would pick up a cat to take it to the | slaughterhouse, the cat would adopt the nearest dwarf (the | one carrying it) and then the dwarf would slaughter the | cat. | | And get sad because his pet died. And then eventually start | tantruming and a tantrum spiral would begin. | AndyMcConachie wrote: | One of my favorite Twitter users. | | https://twitter.com/DwarfFortBugs | | It's just funny Dwarf Fortress bugs. | suzzer99 wrote: | LOL - 5386: Imprisoned Vampire Elected Mayor | cpeterso wrote: | A similar Twitter account publishing funny bug fix notes from | other games: | | https://twitter.com/TheStrangeLog/ | AnIdiotOnTheNet wrote: | Unfortunately it remains unexplained (by the article) why this | is considered a bug. It would be unethical to test, but this | seems like perfectly cromulent behavior one might actually see | in real life. | yung_steezy wrote: | I agree these types of features really embiggen the game | beamatronic wrote: | They're perfectly cromulent features. | spoonjim wrote: | Cats in bars don't die of alcohol poisoning regardless of the | amount of beer spilled on the floor. | praptak wrote: | I read about a cat who used to visit a pub and learned to | lick beer from under taps. The cat got banned from the pub | for its own good but I don't believe it was anywhere close | to poisoning. | Filligree wrote: | The actual bug here was a mistake in handling of liquid | volume. The cats were ingesting a tankard's with with each | lick, and they're smaller than dwarves, so that killed | them. | paavohtl wrote: | IIRC the actual bug was that cats licking their paws made | them consume an entire tankard's worth of beer with each | lick, which made them drunk (and dead) with just a few licks. | Arrath wrote: | Yeah this is what I recall being the case as well. | alexander-litty wrote: | Liquid items are funny in the game. | | When you look at an item listing and you see something like | "Mead", that is truly all the item is --- it isn't a cup of | mead, it's just a vague amount of the liquid mead itself, as | if your hand was the only thing keeping it from hitting the | ground. | | But there are containers that can hold your liquid. You have | mugs and goblets that hold one quantity of "Mead", giving the | impression that one count of mead is like a generic serving | size. You also have barrels and pots that hold stacks of | "Mead". | | Creatures are kind of like walking containers and have their | own detailed inventories. Among the things you'd expect to | find like armor, weapons, and books, you might also find a | "coating of tears" on a crying dwarf, or perhaps a | "spattering of blood" on a murderous elf. | | They're not just static inventories for the fun of a story, | creatures do interact with them and use them. Dwarves covered | in a vomit item will (hopefully) put any available soap in | their inventory and use it to clean themselves in water, for | example. | | Cats are simple and just clean themselves with no water or | soap needed. The catch with them is that they ingest whatever | they have cleaned off of them. | | So, putting all this together: The problem was that cats pick | up a whole "serving size" of alcohol and proceed to clean | themselves, ingesting the entire serving. The bug surrounds | the vagueness of liquid sizes. | | And it was fixed accordingly! Cats are still vulnerable to | the effects of self-cleaned alcohol, but the strength is now | proportional. | | https://www.bay12games.com/dwarves/mantisbt/view.php?id=9195. | .. | db48x wrote: | My favorite feature in Dwarf Fortress is that all eyelids | automatically clean their associated eyeball, just so that | players don't post about how their dwarves have vomit on | their eyeballs. | PeterisP wrote: | Ahh, so if a dwarf would have a missing eyelid because of | combat or some mining accident, _then_ they could have | vomit on their eyeballs. | [deleted] | MikeTheGreat wrote: | My experiences with cats (at least in my own life) is that | cats prefer not walk into an area with a sticky floor if they | can avoid it. | | Clearly there's a bug here where the cat will keep wandering | around on the sticky floor, and then keep consuming the | alcohol off it's paws. | | The obvious fix is to add a feature wherein different | creatures have preferences about where they go next, and then | use that to have the cats avoid the bar floor if they can. | | As a bonus you can include stuff like "Cats don't like | hanging out in crowded areas" so that they'll also stay out | of the main hall when the army is gathering to muster forth, | etc. | | (/s, but only slightly :) ) | Filligree wrote: | No need for the /s. This is precisely the level of | simulation Toady is hoping for, and there are many | equivalent examples already. | db48x wrote: | Good suggestion. It would occasionally be nice if the | _dwarves_ would avoid stepping in things and tracking it | all over the place. The only reason that the cats were in | the tavern in the first place is that pets follow their | owner* around. | queuebert wrote: | And this is how you get 700k lines of code. | shrimpx wrote: | The bug was a numerical error that would cause cats to drink | something like the equivalent of a pint of beer for every | lick, and therefore die prematurely. He talks about it in | this video: | | https://www.youtube.com/watch?v=VAhHkJQ3KgY | markus_zhang wrote: | Not sure what's in the code, but I think each cat (which is | some sort of entity by itself) is composed by body parts, which | at the lowest level owns a bunch of attributes/components. | Would that make sense? | pixl97 wrote: | The bug in this case was the minimum alcohol value a cat | could like from its paws was above the cats LD100, so if they | licked their feet when soaked in beer they would die. | markus_zhang wrote: | Ah, that's interesting, so it's actually a bug. But yeah it | shows the sophisticated system underneath. | pavel_lishin wrote: | Reminds me a little bit of something strange I saw in Rimworld | - all of my dogs were developing liver cirrhosis! | | It turns out that my dogs weren't alcoholics - it just happened | to be that beer was the only food source they had zoned access | to, so they were drinking it out of hungry desperation, and | while it gave them enough calories to live on, it also gave | them cirrhosis. | OrsonSmelles wrote: | Yeah, I've definitely accidentally created packs of booze | hounds that way. Definitely a head-scratcher before you get | what's going on. | 7373737373 wrote: | I wish there was a description of how this works technically | mabbo wrote: | ericschn below has a link to a video of Tarn explaining it. | It's wonderful. | ygra wrote: | Noita also had a fun one during early development: deer | drowning in their own urine. | | And now that I dug up the Reddit AmA thread (https://old.reddit | .com/r/Games/comments/d7cqjz/we_are_nolla_...), there's a | comment there about the drunken dead cats ... | partomniscient wrote: | 10 years ago, there was this article about another unexpected | behaviour: | | https://www.nytimes.com/2011/07/24/magazine/the-brilliance-o... | ericschn wrote: | The beginning of this video https://youtu.be/VAhHkJQ3KgY has | Tarn Adams speaking about this bug. | mabbo wrote: | This is my favourite bug story I have ever heard. And told so | well. | orf wrote: | I tried to play DF. I even got over the ASCII interface. | | But honestly Rimworld is better and a bit deeper. | [deleted] | mattlondon wrote: | I always wanted to love DF but I could never get into it. Perhaps | it was the ASCII. | | I found Rimworld to scratch the same itch and have sunk many | hours into it. I feel like it is spiritually very similar, even | if the depth of simulation is not as deep as DF. | 100011_100001 wrote: | This is a little bit of a hijack but if I wanted to start coding | games as a side project, where would I start? | | Which platform? Mobile, PC, console? Any good introductions on | the subject of solo game development? I know I can google this, | but I trust HN users more than the Google algo. | rscho wrote: | Pico8! | | https://www.lexaloffle.com/pico-8.php | darkandbrooding wrote: | I recommend Godot ( https://godotengine.org/ ). It solves many | of the problems you suggested. | AnIdiotOnTheNet wrote: | I started doing game dev in DOS after reading Tricks of the | Game Programming Gurus by Andre LaMothe in the 90s, so keep | that in mind for the following advice. | | Depends on what you want to do. If you want to code games | because you find the programming aspect interesting, start | small by writing your own versions of some simple games. I | personally wouldn't recommend any frameworks or libraries other | than (maybe) SDL. Implement everything in the simplest way you | can think of that will actually work and only go back and | refactor if you need to, that's the time to look up how other | people have solved that problem [0]. Resist the urge to over | engineer. I might be biased but I say target PC first. Windows | specifically, but Linux isn't much worse as long as you never | plan to deploy the thing. This is because these platforms are | incredibly open and there is a lot of information and tooling | available. After you get a feel for it, and have a good idea of | what you want to make next, start incrementally branching out | in directions that interest you. | | If you have a good idea of the kind of game you want to make | and want to start making it with as little friction as | possible, then your best bet is to find an engine that is | already well suited to that kind of game and learn just the | things you need to in order to make it happen. Again, you'll | want to start small regardless of what it is you actually want | to make, just ensure that you're always moving toward that | goal. That is very much not my path, so I have little other | advice. | | [0] If you look it up first without trying it yourself, you | won't have a good understanding of the problem space. You'll | end up believing in the commonly accepted answer as dogma and | severely limit yourself. | ljp_206 wrote: | I'm not much of a game programmer, but lurk /r/gamedev. The | common advice is to start small - think toys rather than MMOs. | From there, it's said one should follow what they're interested | in, and focus on follow-thru, not tacking on features to their | dream game that is supposed to compete with Skyrim. Console | development is always going to be more trouble than the more | open platforms of computers and phones. Myself, I've always | thought it'd be pretty fun to make a menu-heavy game with just | web technology, which then of course CAN be played anywhere. | | There are lots of engines out there that can take care of | things for you, or act as full fledged studios, like Game | Maker. Some prefer to start from scratch of course. Again, the | idea should be follow what you're interested in so that you can | actually get something done. | bttrfl wrote: | Why don't you start with an idea and self-awareness of your | strengths? | | You might be good at puzzles. Or stories. Maybe visuals ain't | your thing and you can write a text based game - there are | great engines for that. Maybe you're a great dev and can start | hack your own Dwarf Fortress and keep on doing it for the rest | of your life. | | Gaming and tech behind is so varied that whoever you are, | you'll find something that plays to your skills. | dgan wrote: | I started contributing to an old open source strategy game, I | played as kid, couple of months ago | | It was extremely pleasant to fix some old bugs that kept | annoying people (and me!) | | I spend more time in the game guts, than playing though | | I believe it's easier to start with existing game, than | creating new one from scratch | Octopodes wrote: | Check out this itch page for some suggestions: | | https://itch.io/jam/game-off-2020 | | Scroll down to the " Help--I've never created a game before!" | section and there are some suggestions like Phaser or Godot. | outworlder wrote: | I would suggest you start by just coding a text-based game. | Yeah, you heard me right. Maybe a text adventure or whatever. A | D&D game printing out damage as logs. FTL clone, with text | descriptions only. Anything. You can create a surprisingly | engaging game just with basic standard input and output - even | multiplayer games (the MUDs were basically this). Print a basic | ASCII map, and now you can do Nethack. | | The reason for this is: we all want to make beautiful AAA | games. But if you have no clue where to begin, it means that | you need to develop your intuition for the game logic first - | otherwise, you would probably know what to look for :) | | If you start by downloading Unity or similar, now you'll be | bogged down trying to learn all its systems (without a clear | understanding of _what_ you need to learn and what you can | ignore, for now). You'll also be bogged down by the need for | assets. Sure, you will have a full blown 3D engine, but it's | still incredibly boring when all you have is a bunch of cubes | or premade assets, so you are right back to square one. Only | with more complexity. A lot more - the more visually complex | the game, the more code you will have to write that's only | concerned about visuals. Getting a character to, say, swing an | axe and make it look right and that it is actually hitting | something involves a surprising amount of work. Yeah, you could | use existing sample games nowadays, but that isn't really | teaching you much. | | Then it depends on how much background you have. If you were, | say, a front-end developer with any experience, you could use | that to add some basic visuals. Think Tetris. You can do a lot | with very rudimentary tools, as long as everything is kept | simple. | | At some point, you might _need_ to display graphics (maybe | that's the whole point of your game idea). I say "might", | because Dwarf Fortress, which is the subject of this thread, | never really did. In which case you have some more decisions to | make. Is it a 2D game? Maybe use something like Pygame, Love | (for Lua), etc. | | At some point you'd be looking into Godot, Unity or similar. | And guess what, you could take your basic text-based game, and | re-use parts of it as the brains for your game. | | Don't get into the game-engine building rabbit hole. It's very | fun if you are into that, but know you are unlikely to release | anything by going that route. Ask me how I know. | | Platform: start with whatever machine you use for development. | Presumably you know a lot about it, don't start a side-quest :) | Specially, avoid consoles for now. Cross-platform development | is getting easier than ever - sometimes all you need to do to | start running your game on mobile is to click a dropdown. But | that simplicity is deceiving, there's lots you'll have to learn | about other platforms. Stick with what you know, until you are | comfortable. | | I'll let others provide reference material, my sources are | outdated as I'm past my Gamedev.net days (for the time being). | Audiophilip wrote: | I'd go with Unity, targeting desktop for simplicity. There's an | abundance of high quality tutorials (a respectable amount made | by Unity) and the learning curve is gentle, imho. | markus_zhang wrote: | I think the first thing to figure out is: do you want to make | games or game engines? Or is there a specific part of game | development that you are particularly interested in? Back in | the year 2000 I was very into Level Design. Back then the FPS | genre just took off and I happened to stumble into a | "Worldcraft.exe" in a folder in the CD of Half-Life. | iwintermute wrote: | have you seen HandMadeHero? https://handmadehero.org/ | | Plus what do you mean by coding games specifically? Is it game | engine programming? Game design? Or other related stuff? | mhitza wrote: | I second Godot. You can make cross platform/mobile games with | it. The IDE itself is built with the engine which is rather | cool. | | Fair warning, the syntax is python inspired but not compatible, | which most of the time that will trip you up. | | My second suggestion, is for your first project to develop a | top down 2D (instead of a classical side scroller), using | itch.io assets. To get a nice jump feeling for a side scroller | 2D game, you straight ahead have to start using a state machine | and fiddle a bunch, no hand holding with that. | wly_cdgr wrote: | If you like this, you may also enjoy this Tarn Adams talk at NYU | GameCenter's 2016 PRACTICE conference | https://youtu.be/yDPb0jqRr3o | markus_zhang wrote: | IMO that's one of the best ways a single programmer can spend his | career. No weird requirements, no deadlines, no nothing, nada. | Just one's passion and a product. Whether it is successful is | irrelevant. | | Kudos Mr. Adams for making the achievement and moves gaming | history. | | Going back to the interview, I found this line (and the logic | attached) interesting: | | >Making the item system polymorphic was ultimately a mistake, but | that was a big one. | | >When you declare a class that's a kind of item, it locks you | into that structure much more tightly than if you just have | member elements. | | I guess when the game becomes moderately complex then ECS or | something similar suddenly makes a lot sense. | wly_cdgr wrote: | Everything about it is wonderful (I really mean that) except | the fact that he's sponging off his mother to do it. I can't | help but feel that it's a drop of vinegar that spoils the whole | cup of milk | fellowniusmonk wrote: | Why would this spoil the milk? Why is it called "sponging"? | The middle class safety net (something I grew up without) is | one of the greatest sources of freedom and investment | generally available. Multi generational homes and properties | are historically pretty normal and a net family positive for | holding onto wealth. | | For example: https://www.middleclasspaas.com/ | markus_zhang wrote: | I think it's OK as long as they feel it's OK. We can say that | his mother "sponsors" the project. | wly_cdgr wrote: | Edit: I was wrong about how much he is relying on his | family - didn't realize how much Patreon support the | project now has compared to when I last looked. My bad, | should have checked. I still agree with the below in the | abstract but I retract my criticism in this case | | I can get with that take when it comes to Patreon but it's | harder to demonstrate ok-ness-with-it with family. Let's | say she's really not all that jazzed about it, actually. | What is she gonna do, throw her son out on the street? A | lot of parents don't have it in them to do that even if | they think they would be justified and it would be the best | thing for their child. An adult shouldn't put their parents | in that position. He should be making sure his mom is | provided for, not the other way around | nmz wrote: | He is? He's making almost 9k a month, that's pretty good if | you ask me. https://www.patreon.com/bay12games | wly_cdgr wrote: | I stand very much corrected, I didn't realize the project | had gathered so much support steam compared to 5-10 years | ago. Happy to see it | dharmab wrote: | IIRC they added paid options after a family health scare | caused them to realize that they needed a way to pay for | better health insurance. | burntoutfire wrote: | That's for two people (him and his brother, who's also | working on the game, but in a non-coding capacity). | Philip-J-Fry wrote: | I have a passion for programming but I need something to drive | me. I'm useless when I try and make stuff on my own. But if | I've got someone telling me "I need a system that does X", I | just get highly motivated in delivering it. Like I need | requirements. | markus_zhang wrote: | Damn you sound exactly like me...when I work for my own | projects they usually die off quickly once I figure out how | to do it (without actually implementing it but I'm pretty | sure it can be implemented in this or that way). | | But if it comes from a friend, or a colleague then I'm super | focused on it until it's done. | | It's almost as if I do projects to show off to other people | or I like to serve other people. | Philip-J-Fry wrote: | Yeah, showing off or feeling helpful. That explains it | almost perfectly. | galaxyLogic wrote: | Yes if you do it for yourself you rarely thank yourself for | doing it. In a way that would be absurd, because giving | thanks to someone means you are giving something to | someone. But you can't really give anything to yourself | because whatever you give you already have. | | So it is quite natural that we prefer to do things for | others. It makes you feel great when others thank you for | it. | blacktriangle wrote: | Part of the issue is that it is difficult to come up with | problems worth solving. | | I think Joel and Fogcreek is a great example. He started | out with the premis that you don't need an idea for a | successful software company, you just need to find great | devs and create the best working conditions and then | success would come. This was a novel idea at the time since | Apple was the only FAANG that even existed and this was | their "beleaguered" period. As should come as no surprise | to anybody, they ended up creating...bug tracking tools and | a kanban board, albeit quite good ones. | | Another thing that helps, since the problem is not your own | but somebody elses, you don't get bogged down trying to | figure out the best way to solve it for yourself, you just | solve it for somebody else without all the emotional | attachment to the problem. This lets you instead be | emotionally attached to the process. | | Point being, I think you're selling yourself short. | nyanpasu64 wrote: | Is having deep knowledge of the problem domain you're | solving a blessing or a curse? Personal attachment to the | problem domain? | my_usernam3 wrote: | > you just solve it for somebody else without all the | emotional attachment to the problem | | This rings very true to me | w0m wrote: | I feel this. | bcrosby95 wrote: | Yeah, I'm the same. I got into programming because I like | solving people's problems. The hardest projects for me are | the ones where I'm stuck in a cave for months working on a | greenfield project that no one is using yet. | suzzer99 wrote: | Same here. I'm motivated by being on a team that I don't want | to let down, and getting a pat on the back when I deliver | something great. | | I think it's because the early stages of a new project, where | you're doing a ton of googling and head-scratching, are kind | of painful for me. I need that team or client or business | owner counting on me in order to push through that part. | | Then I can roll on my own when I get to the fun stuff (for | me) - creating features with well-understood tools, and | refining and organizing code. | akira2501 wrote: | > No weird requirements, no deadlines, no nothing, nada | | Well.. until you accidentally create a broken release, that is. | That's _real_ sweat. | dmitryminkovsky wrote: | I was with you until: | | > Whether it is successful is irrelevant. | | At some point something needs to be successful or you can't | keep working on it, right? | markus_zhang wrote: | As long as you feel good I think it's OK. Most passion | projects don't really generate a lot of revenue. | Falling3 wrote: | Yea, but you specifically mentioned this as a career. You'd | want _some_level of success if your passion project is your | career. | markus_zhang wrote: | me bad, I'll edit the post. | dmitryminkovsky wrote: | Oh Markus where were you like 5 years ago?!? :) | markus_zhang wrote: | Me? I don't really have any completed passion project :/ | so sad I wish I could at least finish one of them. | dmitryminkovsky wrote: | I meant to tell me that before I started :)) I'm just | completing mine, but it's taken a while. Not one of those | people who can do things in a weekend... | [deleted] | sdevonoes wrote: | That's why programming is king. Software engineering on the | other hand... | hprotagonist wrote: | _Making the item system polymorphic was ultimately a mistake, but | that was a big one. | | Q: Why was this was a mistake? | | A: When you declare a class that's a kind of item, it locks you | into that structure much more tightly than if you just have | member elements. It's nice to be able to use virtual functions | and that kind of thing, but the tradeoffs are just too much. I | started using a "tool" item in the hierarchy, which started to | get various functionality, and can now support anything from a | stepladder to a beehive to a mortar (and pestle, separately, ha | ha), and it just feels more flexible, and I wish every crafted | item in the game were under that umbrella. | | We do a lot of procedural generation, and if we wanted to, say, | generate an item that acts partially like one thing and partially | like another, it's just way harder to do that when you are locked | down in a class hierarchy._ | | Preach: | | https://ericlippert.com/2015/04/27/wizards-and-warriors-part... | | https://ericlippert.com/2015/04/30/wizards-and-warriors-part... | | https://ericlippert.com/2015/05/04/wizards-and-warriors-part... | | https://ericlippert.com/2015/05/07/wizards-and-warriors-part... | | https://ericlippert.com/2015/05/11/wizards-and-warriors-part... | | I have certainly committed all of these sins, too. | adamrezich wrote: | this is a pretty good series of posts but I was rather | surprised at where the series ended, with more (hypothetical) | OOP abstraction instead of less. trying to fit game rules into | a language's type system is a common thing for novice | programmers to attempt, because it seems like the perfect | logical application of these type system rules you just learned | about when learning the language you're using. I kept expecting | the article series to get around to reducing the system down to | something like a Player class with a PlayerClass enum and | member (and ditto for Weapon), then branching logic based on | that, instead of trying to pack it into the type system. | tinus_hn wrote: | In the LPMud LPC language objects could inherit from multiple | other objects, so they could combine behaviors. I haven't | really seen that in other languages. | shagie wrote: | The "about inheritance in LPC" - https://www.mars.org/home/ro | b/docs/IntermediateLPC/chapter6.... | | and a bit about multiple inheritance in LPC - http://graphcom | p.com/info/mud/mudos/lpc/constructs/inherit.h... | | And another bit - http://www.geas.de/tutorial/lpc_57.html | | As to seeing it in other languages... this gets into a mixing | - https://en.wikipedia.org/wiki/Mixin | | An example of that in Scala - https://docs.scala- | lang.org/tour/mixin-class-composition.htm... or | https://www.baeldung.com/scala/class-composition-mixins | | The issue is that for most situations, the additional | conceptual load of multiple inheritance gets difficult. | truetraveller wrote: | "Tool" is still a class, with perhaps very generic polymorphic | methods (e.g. do_default_action() ). The problem is not | polymorphism per se, but rather about having a deep class | hierarchy aka lasagna code. | | My policy: OOP is like salt. Use little and that's great. I | only allow a single inheritance layer, and ideally no | inheritance at all. | mountainriver wrote: | This is one of the things I like about Go. Just structs with | methods. You can embed them but it seems to hedge against | deep nesting and creates simple code | blacktriangle wrote: | Then how would you model composing behaviors in Go. Say for | example I have a representation of Food and a | representation of Animal. I then want an ability that will | "animate" things, so I can animate Food to give it the | behaviors of Animal. | | I'm not being critical either, I'm seriously curious how | somebody would implement this behavior in Go. Like you say, | just struct with methods is a very appealing mental model | since you have fewer moving parts, but how does it deal | with a scenario like this which is very common in game dev? | sbacic wrote: | > My policy: OOP is like salt. Use little and that's great. I | only allow a single inheritance layer, and ideally no | inheritance at all. | | That's been my observation as well - there's no free lunch | and DRY isn't free either, certainly not if you use | inheritance chains to achieve it. | | I'm starting to think that the only programming axiom that | will survive in the end is KISS. | suzzer99 wrote: | A few weeks ago some commenter here said they ascribe to | WET - Write Everything Twice. Basically worry about | abstraction when you get to number three. | | And what an acronym given the context! | hprotagonist wrote: | I've also heard "We Enjoy Typing" | junon wrote: | KISS and YAGNI are like yin and yang for me. | marcosdumay wrote: | KISS is universal, not only to programming. | | But the single responsibility principle and the idea that | you should divide your code in components where the lower | components should be abstract by the point of view of the | higher ones are almost never wrong. | | Not by coincidence, those last two are consequences of how | people think. While KISS is kind of a physics law. | blacktriangle wrote: | Another good rule for OOP: Objects are fine, object graphs | are a killer. Graphs are what get you into "all I wanted was | a banana" territory. Objects should either be atomic, | agrigated by simpler structures like maps and arrays, or if | you absolutely must have objects pointing to objects, be sure | that they form a tree and not a graph such that each object | need only know about the things below them which can be | encapsulated at a single point. | AstralStorm wrote: | Funny thing, it's just the object model in play that causes | the problem. Something more similar to Smalltalk (or | Objective-C) works pretty well for things this dynamical, | though you do need to factor out the properties and messages | reasonably well still. | | The trouble is C++ and similar object models poor support for | composition and implicitly penalizing uniform object | structure. | | (E.g. call multiple base methods in a subclass - pain ensues. | Add virtual calls to the mix, it gets really iffy.) | | Even Python and Ruby with explicit mixins but the old model | get hairy. | deltaonefour wrote: | My policy is OOP is like Heroin. Don't even start. | pjmlp wrote: | Never write GUI code then. | deltaonefour wrote: | Yeah that's the one downside of not doing OOP. OOP is the | only way to do GUI stuff. | | Nobody on the face of the earth has ever used Functional | Reactive Programming. It's a made up concept. In fact | it's also definitely not one of the concepts that | inspired the most popular pattern in React. | rocqua wrote: | I try really hard not to. So far it's worked! | hutzlibu wrote: | "I only allow a single inheritance layer" | | I would agree to that as a goal, but not as a dogma. It | depends what you build, I guess. | blacktriangle wrote: | Hickey nails this one in his talks. When you make something a | class, that's NOT an abstraction, that's a concretion. You make | a Tool class, you haven't abstracted what a tool is, you've | made a fixed decision about what it is. For games that want | this level of complex interaction between components, entity | component systems are the way to go. | imtringued wrote: | I would argue that if you have a "Item" class then it is the | set of all concretions/specializations. | | By creating a tool class you haven't extended the set, you've | instantiated a subset of the set of items that contains the | items that are tools but nothing else. It's obvious why it is | so difficult to represent a tool that is also e.g. a | consumable item. The set of items that are both tools and | consumables is a superset of the set of tools and set of | items. You can't represent it through a second layer of | inheritance because it only lets you create a subset of the | items that are tools. You obviously have to use multiple | inheritance for something like this because it will let you | form the set of items that are both tools and consumables. Of | course, multiple inheritance is very messy so you should try | to avoid it. | Kinrany wrote: | > For games that want this level of complex interaction | between components, entity component systems are the way to | go. | | Entity component systems are still in a half-baked state, | with everyone rolling their own slightly different conceptual | model. They're solving a problem, but not solving it well. | | One promising direction is getting rid of entities. | Components need to link to entities and other components | anyway, so one may as well treat entities as zero-size | components. Old writeup (not mine): | https://github.com/kvark/froggy/wiki/Component-Graph-System | blacktriangle wrote: | I think this is more of a language paradigm problem. Game | programming is very much tied up in C++ and C# for | historical and performance reasons, ECS is a way to try and | graft what is entirely natural in a more value-based | language into OOP mechanics and C++/C# type systems. | | ECS is so common and easy in lisps that it doesn't even | warrant its own name. | Kinrany wrote: | Rust game engines are all based on ECS too. | oxfeed65261 wrote: | I'd love a reference to this talk. | j-pb wrote: | "Maybe Not" talks about these compositional ideas: | https://www.youtube.com/watch?v=YR5WdGrpoug | blacktriangle wrote: | https://youtu.be/2V1FtfBDsLU?t=2268 | | Goes until 43:25. | | The whole talk is worth watching. It's basically about the | higher level problems of business app development, how to | address them, and how Clojure does address them. | mushishi wrote: | > We no longer have the problem of trying to fit "a wizard can | only use a staff or dagger" into the type system of the C# | language. We have no reason to believe that the C# type system | was designed to have sufficient generality to encode the rules | of Dungeons & Dragons, so why are we even trying? | | Good point! Skimmed the blog posts, seemed to have useful | enumeration of techniques with considerations. | [deleted] | NoOneNew wrote: | Sorry but a lot of the complaints from the article and what you | linked are... well weird. Look, I'm no grand ninja guru wizard | programmer, but after a decade of programming on and off as a | job... wtf are you all smoking? Theres nothing to preach but to | check your hubris. A majority of problems stem not from OOP or | whatever language being used, it's from over abstracting. This | is mostly due to trying to pre-build for a scale that will | 99.8% never happen or to account for some wild potential | esoteric function in the ether that'll never happen as well. | There's some weird dick measuring contest out there on the | internet that I wasn't invited to where everyone is trying to | out over complicate each other. They never stopped to properly | learn any real design patterns, so their classes end up all | over the place. "Its OOP's fault!" And hell, sometimes you used | a hammer when a screwdriver was more appropriate. No big deal, | we all make mistakes in lines of design logic. It ain't OOP's | fault you made an oops. | filleduchaos wrote: | Let's just say that there's a reason game dev has tended | towards ECS/data-oriented design. | | A program that puts a handful of form widgets, consumes a | bunch of text or spends most of its time waiting for I/O is | far from the same domain. | TickleSteve wrote: | composition over inheritance... | | Its the fragility of large inheritance hierarchies. They work | well for very rigidly defined real world structures but not so | well in most real-world usages. | tralarpa wrote: | That's very interesting, because I had observed _exactly_ the | same when I tried to implement a rogue-like in Java some years | ago. For example, I had to decide whether there should be | different subclasses for spell books, the different weapon | types (e.g bows vs swords), drinks, etc. or just one big Item | class. Closely related to that, another decision I had to make | was whether object or character properties should be | implemented as class members or as entries in a hashmap (where | the latter is a class member). At the end, I had the feeling | that I was implementing my own class /object system on top of | Java's one. I guess in other languages, like lisp, this is not | really an issue. | | IIRC I already wrote that here on HN, but I think implementing | a simple rogue-like is an excellent exercise to get familiar | with any programming language. | suzzer99 wrote: | Mattias Johansson uses basically this example in his argument | for composition over inheritance. You have humans, robots, | and dogs all fitting into your nice class hierarchy. But now | you need a robot dog that breaks everything. | | https://www.youtube.com/watch?v=wfMtDGfHWpA | | I think inheritance makes the most sense when your problem | domain has been known for decades - like airline | reservations. But for new blue sky projects - you always seem | to wind up in these snafus that break your rigid class | hierarchy. | breck wrote: | > You have humans, robots, and dogs all fitting into your | nice class hierarchy. But now you need a robot dog that | breaks everything. | | I like the way you put that. Though humans and dogs are 85% | similar at a DNA level, so makes sense for them to inherit | from a common parent. And my guess is robots and robot dogs | would be ~85% similar at a building block level, so dog | would inherit from robot. | | I think go easy on levels of inheritance but have really | strong root classes that most things inherit from. | Gene_Parmesan wrote: | Definitely components are the way to go. These have gotten | very well known recently in the game dev world thanks to | entity component systems, which is what I would call "heavy | components," but you can also do "light components." Meaning, | you don't need to organize your entire system around an ECS | in order to take advantage of some of their benefits. | | They make changing behavior dynamically extremely simple. | Instead of needing to hardcode classes for each different | type of thing players may want to create in your world, you | just assign and unassign components. Give a rock the Moveable | component and now it moves. Remove the PlayerControl | component from the player and put it on, I don't know, an orc | -- now you've implemented body swapping. They're even more | useful in a game like traditional roguelikes, where you don't | have to worry about animating all these dynamic states. | | I've actually never thought about how a component system | might fit into a more traditional business application; it's | an interesting thought experiment but I'm not quite sure it | would be a strong benefit. | vishnugupta wrote: | Prefer delegation over inheritance was one of the first OOP | lessons I learnt. I read it in a C++ blog around 2004, it was | explained very well with geometric shapes examples. | | The only time I used inheritance was while implementing a job | execution framework. It fit the pattern nicely. | ambivalence wrote: | Meta-question to the mods: why would you edit the original title | of this entry? Feels somewhat interventionist. | pcthrowaway wrote: | I agree, I thought the full title was better and more relevant. | meibo wrote: | Sometimes the rule is to not editorialize, sometimes you get | slapped for it, other times the hall monitors step in to | change the title after the fact because they don't like the | article's actual title. They want you to remove clickbait | numbers so maybe that's what happened here. | | Don't think too much about it. | _peeley wrote: | Dwarf Fortress consumed hundreds of hours of my life in high | school, I have so many fond memories of it. Every year or so I | come back to it and I'm always surprised that they've managed to | add another mechanic or feature that just makes the game feel | even more like its own little universe. After enough time in the | game there really is a moment like that scene in the Matrix - "I | don't even see the ASCII anymore. All I see is dwarf, plump | helmet, magnetite ore." | | That said, I've always wondered if Dwarf Fortress would be a more | smooth experience if it had more developers or was just open | source (understandable that it's not though since it's basically | Tad's passion project). The biggest headache was always the lack | of multithreading, since your fortress really starts to chug once | you pass maybe 150 dwarves or do anything exciting with fluids. | Regardless, it's amazing what one developer with a great idea and | an enthusiastic community has been able to do with the game. | anthk wrote: | It happened to me with Nethack/Slashem and interactive fiction | games. | | Once you get absorted at night by imagining your surroudings | upon reading the game actions, the game feels scarier and more | "real" than any current 3D adventure game. | asciimov wrote: | > That said, I've always wondered if Dwarf Fortress would be a | more smooth experience if it had more developers | | Maybe, but only if it was under the benevolent dictator model. | devenvdev wrote: | > I don't even see the ASCII anymore. All I see is dwarf, plump | helmet, magnetite ore | | It's even more than that - I can spend ridiculous time in | legends mode just reading facts and events going from one | personality to another trying to "feel" the world. It's like | from these pieces of trivial information a bigger picture | emerges, partially consisting of the facts and partially of | random connections my brain made. It's an amazing experience. | fridif wrote: | Passion project? It is the sole source of his income. | hutzlibu wrote: | It might be both. | Octopodes wrote: | He's lucky enough for it to be both. | Yajirobe wrote: | Lichess is Thibault's source of income, passion project, AND | it is open-source. | fridif wrote: | I suspect that Thibault is making money from it because he | is actually deploying a web service, and the value there is | coming from the network effects of its multiplayer user | base. | | Even if I deployed his code tonight, there's no guarantee | users would switch over to my LeeChess clone :) | | In the case of Dwarf Fortress it's just "download my exe | and please donate if you like it!" | dmitryminkovsky wrote: | I've been working on a project for a long time. It's not even | yielding income, though I hope it will. A friend referred to | it as a passion project. That hurt for some reason. I can't | explain why. | s5300 wrote: | I think you're interpreting his meaning in saying that | incorrectly. | | You're not an employee for somebody else (correct? It's | your own project) - it's not a salaried or hourly position | where somebody else is currently signing your paycheck. You | obviously don't hate it (I hope? If so, not sure why you | wouldn't have canned it yet) | | Thus, this is what most people would refer to as a passion | project. You may have a different meaning of that term in | your own mind, but I think, on average, most people would | refer to what you're doing as such, and not to be malicious | in doing so. I wouldn't let it hurt you, I'm sure that's | likely not a friend's intention. | dmitryminkovsky wrote: | Yeah for sure, he didn't mean anything by it. I try not | to be super sensitive, that makes interacting with people | impossible. But sometimes it's hard :). | biztos wrote: | I have a similar sensitivity around my primary vocation: | I'm an artist with a day job, like many others, but since | my day job is programming and I take it seriously, a lot | of people think of my art as a "hobby." Which it very | much is not. | | FWIW I have found that three things help me deal with | this sensitivity: | | 1) Take it as motivation to be more outwardly | "professional" about my art. Improve the website, be more | active on social media, try harder to exhibit, even (ugh) | sell things. | | 2) Remember that _most_ people are just saying that out | of ignorance: they don 't have a mental model for | anything outside of "work for the Man" or "mess around in | free time." | | 3) Have examples ready if someone needs an explanation, | and also as inspiration for yourself. For instance: was | William Carlos Williams[0] a "hobby" poet? | | [0]: https://www.poetryfoundation.org/poets/william- | carlos-willia... | fridif wrote: | Yeah I agree with this, I would feel hurt too. For some | reason the word "passion" has this hidden connotation for | me which makes me feel like the project isn't serious, | isn't making money, isn't popular, and is just eating up | all my time as it is something I constantly obsess over. | | In the case of Dwarf Fortress, I would say for him it is | "the sole project he's been working on for 20 years now, | which takes up $large_number of hours per week, and which | has been sustaining his life now thanks to a fan base which | have proven themselves reliable contributors of financial | support. And he really enjoys writing the code too" | dmitryminkovsky wrote: | > For some reason the word "passion" has this hidden | connotation for me which makes me feel like the project | isn't serious, isn't making money, isn't popular, and is | just eating up all my time as it is something I | constantly obsess over. | | This is spot on. If only you would articulate my feelings | for me all the time, that would be great! | andrewzah wrote: | Even if it were open source I doubt there would be enough | impetus to implement multithreading. | | It would literally be easier to completely make a new game from | scratch with async and threading designs taken into account, | instead of trying to adapt an existing monolith. | | Async and multithreading are complex and introduce many subtle | bugs. It's not so easy to just move to that from a single- | thread event loop. | intended wrote: | So many projects in this game. I had one which involved trying to | build a base, capture a dragon and start a breeding program. | Which failed - so I ended up abandoning, starting a new base on | top of a dragon lair, capturing said dragon, leaving the base, | then starting an adventurer who carried the caged dragon in a | mine cart across the map to the original base. | | It did not work. The version didn't allow for the new adventurer | to become a resident of the original base. | | Futzed around with dfhack to force residence permissions and so | on, ended up breaking the game and changing the species or some | other weird bug. | | But I did learn that adventure mode mine carts are _ridiculously_ | fast. As in survival is highly unlikely fast. There was a lot of | saving and reloads due to the difficulty of banking turns at | speeds that outran cheetahs. | robertwt7 wrote: | It's amazing that he's doing the same thing for those long. I | think that's the definition of passion, I really want to find | some projects/startups that make me fee like that as a SE. That's | the dream, hope he keeps it up! | the_af wrote: | I love the idea of Dwarf Fortress and I think the internet purest | mission is to disseminate works of passion such as this, not to | sell me ads instead. That said, I can't get past the ASCII | interface -- I'm a huge fan of IF games (which used to be called | "text adventures" in the olden days) and I can deal with spartan | UIs, but for real-time strategy/sandbox games, I absolutely need | some sort of graphics. Tiles, at least. The same happens to me | with Nethack, which fortunately does have graphical tilesets. I'm | glad to read Toady One is working on such a UI! | | Something I found insightful about TFA was this: | | > _Q: With your ~90 side projects, have you explored any other | programming languages? If so, any favorites?_ | | > _A: Ha ha, nope! I'm more of a noodler over on the design side, | rather than with the tech. I'm sure some things would really | speed up the realization of my designs though, so I should | probably at least learn some scripting and play around with | threading more. People have even been kind enough to supply some | libraries and things to help out there, but it's just difficult | to block side project time out for tech learning when my side | project time is for relaxing._ | | This is interesting. I constantly feel the temptation to learn | new tools, new languages, new stuff. I get sidetracked by the | tech. But the _key_ to successful games seems to be designing | them and sticking to the work of making them work no matter the | tech or language. If Toady had kept playing with programming | languages and frameworks instead of sticking to his actual | project -- creating a game -- maybe Dwarf Fortress wouldn 't | exist, or it wouldn't be as featureful. | JonathanFly wrote: | >I love the idea of Dwarf Fortress and I think the internet | purest mission is to disseminate works of passion such as this, | not to sell me ads instead. That said, I can't get past the | ASCII interface -- I'm a huge fan of IF games (which used to be | called "text adventures" in the olden days) and I can deal with | spartan UIs, but for real-time strategy/sandbox games, I | absolutely need some sort of graphics. | | You can see the new tileset in action here, demoed by Tarn: | https://www.youtube.com/watch?v=LlzCrJS1Fho | teataster wrote: | Have you tried playing with tilesets? I feel they make the | experience easier on the eyes. | Bayart wrote: | There are tons of tilesets for DF. If you want to get started, | just picking one of the "Lazy noob packs" is the way to go[1]. | | [1]: | https://dwarffortresswiki.org/index.php/Utility:Lazy_Newb_Pa... ___________________________________________________________________ (page generated 2021-07-29 23:00 UTC)