KAZIK/src_graphics/hell_fps_data.inc
Игорь Федосеев ce5121debd feat: add native hell expedition
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.
2026-11-01 22:29:09 +03:00

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