; Native MASM32 hell expedition. Assets: Freedoom 0.13.0 (assets/hell/COPYING.txt). MODE_HELL_FPS equ 29 INTERACT_HELL_FPS equ 55 HF_WALL equ 185 HF_FLOOR equ 191 HF_CEILING equ 192 HF_LAVA equ 193 ; South wall faces the customer side of the bar at x=3..9, y=23..24. HF_PORTAL_X equ 6*FP_1 HF_PORTAL_Y equ FP_1*309/10 HF_PAINTING_MATERIAL equ 500 HF_PACK_COUNT equ 15 HF_SHOT_PELLETS equ 7 HF_MUSIC_SCALE equ 35 ; settings 0..10 -> MCI 0..350 (35% of previous level) BeginHellFPS3D PROTO LeaveHellFPS3D PROTO HandleHellFPS3D PROTO RenderHellFPS3D PROTO RenderHellPortal3D PROTO FreeHellFPS3D PROTO HFReset PROTO HFBuildFlow PROTO HFTick PROTO HFFire PROTO HFUse PROTO HFLineClear PROTO :DWORD,:DWORD,:DWORD,:DWORD HFDamagePlayer PROTO :DWORD HFDamageEnemy PROTO :DWORD,:DWORD HFSpawnBolt PROTO :DWORD,:DWORD,:DWORD HFDistance PROTO :DWORD,:DWORD,:DWORD,:DWORD HFPlayerCanWalk PROTO :DWORD,:DWORD HFPlaySound PROTO :DWORD HFUpdateMusicVolume PROTO HFEnemy STRUCT x dd ? y dd ? kind dd ? hp dd ? cooldown dd ? pose dd ? timer dd ? awake dd ? HFEnemy ENDS HFBolt STRUCT x dd ? y dd ? vx dd ? vy dd ? life dd ? damage dd ? HFBolt ENDS HFImpact STRUCT x dd ? y dd ? life dd ? HFImpact ENDS include src_graphics\hell_fps_map.inc .data hfCompleted dd 0 hfState dd 0 ; 0 playing, 1 dead, 2 victory hfHealth dd 100 hfArmor dd 0 hfBullets dd 80 hfShells dd 0 hfWeapon dd 0 hfHasShotgun dd 0 hfKey dd 0 hfSecrets dd 0 hfKills dd 0 hfTicks dd 0 hfAccumulator dd 0 hfCooldown dd 0 hfFlash dd 0 hfHurt dd 0 hfFireHeld dd 0 hfFirePending dd 0 hfUsePending dd 0 hfOldX dd 0 hfOldY dd 0 hfOldAngle dd 0 hfOldMap dd 0 hfOldFloor dd 0 hfOldLevel dd 0 hfOldEye dd 0 hfOldCeiling dd 0 hfDoorMask dd 0 hfMessage dd 0 hfMessageTime dd 0 hfLoaded dd 0 hfSoundReady dd 0 hfMusicError dd 0 hfSoundFailures dd 0 hfVolumeError dd 0 hfNumber db 32 dup(0) hfTitle db 'HELL: THE HOUSE ALWAYS BLEEDS',0 hfHelp db 'WASD MOVE MOUSE AIM LMB FIRE 1/2 WEAPON E USE ESC RETURN',0 hfHealthText db 'HEALTH',0 hfArmorText db 'ARMOR',0 hfAmmoText db 'AMMO',0 hfKillsText db 'KILLS',0 hfKeyText db 'BLUE KEY',0 hfPistolText db 'PISTOL',0 hfShotgunText db 'SHOTGUN',0 hfDeadText db 'YOU DIED - ENTER: RETRY / ESC: CASINO',0 hfWinText db 'HELL CLEARED - ENTER / ESC: CASINO',0 hfRewardText db 'FIRST CLEAR: +$6,660',0 hfRepeatText db 'EXPEDITION COMPLETE',0 hfAwarded dd 0 hfStatsText db 'TIME (SEC) KILLS / 28 SECRETS / 2',0 hfPortalPrompt db '[E] HELL EXPEDITION',0 hfMissingText db 'HELL ASSETS MISSING - RESTORE assets/hell',0 hfNeedKeyText db 'THE SANCTUM NEEDS THE BLUE KEY',0 hfDoorText db 'THE GATE OPENS',0 hfSecretText db 'SECRET FOUND',0 hfPickupText db 'SUPPLIES COLLECTED',0 hfKeyFoundText db 'BLUE KEY ACQUIRED - FIND THE EASTERN GATE',0 hfExitText db 'DEFEAT THE WARDEN, THEN USE THE EXIT PORTAL',0 hfWelcomeText db 'FIND THE SHOTGUN. RECOVER THE BLUE KEY. KILL THE WARDEN.',0 hfMaterials AnimPack3D <> hfSoldier AnimPack3D <> hfDemon AnimPack3D <> hfImp AnimPack3D <> hfBoss AnimPack3D <> hfPistol AnimPack3D <> hfShotgun AnimPack3D <> hfItemsArt AnimPack3D <> hfFireArt AnimPack3D <> hfPortalArt AnimPack3D <> hfHUDArt AnimPack3D <> hfDigitsArt AnimPack3D <> hfFacesArt AnimPack3D <> hfPaintingArt AnimPack3D <> hfImpactsArt AnimPack3D <> hfPacks dd OFFSET hfMaterials,OFFSET hfSoldier,OFFSET hfDemon,OFFSET hfImp,OFFSET hfBoss,OFFSET hfPistol,OFFSET hfShotgun,OFFSET hfItemsArt,OFFSET hfFireArt,OFFSET hfPortalArt,OFFSET hfHUDArt,OFFSET hfDigitsArt,OFFSET hfFacesArt,OFFSET hfPaintingArt,OFFSET hfImpactsArt hfMatPath db 'assets\hell\materials.bin',0 hfSoldierPath db 'assets\hell\soldier.bin',0 hfDemonPath db 'assets\hell\demon.bin',0 hfImpPath db 'assets\hell\imp.bin',0 hfBossPath db 'assets\hell\boss.bin',0 hfPistolPath db 'assets\hell\pistol.bin',0 hfShotgunPath db 'assets\hell\shotgun.bin',0 hfItemsPath db 'assets\hell\items.bin',0 hfFirePath db 'assets\hell\fire.bin',0 hfPortalPath db 'assets\hell\portal.bin',0 hfHUDPath db 'assets\hell\hud.bin',0 hfDigitsPath db 'assets\hell\digits.bin',0 hfFacesPath db 'assets\hell\faces.bin',0 hfPaintingPath db 'assets\hell\painting.bin',0 hfImpactsPath db 'assets\hell\impacts.bin',0 hfPaths dd OFFSET hfMatPath,OFFSET hfSoldierPath,OFFSET hfDemonPath,OFFSET hfImpPath,OFFSET hfBossPath,OFFSET hfPistolPath,OFFSET hfShotgunPath,OFFSET hfItemsPath,OFFSET hfFirePath,OFFSET hfPortalPath,OFFSET hfHUDPath,OFFSET hfDigitsPath,OFFSET hfFacesPath,OFFSET hfPaintingPath,OFFSET hfImpactsPath hfMonsterPacks dd OFFSET hfSoldier,OFFSET hfDemon,OFFSET hfImp,OFFSET hfBoss hfMonsterHP dd 55,105,85,1100 hfMonsterSpeed dd 1900,3300,1800,1350 hfMonsterDamage dd 6,15,10,18 hfObject CityProp3D <0,0,FP_1,FP_1*3/2,0,OFFSET hfSoldier,0> hfPelletSpread dd -9,-6,-3,0,3,6,9 ; independent rays, ~12.7-degree full cone hfPercentText db '%',0 hfArmsText db 'ARMS',0 hfSlot1Text db '1',0 hfSlot2Text db '2',0 hfAmmoTypesText db 'BULL',0 hfShellTypeText db 'SHEL',0 hfEmptyAmmoText db 'RCKT 0 50',0 hfEmptyCellText db 'CELL 0 300',0 hfMaxBulletsText db '/ 280',0 hfMaxShellsText db '/ 160',0 hfMusicOpen db 'open "assets\music\tower\Mick_Gordon_-_The_Only_Thing_They_Fear_Is_You_OST_DOOM_Eternal_72020713.mp3" type mpegvideo alias hellmusic',0 hfMusicPlay db 'play hellmusic repeat',0 hfMusicClose db 'close hellmusic',0 hfVolumePrefix db 'setaudio hellmusic volume to ',0 hfVolumeCommand db 80 dup(0) hfLastVolume dd -1 ; Six independent waveaudio channels let combat, pain and pickups overlap. hfSndOpen0 db 'open "assets\hell\dsshotgn.wav" type waveaudio alias hfshot',0 hfSndOpen1 db 'open "assets\hell\dsfirsht.wav" type waveaudio alias hfmonster',0 hfSndOpen2 db 'open "assets\hell\dsplpain.wav" type waveaudio alias hfhurt',0 hfSndOpen3 db 'open "assets\hell\dsitemup.wav" type waveaudio alias hfpick',0 hfSndOpen4 db 'open "assets\hell\dspistol.wav" type waveaudio alias hfpistol',0 hfSndOpen5 db 'open "assets\hell\dsdoropn.wav" type waveaudio alias hfdoor',0 hfSndPlay0 db 'play hfshot from 0',0 hfSndPlay1 db 'play hfmonster from 0',0 hfSndPlay2 db 'play hfhurt from 0',0 hfSndPlay3 db 'play hfpick from 0',0 hfSndPlay4 db 'play hfpistol from 0',0 hfSndPlay5 db 'play hfdoor from 0',0 hfSndClose0 db 'close hfshot',0 hfSndClose1 db 'close hfmonster',0 hfSndClose2 db 'close hfhurt',0 hfSndClose3 db 'close hfpick',0 hfSndClose4 db 'close hfpistol',0 hfSndClose5 db 'close hfdoor',0 hfSndOpens dd OFFSET hfSndOpen0,OFFSET hfSndOpen1,OFFSET hfSndOpen2,OFFSET hfSndOpen3,OFFSET hfSndOpen4,OFFSET hfSndOpen5 hfSndPlays dd OFFSET hfSndPlay0,OFFSET hfSndPlay1,OFFSET hfSndPlay2,OFFSET hfSndPlay3,OFFSET hfSndPlay4,OFFSET hfSndPlay5 hfSndCloses dd OFFSET hfSndClose0,OFFSET hfSndClose1,OFFSET hfSndClose2,OFFSET hfSndClose3,OFFSET hfSndClose4,OFFSET hfSndClose5 .data? hfMap db 1024 dup(?) hfEnemies HFEnemy HF_ENEMIES dup(<>) hfItemTaken dd HF_ITEMS dup(?) hfBolts HFBolt 32 dup(<>) hfFlow dw 1024 dup(?) hfQueue dd 1024 dup(?) hfImpacts HFImpact HF_SHOT_PELLETS dup(<>) .code