100 , maybeMap |
100 , maybeMap |
101 , [eml ["etheme ", head $ prms Map.! "THEME"]] |
101 , [eml ["etheme ", head $ prms Map.! "THEME"]] |
102 , [eml ["eseed ", mParams Map.! "SEED"]] |
102 , [eml ["eseed ", mParams Map.! "SEED"]] |
103 , [eml ["e$gmflags ", showB gameFlags]] |
103 , [eml ["e$gmflags ", showB gameFlags]] |
104 , schemeFlags |
104 , schemeFlags |
|
105 , schemeAdditional |
105 , [eml ["e$template_filter ", mParams Map.! "TEMPLATE"]] |
106 , [eml ["e$template_filter ", mParams Map.! "TEMPLATE"]] |
106 , [eml ["e$mapgen ", mapgen]] |
107 , [eml ["e$mapgen ", mapgen]] |
107 , mapgenSpecific |
108 , mapgenSpecific |
108 , concatMap teamSetup ti |
109 , concatMap teamSetup ti |
109 , msgs |
110 , msgs |
113 keys1, keys2 :: Set.Set B.ByteString |
114 keys1, keys2 :: Set.Set B.ByteString |
114 keys1 = Set.fromList ["MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"] |
115 keys1 = Set.fromList ["MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"] |
115 keys2 = Set.fromList ["AMMO", "SCHEME", "SCRIPT", "THEME"] |
116 keys2 = Set.fromList ["AMMO", "SCHEME", "SCRIPT", "THEME"] |
116 sane = Set.null (keys1 Set.\\ Map.keysSet mParams) |
117 sane = Set.null (keys1 Set.\\ Map.keysSet mParams) |
117 && Set.null (keys2 Set.\\ Map.keysSet prms) |
118 && Set.null (keys2 Set.\\ Map.keysSet prms) |
118 && (not . null . drop 27 $ scheme) |
119 && (not . null . drop 40 $ scheme) |
119 && (not . null . tail $ prms Map.! "AMMO") |
120 && (not . null . tail $ prms Map.! "AMMO") |
120 mapGenTypes = ["+rnd+", "+maze+", "+drawn+"] |
121 mapGenTypes = ["+rnd+", "+maze+", "+drawn+"] |
121 maybeScript = let s = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]] |
122 maybeScript = let s = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]] |
122 maybeMap = let m = mParams Map.! "MAP" in if m `elem` mapGenTypes then [] else [eml ["emap ", m]] |
123 maybeMap = let m = mParams Map.! "MAP" in if m `elem` mapGenTypes then [] else [eml ["emap ", m]] |
123 scheme = tail $ prms Map.! "SCHEME" |
124 scheme = tail $ prms Map.! "SCHEME" |
129 gameFlags :: Word32 |
130 gameFlags :: Word32 |
130 gameFlags = foldl (\r (b, f) -> if b == "false" then r else r .|. f) 0 $ zip scheme gameFlagConsts |
131 gameFlags = foldl (\r (b, f) -> if b == "false" then r else r .|. f) 0 $ zip scheme gameFlagConsts |
131 schemeFlags = map (\(v, (n, m)) -> eml [n, " ", showB $ (readInt_ v) * m]) |
132 schemeFlags = map (\(v, (n, m)) -> eml [n, " ", showB $ (readInt_ v) * m]) |
132 $ filter (\(_, (n, _)) -> not $ B.null n) |
133 $ filter (\(_, (n, _)) -> not $ B.null n) |
133 $ zip (drop (length gameFlagConsts) scheme) schemeParams |
134 $ zip (drop (length gameFlagConsts) scheme) schemeParams |
|
135 schemeAdditional = let scriptParam = B.tail $ scheme !! 41 in [eml ["e$scriptparam ", scriptParam] | not $ B.null scriptParam] |
134 ammoStr :: B.ByteString |
136 ammoStr :: B.ByteString |
135 ammoStr = head . tail $ prms Map.! "AMMO" |
137 ammoStr = head . tail $ prms Map.! "AMMO" |
136 ammo = let l = B.length ammoStr `div` 4; ((a, b), (c, d)) = (B.splitAt l . fst &&& B.splitAt l . snd) . B.splitAt (l * 2) $ ammoStr in |
138 ammo = let l = B.length ammoStr `div` 4; ((a, b), (c, d)) = (B.splitAt l . fst &&& B.splitAt l . snd) . B.splitAt (l * 2) $ ammoStr in |
137 (map (\(x, y) -> eml [x, " ", y]) $ zip ["eammloadt", "eammprob", "eammdelay", "eammreinf"] [a, b, c, d]) |
139 (map (\(x, y) -> eml [x, " ", y]) $ zip ["eammloadt", "eammprob", "eammdelay", "eammreinf"] [a, b, c, d]) |
138 ++ [em "eammstore" | scheme !! 14 == "true" || scheme !! 20 == "false"] |
140 ++ [em "eammstore" | scheme !! 14 == "true" || scheme !! 20 == "false"] |