Add a painting entrance, Freedoom combat and Doom-style HUD. Persist the one-time clear reward in signed saves without changing file sizes. Include native regression checks and synchronized game/launcher builds.
203 lines
6.8 KiB
PHP
203 lines
6.8 KiB
PHP
; 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
|