; Compatibility of stage-1 fixes with newer weapon/modal/lighting systems. .code RunIntegrationChecks PROC call ResetCombatFixture mov isGamePaused, 1 mov keyForward, 1 mov playerAttackCooldown, 4 call UpdatePlayer call UpdateEntities call UpdateCombat CHECK playerX, 160 ; pause freezes player movement through production procedure CHECK [spriteList].SpriteStruct.x, 288 ; pause freezes guard AI through production procedure CHECK playerAttackCooldown, 4 ; pause freezes weapon cooldowns CHECK playerAmmo, 50 ; pause preserves ammunition mov isGamePaused, 0 mov keyForward, 0 call UpdatePlayer mov gameDialogActive, 1 call UpdateEntities call UpdateCombat CHECK [spriteList].SpriteStruct.x, 288 ; modal dialogue freezes guards CHECK playerAmmo, 50 ; modal dialogue cannot fire mov gameDialogActive, 0 mov gameMode, GAME_MODE_ADVENTURE call UpdateCombat CHECK entityHealth, 100 ; peaceful adventure mode cannot damage targets call ResetCombatFixture mov isPlayerDead, 1 mov transitionCount, 1 mov [transitionList].LevelTransition.triggerCellX, 2 mov [transitionList].LevelTransition.triggerCellY, 2 mov [transitionList].LevelTransition.fadeEffect, 1 mov portalLatchCell, -1 call UpdatePlayer CHECK fadeState, 0 ; dead player cannot activate a room transition call ResetCombatFixture mov playerWeapon, WEAPON_KNIFE call UpdateCombat CHECK entityHealth, 100 ; knife cannot hit beyond its world range CHECK playerAmmo, 50 ; knife consumes no ammunition mov playerAttackCooldown, 0 mov [spriteList].SpriteStruct.x, 208 call UpdateCombat CHECK entityHealth, 70 ; knife retains its close-range damage after merge call ResetCombatFixture mov playerWeapon, WEAPON_SHOTGUN mov [spriteList].SpriteStruct.y, 184 call UpdateCombat CHECK entityHealth, 30 ; shotgun retains wider world-space hitbox and damage CHECK playerAmmo, 48 ; shotgun consumes two rounds mov eax, [lightSources+14*sizeof LightSource].LightSource.flags and eax, LIGHT_FLAG_ACTIVE CHECK eax, 1 ; shotgun spawns muzzle light in reserved slot call ResetCombatFixture mov [spriteList].SpriteStruct.textureId, 11 mov [spriteList].SpriteStruct.flags, 06026400h call InitEntities call UpdateCombat CHECK [spriteList].SpriteStruct.textureId, 11 ; explicit Prop with barrel texture cannot explode mov [spriteList].SpriteStruct.flags, 0 call InitEntities CHECK entityType, ENTITY_TYPE_BARREL ; legacy barrel archetype matches editor fallback ; Real explosion with a nearby guard: CDQ must not destroy sprite pointer. call ResetCombatFixture mov [spriteList].SpriteStruct.textureId, 11 mov [spriteList].SpriteStruct.flags, ENTITY_TYPE_BARREL mov spriteCount, 2 mov esi, OFFSET spriteList+sizeof SpriteStruct mov [esi].SpriteStruct.x, 352 mov [esi].SpriteStruct.y, 160 mov [esi].SpriteStruct.textureId, 13 mov [esi].SpriteStruct.scale, FIXED_ONE mov [esi].SpriteStruct.flags, 0 call InitEntities call UpdateCombat CHECK [spriteList].SpriteStruct.textureId, 0 ; explicit barrel still explodes on hitscan CHECK entityHealth[4], 40 ; blast damages nearby guard without corrupting pointer mov eax, [lightSources+15*sizeof LightSource].LightSource.flags and eax, LIGHT_FLAG_ACTIVE CHECK eax, 1 ; explosion spawns light in reserved slot ret RunIntegrationChecks ENDP