Skip to content

Instantly share code, notes, and snippets.

@bahrom04
Last active February 11, 2026 10:41
Show Gist options
  • Select an option

  • Save bahrom04/3edb8c765761c9e2aa9aeb54080dce5b to your computer and use it in GitHub Desktop.

Select an option

Save bahrom04/3edb8c765761c9e2aa9aeb54080dce5b to your computer and use it in GitHub Desktop.
Generals run on Linux (NixOS). Still researching.

Play Generals Contra X Beta 2 on Linux (NixOS).

🇺🇸

Note

Host: Linux (Nixos 26.05).

You buy Generals from Steam, but you can't play it properly. EA Sports took the old 2004 game as it was and released it on Steam. They archived the code on Github: (Communities were forced to fork it, advancing it by +2000 commits. Even then, it's only for the Windows platform.

  • Goal:

  • Ability to play on Linux platform ✅
  • Play at 1920x1080 or fullscreen ✅
  • Set camera height to 600 ✅
  • Play Generals at 60 fps. Only skirmish runs at 30 fps, but if you create a game through LAN, it works at 60 fps. ✅
  • Not crashing mid-game ✅
  • Be able to play with friends online or locally

NixOS uchun kerakli wine & LD_PATH

environment.systemPackages = with pkgs; [
  wineWowPackages.stable 
  samba                  # Provides ntlm_auth
  krb5                   # Provides Kerberos support libraries
  winetricks             # Useful for further troubleshooting
];

hardware = {
  graphics = {
    enable = true;
    enable32Bit = true;
    extraPackages = with pkgs; [
      mesa
      libvdpau
      libva-vdpau-driver
      libva
      vulkan-loader
      vulkan-validation-layers
    ];
  };
};

programs.nix-ld = {
  enable = lib.mkDefault true;
  libraries = with pkgs; [
    acl
    attr
    bzip2
    curl
    libglvnd
    libsodium
    libssh
    libxml2
    mesa
    openssl
    stdenv.cc.cc
    systemd
    util-linux
    vulkan-loader
    xz
    zlib
    zstd
  ];
};
  1. Generals Zero Hour will be installed locally if you installed it through Steam at ~/.local/share/steamapps/common/Command & Conquer Generals - Zero Hour.
  2. Copy the Command & Conquer Generals - Zero Hour folder into the ~/Documents/ directory and rename the game folder to Command_Conquer_Generals_Contra_X.
  3. Download [ContraXBeta2Setup.1.exe] (https://www.moddb.com/mods/contra/downloads/contra-x-beta-2-setup), extract it from the zip file, and place the exe file into the ~/Documents/Command_Conquer_Generals_Contra_X folder, then run it using wine ContraXBeta2Setup.1.exe
  4. During installation, specify the game location as the folder you created above: ~/Documents/Command_Conquer_Generals_Contra_X
  5. If you get a forced exit warning during installation, wait and the installation will continue.
  6. Now, give the Launcher +x permission by running chmod +x ~/Documents/Command_Conquer_Generals_Contra_X/Contra_Launcher.exe, then you can launch it using wine ~/Documents/Command_Conquer_Generals_Contra_X/Contra_Launcher.exe
  7. If a .desktop file hasn't been created for the launcher, you can create one:
nano ~/.local/share/applications/ContraaX.desktop
Write the following inside #:
[Desktop Entry]
Name=Command & Conquer Generals Contra X
Type=Application
StartupNotify=true
Terminal=false
Icon=/home/bahrom/.wine/dosdevices/c:/users/bahrom/Documents/Command_Conquer_Generals_Contra_X/ContraIco.ico

Exec=env WINEPREFIX="/home/bahrom/.wine" wine "C:\\users\\bahrom\\Documents\\Command_Conquer_Generals_Contra_X\\Contra_Launcher.exe"

Path=/home/bahrom/Documents/Command_Conquer_Generals_Contra_X/

Result

Skrinshot: 2026-02-09 19-43-55 Skrinshot: 2026-02-09 19-44-34

🇺🇿

Note

Host: Linux (Nixos 26.05).

Generals oʻyini steamdan sotib olasiz-u lekin odamga oʻxshab oʻynay olmaysiz. EA Sports eski 2004-yilgi oʻyinni shundayligicha olib steamga chiqarib yuborgan. Githubʼdagi kodini arxivlab yuborgan :( Majbur hamjamiyatlar fork qilib, +2000 kommit oldinga oʻtib ketishgan. Shundayam Windows platformasi uchun.

  • Maqsad:

    • Linux platformasida oʻynay olish ✅
    • 1920x1080 yo fullscreen qilib oʻynash ✅
    • Kamera balandligini 600 qilish ✅
    • Generalsni 60 fps oʻynash. Faqat skirmish 30 fps lekin LAN orqali oʻyin yaratsangiz 60 fps ishlaydi. ✅
    • oʻyin oʻrtasida otib yubormaslik ✅
    • Onlayn yo lokal doʻstlar bilan oʻynay olish
  1. Generals Zero Hour joyda oʻrnatilgan boʻladi agar steam orqali oʻrnatgan boʻlsangiz ~/.local/share/steamapps/common/Command & Conquer Generals - Zero Hour.
  2. Shu Command & Conquer Generals - Zero Hour jildini ~/Documents/ jildini ichiga nusxalang va oʻyin nomini Command_Conquer_Generals_Contra_X ga qayta nomlang.
  3. ContraXBeta2Setup.1.exe yuklab zipdan oching va uni ~/Documents/Command_Conquer_Generals_Contra_X jildiga exe faylini tashlang va uni ishga tushuring wine ContraXBeta2Setup.1.exe
  4. Oʻrnatayotganda oʻyin joylashuvini tepada yaratgan jildni belgilaysiz: ~/Documents/Command_Conquer_Generals_Contra_X
  5. Oʻrnatayotganda majburiy chiqish deb ogohlantirsa kutib tursangiz oʻrnatish davom etaveradi.
  6. Ana endi Launcherga +x huquqini ham berib chmod +x ~/Documents/Command_Conquer_Generals_Contra_X/Contra_Launcher.exe, ishga tushirsangiz boʻladi wine ~/Documents/Command_Conquer_Generals_Contra_X/Contra_Launcher.exe
  7. Agar .desktop fayli yaratilmagan boʻlsa launcher uchun yaratsangiz boʻladi:
nano ~/.local/share/applications/ContraaX.desktop

# ichiga quyidagini yozing
[Desktop Entry]
Name=Command & Conquer Generals Contra X
Type=Application
StartupNotify=true
Terminal=false
Icon=/home/bahrom/.wine/dosdevices/c:/users/bahrom/Documents/Command_Conquer_Generals_Contra_X/ContraIco.ico

Exec=env WINEPREFIX="/home/bahrom/.wine" wine "C:\\users\\bahrom\\Documents\\Command_Conquer_Generals_Contra_X\\Contra_Launcher.exe"

Path=/home/bahrom/Documents/Command_Conquer_Generals_Contra_X/

Natija

Tepadagi skrinshotlar

Warning

Quyidagi izlanishlar (oʻrnatish uchun ahamiyatsiz)/Researches (unimportant for installation)

Asosiy launcher

Backup vanilla generals.exe and force to launch generals zero hour:

steamapps/common/Command & Conquer Generals - Zero Hour took 4s 
➜ mv Generals.exe Generals.exe.vanilla
cp generalszh.exe Generals.exe

Options.ini fayl konfigim

joylashuv: ~/Documents/Command and Conquer Generals Zero Hour Data/Options.ini

MaxCameraHeight = 600
CameraHeight = 300
AntiAliasing = 
ArchiveReplays = no
BuildingOcclusion = yes
CursorCaptureEnabledInFullscreenGame = yes
CursorCaptureEnabledInFullscreenMenu = yes
CursorCaptureEnabledInWindowedGame = no
CursorCaptureEnabledInWindowedMenu = no
DrawScrollAnchor = no
DynamicLOD = yes
ExtraAnimations = yes
GameSpyIPAddress = 10.10.0.181
GameTimeFontSize = 8
Gamma = 50
HeatEffects = no
IPAddress = 10.10.0.181
IdealStaticGameLOD = High
LanguageFilter = false
MaxParticleCount = 2500
MoneyTransactionVolume = 0
MoveScrollAnchor = yes
MusicVolume = 55
NetworkLatencyFontSize = 8
PlayerObserverEnabled = yes
RenderFpsFontSize = 8
Resolution = 1920 1080
ResolutionFontAdjustment = -100
Retaliation = yes
SFX3DVolume = 79
SFXVolume = 71
ScreenEdgeScrollEnabledInFullscreenApp = yes
ScreenEdgeScrollEnabledInWindowedApp = no
ScrollFactor = 50
SendDelay = no
ShowMoneyPerMinute = no
ShowSoftWaterEdge = yes
ShowTrees = yes
StaticGameLOD = Custom
SystemTimeFontSize = 8
TextureReduction = 0
UseAlternateMouse = no
UseCloudMap = yes
UseDoubleClickAttackMove = no
UseLightMap = yes
UseShadowDecals = yes
UseShadowVolumes = yes
VoiceVolume = 70

Kamera balandligi toʻgʻirlandi:

Command & Conquer Generals - Zero Hour/Data/INI 
➜ pwd
/home/bahrom/.local/share/Steam/steamapps/common/Command & Conquer Generals - Zero Hour/Data/INI
Command & Conquer Generals - Zero Hour/Data/INI 
➜ ls
GameData.ini

GameData.ini fayl ichi

;//////////////////////////////////////////////////////////////////////////////
; FILE: GameData.ini (SYSTEM) /////////////////////////////////////////////////
;//////////////////////////////////////////////////////////////////////////////

GameData
  ShellMapName = Maps\ShellMapMD\ShellMapMD.map
  MapName = Assault.map
  MoveHintName = SCMoveHint
  UseTrees = Yes
  UseFPSLimit = Yes
  FramesPerSecondLimit = 30
  ChipsetType = 0
  ;Windowed = No
  ;XResolution = 800
  ;YResolution = 600
  MaxShellScreens = 8
  UseCloudMap = Yes
  UseLightMap = Yes
  BilinearTerrainTex = Yes
  TrilinearTerrainTex = Yes
  MultiPassTerrain = Yes
  AdjustCliffTextures = Yes
  StretchTerrain = No
  UseHalfHeightMap = No
  ShowObjectHealth = Yes
  HideGarrisonFlags = No
  Use3WayTerrainBlends = 1
  DrawEntireTerrain = No
  TerrainLOD = DISABLE  ; should be handled by options screen.
  TerrainLODTargetTimeMS = 45
  TextureReductionFactor = 0; 1 is half res, 2 querter res, etc.
  RightMouseAlwaysScrolls = Yes
  UseWaterPlane = Yes
  UseCloudPlane = Yes
  UseShadowVolumes = Yes
  UseShadowDecals = Yes
  UseBehindBuildingMarker = Yes
  DefaultOcclusionDelay = 3000  ; in ms
  OccludedColorLuminanceScale = 0.5
  WaterPositionX = 0.0
  WaterPositionY = 0.0
  WaterPositionZ = 7.0
  WaterExtentX = 2000.0
  WaterExtentY = 2000.0
  WaterType = 0
   
  ; when a structure is reduced to rubble, set its z-height to this if nothing else is specified.
  DefaultStructureRubbleHeight = 10.0

  ;the following are for vertex animated water
  VertexWaterAvailableMaps1       = Maps\nVidiaDemo\nVidiaDemo.map
  VertexWaterHeightClampLow1      = 0.0
  VertexWaterHeightClampHi1       = 16.3
  VertexWaterAngle1               = 45     ;in degrees
  VertexWaterXPosition1           = 2700.0
  VertexWaterYPosition1           = -750.0
  VertexWaterZPosition1           = 2.9
  VertexWaterXGridCells1          = 65
  VertexWaterYGridCells1          = 360
  VertexWaterGridSize1            = 10.0
  VertexWaterAttenuationA1        = 1.0
  VertexWaterAttenuationB1        = 0.0
  VertexWaterAttenuationC1        = 0.0
  VertexWaterAttenuationRange1    = 20.0

  ;the following are for vertex animated water
  VertexWaterAvailableMaps2       = Maps\CHI03\CHI03.map
  VertexWaterHeightClampLow2      = 0.0
  VertexWaterHeightClampHi2       = 31.2
  VertexWaterAngle2               = -12    ;in degrees
  VertexWaterXPosition2           = 282.0
  VertexWaterYPosition2           = -20.0
  VertexWaterZPosition2           = 3.0
  VertexWaterXGridCells2          = 100
  VertexWaterYGridCells2          = 200
  VertexWaterGridSize2            = 11.0
  VertexWaterAttenuationA2        = 1.0
  VertexWaterAttenuationB2        = 0.0
  VertexWaterAttenuationC2        = 0.0
  VertexWaterAttenuationRange2    = 20.0

  ;the following are for vertex animated water
  VertexWaterAvailableMaps3       = Maps\GLA01\GLA01.map
  VertexWaterHeightClampLow3      = 0.0
  VertexWaterHeightClampHi3       = 45.0
  VertexWaterAngle3               = -12     ;in degrees
  VertexWaterXPosition3           = 1424.0
  VertexWaterYPosition3           = -270.0
  VertexWaterZPosition3           = 2.0
  VertexWaterXGridCells3          = 75
  VertexWaterYGridCells3          = 360
  VertexWaterGridSize3            = 10.0 ;11.0
  VertexWaterAttenuationA3        = 1.0
  VertexWaterAttenuationB3        = 0.0
  VertexWaterAttenuationC3        = 0.0
  VertexWaterAttenuationRange3    = 20.0

  ;the following are for vertex animated water
  VertexWaterAvailableMaps4       = Maps\USA06\USA06.map
  VertexWaterHeightClampLow4      = 0.0
  VertexWaterHeightClampHi4       = 16.3
  VertexWaterAngle4               = 45     ;in degrees
  VertexWaterXPosition4           = 2700.0
  VertexWaterYPosition4           = -750.0
  VertexWaterZPosition4           = 2.9
  VertexWaterXGridCells4          = 65
  VertexWaterYGridCells4          = 360
  VertexWaterGridSize4            = 10.0
  VertexWaterAttenuationA4        = 1.0
  VertexWaterAttenuationB4        = 0.0
  VertexWaterAttenuationC4        = 0.0
  VertexWaterAttenuationRange4    = 20.0
  
  DownwindAngle = -0.785    ; Northeast! AKA "Away and to the right" 
  DrawSkyBox = Yes
  SkyBoxPositionZ = -100.0    ; lowers center of skybox under terrain
  SkyBoxScale = 8.4  ; good for default 96 x 96 map, make 17.5 for 256x256
  CameraPitch = 37.5
  CameraYaw = 0.0
  CameraHeight = 505.0
  MaxCameraHeight = 510.0
  MinCameraHeight = 120.0
  CameraAdjustSpeed = 0.3      ; between 0 and 1 - this is how fast the camera snaps to the desired height
  ScrollAmountCutoff = 50.0      ; arbitrary units - above this value, we don't update height while scrolling
  EnforceMaxCameraHeight = No      ; Obey max camera height while scrolling?
  TerrainHeightAtEdgeOfMap = 100.0
  UnitDamagedThreshold = 0.7
  UnitReallyDamagedThreshold = 0.35
  GroundStiffness = 0.8
  StructureStiffness = 0.3
  ; acceleration due to gravity, in dist/sec^2
  ; note that our distance units are roughly one foot, so 
  ; this corresponds to earth-normal gravity (32 ft/sec^2)
  ;Gravity = -32.0
  ; this "feels" better... (srj)
  Gravity = -64.0

  PartitionCellSize = 40.0

  ParticleScale = 1.0 ;
  
  AutoFireParticleSmallPrefix   = FireS
  AutoFireParticleSmallSystem   = FireFactionSmall
  AutoFireParticleSmallMax      = 2
  AutoFireParticleMediumPrefix  = FireM
  AutoFireParticleMediumSystem  = FireFactionMedium
  AutoFireParticleMediumMax     = 1
  AutoFireParticleLargePrefix   = FireL
  AutoFireParticleLargeSystem   = FireFactionLarge
  AutoFireParticleLargeMax      = 1
  AutoSmokeParticleSmallPrefix  = SmokeS
  AutoSmokeParticleSmallSystem  = SmokeFactionSmall
  AutoSmokeParticleSmallMax     = 4
  AutoSmokeParticleMediumPrefix = SmokeM
  AutoSmokeParticleMediumSystem = SmokeFactionMedium
  AutoSmokeParticleMediumMax    = 2
  AutoSmokeParticleLargePrefix  = SmokeL
  AutoSmokeParticleLargeSystem  = SmokeFactionLarge
  AutoSmokeParticleLargeMax     = 1
  AutoAflameParticlePrefix      = Aflame
  AutoAflameParticleSystem      = FireBuildingSmall
  AutoAflameParticleMax         = 4

  HistoricDamageLimit = 5000  ; how long to retain historical-damage for weapons that need it, in msec

  AmmoPipScaleFactor = 1.5
  ContainerPipScaleFactor = 1.5
  AmmoPipScreenOffset = X:-1.0 Y:0.0        ; note that this is a multiplier to boundingspheresize, NOT an absolute offset
  ContainerPipScreenOffset = X:1.0 Y:0.0    ; note that this is a multiplier to boundingspheresize, NOT an absolute offset
  AmmoPipWorldOffset = X:0.0 Y:0.0 Z:10.0       ; added to position prior to world->screen xform
  ContainerPipWorldOffset = X:0.0 Y:0.0 Z:10.0  ; added to position prior to world->screen xform

  LevelGainAnimationName = LevelGainedAnimation
  LevelGainAnimationTime = 4.0
  LevelGainAnimationZRise = 15.0

  GetHealedAnimationName = GetHealedAnimation
  GetHealedAnimationTime = 4.0
  GetHealedAnimationZRise = 15.0

  MaxTerrainTracks = 100  ; how many vehicles can generate tread marks on the terrain.
  TimeOfDay = AFTERNOON
  Weather = NORMAL
  MakeTrackMarks = Yes
  ForceModelsToFollowTimeOfDay = Yes
  ForceModelsToFollowWeather = Yes

  InfantryLightMorningScale = 100f ; amount to scale map lighting to make infantry easier to see.
  InfantryLightAfternoonScale = 100f ; amount to scale map lighting to make infantry easier to see.
  InfantryLightEveningScale = 200f ; amount to scale map lighting to make infantry easier to see.
  InfantryLightNightScale = 200f ; amount to scale map lighting to make infantry easier to see.

  TerrainLightingMorningAmbient = R:128 G:100 B:77
  TerrainLightingMorningDiffuse = R:230 G:180 B:153
  TerrainLightingMorningLightPos = X:-0.96 Y:0.05 Z:-0.29
  TerrainLightingEveningAmbient = R:64 G:59 B:51
  TerrainLightingEveningDiffuse = R:153 G:128 B:102
  TerrainLightingEveningLightPos = X:-1.0 Y:0.0 Z:-0.2
  TerrainLightingNightAmbient = R:26 G:26 B:39
  TerrainLightingNightDiffuse = R:51 G:51 B:77
  TerrainLightingNightLightPos = X:-1.0 Y:1.0 Z:-2.0

  TerrainObjectsLightingMorningAmbient = R:128 G:102 B:77
  TerrainObjectsLightingMorningDiffuse = R:230 G:179 B:153
  TerrainObjectsLightingMorningLightPos = X:-0.96 Y:0.05 Z:-0.29
  TerrainObjectsLightingEveningAmbient = R:64 G:59 B:51
  TerrainObjectsLightingEveningDiffuse = R:153 G:128 B:102
  TerrainObjectsLightingEveningLightPos = X:-1.0 Y:0.0 Z:-0.2
  TerrainObjectsLightingNightAmbient = R:26 G:26 B:39
  TerrainObjectsLightingNightDiffuse = R:51 G:51 B:77
  TerrainObjectsLightingNightLightPos = X:-1.0 Y:1.0 Z:-2.0

  TerrainLightingAfternoonAmbient = R:56 G:52 B:44
  TerrainLightingAfternoonDiffuse = R:255 G:255 B:255
  TerrainLightingAfternoonLightPos = X:-0.81 Y:0.38 Z:-0.45
  TerrainObjectsLightingAfternoonAmbient = R:56 G:52 B:44
  TerrainObjectsLightingAfternoonDiffuse = R:255 G:255 B:255
  TerrainObjectsLightingAfternoonLightPos = X:-0.81 Y:0.38 Z:-0.45

  TerrainLightingAfternoonAmbient2 = R:0 G:0 B:0
  TerrainLightingAfternoonDiffuse2 = R:60 G:60 B:120
  TerrainLightingAfternoonLightPos2 = X:0.79 Y:0.62 Z:-0.00
  TerrainObjectsLightingAfternoonAmbient2 = R:0 G:0 B:0
  TerrainObjectsLightingAfternoonDiffuse2 = R:60 G:60 B:80
  TerrainObjectsLightingAfternoonLightPos2 = X:0.79 Y:0.62 Z:-0.00

  TerrainLightingAfternoonAmbient3 = R:0 G:0 B:0
  TerrainLightingAfternoonDiffuse3 = R:30 G:30 B:20
  TerrainLightingAfternoonLightPos3 = X:0.81 Y:-0.48 Z:-0.34
  TerrainObjectsLightingAfternoonAmbient3 = R:0 G:0 B:0
  TerrainObjectsLightingAfternoonDiffuse3 = R:30 G:30 B:20
  TerrainObjectsLightingAfternoonLightPos3 = X:0.81 Y:-0.48 Z:-0.34

  AudioOn = Yes
  MusicOn = Yes
  SoundsOn = Yes
  SpeechOn = Yes
  VideoOn = Yes

  DebugAI = No
  DebugAIObstacles = No

  MaxRoadSegments = 4000
  MaxRoadVertex = 3000
  MaxRoadIndex = 5000
  MaxRoadTypes = 100

  ValuePerSupplyBox = 75

  BuildSpeed = 1.0
  MinDistFromEdgeOfMapForBuild = 30.0  ; buildings may not be constructed this close to a map edge
  SupplyBuildBorder = 20.0  ; min dist you can put a supply center from a supply source

  ;Terrain height at structure footprint must be within this much to 
  ;be considerd "flat" and therefore buildable
  AllowedHeightVariationForBuilding = 10.0

  MinLowEnergyProductionSpeed = 0.5
  MaxLowEnergyProductionSpeed = 0.8
  LowEnergyPenaltyModifier = 1.0
  MultipleFactory = 1.0
  RefundPercent = 50.0%
  StealthFriendlyOpacity = 50.0%

  CommandCenterHealRange = 500.0 ; command center heals your/ally stuff this close to the command center
  CommandCenterHealAmount = 0.01 ; command center heals close by stuff this amount per logic frame
  MaxLineBuildObjects = 50       ; line build style objects can be in a line no longer than this count of objects
  MaxTunnelCapacity = 10         ; How many can be in a player's tunnel network.  Limit 10 for UI currently

  StandardMinefieldDensity    = 0.004    ; in mines per square foot
  StandardMinefieldDistance   = 40      ; in feet. should generally be larger than typical tank shot range.

  HorizontalScrollSpeedFactor = 1.6;     ; Factor applied to the maximum RMB scroll speed.  Larger allows faster scrolling.
  VerticalScrollSpeedFactor = 2.0;       ; Split to account for aspect ratio induced speed limits.  Room to mouse drag.
  KeyboardScrollSpeedFactor = 2.0;    ; Factor applied to the maximum keyboard scroll speed.  Larger allows faster scrolling.
  MovementPenaltyDamageState = REALLYDAMAGED  ; Point at which we slow movement

  MaxParticleCount = 2500        ; the maximum number of particles that can exist at one time (to 5000 for demo)
  MaxFieldParticleCount = 30     ; the number of field type particles rendered to the screen, beyond which this type will begin skipping
                                 ; a field particle is one of Priority AREA_EFFECT and isGroundAligned = Yes
                                 ; Typically these are puddles, toxic contamination, radiation, decontamination, etc.

; note that the weapon bonus types are:
;"GARRISONED",
;"HORDE",
;"CONTINUOUS_FIRE_MEAN",
;"CONTINUOUS_FIRE_FAST",
;"NATIONALISM",
;"PLAYER_UPGRADE",
;"DRONE_SPOTTING",
;"ENTHUSIASTIC",
;"VETERAN",
;"ELITE",
;"HERO",
;"BATTLEPLAN_BOMBARDMENT",
;"BATTLEPLAN_HOLDTHELINE",
;"BATTLEPLAN_SEARCHANDDESTROY",
;"SUBLIMINAL",
;"SOLO_HUMAN_EASY",
;"SOLO_HUMAN_NORMAL",
;"SOLO_HUMAN_HARD",
;"SOLO_AI_EASY",
;"SOLO_AI_NORMAL",
;"SOLO_AI_HARD",
;
; and the weapon bonus 'fields' are:
;"DAMAGE",
;"RADIUS",
;"RANGE",
;"RATE_OF_FIRE",
;"PRE_ATTACK",

  ;HORDE, NATIONALISM and FANATICISM are cumulative bonuses for the China Redguard,
  ;and only apply when they are in a horde. NATIONALISM does not replace HORDE! FANATICISM does not replace NATIONALISM

  ;ENTHUSIASTIC and SUBLIMINAL are cumulative bonuses for the China Redguard,
  ;and only apply when they are within effect radius of a propaganda tower. SUBLIMINAL does not replace ENTHUSIASTIC!

  WeaponBonus =       HORDE  RATE_OF_FIRE  150%  ;Horded troops fire their weapons 25% faster
  WeaponBonus = NATIONALISM  RATE_OF_FIRE  125%  ;Horded troops with nationalism fire their weapon an additional 25% faster
  WeaponBonus = FANATICISM   RATE_OF_FIRE  125%  ;Horded troops with nationalism fire their weapon an additional 25% faster
  WeaponBonus = ENTHUSIASTIC RATE_OF_FIRE  125%  ;In range of a speaker tower, gaining enthusiasm
  WeaponBonus = SUBLIMINAL   RATE_OF_FIRE  125%  ;In range of an upgraded speaker tower, gaining even more enthusiasm
  WeaponBonus =  GARRISONED         RANGE  133%  ; when garrisoned, all weapons get n times normal range
  WeaponBonus =  GARRISONED        DAMAGE  125%  ; when garrisoned, all weapons get n times normal range

  WeaponBonus = TARGET_FAERIE_FIRE  RATE_OF_FIRE  150%  ; If shooting at someone marked with Faerie Fire, shoot faster (we don't miss ever, so can't hit easier)

  WeaponBonus = FRENZY_ONE    DAMAGE 110% ; Granted by a China Generals power
  WeaponBonus = FRENZY_TWO    DAMAGE 120%
  WeaponBonus = FRENZY_THREE  DAMAGE 130%
    
  WeaponBonus = VETERAN  RATE_OF_FIRE  120%  
  WeaponBonus = VETERAN  DAMAGE        110%
  WeaponBonus = ELITE    RATE_OF_FIRE  140%
  WeaponBonus = ELITE    DAMAGE        120%
  WeaponBonus = HERO     RATE_OF_FIRE  160%  
  WeaponBonus = HERO     DAMAGE        130%  

  ;Strategy centers provides bonuses based on the active battleplan!
  WeaponBonus = BATTLEPLAN_BOMBARDMENT       DAMAGE        120%
;  WeaponBonus = BATTLEPLAN_BOMBARDMENT       RANGE         120%
  WeaponBonus = BATTLEPLAN_SEARCHANDDESTROY  RANGE         120%
  WeaponBonus = BATTLEPLAN_HOLDTHELINE       RATE_OF_FIRE  100% ;Note this does nothing -- just for balancing reference.

  WeaponBonus = SOLO_AI_EASY   RATE_OF_FIRE  80%
  WeaponBonus = SOLO_AI_NORMAL RATE_OF_FIRE  100%
  WeaponBonus = SOLO_AI_HARD   RATE_OF_FIRE  120%

  ; you cannot set this; it always has a value of 100%.
  ; HealthBonus_Regular = 100%
  HealthBonus_Veteran = 120%
  HealthBonus_Elite   = 130%
  HealthBonus_Heroic  = 150%

  HumanSoloPlayerHealthBonus_Easy    = 150%
  HumanSoloPlayerHealthBonus_Normal  = 100%     ; ie, unadjusted
  HumanSoloPlayerHealthBonus_Hard    = 80%

  ; Audio parameters
;  VolumeDistribution = Linear          ; for linear falloff
;  VolumeDistribution = MuLaw            ; for S-Curve falloff
;  VolumeMuValue = 6.0                  ; defines the steepness of the S, must be >=0, higher is steeper.

  GroupSelectMinSelectSize = 5
  GroupSelectVolumeBase = 0.5
  GroupSelectVolumeIncrement = 0.02
  MaxUnitSelectSounds = 8

  SelectionFlashSaturationFactor = 0.5  ; zero leaves color unaffected, 4.0 is purely saturated
  SelectionFlashHouseColor       = No  ; if 'No', selection flashes white

  CameraAudibleRadius = 250             ; defines the radius that we can hear when the camera is looking up.
  GroupMoveClickToGatherAreaFactor = 0.5; if you take all the selected units and calculate the smallest possible rectangle
                                        ; that contains them all, and click within that, all the selected units will break 
                                        ; formation and gather at the point the user clicked (if the value is 1.0). If it's 
                                        ; 0.0, units will always keep their formation. If it's <1.0, then the user must 
                                        ; click a smaller area within the rectangle to order the gather.

  ShakeSubtleIntensity      = 0.5
  ShakeNormalIntensity      = 1.0
  ShakeStrongIntensity      = 2.5
  ShakeSevereIntensity      = 5.0
  ShakeCineExtremeIntensity = 7.5       ;Cinematic reserved -- don't use for game stuff because it can change.
  ShakeCineInsaneIntensity  = 10.0      ;Cinematic reserved -- don't use for game stuff because it can change.

  MaxShakeIntensity    = 10.0
  MaxShakeRange        = 150.0

  SellPercentage       = 50% ; You get this percentage back of the cost to build
  
  BaseRegenHealthPercentPerSecond = 0.3% ;You get this % of max health back per second from auto base regeneration
  BaseRegenDelay                  = 3000 ;in MS, delay in frames we must be damage free before we can auto heal from base regeneration

; sorry, prisons are cut, maybe next version (srj)
;  PrisonBountyMultiplier = 2.0 ;Players get this X the cost to build a unit 
;                               ;that is delivered to a prison with 
;                               ;KINDOF_COLLECTS_PRISON_BOUNTY
;  PrisonBountyTextColor = R:255 G:128 B:64 A:255

  SpecialPowerViewObject = SuperweaponPing ; Name of the object created for superweapons to let you watch what happens
                                 
  ; this is a list of bones that will always be exposed to Logic.
  ; please note that this is really here for quick backwards compatibility with old code,
  ; which didn't require declaring which bones you wanted to be able to use from logic...
  ; so PLEASE DO NOT ADD TO THIS LIST; if you need to expose new bones for a particular
  ; unit, please use the "ExtraPublicBone" INI keyword on a per-unit basis instead
  ; (see the airfields for an example). (srj)
  StandardPublicBone = FirePoint
  StandardPublicBone = Target_Left
  StandardPublicBone = Target_Right
  StandardPublicBone = ExitStart
  StandardPublicBone = ExitEnd
  StandardPublicBone = Muzzle
  StandardPublicBone = PARA_COG
  StandardPublicBone = PARA_ATTCH
  StandardPublicBone = PARA_MAN
  StandardPublicBone = ExitStart
  StandardPublicBone = DockStart
  StandardPublicBone = DockAction
  StandardPublicBone = DockEnd
  StandardPublicBone = DockWaiting
  StandardPublicBone = WeaponA
  StandardPublicBone = Smoke
  StandardPublicBone = Fire
  StandardPublicBone = WaterSpray
  StandardPublicBone = Spray
  StandardPublicBone = WaterSprayBig
  StandardPublicBone = Steam
  StandardPublicBone = Propeller
  StandardPublicBone = SpawnPoint
  StandardPublicBone = FireS
  StandardPublicBone = FireM
  StandardPublicBone = FireL
  StandardPublicBone = SmokeS
  StandardPublicBone = SmokeM
  StandardPublicBone = SmokeL
  StandardPublicBone = Aflame

  DefaultStartingCash = 10000 ;The amount of cash the player starts with by default.

  UnlookPersistDuration     = 5000 ; How long after you stop looking until the fog grows back

  ShroudColor = R:255 G:255 B:255
  ClearAlpha = 255
  FogAlpha = 127
  ShroudAlpha = 0 ; 0 is opaque, 255 is clear.  Unsigned Byte

  ; Network timing settings.  Don't mess with these unless you know what you're doing!
  ; If you are tempted to mess with these, please let me know. Bryan x36810
  ; This does not imply that I know what I'm doing.
  NetworkFPSHistoryLength = 30      ; The number of fps history entries.
  NetworkLatencyHistoryLength = 200 ; The number of ping history entries.
  NetworkRunAheadMetricsTime = 5000 ; The number of miliseconds between run ahead metrics things
  NetworkCushionHistoryLength = 10  ; The number of cushion values to keep.
  NetworkRunAheadSlack = 10         ; The amount of slack in the run ahead value.  This is the percentage of the calculated run ahead that is added.
  NetworkKeepAliveDelay = 20        ; The number of seconds between when the connections to each player send a keep-alive packet.
  NetworkDisconnectTime = 5000      ; The number of milliseconds between when the game gets stuck on a frame for a network stall and when the disconnect dialog comes up.
  NetworkPlayerTimeoutTime = 60000  ; The number of milliseconds between when a player's last keep alive command was recieved and when they are considered disconnected from the game.
  NetworkDisconnectScreenNotifyTime = 15000 ; The number of milliseconds between when the disconnect screen comes up and when the disconnect notification is sent to the other players.

  KeyboardCameraRotateSpeed = 0.1   ; How fast the camera rotates when rotated via keyboard controls.

End

Oʻyin fayllari

pwd   
/home/bahrom/.local/share/Steam/steamapps/common/Command & Conquer Generals - Zero Hour
➜ ls    
00000000.016                 Generals.dat                          installScript.vdf  P2XDLL.DLL           steam_api.dll
00000000.256                 Generals.exe                          langdata.dat       ParticleEditor.dll   steam_appid.txt
abseil_dll.dll               Generals.ico                          launcher.bmp       PatchData.big        TerrainZH.big
AudioEnglishZH.big           Generals.lcf                          Launcher.txt       Patch.doc            TexturesZH.big
AudioZH.big                  GeneralsOnlineGameData                libcrypto-3.dll    patchget.dat         TUC_Credits_Updated.txt
BINKW32.DLL                  GeneralsOnline_setup_013026_QFE2.exe  libcurl.dll        PatchINI.big         W3DEnglishZH.big
Contra_Launcher_2.0.0.8.exe  GeneralsOnlineZH_60.exe               libprotobuf.dll    patchw32.dll         W3DZH.big
crashpad_handler.exe         GeneralsOnlineZH.exe                  libssl-3.dll       PatchWindow.big      WindowZH.big
Data                         GeneralsZH.ico                        Manuals            PatchZH.big          WorldBuilder.exe
DebugWindow.dll              GenLauncher.exe                       MapsZH.big         readme.doc           ZH_Generals
EnglishZH.big                GenPatcher.exe                        MSS                RedistInstallers     zlib1.dll
Game.dat                     gensecZH.big                          mss32.dll          sentry.dll           ShadersZH.big
Game.dat-DELL.log            INIZH.big                             Music.big          SpeechEnglishZH.big
GameNetworkingSockets.dll    Install_Final.bmp                     MusicZH.big        SpeechZH.big

Buyruqlar

winetricks vcredist2022
winetricks d3dx9
winetricks vcrun2022
# 1. Baribir yemadi...
wine GeneralsOnline_setup_013026_QFE2.exe 
winetricks dxvk

nano ~/Documents/Command and Conquer Generals Zero Hour Data/Options.ini
# Resolution = 1920 1080

# 2. yemadi
steam-run wine GeneralsOnlineZH_60.exe

winetricks d3dx9 d3dcompiler_43

[!WARNING] GeneralsOnlineZH.exe ran qilgandagi muhim loglar

➜ steam-run wine GeneralsOnlineZH_60.exe
0024:err:kerberos:kerberos_LsaApInitializePackage no Kerberos support, expect problems
0024:fixme:ntdll:NtQuerySystemInformation info_class SYSTEM_PERFORMANCE_INFORMATION
0128:fixme:process:SetProcessShutdownParameters (00000100, 00000001): partial stub.
0130:fixme:file:NtLockFile I/O completion on lock not implemented yet
0024:fixme:file:NtLockFile I/O completion on lock not implemented yet
0120:fixme:secur32:get_cipher_algid unknown algorithm 23
0120:fixme:secur32:get_mac_algid unknown algorithm 200, cipher 23

0130:err:kerberos:kerberos_LsaApInitializePackage no Kerberos support, expect problems
0130:fixme:secur32:get_cipher_algid unknown algorithm 23
0130:fixme:secur32:get_mac_algid unknown algorithm 200, cipher 23

Resurslar:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment