Get the top HN stories in your inbox every day.
linsomniac
frogulis
Could you explain that in more detail? I was thinking about buying it.
bartread
If you have three hours (!) to spare, Kim Justice's documentary on Peter Molyneux is worth a watch: https://www.youtube.com/watch?v=zFZ92jySWe0.
If you don't have three hours to spare and all you want to know about is Godus then, helpfully, the documentary is also available in several parts (which, I believe, was its original format). Godus is covered in part 4: https://www.youtube.com/watch?v=V9ysOEFJhFY.
Bit of a sad tale overall. Nevertheless, for reasons I've explained at https://news.ycombinator.com/item?id=24377333, and despite all of this history, Peter Molyneux will always remain something of a legend to me.
lelandfe
> Godus is covered in part 4
You should also do yourself a favor and read John Walker's interview on RPS, which is absolutely brutal:
https://www.rockpapershotgun.com/peter-molyneux-interview-go...
(I miss that era of RPS)
avereveard
time gating, microtransactions, ties to "social" features where the first to dig a specific piece out of a cube would win godus related things (that were never delivered), and ultimately abandoned after early monetization failed.
linsomniac
@frogilus: This sounds correct, it's been too long for me to remember specifics, but time gating and microtransactions sound like some of the biggest issues I had with it at the time.
TheAceOfHearts
It would be beneficial to add a readme explaining what this is.
Sakos
The only google results about Populous and the Dreamcast refer back to this HN post and a comment-less Reddit post or two linking to the same repo. Mysterious. It doesn't look like Populous ever got a Dreamcast release either.
edit: Oh, I dug around for LemonHaze and found this twitter post https://nitter.mint.lgbt/i/status/1607154272612896769 I think the title of the HN post is erroneous. It seems to be an unreleased Pocket PC port, which makes way more sense.
edit2: The source for the code seems to be https://en.sega-dreamcast-info-games-preservation.com/liste-... where it's titled as "Source code of Populous for the Pocket PC system (Unreleased Windows CE Version)" Apparently WinCE games can be ported to Dreamcast too?
ac29
The credits also reference Pocket PC:
CString theCredits[50];
theCredits[0] = "POPULOUS";
theCredits[1] = "FOR THE";
theCredits[2] = "POCKET PC";ThrowawayB7
> "Apparently WinCE games can be ported to Dreamcast too?"*
My memory is fuzzy but that seems doubtful. Windows CE for PocketPC had implementations for Windows' windowing system but IIRC Windows CE for the Sega Dreamcast did not, under the assumption that the game developer would be going straight to DirectX to manage the display.
ZiiS
Windows CE was on the CD for Dreamcast games. You could use image Builder to choose what was included. However Populous is fullscreen and dose not use any Window's UI.
tiernano
Dreamcast ran windows ce, so it would be easy (ish?) to port it.
helf
The Dreamcast didn’t come with CE. There was just a version that could be used /with/ the DC.
For some reason people equate “compatible with Windows CE” stickers with “runs Windows CE when you turn it on”
mattl
Dreamcast has a little Windows CE logo right on the front but I never knew to what extent that meant much
eek2121
Seems pretty spot on to me. Which part has you confused? Maybe Google Populous (game) if you don't know the title or "Dreamcast" if you don't know what that is.
readthenotes1
it's a nefarious underhanded dump to legetimize misspelling deprecate as depricate
IntelMiner
Nefarious is pretty insulting. Software preservation is important
readthenotes1
Important enough to promulgate a wrong spelling of deprecate?
mmastrac
Is this an actual release or a nebulously-licensed dump of some random port? If it's the former, that's awesome as this was one of my favourite games as a kid.
Jensson
The files don't look generated at least, no generator would produce unordered stuff like this (god.h):
#define FIRST_RUIN_TOWN 54
#define BAD_LAND 66
#define FLAG_SPRITE 64
#define SHIELD_SPRITE 68
#define GODS_HAND_SPRITE 78
#define ANHK_SPRITE 80
#define SKULL_SPRITE 81
#define DEVILS_HAND_SPRITE 79WirelessGigabit
A generator wouldn't even have this file. You'd just see 54 embedded somewhere in a call.
rootw0rm
that was my first thought, too
ytch
I guess it is ported version:
https://github.com/LemonHaze420/DCPopulous/blob/4cd8b7562191...
It's license dialog has a link to http://www.portable-games.com/populous
omoikane
A different repository by the same user had a similar text:
https://github.com/LemonHaze420/DCSpeedBall2/blob/e6d9ce3c11...
I don't remember Speedball 2 having a DreamCast port, so these repositories seem somewhat strange. They are also strange for missing license files and various other asset files.
pjmlp
I love how they even took into consideration safe programming practices, who says game devs shouldn't care about security.
https://github.com/LemonHaze420/DCPopulous/blob/master/safep...
kevingadd
Paranoia was pretty common (and reasonable!) back in the era before you could easily release patches. Tossing in all those asserts etc would mean you would catch problems sooner during testing and be able to fix them quicker.
Many game companies ship with asserts + assert messages turned on, for example, instead of making them DEBUG-only.
iso8859-1
Would they abort(3) when an assert fails?
Isn't there a risk of having a erroneously strict assert predicate and then having the game abort unnecessarily?
If the game keeps going without aborting in the case that state has somehow been compromised, there is still the chance that the player won't actually notice.
I wonder if they are afraid that the game state will be compromised in a way that makes the player not realize the corruption, but still ruin the game.
kevingadd
You have the aggressive asserts in during development, you can make them nonfatal in release builds. Though many games actually leave them on, for example World of Warcraft still has them set to crash the game with a detailed error message. Tabula Rasa (the ill-fated MMO) handled many assertion failures in a nonfatal way with an in-game popup, and errors in WoW mods also don't crash the game.
Most of the games I work on have a mixed approach where if an error is recoverable I don't crash out, but if it's not then I fail-fast out with a detailed error popup. An example of a recoverable error would be a bug causing a player-activated ability to fail to activate, while fail-fast would be the right choice for something like an unexpected null in a data structure.
sys_64738
What did they do here? Verbatim copy it from the original assembler implementation to C code for WinCE?
https://github.com/LemonHaze420/DCPopulous/blob/master/popul...
tom_
It looks like it's been converted from arm to c - any assembly language bits in the original populous would have been presumably in 68000?
If it was based on the Archimedes version then maybe the sprite routines would have been the only assembly language bit.
Sakos
Seems to be an unreleased port for the PocketPC, see my other comment https://news.ycombinator.com/item?id=34133405
Cyph0n
Where is the Dreamcast code? I don’t see any non-Windows preprocessor directives.
hnlmorg
I think this is an unofficial port. Populous is a lot older than the Dreamcast. It was originally released for MS-DOS and the Mega Drive / Genesis. As far as I know there wasn’t any official WinCE release. To be honest, by the time WinCE (let alone the Dreamcast) came to market there were already a few sequels to Populous so I doubt they’d have even bothered porting the original DOS game by that point.
rebolek
I believe that, as most of the games in that era, it was originally released for Amiga. Wikipedia [1] seems to agree with me, but we both may be wrong.
hnlmorg
It was. I meant on Microsoft and Sega platforms (since this is mentioned as a WinCE/DC port) but appreciate the way I worded that wasn’t clear at all.
banana_giraffe
Sure looks like a PocketPC app to me:
REG_ORIENTATION_SETTING
DEFAULT_STYLUS_CONTROLdavikr
Dreamcast games often run Windows CE as their host operating system.
hnlmorg
Dreamcast supported Windows CE but it was mainly the homebrew community which used it because it didn’t perform as well as Sega’s own hardware specific SDK. So most games didn’t use WinCE
roperj
> Windows CE but it was mainly the homebrew community
Name some?
Granted I’ve been out of the homebrew dev scene for a while, but this doesn’t sound right. Developing for Windows CE would require a commercial/proprietary copy of Platform Builder and Dreamcast BSP. This is not very “homebrew” friendly at all - especially when there were a ton of homebrew libraries and OSes for Dreamcast through the years, eg Kallistios.
trzy
Sega’s own Sega Rally 2 used WinCE. This is often blamed for its performance issues.
undefined
undefined
QIYGT
Interesting:
#ifdef COMPAQ_SOUND
// IPaqs are slow to declare a buffer finished with. Need fewer, but longer buffers.
// Longer buffers result in a time lag between the code
// issuing a sample play command and it actually being
// played. This configuration seems to be the best.
// Short or longer buffers cause stutter.
#define SOUND_BUFFER_LENGTH (3072)
#define NUMBER_OF_QUEUED_BUFFERS 2
#else
// All other machines are much better about the sound code
// and have a response time half that of the IPaq.
#define SOUND_BUFFER_LENGTH (1024)
#define NUMBER_OF_QUEUED_BUFFERS 3
#endif
thom
So kids, how would we refactor this?
https://github.com/LemonHaze420/DCPopulous/blob/master/popul...
britneybitch
Well first off it needs to be rewritten in Rust, obviously. I just can't enjoy playing a game if I don't know for sure it's memory safe.
RajT88
The most HN comment ever.
MrYellowP
How did we get this far before people went insane?
astrange
Well some PC games (Bethesda for one) are known for constantly crashing and being more bug than game. Maybe if their engine actually was memory safe they’d have more time to polish the game?
On the other hand, it doesn’t seem to matter since people will buy Skyrim for their fridge for the 40th time over.
(For me personally, AlephOne for Marathon has some mysterious crashes every few days and it’s pretty annoying.)
viraptor
I'd look at the "systems" idea from ECS design. See for example bevy https://bevy-cheatbook.github.io/patterns/generic-systems.ht... which will also satisfy RiiR for the sibling comment ; )
The main idea is to have a callback and iteration over entities you have (that match some condition/interface). This would refactor the code to .add_system(reduce_size).add_system(handle_magnet_carrier).add_system(...)..., where each section is a separate behaviour which can be tested in isolation.
Cockbrand
I heard the term "Tour de France coding" for this style, as the indentation resembles a TdF stage elevation profile rotated by 90°.
bluedino
Stuff like this would be great for a computer science class. Algorithms, performance, software engineering.
unwind
No need to, look it's all commented and nice:
/* if either paple magnet carrier is a knight make them drop the pm*/noduerme
>> if(life >= CITY_FOOD)
I mean, why refactor when something is so eminently readable?
Get the top HN stories in your inbox every day.
Populous is a game I'd love to play again! I had high hopes for Godus, but in the end Godus was pretty much everything I hate about modern games.