System Shock 1 source code released under GPL
github.com
github.com
It’s disappointing that they didn’t stick to the goals of the Kickstarter which was a straight update of the original.
https://www.google.com.au/amp/s/www.polygon.com/platform/amp...
https://www.kickstarter.com/projects/1598858095/system-shock...
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.
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.
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?
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.
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.
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 :-)
And lots of ^M goodness :)
> "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."
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.
Hey, Károly Zsolnai-Fehér (Two-Minute Papers), can you find someone to implement this?!? kthxbai!
https://www.kickstarter.com/projects/1598858095/system-shock
(click 'Updates')
They took the money and ran, basically.
https://www.kickstarter.com/projects/1598858095/system-shock...
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.
> 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.
The spirit is willing, but the flesh is flat ass broke.
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.
Unless he's flat out lying, they're not shutting down.
Really? You need a publisher? Sigh. What year is it again?
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.
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.
Not necessarely, they will announce something https://i.imgur.com/1QIgU4Y.png
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).
https://blog.acolyer.org/2018/03/16/when-coding-style-surviv...
Here are some of my Ultima Underworld stories:
https://dfan.org/blog/2011/02/20/the-dangers-of-self-modifyi...
https://dfan.org/blog/2011/02/21/ultima-underworld-bugs/
https://dfan.org/blog/2011/03/17/one-more-ultima-underworld-...
Edit: EDMS/SOLITON.CC confirms above is correct (speculation about origin of the name is still speculation, however)
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.
Thanks
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
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
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.
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.
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).
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.
> 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.
I wish for Fallout 1 and 2 sources. I think there would be strong community interest in hacking it.
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.
"Guys, why haven't you done the expansions?"
"Hurr durr we've lost the code."
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.
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.
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 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.
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!
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?
Just like some people will defend Apple to the death, others will desperately assign malice to literally anything they do. Funny company.
The real surprise is the BBC Micro, which used LF+CR.
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.
”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 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
pha
...
pla
rts
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.So historically speaking, MS DOS is doing the right thing.
In 1973, the 'internet' was yay big:
https://twitter.com/workergnome/status/807704855276122114/ph...
Apple sold more Apple I's than that in its first few months of existence.
The internet is now 8 or 9 million devices big, and CRLF is still the standard newline for internet protocols.
Who would choose 'beginning of line' to mean 'end of line'?? Oh, Apple :)
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?
This is partly why stty and termios have options for CRLF translation on terminals. I'm sure there's some historical reason for that.
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).
Best thing about GPL code is that we can fix it!
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.
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.
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.
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.
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.
// yeah yeah, goddamn, gotta fix this.....someday....soon....i promise....really
"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...
inslwi r0,r10,16,8
insrwi r11,r10,16,8
rlwimi r0,r10,16,24,31
How I missed this!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?
Oh, … and find an old mac to run it on …
Oh, and a copy of the right version of CodeWarrior.
Edit: I stand corrected on Starcraft.
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.
https://us.battle.net/forums/en/starcraft/topic/20757605637#...
Thanks Nightdive!
// We need a hack for inner bridge. Inner bridge? But I just met her!
The best part is always the comments. // When we pretend that we're dead (pretend we're dead) // woo hoo, watch me pull odds out of my butt // Hey Rocky, watch me pull this constant out of my butt!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!
// 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
https://www.youtube.com/watch?v=QtPKO1DHo2wlots of punk rock references. Neat.
// 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.Will never forget the elevator music after relief after being chased by some monsters.
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.
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.