about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games/zod/default.nix
blob: f7d7a5612d82286b3683c3703f3d651db6a1150c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
{ lib
, config
, fetchzip
, stdenv
, SDL
, SDL_image
, SDL_ttf
, SDL_mixer
, libmysqlclient
, wxGTK
, symlinkJoin
, runCommandLocal
, makeWrapper
, coreutils
, scalingFactor ? 2 # this is to resize the fixed-size zod_launcher window
, substituteAll
}:
let
  version = "2011-09-06";
  name = "zod-engine-${version}";
  src = fetchzip {
    url = "mirror://sourceforge/zod/linux_releases/zod_linux-${version}.tar.gz";
    sha256 = "017v96aflrv07g8j8zk9mq8f8rqxl5228rjff5blq8dxpsv1sx7h";
  };
  nativeBuildInputs = [
    makeWrapper
  ];
  buildInputs = [
    SDL
    SDL_image
    SDL_ttf
    SDL_mixer
    libmysqlclient
    wxGTK
    coreutils
  ];
  hardeningDisable = [ "format" ];
  NIX_LDFLAGS = "-L${libmysqlclient}/lib/mysql";
  zod_engine = stdenv.mkDerivation {
    inherit name version src nativeBuildInputs buildInputs hardeningDisable NIX_LDFLAGS;
    pname = "${name}-engine";
    enableParallelBuilding = true;
    preBuild = "cd zod_src";
    installPhase = ''
      mkdir -p $out/bin
      install -m755 zod $out/bin/
      wrapProgram $out/bin/zod --run "cd ${zod_assets}/usr/lib/commander-zod"
    '';
  };
  zod_map_editor = stdenv.mkDerivation {
    inherit name version src nativeBuildInputs buildInputs hardeningDisable NIX_LDFLAGS;
    pname = "${name}-map_editor";
    enableParallelBuilding = true;
    preBuild = "cd zod_src";
    makeFlags = [ "map_editor" ];
    installPhase = ''
      mkdir -p $out/bin
      install -m755 zod_map_editor $out/bin
      wrapProgram $out/bin/zod_map_editor --run "cd ${zod_assets}/usr/lib/commander-zod"
    '';
  };
  zod_launcher = stdenv.mkDerivation {
      inherit name version src nativeBuildInputs buildInputs zod_engine zod_map_editor;
      pname = "${name}-launcher";
      # This is necessary because the zod_launcher has terrible fixed-width window
      # the Idea is to apply the scalingFactor to all positions and sizes and I tested 1,2,3 and 4
      # 2,3,4 look acceptable on my 4k monitor and 1 is unreadable.
      # also the ./ in the run command is removed to have easier time starting the game
      patches = [
        (substituteAll {
          inherit scalingFactor;
          src=./0002-add-scaling-factor-to-source.patch;
        })
      ];
      postPatch = ''
        substituteInPlace zod_launcher_src/zod_launcherFrm.cpp \
          --replace 'message = wxT("./zod");' 'message = wxT("zod");'
      '';
      preBuild = "cd zod_launcher_src";
      installPhase = ''
        mkdir -p $out/bin
        install -m755 zod_launcher $out/bin
      '';
  };
  zod_assets = runCommandLocal "${name}-assets" {} ''
    mkdir -p $out/usr/lib/commander-zod{,blank_maps}
    cp -r ${src}/assets $out/usr/lib/commander-zod/assets
    for i in ${src}/*.map ${src}/*.txt; do
      install -m644 $i $out/usr/lib/commander-zod
    done
    for map in ${src}/blank_maps/*; do
      install -m644 $map $out/usr/lib/commander-zod/blank_maps
    done
  '';
in
  symlinkJoin {
    inherit name;
    paths = [
      zod_engine
      zod_launcher
      zod_map_editor
      zod_assets
    ];
    meta = with lib; {
      description = "Multiplayer remake of ZED";
      homepage = "http://zod.sourceforge.net/";
      maintainers = with maintainers; [ zeri ];
      license = licenses.gpl3Plus; /* Says the website */
    };
  }