diff --git a/source/sw/src/game.cpp b/source/sw/src/game.cpp index 437d5eadf..500d0a689 100644 --- a/source/sw/src/game.cpp +++ b/source/sw/src/game.cpp @@ -900,8 +900,8 @@ void InitGame() // LoadImages will now proceed to steal all the remaining heap space //_outtext("\n\n\n\n\n\n\n\n"); + //buildputs("Loading sound and graphics...\n"); //AnimateCacheCursor(); - initprintf("Loading sound and graphics...\n"); TileFiles.LoadArtSet("tiles%03d.art"); // Now free it up for later use @@ -2930,53 +2930,6 @@ void DosScreen(void) { } -#if 0 //PLOCK_VERSION -void AlphaMessage(void) -{ - Global_PLock = TRUE; // Set the hardwired parental lock mode! - initprintf("" - " SHADOW WARRIOR(tm) Version 1.2 \n" - "Copyright (c) 1997 3D Realms Entertainment\n" - "\n\n" - " NOTE: This version of Shadow Warrior has been modified from it's\n" - " original form. All of the violent and mature content has been\n" - " removed. To download a patch to restore this version to its\n" - " original form visit www.3drealms.com, www.gtinteractive.com, or look\n" - " inside your retail packaging for information about this version.\n\n\n" - ); -} -#endif - -#if 0 //UK_VERSION -void AlphaMessage(void) -{ - initprintf("" - " SHADOW WARRIOR(tm) Version 1.2 (UK Version) \n" - "Copyright (c) 1997 3D Realms Entertainment\n" - "\n\n" - " NOTE: This is a modified version of Shadow Warrior created for the UK.\n" - " It has been altered from its original version to replace \"shurikens\" \n" - " with darts. We apologize for the inconvenience and hope you enjoy the\n" - " game. Visit us on the web at www.3drealms.com.\n\n\n" - ); -} -#endif - -#if 1 //!UK_VERSION && !PLOCK_VERSION -void AlphaMessage(void) -{ - if (SW_SHAREWARE) - { - initprintf("SHADOW WARRIOR(tm) Version 1.2 (Shareware Version)\n"); - } - else - { - initprintf("SHADOW WARRIOR(tm) Version 1.2\n"); - } - initprintf("Copyright (c) 1997 3D Realms Entertainment\n\n"); -} -#endif - typedef struct { char notshareware; @@ -3126,9 +3079,12 @@ int32_t GameInterface::app_main() DebugOperate = TRUE; - AlphaMessage(); + if (SW_SHAREWARE) + buildputs("SHADOW WARRIOR(tm) Version 1.2 (Shareware Version)\n"); + else + buildputs("SHADOW WARRIOR(tm) Version 1.2\n"); - buildputs("\nType 'SW -?' for command line options.\n\n"); + buildputs("Copyright (c) 1997 3D Realms Entertainment\n"); UserMapName[0] = '\0'; @@ -4810,23 +4766,20 @@ void G_Polymer_UnInit(void) { } #include "saveable.h" -static saveable_data saveable_build_data[] = -{ - SAVE_DATA(sector), - SAVE_DATA(sprite), - SAVE_DATA(wall) -}; +saveable_module saveable_build{}; -saveable_module saveable_build = +void Saveable_Init_Dynamic() { - // code - NULL, - 0, + static saveable_data saveable_build_data[] = + { + {sector, MAXSECTORS*sizeof(sectortype)}, + {sprite, MAXSPRITES*sizeof(spritetype)}, + {wall, MAXWALLS*sizeof(walltype)}, + }; - // data - saveable_build_data, - NUM_SAVEABLE_ITEMS(saveable_build_data) -}; + saveable_build.data = saveable_build_data; + saveable_build.numdata = NUM_SAVEABLE_ITEMS(saveable_build_data); +} /*extern*/ bool GameInterface::validate_hud(int requested_size) { return requested_size; } /*extern*/ void GameInterface::set_hud_layout(int requested_size) { /* the relevant setting is gs.BorderNum */} diff --git a/source/sw/src/menus.cpp b/source/sw/src/menus.cpp index 0144da70d..933dd75d5 100644 --- a/source/sw/src/menus.cpp +++ b/source/sw/src/menus.cpp @@ -521,7 +521,7 @@ MenuGroup LoadGameGroup = {100, 5, "^Load Game", load_i, pic_loadgame, 0, m_defs #define MAIN_XSTART 55 #define MAIN_LINE(line) (MAIN_YSTART + (MAIN_YOFF * line)) -#define MAIN_MENU_COOL_STUFF "^Cool Stuff" +#define MAIN_MENU_COOL_STUFF "^Credits" #define MAIN_MENU_HOW_TO_ORDER "^How to Order" MenuItem main_i[] = @@ -1258,29 +1258,24 @@ MNU_OrderCustom(UserCall call, MenuItem *item) static short RegOrderScreen[] = { - 5262, - 5261, - 4979, + // 5262, + // 5261, 5111, 5118, + 4979, 5113, - //5111, - //5118, - //4979, - //5261, - //5262 5120 // 5114 // JBF: for my credits }; static short SWOrderScreen[] = { - 5262, 5110, 5112, - 5113, + // 5262, 5111, 5118, 4979, + 5113, 5120 // 5114 // JBF: for my credits }; diff --git a/source/sw/src/saveable.cpp b/source/sw/src/saveable.cpp index c568b1593..67e8339da 100644 --- a/source/sw/src/saveable.cpp +++ b/source/sw/src/saveable.cpp @@ -38,6 +38,8 @@ void Saveable_Init(void) { if (nummodules > 0) return; + Saveable_Init_Dynamic(); + #define MODULE(x) { \ extern saveable_module saveable_ ## x; \ saveablemodules[nummodules++] = &saveable_ ## x; \ diff --git a/source/sw/src/saveable.h b/source/sw/src/saveable.h index 657abadf4..0a288d058 100644 --- a/source/sw/src/saveable.h +++ b/source/sw/src/saveable.h @@ -24,6 +24,7 @@ #ifndef SAVEABLE_H #define SAVEABLE_H +#include "compat.h" typedef void *saveable_code; @@ -42,10 +43,16 @@ typedef struct unsigned int numdata; } saveable_module; -#define SAVE_CODE(s) (void*)s -#define SAVE_DATA(s) { (void*)&s, sizeof(s) } +template +static FORCE_INLINE constexpr enable_if_t::value, size_t> SAVE_SIZEOF(T const & obj) noexcept +{ + return sizeof(obj); +} -#define NUM_SAVEABLE_ITEMS(x) (sizeof(x)/sizeof(x[0])) +#define SAVE_CODE(s) (void*)(s) +#define SAVE_DATA(s) { (void*)&(s), SAVE_SIZEOF(s) } + +#define NUM_SAVEABLE_ITEMS(x) ARRAY_SIZE(x) typedef struct { @@ -61,6 +68,7 @@ typedef struct } saveddatasym; void Saveable_Init(void); +void Saveable_Init_Dynamic(void); int Saveable_FindCodeSym(void *ptr, savedcodesym *sym); int Saveable_FindDataSym(void *ptr, saveddatasym *sym); diff --git a/wadsrc/static/demolition/demolition.grpinfo b/wadsrc/static/demolition/demolition.grpinfo index a6b2b7561..31e328efa 100644 --- a/wadsrc/static/demolition/demolition.grpinfo +++ b/wadsrc/static/demolition/demolition.grpinfo @@ -28,6 +28,10 @@ CRC RR_CRC 0x19D9BC79 RRRA_CRC 0x958018C6 BLOOD_CRC 0xA8FDDA84 + SWREG12_CRC 0x7545319F + SWWD_CRC 0xA9AAA7B7 + SWTD_CRC 0xA1A65BE8 + POWERSLAVE_CRC 0x303CBD89 EXHUMED_CRC 0xE3B172F1 @@ -90,7 +94,7 @@ grpinfo size 9690241 crc DUKE099_CRC flags GAMEFLAG_DUKE|GAMEFLAG_DUKEBETA - gamefilter "Duke.Duke" + gamefilter "Duke.Shareware" dependency 0 } @@ -100,7 +104,7 @@ grpinfo size 10429258 crc DUKE10_CRC flags GAMEFLAG_DUKE|GAMEFLAG_SHAREWARE - gamefilter "Duke.Duke" + gamefilter "Duke.Shareware" dependency 0 } @@ -110,7 +114,7 @@ grpinfo size 10442980 crc DUKE11_CRC flags GAMEFLAG_DUKE|GAMEFLAG_SHAREWARE - gamefilter "Duke.Duke" + gamefilter "Duke.Shareware" dependency 0 } @@ -120,7 +124,7 @@ grpinfo size 11035779 crc DUKESW_CRC flags GAMEFLAG_DUKE|GAMEFLAG_SHAREWARE - gamefilter "Duke.Duke" + gamefilter "Duke.Shareware" dependency 0 } @@ -130,7 +134,7 @@ grpinfo size 10444391 crc DUKEMD_CRC flags GAMEFLAG_DUKE|GAMEFLAG_SHAREWARE - gamefilter "Duke.Duke" + gamefilter "Duke.Shareware" dependency 0 } @@ -140,7 +144,7 @@ grpinfo size 10628573 crc DUKEMD2_CRC flags GAMEFLAG_DUKE|GAMEFLAG_SHAREWARE - gamefilter "Duke.Duke" + gamefilter "Duke.Shareware" dependency 0 } @@ -331,8 +335,8 @@ grpinfo grpinfo { + // This is for detecting zipped versions of the mod. The default configuration with all files dumped in the game filter requires starting the game with "-route66" name "Redneck Rampage: Suckin' Grits on Route 66" - loaddirectory scriptname "GAME66.CON" mustcontain "TILESA66.ART", "TILESB66.ART", "CARNIVAL.MAP", "TRUCKSTP.MAP", "GAME66.CON" flags GAMEFLAG_RR|GAMEFLAG_ADDON @@ -356,13 +360,26 @@ grpinfo grpinfo { + // This is for identifying older Blood versions. Since I have no information, all I can do is testing for a few known files. + name "BLOOD: Unknown Version" + mustcontain "help1.qav", "cult2d2.seq", "tombstn1.kvx", "normal.plu" + defname "blood.def" + scriptname "BLOOD.INI" + flags GAMEFLAG_BLOOD + dependency 0 + loadgrp "SOUNDS.RFF", "GUI.RFF" + gamefilter "Blood.Blood" +} + +grpinfo +{ + // This is for detecting zipped versions of the mod. The default configuration with all files dumped in the game filter requires starting the game with "-cryptic" name "BLOOD: Cryptic Passage" - loaddirectory scriptname "CRYPTIC.INI" mustcontain "CRYPTIC.INI", "CP01.MAP", "CP02.MAP" flags GAMEFLAG_BLOOD|GAMEFLAG_ADDON dependency BLOOD_CRC - loadart "CPART07.AR_", "CPART15.AR_" // some versions have these file names, some have the real ones instead so these must be listed but cannot be used for checking. + loadart "CPART07.AR_", "CPART15.AR_" gamefilter "Blood.Cryptic" } @@ -370,12 +387,75 @@ grpinfo { name "Shadow Warrior" flags GAMEFLAG_SW - crc 0x7545319F + crc SWREG12_CRC size 47536148 defname "sw.def" gamefilter "ShadowWarrior.ShadowWarrior" } +grpinfo +{ + name "Shadow Warrior Shareware 1.0" + flags GAMEFLAG_SW|GAMEFLAG_SHAREWARE + crc 0xDAA6BECE + size 25702245 + defname "sw.def" + gamefilter "ShadowWarrior.Shareware" +} + +grpinfo +{ + name "Shadow Warrior Shareware 1.1" + flags GAMEFLAG_SW|GAMEFLAG_SHAREWARE + crc 0xF21A6B35 + size 25833456 + defname "sw.def" + gamefilter "ShadowWarrior.Shareware" +} + +grpinfo +{ + name "Shadow Warrior Shareware 1.2" + flags GAMEFLAG_SW|GAMEFLAG_SHAREWARE + crc 0x08A7FA1F + size 26056769 + defname "sw.def" + gamefilter "ShadowWarrior.Shareware" +} + +grpinfo +{ + name "Shadow Warrior Mac Demo" + flags GAMEFLAG_SW|GAMEFLAG_SHAREWARE + crc 0x4227F535 + size 26056769 + defname "sw.def" + gamefilter "ShadowWarrior.Shareware" +} + +grpinfo +{ + name "Shadow Warrior: Wanton Destruction" + flags GAMEFLAG_SW|GAMEFLAG_ADDON + crc SWWD_CRC + size 48698128 + defname "sw.def" + dependency SWREG12_CRC + gamefilter "ShadowWarrior.Wanton" +} + +grpinfo +{ + name "Shadow Warrior: Twin Dragon" + flags GAMEFLAG_SW|GAMEFLAG_ADDON + crc SWTD_CRC + size 12499012 + defname "twindrag.def" // included in the GRP + dependency SWREG12_CRC + gamefilter "ShadowWarrior.TwinDragon" +} + + grpinfo { name "Powerslave" diff --git a/wadsrc/static/filter/shadowwarrior.shadowwarrior/SWCustom.txt b/wadsrc/static/filter/shadowwarrior.shadowwarrior/SWCustom.txt new file mode 100644 index 000000000..4372f00cc --- /dev/null +++ b/wadsrc/static/filter/shadowwarrior.shadowwarrior/SWCustom.txt @@ -0,0 +1,525 @@ +level 1 +{ + title "Seppuku Station" + filename "$bullet.map" + song "e1l01.mid" + cdatrack 4 + besttime 60 + partime 300 +} +level 2 +{ + title "Zilla Construction" + filename "$dozer.map" + song "e1l03.mid" + cdatrack 9 + besttime 300 + partime 480 +} +level 3 +{ + title "Master Leep's Temple" + filename "$shrine.map" + song "e1l02.mid" + cdatrack 12 + besttime 196 + partime 600 +} +level 4 +{ + title "Dark Woods of the Serpent" + filename "$woods.map" + song "e1l04.mid" + cdatrack 10 + besttime 428 + partime 960 +} +level 5 +{ + title "Rising Son" + filename "$whirl.map" + song "yokoha03.mid" + cdatrack 5 + besttime 330 + partime 600 +} +level 6 +{ + title "Killing Fields" + filename "$tank.map" + song "nippon34.mid" + cdatrack 6 + besttime 120 + partime 240 +} +level 7 +{ + title "Hara-Kiri Harbor" + filename "$boat.map" + song "execut11.mid" + cdatrack 8 + besttime 120 + partime 240 +} +level 8 +{ + title "Zilla's Villa" + filename "$garden.map" + song "execut11.mid" + cdatrack 11 + besttime 66 + partime 120 +} +level 9 +{ + title "Monastery" + filename "$outpost.map" + song "sanai.mid" + cdatrack 12 + besttime 90 + partime 180 +} +level 10 +{ + title "Raider of the Lost Wang" + filename "$hidtemp.map" + song "kotec2.mid" + cdatrack 5 + besttime 125 + partime 250 +} +level 11 +{ + title "Sumo Sky Palace" + filename "$plax1.map" + song "kotec2.mid" + cdatrack 10 + besttime 392 + partime 720 +} +level 12 +{ + title "Bath House" + filename "$bath.map" + song "yokoha03" + cdatrack 4 + besttime 600 + partime 600 +} +level 13 +{ + title "Unfriendly Skies" + filename "$airport.map" + song "nippon34" + cdatrack 6 + besttime 180 + partime 300 +} +level 14 +{ + title "Crude Oil" + filename "$refiner.map" + song "kotoki12.mid" + cdatrack 9 + besttime 160 + partime 300 +} +level 15 +{ + title "Coolie Mines" + filename "$newmine.map" + song "hoshia02.mid" + cdatrack 7 + besttime 180 + partime 300 +} +level 16 +{ + title "Subpen 7" + filename "$subbase.map" + song "hoshia02.mid" + cdatrack 10 + besttime 122 + partime 240 +} +level 17 +{ + title "The Great Escape" + filename "$rock.map" + song "" + cdatrack 8 + besttime 198 + partime 360 +} +level 18 +{ + title "Floating Fortress" + filename "$yamato.map" + song "sanai.mid" + cdatrack 7 + besttime 698 + partime 1200 +} +level 19 +{ + title "Water Torture" + filename "$seabase.map" + song "kotec2.mid" + cdatrack 9 + besttime 307 + partime 480 +} +level 20 +{ + title "Stone Rain" + filename "$volcano.map" + song "" + cdatrack 10 + besttime 554 + partime 660 +} +level 21 +{ + title "Shanghai Shipwreck" + filename "$shore.map" + song "" + cdatrack 11 + besttime 240 + partime 480 +} +level 22 +{ + title "Auto Maul" + filename "$auto.map" + song "" + cdatrack 5 + besttime 247 + partime 480 +} +level 23 +{ + title "Heavy Metal (DM only)" + filename "tank.map" + song "" + cdatrack 11 + besttime 600 + partime 600 +} +level 24 +{ + title "Ripper Valley (DM only)" + filename "$dmwoods.map" + song "" + cdatrack 8 + besttime 600 + partime 600 +} +level 25 +{ + title "House of Wang (DM only)" + filename "$dmshrin.map" + song "" + cdatrack 7 + besttime 600 + partime 600 +} +level 26 +{ + title "Lo Wang Rally (DM only" + filename "$rush.map" + song "" + cdatrack 13 + besttime 600 + partime 600 +} +level 27 +{ + title "Ruins of the Ronin (CTF)" + filename "shotgun.map" + song "" + cdatrack 5 + besttime 600 + partime 600 +} +level 28 +{ + title "Killing Fields (CTF)" + filename "$dmdrop.map" + song "" + cdatrack 6 + besttime 600 + partime 600 +} +episode 1 +{ + title "Enter the Wang" + subtitle "Four levels (Shareware Version)" +} +episode 2 +{ + title "Code of Honor" + subtitle "Eighteen levels (Full Version Only)" +} +skill 1 +{ + name "Tiny Grasshopper" +} +skill 2 +{ + name "I Have No Fear" +} +skill 3 +{ + name "Who Wants Wang" +} +skill 4 +{ + name "No Pain, No Gain" +} +/* +inventory 1 +{ + name "Armor Vest +50" + amount 50 +} +inventory 2 +{ + name "Kevlar Armor Vest +100" + amount 100 +} +inventory 3 +{ + name "MedKit +20" + amount 20 +} +inventory 4 +{ + name "Fortune Cookie +50 BOOST" + amount 50 +} +inventory 5 +{ + name "Portable MedKit" + amount 100 +} +inventory 6 +{ + name "Gas Bomb" + amount 1 +} +inventory 7 +{ + name "Flash Bomb" + amount 2 +} +inventory 8 +{ + name "Caltrops" + amount 3 +} +inventory 9 +{ + name "Night Vision Goggles" + amount 100 +} +inventory 10 +{ + name "Repair Kit" + amount 100 +} +inventory 11 +{ + name "Smoke Bomb" + amount 100 +} +weapon 1 +{ + name "Fists" + mindamage 10 + maxdamage 40 +} +weapon 2 +{ + name "Sword" + mindamage 50 + maxdamage 80 +} +weapon 3 +{ + name "Shurikens" + ammoname "" + maxammo 99 + mindamage 5 + maxdamage 10 + pickup 9 + weaponpickup 9 +} +weapon 4 +{ + name "Sticky Bombs" + ammoname "" + maxammo 20 + mindamage 5 + maxdamage 10 + pickup 5 + weaponpickup 5 +} +weapon 5 +{ + name "UZI Submachine Gun" + ammoname "UZI Clip" + maxammo 200 + mindamage 5 + maxdamage 7 + pickup 50 + weaponpickup 50 +} +weapon 6 +{ + name "Missile Launcher" + ammoname "Missiles" + maxammo 50 + mindamage 15 + maxdamage 30 + pickup 5 + weaponpickup 5 +} +weapon 7 +{ + name "Nuclear Warhead" + ammoname "" + maxammo 0 + mindamage 0 + maxdamage 800 + pickup 1 + weaponpickup 1 +} +weapon 8 +{ + name "Grenade Launcher" + ammoname "Grenade Shells" + maxammo 50 + mindamage 15 + maxdamage 30 + pickup 6 + weaponpickup 8 +} +weapon 9 +{ + name "Rail Gun" + ammoname "Rail Gun Rods" + maxammo 20 + mindamage 40 + maxdamage 60 + pickup 10 + weaponpickup 10 +} +weapon 10 +{ + name "Riot Gun" + ammoname "Shotshells" + maxammo 52 + mindamage 4 + maxdamage 4 + pickup 8 + weaponpickup 24 +} +weapon 11 +{ + name "Guardian Head" + ammoname "Firebursts" + maxammo 80 + mindamage 10 + maxdamage 25 + pickup 30 + weaponpickup 30 +} +weapon 12 +{ + name "Ripper Heart" + ammoname "Deathcoils" + maxammo 5 + mindamage 75 + maxdamage 100 + pickup 1 + weaponpickup 1 +} +fortune +{ + "You never going to score." + "26-31-43-82-16-29" + "Sorry, you no win this time, try again." + "You try harder get along. Be a nice man." + "No man is island, except Lo Wang." + "There is much death in future." + "You should kill all business associates." + "(c)1997,3DRealms fortune cookie company." + "Your chi attracts many chicks." + "Don't you know you the scum of society!?" + "You should not scratch yourself there." + "Man who stand on toilet, high on pot." + "Man who fart in church sit in own pew." + "Man trapped in pantry has ass in jam." + "Baseball wrong. Man with 4 balls cannot walk." + "Man who buy drowned cat pay for wet pussy." +} +gotkey +{ + "Got the RED key!" + "Got the BLUE key!" + "Got the GREEN key!" + "Got the YELLOW key!" + "Got the GOLD master key!" + "Got the SILVER master key!" + "Got the BRONZE master key!" + "Got the RED master key!" +} +needkey +{ + "You need a RED key for this door." + "You need a BLUE key for this door." + "You need a GREEN key for this door." + "You need a YELLOW key for this door." + "You need a GOLD key for this door." + "You need a SILVER key for this door." + "You need a BRONZE key for this door." + "You need a RED key for this door." +} +animation +{ + "SwpAnim.zip" // Swp1001.. 43 frames org = sw.anm + "swend.anm" // Swp2001.. 70 + "sumocinm.anm" // Swp3001.. 84 + "zfcin.anm" // Swp4001.. 142 +} +theme 1 // game startup menu +{ + song "theme.mid" + cdatrack 2 +} +theme 2 // bonus screen +{ + song "endlev3.voc" + cdatrack 3 +} +theme 3 // serpent boss meter +{ + song "serpent.mid" + cdatrack 13 +} +theme 4 // sumo boss meter +{ + song "sumo.mid" + cdatrack 13 +} +theme 5 // zilla boss meter +{ + song "zilla.mid" + cdatrack 13 +} +theme 6 // game end sequence +{ + song "ending.mid" + cdatrack 14 +} +*/ \ No newline at end of file