The following is the proposed database and website design plan for The Oldskool PC Gaming Dimension, which will be a website dedicated to old PC games (1981 to 1994). The database was originally going to be a one-line-with-everything-on-it-record, but that's been abandoned as it would make any CompSci major cringe (Big(O), anyone?). A quasi-relational format has been adapted instead, with the following specs: All records will be identified by a primary key (a number, in this case). Each text file will be a table of the following form: key:data For example, the master table (the most important one) will map keys to names, like this: 1:Test Drive 2:Silpheed 3:Thexder 4:Round 42 ...etc. Similar tables can be added at any time, making for a flexible database: (examples based on above master table) 1:CGA 2:CGA;EGA;MCGA;TANDY 3:CGA;EGA;TANDY 4:TCGA # TCGA stands for "Tweaked CGA"; in this case, 160x100x16 This allows for only loading the tables needed when performing searches, etc. It also allows for disaster-recovery; if one file goes away, you can still search the database if the master table is still around (master table is primary key->name of software) It also also allows for dbm hashing in perl nice'n'easy. And I can emulate relational database behaviour if necessary, but I don't think I'll have a need for this. New title for the website, BTW: The Oldskool PC Gaming Dimension (works well with oldskool.org/pc/gaming) --------------------------------------------------------------------- "Dedicated to old games" means the following: A searchable/browseable library (database) of game information will be available, including the ability to download a non-commercial game if it is on-line. Searchable criteria will obviously include the name and genre (action, sports, etc.) of the game, but also useful information for getting the game to run on whatever hardware you have, including graphics modes, sound cards, processor, etc. For example: If a user had a 286 with EGA and Adlib, and wanted to know what games made the best use of his hardware, he could search for games that support 286/adlib/ega. This database will be the heart and soul of the site, and is described in great detail later in this document. Screenshots, audio/videoclips of old games, manuals, cheats, hints, etc. will be "attached" to their representative game entries in the library, so you can experience an old game even if you're never seen it before, or can't get it to run anymore. Original articles on old gaming will be available, both written by me and contributed by netziens at large. Original programs related to old gaming, such as Flopper and the PicDraw Interpreter, will also be available. An "Other Resources" (links) page will be available, containing links to generic old gaming pages, including fan pages for a particular game (fan page links will be taken out of the FanPages field). Clearly, it will take me months to get the entire site up and running effectively. Should make for a very nice hobby. :-) Much of the information will come from my older Abandonware site. One other thing: I plan to have my site personally inspected by a member of the IDSA (the organization that killed my previous abandonware site) before I put it on-line. They offered, so I'm going to take them up on that offer. I might even have a "IDSA Approved!" stamp on the front page. Either way, I *refuse* be taken down by some shit organization ever again! --------------------------------------------------------------------- In addition to the find-a-title search and MobySearch(tm), include a preference-search, and give the following options: I like to catch up to my opponent and blast him into the next century. (Action, all sports/racing, competition, etc.) I want to explore new worlds, go on mythical quests, and battle monsters in murky dungeons. (adventure) My mind is my strongest weapon, and also my most formidable opponent. (strategy, educational) Include icons for the descriptions: a muscle-bound arm and a brain, and have the muscled arm be bigger for the first one, both the same size for the middle one, and the brain the biggest for the last one. --------------------------------------------------------------------- Website design ideas for topics: (locations? Rooms?) (this site's) FAQ -or- Why? -or- simply What is this? (yeah, use What Is This?) The Basement (the database) The Shrine (place of worship -- several rooms in the shrine, of course) The Hospital (anything related to getting old games working/transfered) The Morgue or The Black Hole (heavily requested or rare games presumed dead? dead games *can* be brought back to life! Contact me!) The Soapbox (where I bitch about IDSA, abandonware, lack of quality/respect in general) The Phonebook (Other oldskool PC resources (links, duh)) ("If a game doesn't work on a faster machine because the timing throws off the copy-protection scheme, you may have to resort to cracking the game." -> cracking resources) Also a link to my contact information Give it the boot (bootable game FAQ, images, flopper, etc.) (it has it's own section since it seems to completely confuse new PC people) Help me help you (call for papers, contributions, etc.) oh, and hey, use the wackydisk of print(shop|master) graphics from Epyx you have --------------------------------------------------------------------- Database Implementation: All database code will be developed in perl. It will be a series of routines modular enough to take input from any program, whether it's a command-line utility (used during development) or a CGI program (used in production). "Why reinvent the wheel, when dbm and msql are free?" you may ask. Well, two reasons: 1. I want to have this website up no matter where I go, and if it's one (or more) CGIs that I can "drop-in" to a new ISP, then that makes it portable. Commercial ISPs are becoming more and more resistant to user-installed stuff; like, for example, asking them to install msql. 2. I want to code it all myself, because I'm a coder and that's what I do for fun. Besides, if I program it all myself, I can optimize for speed in numerous ways. If the usage of my previous Abandonware site was any indiciator, I predict that this is going to be a popular website, so efficiency is extremely important if I don't want to kill the server. The database engine will be mostly bit vector lookups and string match searches (check with Christopher to see if/how he implemented regex searches in perl). The database perl module (library of routines? included file? what's the correct term?) will contain routines for: 1. Retrieving user-requested data based on a selection criteria. Both simple and complex selection will be performed primarily by a page of pull-down categories on a web page (Name, Year, Genre, etc.), then filling in a text box for that category. Each selection by the user will further limit the result set. All searches will be case insensitive. NO selection will cause the entire database to be selected. Since the entire database will return a web page over 1 megabyte in length, the user will be asked to confirm if that's what he really wanted. 2. Selective output of user-selected data (see previous routine explanation) in an HTML table or 80-column format (80-column format will require the use of the eval command to build a perl FORMAT; this is low on the priority list, and may not get developed at all). Returning every single field of user-selected data would make for a really crammed table, so only generic info will be selected by default (Name, Year, Genre, maybe a few others). The user can tag checkboxes to increase/decrease the amount of information displayed from a search. Database file format assumptions: The database will be a flat-file database, simply due to the nature of storing information in a single text file. The game's Name field can be considered a primary key for the record, but a primary key won't be used by the database (*any* field can be a key), so it's a moot point. Each line will be pipe-delimited ("|") (each field will be seperated by a pipe character). A multi-element field will be ampersand-delimited ("&"). Spaces will be kept intact in field data. No "space to underscore" or other translation will be performed. "Vector" data will be stored as a 32-bit vector. For example, let's look at Genre: Adventure = 1 Action = 2 Arcade = 4 Racing = 8 Sports = 16 (...) So, an arcade racing game, like Outrun, would have "12" as the genre, because Arcade (4) + Racing (8) = 12. Numerical data (including vector data) will be stored as a string representation instead of binary (the number 1981 will be stored as the string "1981" [without the quotation marks, obviously]); this makes the database file human-readable/7-bit ASCII, which has the additional benefit of being much easier to repair by hand. It is unknown how much of a performance hit, if any, this will be. --------------------------------------------------------------------- Database format for PCGD. "*" fields are REQUIRED for entry in the database; "+" fields are desired, but not necessary, "-" fields are pretty much completely optional: Field name Field Description; perl implementation notes ~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *Name Title of the game *MajorGenre Adventure, Racing, Sports, etc. +MinorGenre RPG, Basketball, Arcade, etc. (optional) +Year The year it was developed or published *ReleaseType Freeware, Shareware, Public Domain, or Commercial +Developer Person/company who created it +Publisher Company/Publisher who sold/distributed it +Comments My own personal comments about the game +Graphics Supported graphics modes +Sound Supported sound devices +RAMRequired How much RAM (in K) the game needs in order to run +CpuRequired Minimum CPU required to play the game +CpuDesired Optimal (desired) CPU required to play the game +Enhanced Better-than-normal sound, graphics, music, or programming -Bootable If the game is a bootable disk -Screenshot GIF(s) of the game in action -Diskshot JPG(s) of the diskette label -Boxshot JPG(s) of the front and back of the box -Videofile Video clip of the game -Audiofile Audio clip of the game (sound effects only, not music -- see SoundTrack) -Soundtrack The game's music, in either MIDI or digitized sound +Hints Hints/Solutions/Walkthroughs (delimited list of URLs) +Cheats Cheats/Tricks/Trainers (delimited list of URLs) +Manual The manual/reference sheet in either ASCII or PDF format +Patches Any fixes that can be applied to the game +FanPages Other URLs dedicated to the game -Misc. Any other stuff relating to the game, including other box contents # what else would you have a need to search for? --------------------------------------------------------------------- DATATYPES The following datatypes are suggested data for the fields listed above. If you don't understand what that means, just read on and you'll get the idea. ---------------- Genre:Subgenre # Note: A Genre is required, but a subgenre is not! Action Arcade (coin-op translations--Joust, Defender, Robotron, etc.) Shooters (space shoot-em-ups--Raptor, Overkill, Tyrian, etc.) Platform (Super Mario Bros., Cool Croc Twins, etc.) First-person (Wolfenstein 3D, Doom, etc.) Pong (Arkanoid, Breakout, Popcorn, etc.) # what else am I missing? Adventure Interactive Fiction (text adventures, like Infocom games, Zork, etc.) Interactive Fiction with graphics (Transylvania, Mindshadow, etc.) Text-based RPG (Hack, Rogue, etc.) First-person RPG (Wizardry, Bard's Tale, etc.) Top-down/Isometic RPG (Ultima, Wasteland, etc.) # what else am I missing? Racing Arcade (Super Sprint, Outrun, etc.) Motorcycle (Motocross, etc.) Sports (Indy 500, Grand Prix, etc.) Simulation (Test Drive, Stunts, Stunt Driver, etc.) Construction Sets (anything that lets you build your own game) Strategy games Wargame (Patton vs. Rommel, UMS, etc.) Board games (chess, Trivial Pursuit, Monopoly...) Card games (solitaire, bridge, canasta...) Casino games (Vegas Games, etc...) Real-time (Dune 2, Syndicate...) Game Show (Jeopardy, The Price Is Right, Wheel of Fortune, etc.) Puzzle (fit-the-pieces-together, number sliding game, etc.) Tetris (Tetris, Welltris, Blockout, Facestris, etc.) # what else am I missing? Sports Football Basketball Baseball Golf Boxing Tennis Olympiad (Winter Games, Summer Games, World Games, etc.) Martial Arts (Budokan, etc.) # what else am I missing? Simulations Flight Simulator (Flight Simulator, Evasive Action, Falcon, etc.) Submarine Simulator (688 Attack Sub, etc.) Spaceflight Simulator (Wing Commander, etc.) # Note that Racing is NOT here since racing is considered more of a sport than a # simulation -- you don't see trophies handed out to good fighter pilots ;-) Educational Kiddie Versions of programs (child's word processor, paint program, etc.) (Even though they're not games, the following will also be genres, since I want some useful software here to help out people with old machines) # Miscellaneous # Info/Trivia (could be about anything) # Old Utilities # Old technical/programming information # Removed because this will be part of the website Application software Word processors Spreadsheets Database Graphics composition Music composition Utility software Slowdown utils disk imaging utilities (disk-to-file, file-to-disk) compression/decompression Versions of DOS ---------------- ReleaseType: Commercial (software was sold through normal distribution channels) Shareware (software was sold through shareware channels; asked for money to register) Freeware (software was released for free; may have asked for donations, but not required) Public Domain (both software and rights were released into the public domain--software without an author or copyright message gets put here as well) ---------------- GraphicsSupport: Text mode Hercules CGA EGA VGA and/or MCGA (sorry, but I can't properly test MCGA because I don't have access to a PS/2 25 or 30) Tweaked CGA Tweaked EGA Tweaked VGA ---------------- SoundSupport: PC Speaker Enhanced PC Speaker (multiple voices, digitized sound, etc.) Adlib Sound Blaster Roland MT-32 Covox Speech Thing Disney Sound Source LPT DAC MSound (Yes, I actually have one of these) MIDI General MIDI Game Blaster Additional Support (for wacko devices, like Innovation Sound Device or Votrax) None (Silent; game does not output any sound) ---------------- CpuRequired and CpuDesired: 8088/8086 or compatible (NEC V20/V30, etc.) 80286 80386 80486 Pentium or higher Any ---------------- Boots: Yes No ---------------- Enhanced: (areas of the software title that are noticably enhanced) Graphics (really great CGA/EGA art, etc.) Sound (digitized sound through the PC speaker, clever sound effects, etc.) Music (well-composed music; run Continuum for an example) Programming (incredible coding, small space, fast framerate, etc.) 3D (title used 3D graphics, notoriously hard on any old platform) Net Play (title is playable over a null-modem serial cable, modem, or lan) ---------------- --------------------------------------------------------------------- Misc. website design notes, FYI: The name of the website will be: The Oldskool PC Gaming Dimension (unless someone can think of a better name--anyone?) The name of the section that contains the searchable library will be informally called "The Basement". This was going to be The Vault until I sat on my ass for six months and www.classicgaming.com took the idea. No commercial games will be stored on the site. None. Zero. Nada. Not a one. Don't even think about it. And even if commercial games *were* stored somewhere, they wouldn't be on the same server with the pages, and certainly wouldn't be available to non-trusted domains enforced through specialized code in the database engine! No, sir!