98 #if defined(OFFICIAL_SERVER) |
98 #if defined(OFFICIAL_SERVER) |
99 replayToDemo :: [TeamInfo] |
99 replayToDemo :: [TeamInfo] |
100 -> Map.Map B.ByteString B.ByteString |
100 -> Map.Map B.ByteString B.ByteString |
101 -> Map.Map B.ByteString [B.ByteString] |
101 -> Map.Map B.ByteString [B.ByteString] |
102 -> [B.ByteString] |
102 -> [B.ByteString] |
103 -> ([B.ByteString], [B.ByteString]) |
103 -> (Maybe GameDetails, [B.ByteString]) |
104 replayToDemo ti mParams prms msgs = if not sane then ([], []) else ([scriptName], concat [ |
104 replayToDemo ti mParams prms msgs = if not sane then (Nothing, []) else (Just $ GameDetails scriptName infRopes vamp infattacks, concat [ |
105 [em "TD"] |
105 [em "TD"] |
106 , maybeScript |
106 , maybeScript |
107 , maybeMap |
107 , maybeMap |
108 , [eml ["etheme ", head $ prms Map.! "THEME"]] |
108 , [eml ["etheme ", head $ prms Map.! "THEME"]] |
109 , [eml ["eseed ", mParams Map.! "SEED"]] |
109 , [eml ["eseed ", mParams Map.! "SEED"]] |
123 keys1 = Set.fromList ["FEATURE_SIZE", "MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"] |
123 keys1 = Set.fromList ["FEATURE_SIZE", "MAP", "MAPGEN", "MAZE_SIZE", "SEED", "TEMPLATE"] |
124 keys2 = Set.fromList ["AMMO", "SCHEME", "SCRIPT", "THEME"] |
124 keys2 = Set.fromList ["AMMO", "SCHEME", "SCRIPT", "THEME"] |
125 sane = Set.null (keys1 Set.\\ Map.keysSet mParams) |
125 sane = Set.null (keys1 Set.\\ Map.keysSet mParams) |
126 && Set.null (keys2 Set.\\ Map.keysSet prms) |
126 && Set.null (keys2 Set.\\ Map.keysSet prms) |
127 && (not . null . drop 41 $ scheme) |
127 && (not . null . drop 41 $ scheme) |
128 && (not . null . tail $ prms Map.! "AMMO") |
128 && (not . null . drop 8 $ prms Map.! "AMMO") |
129 mapGenTypes = ["+rnd+", "+maze+", "+drawn+", "+perlin+"] |
129 mapGenTypes = ["+rnd+", "+maze+", "+drawn+", "+perlin+"] |
130 scriptName = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms |
130 scriptName = head . fromMaybe ["Normal"] $ Map.lookup "SCRIPT" prms |
131 maybeScript = let s = scriptName in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]] |
131 maybeScript = let s = scriptName in if s == "Normal" then [] else [eml ["escript Scripts/Multiplayer/", s, ".lua"]] |
132 maybeMap = let m = mParams Map.! "MAP" in if m `elem` mapGenTypes then [] else [eml ["emap ", m]] |
132 maybeMap = let m = mParams Map.! "MAP" in if m `elem` mapGenTypes then [] else [eml ["emap ", m]] |
133 scheme = tail $ prms Map.! "SCHEME" |
133 scheme = tail $ prms Map.! "SCHEME" |
160 eml ["eaddhh ", showB $ difficulty t, " ", initHealth, " ", hname] |
160 eml ["eaddhh ", showB $ difficulty t, " ", initHealth, " ", hname] |
161 , eml ["ehat ", hhat] |
161 , eml ["ehat ", hhat] |
162 ]) |
162 ]) |
163 $ hedgehogs t |
163 $ hedgehogs t |
164 ) |
164 ) |
|
165 infRopes = ammoStr `B.index` 7 == '9' |
|
166 vamp = gameFlags .&. 0x00000200 /= 0 |
|
167 infattacks = gameFlags .&. 0x00100000 /= 0 |
165 |
168 |
166 drawnMapData :: B.ByteString -> [B.ByteString] |
169 drawnMapData :: B.ByteString -> [B.ByteString] |
167 drawnMapData = |
170 drawnMapData = |
168 L.map (\m -> eml ["edraw ", BW.pack m]) |
171 L.map (\m -> eml ["edraw ", BW.pack m]) |
169 . L.unfoldr by200 |
172 . L.unfoldr by200 |