Hacker News new | past | comments | ask | show | jobs | submit login
System Shock 1 source code released under GPL (github.com)
568 points by jsheard 11 months ago | hide | past | web | favorite | 188 comments

For context this is the outcome of a failed Kickstarter.

It’s disappointing that they didn’t stick to the goals of the Kickstarter which was a straight update of the original.



This is probably the next best thing to completing the Kickstarter since clearly they’ve run out of funds.

I’m not angry that the money is gone but it is s classic software engineering error for scope to blow out and the budget to disappear as a result with inevitable project cancellation.

So it’s my money, and the money of the other Kickstarter backers, that gives you this source. You’re welcome.

To the credit of Nightdive, this is the most likely path through which system shock 1 will be cleaned up and updated, hopefully with usable controls as opposed to the flat out unusable controls of the original.


> "Our intention is to ship exactly the game that was promised, with as much of the features that were promised as we can, in a timeframe that will get it out as fast as we can. Our expectation is probably Q1 of 2020."

> Kuperman gave that date with the kind of expression and shrug that conveyed: no, that date isn't what anyone wants to hear. But it's practical. He was unequivocal when I asked if another two years of development would put Nightdive in a financial bind.

> "No it doesn't. We've also had renewed interest from some publishing partners, for whom the more complex and costly game was something of a challenge for them, that this is what they were hoping we would provide and renewed their interest."

With what money? They didn’t raise much in the first place and it’s gone.

As I understand it, videogames on kickstarter rarely raise enough money to complete a game. If anything they can use a successful kickstarter to sell the game to publishers or other investors.

Don't forget that Night Dive already has a back catalogue of games rescued from obscurity that they sell on Steam and GOG.

I believe the translation of "renewed interest from some publishing partners" is "they'll give us money, probably".

I want the original game with just updated graphics and ui:

Caesar III

Sid Meyer's Alpha Centure

MOO 1 & 2

Fallout 1 & 2

Sadly this will never happen because what developer doesn't want to play with the code and have their own spin on a modern take.

Blizzard recently released Starcraft: Remastered on the 20th anniversary of Starcraft (https://starcraft.com). Because much of the game balance relies on weird/buggy unit behavior, it was critical to keep the game code intact, so the developers only focused on a graphical, UI, and netcode refresh. It worked, and was successful, but it's been months since release and there are still huge bugs and general problems with everything they did touch.

There was some discussion here about the effort it took to emulate a lot of the bugs in order to keep the game the same.


It's almost like we should take the old assets, take the new assets, run the exact old engine with the old assets, and then ON TOP OF THAT, let a Machine Learning system figure out how to, in real time, make the graphics look better.

Hey, Károly Zsolnai-Fehér (Two-Minute Papers), can you find someone to implement this?!? kthxbai!

You may want to look at https://github.com/falltergeist/falltergeist, though I didn't have the time to try it myself yet.

This does not seem like a graphics and UI update, just like a recreation of the original with FOSS software.

For anything you want, it's worth at least taking a look here:


I've read elsewhere (https://shamusyoung.com/twentysidedtale/?p=42010 as linked by another member) that the latest kickstater updates were showing something very different from what they where working on at the start, like they were preparing pitches for a publisher:

So they ask for people's (and your) money to make 'just' a remake with updated graphics and then they blow all that money doing something else, in order to try to get a publishing deal.

Even the switch from Unity to Unreal could be framed as preparing for such a pitch, since Unreal is more appealing to the publishers. They scrapped months of work and had to work even longer to get to the point of what they had during the Kickstarter pitch.

Thanks for the link, that was a very interesting read. The theory brought forward in that post, namely that most of their development decisions make no sense if they were intending to deliver the game their Kickstarter promised, but make a lot of sense if what they were really trying was to find a publisher, is quite intriguing. It's only a guess but it's kinda convincing.

We should probably give Nightdive the benefit of a doubt but if that indeed was their business strategy it would be a very heavy slap in the face of every single backer that put money into their Kickstarter, hoping - no, expecting - to get the remake that was promised in their campaign: a remake of a game beloved by many.

You're welcome. The link was also posted somewhere else on the thread before me, so I'm not the only one who thought about that.

This was a good article that goes over what happened with the Kickstarter project: https://shamusyoung.com/twentysidedtale/?p=42010

i can not agree more with single one sentence in this article. I missed system shock crowdfunding campaign, but founded pillars of eternity, shadowrun and wasteland - looks like i am lucky then

What makes you say this is the "outcome" of the Kickstarter? It's just the plain old source of the PowerPC Mac version of the game...

I think he means the _release_ of the source code is the outcome, not the code itself.

If a tree in the forest...

It got sidetracked but is still continuing as of Feb 16 2018:


(click 'Updates')

The update on 16 Feb 2018 is by the CEO, detailing why they've failed to deliver and are shutting the project down.

They took the money and ran, basically.


I don’t think they took the money and ran at all, and it’s unfair to say so.

I think anyone who backs a Kickstarter without accepting the risk is really of questionable wisdom..... there is now years of evidence that kickstarters fail through lack of skill/competence/experience. Failure does not equate to fraud.

A Kickstarter outcome is NOT a guarantee, so when it fails, shrug and move on rather than behaving entitled and angry. And if you’re capable only of being angry about failed Kickstarter outcomes, we’ll just don’t back risky ventures that may lose money.

"We are taking a break, but NOT ending the project."

Apparently you didn't read the very update you linked to.

Nor did they take the money and run; they just wasted it through mismanagement and unrealistic goals. They deserve plenty of criticism, but just because you're pissed off at them doesn't excuse blatant lying and misrepresentation.

More specificaly, they've wasted it preparing publisher pitches instead of delivering what they asked people's money in the first place.

That's a pretty disingenuous way to present what was said:

> I have put the team on a hiatus while we reassess our path so that we can return to our vision. We are taking a break, but NOT ending the project. Please accept my personal assurance that we will be back and stronger than ever. System Shock is going to be completed and all of our promises fulfilled.

Honestly, I read that statement as "we're finished, but if some angel comes down from heaven with a barrel full of cash we would be more than happy to deliver the game."

The spirit is willing, but the flesh is flat ass broke.

> I have put the team on a hiatus while we reassess our path so that we can return to our vision. We are taking a break, but NOT ending the project.

Unless he's flat out lying, they're not shutting down.

> For context this is the outcome of a failed Kickstarter.

Not necessarely, they will announce something https://i.imgur.com/1QIgU4Y.png

Is it going to be exclusive to the Ataribox? ;)

> "As the budget grew, we began a long series of conversations with potential publishing partners."

Really? You need a publisher? Sigh. What year is it again?

PC/Mac only you are right. I haven't worked in the industry in a while but I vaguely recall one had to purchase production time and essentially predict your sales for Sony/Nintendo if the system was hot in the marketplace. If you aimed too low, one had customers without product for an extended period (most traditional game sales are in the first weeks), if you aimed too low, you had to eat those DVDs/carts at a loss after the retailers returned them. Also with consoles, the devkits for each were priced ridiculously at something like 3000 for PS3 and more for XBox360 (and those things red-ringed like crazy, went through three in three years), and there were test versions and special development versions one had to use to debug, I remember there was one special PS3 that was I want to say 10000 that was the size of a desktop computer that our resident graphics guru got. So deciding to add on console support for a PC game like they did is a huge commitment for a AAA game, it is not simply a matter of using an engine that works on all the platforms, all the QA has to be repeated and there are different extra steps for every platform but they didn't even get to that step.

$3,000 dev kit is pretty cheap. Just think of the cash a N64 developer had to drop on an SGI...$100k+

True, I remember there was also something of a shortage of Wii kits for a long time at least for my developer shop we were low on the priority list so we only had on Wii developer box for the US branch for at least a year after the Wii came out.

Publishers front money (and having money often leads to needing more money) and provide a lot of expertise to get a game over the finish line.

Publishers give game developers money. They need a publisher to fund the project if the budget grows...

Plus provide support with all the non-game-development things involved in a game development project. Just look at Obsidian who partnered with Paradox Interactive for Pillars of Eternity. They didn't need more money, but they wanted their expertise in publishing.

Cause they overscoped the promised project to something needed a Publisher, wasting months of time with an engine switch which make only sense in the case of preparing for a publisher pitch.

I think this is what I was getting at: they made some bad decisions. If I understand the original project/proposal (maybe I've got this very wrong), but they essentially just had to take an existing concept and build it in a new engine? That shouldn't be too much work, should it? Still a lot of work, but not something from nothing?

You're sure that this is the source of the rebooted game and not a release of the original SS1 code?

This does indeed look like the original code. Given that it has instructions for building it under Code Warrior...

And lots of ^M goodness :)

I don't understand your question.

Because they've been unsuccessful in completing the reboot, releasing the sources is a way of apologizing.

Since the instructions mention a PPC requirement to build on Mac, I'm assuming these are fairly old.

> Because they've been unsuccessful in completing the reboot, releasing the sources is a way of apologizing.

Where are you getting that this release is an apology for the failed Kickstarter? Can you point to source at Nightdive saying this, or are you just speculating?

Linking this without context suggest it's an answer to the parent's question, which was asking for proof this was an apology.

The post is them stating that they're releasing the source code as a celebration of a big update, not as an apology. The only people saying it's an apology are speculating.

Sounds like pure speculation (unless grandparent has more info to share).

As far as I know, the project's scope grew out of control so the project was put on hold for several weeks.

But it is now worked on again, with the initial, smaller scope but the new engine.

>Because they've been unsuccessful in completing the reboot, releasing the sources is a way of apologizing.

They wanted to publish the original source code from the get go. Here's an article from mid 2016 talking about it: https://www.gamezone.com/news/system-shock-s-original-source...

>Since the instructions mention a PPC requirement to build on Mac, I'm assuming these are fairly old.

The game was released in 1994, so yeah, they are old :-)

the controls were not easy or simple, but certainly not unusable. lean out showed up in other games, lie down as well. but it's a shame no other FPS games tried the "mouse aim without mouse look" approach.

This is a trip, seeing code I wrote 25 years ago. It's actually kind of scary how identifiable my style is; in a lot of ways I am still the same coder, although I tend to work at a much higher level of abstraction now. There was a certain craft to weaving all sorts of linked lists back and forth all the time and maintaining invariants that looking at my old code makes me a little nostalgic for, but I can't say I really miss it much.

It is so incredibly fascinating to know that people who wrote legendary, old-school software are still hanging around, in this community no less, and contributing to software discussions decades later. Awesome :)

I was barely walking under my own power at the time you worked on this, by the way. Probably the same for many others who have fond memories of old games and get to meet the people behind them.

(Side note: Did anyone on HN happen to work on Jedi Knight? Modding that game was my first under-the-hood exposure to computer software, from modding to hacking around the asset checksums to cheat or do other shennanigans in multiplayer on MSN Gaming Zone).

Hi - many here do not know who you are, and are interested in your bio. Your HN profile doesn't have one. Can you please add one, or link to one.



These are the type of comments I love hn for!

What was the EDMS business? Also, any good stories from your origin days?

EDMS = Electronic Document Management System? Like source control? I honestly don't remember. These source files all have rcsid tags so probably we were using CVS? In our previous project (Ultima Underworld) our computers weren't even networked and I would go around grabbing floppies with changes from coworkers and merging their code into the master by hand.

Here are some of my Ultima Underworld stories:




According to a Kickstarter update from Nightdive, EDMS was the physics system, written by Seamus Blackley. It stands for 'Emetic Dynamics Modeling System'... Possibly a reference to the way discarded items would go flying out the center of the viewport :)

Edit: EDMS/SOLITON.CC confirms above is correct (speculation about origin of the name is still speculation, however)

Oh, that EDMS! I had totally forgotten its code name.

Seamus's physics system was really ahead of its time, but unfortunately a ton of the work of getting a physics system to work in a real game is dealing with edge cases, numerical stability, etc., and we had huge problems getting everything to an industrial-strength state. (You will probably not be surprised if you look at the code.) Terra Nova: Strike Force Centauri's full biped physics eventually had to be replaced by run-of-the-mill sphere physics just to make sure that things worked 100% of the time instead of 95%. Flight Unlimited was the real culmination of Seamus's physics work.

Nice! I can only hope the same will be done for Thief 1 and 2 (and SS2) someday.

The Thief games still have a very active community that regularly produces high quality fan missions, and one of the original engine developers has started releasing unofficial patches to make the games run on modern systems a few years ago. I'd love to read the games' full source code and to be able to play them on Linux without bothering with Wine

Sad that this never went anywhere: https://github.com/volca02/openDarkEngine/

Amusingly, a lot of source was found in an old Dreamcast dev kit: https://www.rockpapershotgun.com/2010/12/14/shipping-receivi...

Would love to see Dark Engine games get the treatment Quake games got, or something like OpenMW

There is a really good Thief clone called The Dark Mod, but unfortunately, it's not compatible with the original games.


The community hasn't really warmed up to The Dark Mod as I thought it would. I guess everyone's more comfortable with how the original games look and feel, and I can't say I don't understand it. Thief still plays great thanks to its minimal controls and UI (much unlike System Shock 1, which feels horribly outdated) and looks nice thanks to its amazing art direction (just look at some of the screenshots in here https://twitter.com/thiefbsp), so I don't think people would feel the need to move on to a clone unless it was that much better.

Thief controls are still great, they feel "crisp". I think System Shock is fine too, I even like using a mouse pointer to aim and interact with the world. Ultima Underworld I find a bit harder to play.

In Underworld, I use wasdzxc keys for gross movement, and the mouse for finer control. 1, 2, and 3 can control looking up and down. Using the control scheme, rather than relying exclusively on the mouse, makes the game more playable for me.

Oh man, I'd love a remake for Thief 1 & 2 that doesn't stray too much from the originals. If done in the Unreal Engine we might even get a ThieveryUT with proper Thief assets!

It would also help me forget the crushing disappointment I felt with the Thief games since 2 (with the exception of the Shalebridge Cradle level in Thief 3).

>one of the original engine developers has started releasing unofficial patches

I thought it was some random user called Le Corbeau from the french forum Ariane4ever?

The dreamcast code mentioned by jeffbax is the current assumption of how he got his hands on it.

The (partial?) source code for Thief 2, SS2 etc. was leaked a few years ago. You can still find it on the Internet.

I know, but using it is not exactly legal and having to rewrite it all from scratch would be bothersome, even using the original code as reference. There's a set of C++ macros used for "scripting" the AI and the missions which I would immediately tear out if I had to rewrite the engine, and I'm afraid replacing it with something more sane while still retaining compatibility with all the fan missions and so on would take a lot of time. Plus, as you said, not all the code was in the leak (though I don't know exactly how much is missing).

The original games are still playable today and oh my, they are still awesome.

We are only starting to see some games like MGS5 surpassing the AI of Thief but most of them try to combine stealth with power fantasy and that's a bad mix.

Thief had it right with its underpowered character lost in a maze like level.

I wish more older games would have their source released, even if not under the GPL. I worry that for many games the source is simply lost forever. At least put it out there for preservation in some way!


> Is there any plan to do a source-code release of any of the games you've re-released?

> We have released the source to Strife: Veteran Edition[1] and we are planning on releasing more code in the future.

1: https://github.com/svkaiser/strife-ve

A lot of old games have had their source code lost, unfortunately. Much source code of the day only existed on the hard drive of the developers.

And their artwork! Often the code source is released but is more or less useless and obsolete while the images and sounds are still copyrighted.

The difference there is that you can usually find a way to buy the game itself to get access to the game media.

The source code here will be of limited use until it's heavily reworked to compile on modern systems. It's a lot of work, but not as much work as reverse-engineering the game and building an engine implementation from scratch, and this source seems like it has most of the Mac-specific stuff under a separate directory, which would make it easier than otherwise.

Usually you can't because of third party library ( physics ect ... ). Like many many games rely on Havok, you can't distribute that to the public.

How much work would it be to replace Havok with something like Bullet?

I've got a little bit of an obsession with Ultima Underworld (another Looking Glass game released by Origin). This gives me some hope that the source for that game (and/or its sequel) might someday see release.

Agree, it’s been always surprising to me that companies don’t just release sources after say 10 years.

I wish for Fallout 1 and 2 sources. I think there would be strong community interest in hacking it.

Great, thanks for sharing. I’m definitely gonna take a closer look at these. Now imagine that the effort went into advancing the original sources rather than rewriting things from scratch.

I think that many companies would agree to release sources of abandonware games upon appropriate request from a fan base community, with the goal of preserving, maintaining and advancing the original title. In fact this is strategically beneficial action for the company, not from a financial perspective, but you can imagine some extra attention and buzz being created if the game was to be revived.

It’s possible that many companies are not even aware of devoted communities around their older titles.

Yeah, that reminds me of Ubisoft and Heroes 3 HD.

"Guys, why haven't you done the expansions?"

"Hurr durr we've lost the code."

I hope http://fabiensanglard.net will do a code review for this!

I'm not quite the programmer ~fabynou is, but I have been contemplating following his example for awhile. This might be the right project for it.

Thanks for this link.

Dunno if just mobile problem, but most code has ^M instead of linebreaks; hard to browse oneline source

It's because the code was written on classic Mac OS, which used CR newlines rather than the LF or CRLF styles used today.

lol, I knew LF and CRLF was a thing, but only CR? Interesting :D

Taken literally just CR seems very odd.

You probably know this, but LF is "line feed" which advances the feed.

CR is "carriage return" which puts the carridge to the start of the line.

The combination makes sense because it does both, it returns the carriage and advances the line.

Just LF kind of makes sense because when you advance the line you can think of the line being empty.

But conceptually just CR suggests returning the carriage but that doesn't imply the newline.

Of course the terminology is originally from type-writers so it doesn't have to make sense, but it does seem odd that some systems chose just CR.

On a typewriter from around the time of the first Macs, the return key normally moves back to the beginning and moves down a line, so that's probably why they picked it. They also called the key "return" rather than "enter."

On a classic non-electric typewriter the carriage was returned by pushing a lever on the right side of the carriage. The lever could be pressed to the left relative to the carriage which would move the paper up. At the end of travel relative to the carriage if you kept pushing it would move the carriage back to the left. Hence CR and LF could be accomplished in one motion. If you wanted to advance the paper many lines, you'd push the lever multiple times - probably with the carriage all the way to the left the whole time.

On another note, I find it incredibly weird describing an "everyday" item like a typewriter because many people on HN may have never used one!

Strange that 'return' takes you to a new line, rather than returning you to the previous line. English!

It's a simple mechanical artefact. Carriage return moves the paper carriage all the way to the right (returning it to its initial position), while line feed will advance the paper vertically (feeding a line through the carriage). With that in mind, line feed and carriage return on their own make about as little sense.

On later type writers both the line feed and carriage return were integrated into a single key or lever, which was just called carriage return or return. From this perspective, an encoding using a lone CR for newlines might make more sense than one using a lone LF. But neither combination really makes intuitive sense in buffered, electronic systems. It's just how it is.


Brings back memories of staring at a keyboard unsuccessfully looking for a "return" key to satisfy "Press return to continue..."

Somehow the friends who told me how to use a PC always used "Return" instead of "Enter", but this was in Germany where we didn't have any text on this key, just a big arrow pointing down and left.

CR is a common line ending for RS-232 devices. I've got 3 or 4 in a cabinet for my current job which are "line-based" and which use CR as the line-ending. To issue a command to one of these devices, you terminate the command with CR and then the device processes it. These same devices will also send response data with CR line endings.

This is partly why stty and termios have options for CRLF translation on terminals. I'm sure there's some historical reason for that.

I thought it was to do with the fact that you might want to use them separately sometimes? For instance you might want to repeat a line without a newline for a "bold" effect, or with underscores for underlining.

It's no more odd than just 'LF'. At the end of the day, something has to represent 'end of line'. The outlier here is really MS DOS, wasting a perfectly good byte on pretend-lineprinter codes.

The internet also uses CRLF for newlines since about 1973: https://tools.ietf.org/rfc/rfc542.txt

So historically speaking, MS DOS is doing the right thing.

1971, really - https://tools.ietf.org/html/rfc158

In 1973, the 'internet' was yay big:


Apple sold more Apple I's than that in its first few months of existence.

Ahh, you're correct. I wasn't sure if CRLF was actually codified in rfc158, I just did a search for "CRLF" on it, I didn't realise they were using the hex values of CR and LF (X'0D' X'0A').

The internet is now 8 or 9 million devices big, and CRLF is still the standard newline for internet protocols.

MS-DOS isn’t alone in that. https://en.wikipedia.org/wiki/Newline#Representations_in_dif... claims ”Atari TOS, Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP/M, MP/M, OS/2, Symbian OS, Palm OS, Amstrad CPC, and most other early non-Unix and non-IBM operating systems” used it.

The real surprise is the BBC Micro, which used LF+CR.

DOS did it because CP/M did it.

If I had to guess I'd say CP/M was developed for extra dumb teletypes that needed both to properly handle a newline. So many quirks in terminals date back to the days when everybody was just making it up as they went along. Legacy support is the root of most braindamage.

Teletypes needed it for timing. https://en.wikipedia.org/wiki/Newline#History:

”The separation of newline into two functions concealed the fact that the print head could not return from the far right to the beginning of the next line in one-character time. That is why the sequence was always sent with the CR first. A character printed after a CR would often print as a smudge, on-the-fly in the middle of the page, while it was still moving the carriage back to the first position.”

There's an entry point in the BBC Micro's OS that's routine that prints a character, or LF+CR if the character is CR (13). This routine prints the CR second, so that when it was called with 13 originally it can fall through into the main, non-translating character print routine with 13 in the accumulator, and then return to the caller that way too. (These two routines promise to preserve the accumulator.) Saves a couple of bytes in the ROM.

(There's also an entry point partway through the wrapper that just prints a newline. DRY and all that.)

The code is not exactly this, but differs from it in no relevant way:

    .osasci \ print char, translating CR to newline
        cmp #13:bne oswrch
    .osnewl \ print newline
        lda #10:jsr oswrch
        lda #13:\fall through
    .oswrch \ print char without translation
The Atom's ROM does the same thing, so they presumably just copied this for the BBC. After all, it doesn't really matter which order you print them.

A lone CR is certainly more odd than a LF...LF is implicitly a new line. CR by definition is a return to the beginning of the line; literally NOT the end of the line!

Who would choose 'beginning of line' to mean 'end of line'?? Oh, Apple :)

There's nothing more 'implicitly new line' about either, in a text file. But if you're particularly set on hardware analogies - there's a 'return' key on keyboards and no 'line feed' one.

Umm, there absolutely is, unless you want to start using the backspace character instead of line feed or any other arbitrary swap, or maybe 'null', or 'delete'; Sure, 'null' should mean new line... 'Line Feed' by words, use and history, means new line....it feeds lines...i don't understand how you could make such an argument.

The fact that some keyboards say 'return' (but usually have a down-and-to-the-left graphic) is a separate issue, now that we are talking actual hardware; The lack of need for a specific CR, LF keys is obvious. Once again, of course today apple is using the odd choice of 'return', despite the rest of the industry. Many (most?) of 70s onward keyboards had an 'enter' key, no?

Except that LF was also designated as NL before Apple came onto the scene. They were deliberately incompatible.

You're pulling things out of your ass. I'm interested in comments like yours. At some point between reading the previous comment and responding to it, you must have had some thought that goes, roughly, "Hey, I'm just going to make some shit up now and post it." Right? How else does it happen?

Apple's is not the only ecosystem that settled on carriage return. Who do you think was around for them to deliberately break compatibility with in 1977? Kildall?

You think when Woz was designing the Apple II he was going "oh better make this incompatible with UNIX"?

Just like some people will defend Apple to the death, others will desperately assign malice to literally anything they do. Funny company.

It's the same for pretty much every company that has ever existed, try not to take it personally.

It was? By whom? What were they 'deliberately incompatible' with?

UNIX, for one.

At that time Apple chose CR, UNIX was just one of a multitude of minicomputer operating systems. Compatibility with it would have been only important in hindsight.

I wonder if this would have been a big concern for home computer vendors at the time. How many of them would have used Unix? Even if they had, would Unix even have been popular enough to really matter?


Well, they could just apply a minimal cleanup for end lines before posting.

Then the people who want to compile it rather than complain about it would have to go through an extra hoop to fix it again. They published it the right way.

Plus, if they replaced the ^Ms, what would we have to complain about? This truly is the best way. People can complain, and people can compile.

That is an excellent point although I suspect your question is going to be answered in spades when people notice who the developer posting the code is.

I don't know anything about this developer?

Agreed, at least make sure it will still compile with line endings changed before submitting pull requests.

This builds with CodeWarrior 10 (from 1996) which is probably OK with non-Mac line endings, but there are other old Mac codebases on GitHub using older toolchains that require CR. (i.e. Pararena 2: http://bslabs.net/2016/11/13/building-pararena/)

A PPC Mac running OS X 10.4 is basically the only way to work with both git and classic Mac dev environments, I'll be trying this out myself.

I still have my Power MachTen CD. I used to love wasting time porting GNU/Linux source to that odd ball environment.

A year or two ago I built dropbear on Power MachTen, worked great and just needed a couple fixes to bring it back into compatibility with GCC 2.x.

Playing around with Professional MachTen (for 68k) is a real trip though. 4.3BSD, an even older GCC, and it implements virtual memory and protection by taking over the system memory manager. (You actually have to restart when quitting it)

It would be so cool to have something like MachTen on iOS, some people have tried but the restrictions on executable pages really restricts things.

Eh, I prefer when they don't clean up anything. It feels more like real archival work.

If you click on the "raw" view it will render properly in the browser.

You might also need to force your browser to display with "Western" text encoding (that's what it's called in Firefox, not sure about other browsers).

There's a CR->LF conversion at:


Viewing the raw file, at least in Chrome on OSX shows line breaks.

Same thing on desktop.

I put in a PR to fix that: https://github.com/NightDiveStudios/shockmac/pull/2

Best thing about GPL code is that we can fix it!

Changing line endings isn't a "fix"... if you do that, it's unusable on the intended system upon which you would work on this code - System 7 or Mac OS 8.

I'm pretty sure CodeWarrior was able to deal with any kind of line endings: CR, LF, CR+LF.

This might be a dumb question (I spend most of my days in Ruby), why can't this compile with gcc and make? It's all just C (and a few files C++) right?

The fix that needs to be made here is in Git, which fails to process line endings in a sane way (and includes a bunch of insane, poorly documented config options that approach the problem completely sideways).

I can’t believe Github’s renderer fails on ^M.

I sent a feature request in 2016 to GitHub to support Mac line endings, it was "passed to the team for future improvements". Not holding my breath.

This doesn't bode well for my wish to list file sizes...

Yea they could emulate the carriage return and only show a mangle of lines...

There's also a fan remake that's been in progress since before the kickstarter.


"This source release does not contain any game data". Can somebody explain what they mean by that?

It just has the game engine itself, without any of the images, sounds, maps, etc that make it System Shock.

GOG has a System Shock: Enhanced Edition, which also includes the original version of the game. I have no idea if that version of the data would work with this version of the engine, though. The engine is for the PowerPC Classic Mac OS version of the game.

>I have no idea if that version of the data would work with this version of the engine, though.

IIRC the Mac version doesn't use the original data files, but converted them to use the Mac's resource file format. And judging from a quick look at the source code it doesn't contain support for the original data files.

So: no, you'll have to use the Mac version's data files.

Thanks. I suspected as much, but haven't had the time to actually look at the source code.

Looks like another bump in the road in getting this thing running on e.g. Linux. It'll be interesting to look at reverse-engineered System Shock file format info, and see if anything but the data-loading functions would need to be changed, to use the more widely-available PC data.

From other comments, the sections in PPC asm and the actual I/O APIs would have to be dealt with too.

It doesn't contain art assets or audio and that sort of thing.

I haven't played System Shock 1, but this sounds like great news - I'm excited to check it out.

System Shock 2 is the precursor to the more recent Bioshock franchise (Bioshock, Bioshock 2, Bioshock Infinite). They're not part of the same universe, but they share some of the same lineage, and the themes of the game are similar.

To be honest, I didn't know there was still interest in System Shock 1. Normally, Bioshock fans say to skip System Shock 1 and go right to System Shock 2, but maybe that's just because the themes of the first wouldn't appeal as much to Bioshock fans.

The timelines are so different they could be in the same universe. Assume plasmids died out when those sea slugs were harvested to extinction or something.

and then the new Prey from last year. It's name really confused its issue, but it's very much in the same theme, if not world.

Not so much the themes but the game interface. SS1's interface predates a lot of modern FPS idioms, so it feels very clunky and difficult to use compared to more modern games.

Thematically, it fights right in with the Bioshock/Prey/Thief/Deus Ex lineage - all of them exploring the theme of megalomania in one way or another.

Love this comment:

// yeah yeah, goddamn, gotta fix this.....someday....soon....i promise....really

Glad to see GPL3

Nightdive has posted an update[1] which talks about the source code and clearly says they are back to development. Most notably:

"We have been able to re-use the majority of work we’ve done over the past year and we’re making significant progress in a very short amount of time. With that said we’ll be inviting our highest tier backers to privately test the game beginning in September at which point we estimate that the game will be fully playable, from start to finish."

[1]: https://www.kickstarter.com/projects/1598858095/system-shock...

How difficukt would it be to port it to linux?

Nontrivial. There's a significant amount of Mac-specific code in the application, including some PowerPC assembly.

Awesome. I've been wanting to finish that, but I scratched my CDROM. True story. Also, I don't have Windows 95 or an optical drive anymore. Is this one of those deals where the art assets are removed?

If you scratch a CD, as long as the scratch didn't scrape off the "label"/data side, you can just buff the surface of the disc with Brasso (brass polish) and a lens cloth. I'm not even joking -- you basically smooth away the scratches. I've done this to restore so many scratched discs. Just make sure it's the clear/thick side of the disc you're buffing, NOT the label (as the data layer is just underneath the label).

Well, their build instructions are for PPC MacOS 9 (and the game has a bunch of PowerPC assembly code in it). One of their stated requirements is also "The original Mac System Shock data", so it's not clear to me if your CD-ROM would've helped or not.

Yes, you have to bring your own copy of the assets. They are legally available on GOG: https://www.gog.com/game/system_shock_enhanced_edition

Ooh more source code for classic Mac games! Most of the big PC games that have source releases (like the id engines) just came with DOS/Windows source, not the Mac ports.

Yet another reason I'm not backing on Kickstarter any more. Only good thing to say about Kickstarter these days is that at least it isn't fig.co


    inslwi   r0,r10,16,8
    insrwi   r11,r10,16,8
    rlwimi   r0,r10,16,24,31
How I missed this!

I like is the fact the game is written in fixed point maths.

It's easy to forget that when this game was written computers either a) didn't have an FPU or b) the FPU was so slow it was useless.

I bet if I searched through the code long enough I'd find a sin/cos lookup table too :)


One question I have wanted to ask for a long time - why is the source code for old games often released under a free license, but artwork and other assets are not?

What are the incentives of the publisher in this case and why are they different for the source code and for the asset?

I have a copy of _System Shock_ for Mac somewhere. I played it on the PC but never finished it and picked up the Mac version later at a discount. I was very disappointed to discover it had a crashing bug mid-game for which I could find no workaround.

Now that the source is published you can go back and fix it! ;)

Which sounds like a lot of work.

Oh, … and find an old mac to run it on …

Oh, and a copy of the right version of CodeWarrior.

CodeWarrior, now there's something I haven't thought about in ages.

Is there a particular reason this is only the Mac source code?

It's quite possible that's the only version of the original source code that still exists. Many game studios didn't use source control even through the 90s and once a game was considered "done" there wasn't much perceived value in keeping the source code or original assets around. Consequently, many games from that period only exist in release form.

Edit: I stand corrected on Starcraft.

> For example, Blizzard only has the source code to Starcraft because someone found a backup CD on eBay and returned it to them

This is a myth. Blizzard was already well on their way to releasing StarCraft: Remastered when that CD was found -- it's very unlikely that the found CD contained anything unique.


This is probably my favorite game of all time and I really hope somebody does something cool with this!

How can they be "Copyright 2015-2018, Night Dive Studios, Incorporated."?

Too bad you can't read any of it with the garbled ^M rendering on GitHub.

Use this fork with changed line endings: https://github.com/ToxicFrog/shockmac

Very interesting. So native Linux version is possible?

Thanks Nightdive!

  // We need a hack for inner bridge.  Inner bridge?  But I just met her!
The best part is always the comments.

  // Returns whether or not in the humble opinion of the
  // sound system, the sample should be politely obliterated out of existence

  // look around at all my playthings
  // eighteen percent a year, for nothing

  // when all the leaves have fallen and turned to dust
  // will we remain entrenched within our ways
  // indifference, the plague that moves throughout this land

  // not in any way the right way to fix this bug, except
  // that it is the fastest way.  Doug says go.  Ask TJS.

The comments are awesome!

I love that there's a typedef "Pelvis" (something to do w/ models, I'd assume). In lots of places in the code, then, you can have "Pelvis elvis;". Yay!

  // Hey Rocky, watch me pull this constant out of my butt!

    // When we pretend that we're dead (pretend we're dead)

  // its okay to kill in the name of democracy

  // they're all talking bout, beatles songs
  // written a hundred years before they were born
  // yea they're all talking bout, the round and round
  // but whose got the real, anti-parent culture sound

lots of punk rock references. Neat.

   // woo hoo, watch me pull odds out of my butt

Love SS1.

Will never forget the elevator music after relief after being chased by some monsters.

Codewarrior => worse IDE I've ever had to use. You literally want to break something/someone once you've used it for any extended period of time (PS2 Game console developement).

Really? I never did PS2 development, but I liked it for Mac stuff in the '90s and Palm stuff a little bit after that.

My recollection is that it was much nicer to use than Think C, and absolutely blew the doors off Visual C++ 1.5 and 4.0, which were the other IDEs I had to deal with at/around the time I first picked up CodeWarrior.

The Apple Code Fragment Manager (PPC dynamic loader) made me want to break things sometimes, but for its day CodeWarrior was a breath of fresh air, as I recall.

We were shipping the games on 3 different consoles, shipping on the original XBOX with it's superb integration to Visual Studio was such a breath of fresh air, and allowed you to debug directly and step through your code on the console.

Not so much for PS2 and Code Warrior, which was a pain to use and was integrated as an after thought to the PS2 SDK. So maybe using CW on Mac worked well (at the time), but targeting some other machine than the one running the compiler was painful at best with CW.

Sorry to ruffle any CW fans out there, but until you've used it to do PS game dev, you won't know the atrocities our team went through.

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact