What I've been doing in my 'off time' -- making games for DOS

Yes, I said DOS… More specifically with a minimum target of a original 4.77mhz 8088 PC with 128k of RAM and a CGA card as the minimum target. Just to make it harder, it all has to fit on a 160k floppy. On my requirements list was also to support as many sound cards as I could, and to scale well right up through to VGA video and ghz class processors.

I released the last update to it back in March, and since then have made some heavy rewrites, code cleanup, and even added more sound card support in the form of MIDI.

Official Site Page:
http://www.deathshadow.com/pakuPaku

Direct Download links:
http://www.deathshadow.com/downloads/paku_1_6.rar (59k)
http://www.deathshadow.com/downloads/paku_1_6.zip (67k)

Preview image:
[url=http://www.deathshadow.com/images/pakuMenu.png]
Click for Larger (1024x768 - 17.1k)

Play it Live with jDOSBox (requires java)
http://www.deathshadow.com/pakuPakuLive

If you want the prebuilt .zip file for running it in jDOSBox with a custom .conf file included, you can get that here:
http://www.deathshadow.com/jdosbox/paku_1_6.zip

Which can be embedded easily into a web page with the following (valid HTML/XHTML) code.


		<!-- [if IE]>
			<object
				classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
				 width="640" height="400"
			>	
		<![endif]-->
		<!-- [if !IE]>-->
		<object
			type="application/x-java-applet"
			width="640" height="400"
		>
		<!--<![endif]-->
			<param name="code" value="jdos.gui.MainApplet" />
			<param name="archive" value="jdosbox_applet.jar,paku_1_6.zip" />
			<param name="param1" value="-conf jar://dosbox.conf" />
			<param name="param2" value="imgmount e jar://paku_1_6_160k.IMA -t floppy" />
			<param name="param3" value="e:" />
			<param name="param4" value="paku /cms" />
			<p>
				This game requires Java to function. Please either enable it in your browser, switch to a Java capable browser, or download the appropriate version off of
				<a href="http://www.java.com">Oracle's Java Website</a>
			</p>
		</object>

Fun stuff. It runs in the seldom used and semi-undocumented 160x100 16 color semi-graphics mode. Semi-graphics is a old computer term for doing graphics using text characters… in this case I take the 80x25 text mode, and use the extended ASCII 0xDD character which has one half filled in with foreground color, the other half background color. I then reprogram the video card to think characters are one quarter the height they should be (revealing just the top few scanlines of each row) netting me that 160x100 graphics. To my knowledge, only Tunneler, Round 42 and Moonbugs attempted to use this trick, all of them are painfully slow, and only Tunneler works on anything newer than a CGA card… It’s one of the myths about this graphics mode is nothing new supports it… I hate myths… part of why I did the graphics unit for this as my 2011 Retrochallenge Winter Warmup entry.

Runs just fine in DOSBox on modern systems too – which actually has had an unusual side effect; there are DOSBox ports for EVERYTHING – there’s even a JAVA port of DOSBox – so by making a DOS game, I’ve made it cross-platform ready!

It’s already proving popular in the retrocomputing community – great video review of it was put up by Lazy Game Reviews and there are others showing it running on a variety of hardware – from [url=http://www.youtube.com/watch?v=9Rqll6yZoGw]PS/2 model 30 to an [url=http://www.youtube.com/watch?v=1NE4Wf1md8I]Amstrad 1512, and even a [url=http://www.youtube.com/watch?v=COmxcY_PvG8]FPGA re-implementation of a 8088 PC. I should probably put together a video of it on my Tandy 1000 HX.

Fun stuff, just thought I’d share since in addition to the new release, I’ve revamped my website.

Oh, and my bad on the live jdosbox copy not working – I forgot I had JAR files blacklisted…

hahaa… cool game I have played in it… And like it…

Eep! http://www.deathshadow.com/pakuPaku gives a HTTP 500 Infernal Server Error!

But that game looks pretty fun :wink:

Moved to new hosting (no longer running my own server/scaling back/retiring from doing work for others)… it’s proving… annoying since it’s got that cPanel crap sitting between me and doing things properly…

Working again… basically cPanel completely shtupped my custom .htaccess that’s run just FINE the past month… All because it was too stupid to insert one extra carriage return; apparently cPanel screws up if you don’t leave an extra blank line at the end of every .htaccess editing manually and then you change something panel-side… Wow, that’s annoyingly stupid. Try to turn on “fancy indexing”, break the entire blasted site. Genius.

Starting to remember why I stopped using this panel idiocy six or seven years ago.

I am shocked Jason, malformed XHTML markup in the README.HTM and a closing </codE> tag you must have been having a bad typo day. :wink:

Nah, I just typed that in using DOS edit and did most of the testing in Arachne… NOT my usual dev environment.

Still hoping someone will do a worthy successor to Starflight. :slight_smile:

For those of you who keep asking, you need to download jDOSBox to… well… run the pre-built jDOSBox version. (which CAN also be mounted and run in normal DOSBOX)

VERY cool project – and thats coming from someone who usually HATES Java based stuff. Porting DOSBox to Java? Now that’s an impressive undertaking especially since as far as I can tell, it’s a one man show.

I put together a little tutorial on how to put a DOS game into jDOSBox a few weeks ago… to run my game in it, just download the pre-built archive and skip to step 3.
http://www.deathshadow.com/jDOSBoxHowTo

A website I frequent, RGB Classic Games has put [url=http://www.classicdosgames.com/online.html]several DOS games (including mine) up on their site in jDOSBox… and they have even more games available for download to run locally - unlike most DOS game archive sites everything on there is LEGAL having gotten permission from the author or license holders - and we’re not just talking shareware demos. (Though plenty of those are in there too).

I’ve wasted WAY too much time playing Silverball the past few weeks :smiley:

This is an outstanding piece of work.
To those who have said, “DOS is dead!”, you have proven them Dead Wrong!

Thanks to tools like DOSBox and jDOSBox, it’s even had an unexpected side effect…

My games are cross-platform.

In addition to jDOSBox opening the door to anything that can run JAVA, there are native ports of DOSBox to almost every platform out there… and not just the versions on the official site. There’s even ports for [url=http://code.google.com/p/dospad/]iPhone and [url=http://androiddosbox.appspot.com/]Android.

Who needs fancy VM’s for cross platform development, when you can just write a DOS game and run it in a open source emulator?

Oh, my next game I’m hoping to have done within the next month – it’s a mashup of several of the “invaders” clones; Phoenix, Gorf, Defense Command, Demon Attack – taking the best bits from each and putting my own spin on them.

Preview pic of my WIP sprites for the next game

It’s actually quite challenging at this oddball 160x100 resolution to make sprites – I’m basically working in a 8x6 area where only 7x6 of it is actually “useable” due to how I have to map the sprites to memory. This new game is going to be pushing 16 sprites around the screen at once WITH 32 single pixel ‘stars’ scrolling in the background – which is right on the edge of the physical limit a 4.77mhz XT could handle!

It’s actually where slower machines with less capable CPU’s like the TI-99/4a or Commodore 64 had a slight advantage; their video generators had hardware sprites meant for making games. The original CGA in a 1982 PC? Not so much… gotta do everything by hand from software… REAL fun in a pixel-packed format.

See the sprite write to backbuffer routine I’m currently working with:


function buffer_write8(tile:pPixelData; x,y:byte; height:word):word; assembler;
asm
	les  di,backBuffer
	mov  ah,y
	xor  al,al
	shr  ax,1
	mov  bx,ax
	shr  ax,1
	shr  ax,1
	add  bx,ax
	mov  al,x
	xor  ah,ah
	add  bx,ax
	shr  bx,1
	push bx { our return value and buffer offset all in one }
	add  di,bx

	mov  cx,height { do this before we screw with SI! }
	mov  dx,76
	push ds
	lds  si,tile
	and  al,1
	jnz  @oddTile
	add  si,48
@oddTile:

@loop:
	mov  bx,es:[di]
	lodsw
	and  bx,ax
	lodsw
	or   ax,bx
	stosw

	mov  bx,es:[di]
	lodsw
	and  bx,ax
	lodsw
	or   ax,bx
	stosw

	add  di,dx
	loop @loop

	pop  ds
	pop  ax { the buffer offset is our return value! }

end;

or even blitting that backbuffer tile to the screen (backbuffer prevents flicker).


procedure buffer_show8(buffer:pointer; screenOffset,height:word); assembler;
asm
	mov  ax,$B800
	mov  es,ax
	mov  di,screenOffset
	shl  di,1
	inc  di
	mov  dx,ds
	mov  cx,height
	mov  bx,153
	mov  ax,76
	lds  si,buffer
@loop:
	movsb
	inc  di
	movsb
	inc  di
	movsb
	inc  di
	movsb
	add  di,bx
	add  si,ax
	loop @loop
	mov  ds,dx
end;

Ah, the joys of working in Assembler; even if I am cheating and using Turbo Pascal as glue… a lesson I learned from working with PHP. Optimize what needs to be fast (like a database) then glue it together with a high level language (like PHP or ASP)

Ah. I have always loved Turbo Pascal. Borland created the best compilers in the world!
Turbo Pascal accepts inline ASM so elegantly.

i Love pacman :>

Haha I love how people go back to the roots… This relaly makes me want to dig out my first PC, which would boot up in DOS with the option to boot Windows 3.11 if needed, but mostly I just used DOS!

I had a game called Leisure Suite Larry, where you had to answer a set of multiple choice questions to show that you were 18. With the questions being in English (and me being an 8 year old Danish kid at the time) I was sort of lost, untill I figured out that the questions were always the same… 10 minutes and a cheatsheet later I was chatting up dodgy women in a dodgy Bar… good times!

Haha, an ex-colleague of mine once told me he learnt English from the Larry games, when he was still very young.
I think his parents didn’t really realize what the games were about :slight_smile:

[ot]Oh dear! Larry had some very dubious intentions; I hope he didn’t use them to pick-up girls… actually Larry was apparently good at [attempting] that. :lol:

He probably learnt: “Hi, my name is Larry; Larry Laffer”[/ot]

No no, the game was full of learning resources! Take the shady casino where the basics of gambling away your money on pixelated jackpot machines were taught, or the rules of human relations when you picked up a woman with a questionable profession and married her in a 24/7h neon-lit chapel!

But more seriously, it was a command-type game, so you did have to learn to type valid commands such as “Open Door” or “Steal Jewelry” - and if you walked it into a dark alleyway you were beat by homeless men which caused you to lose, a valuable lesson for any kid!

Sorry for wandering off topic - but DOS games just had it all :wink:

This was even more true before graphics were added to them. The old Infocom adventures like Zork or Planetfall, the various Scott Adams adventures, The TRS-80 classics like Bedlam and Raaka Tu…

Where you were? Explained as text. Interacting with it? Text. It meant shock using your imagination, learning to understand English, AND learning how to type.

[b]WEST OF HOUSE
You are standing in an open field west of a white house, with a boarded front door.
There is a small mailbox here.

>_[/b]

>_[FONT=courier new]

> open mailbox
Opening the mailbox reveals a leaflet.

> read leaflet
B[/B]
"WELCOME TO SPF!

SPF is a forum of adventure, danger, and low cunning. In it you will explore some of the most amazing territory ever seen by web mortals. No browser bookmark should be without it!"[/FONT]

>

Cannot imagine where “Maze of twisty little passages” originates from either. True classics and hence why I still do TTY for NetHack when competing in the annual tournament. >;-)

Oh man, those were the days!

> Take kitchen knife
> Attack
> Attack
> Attack
> Attack
Error: The person is dead.
> Cheer
> Open Door