Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions sc2reader/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,27 @@


GAME_SPEED_FACTOR = {
'Slower': 0.6,
'Slow': 0.8,
'Normal': 1.0,
'Fast': 1.2,
'Faster': 1.4
'WoL': {
'Slower': 0.6,
'Slow': 0.8,
'Normal': 1.0,
'Fast': 1.2,
'Faster': 1.4
},
'HotS': {
'Slower': 0.6,
'Slow': 0.8,
'Normal': 1.0,
'Fast': 1.2,
'Faster': 1.4
},
'LotV': {
'Slower': 0.2,
'Slow': 0.4,
'Normal': 0.6,
'Fast': 0.8,
'Faster': 1.0
},
}

GATEWAY_CODES = {
Expand Down
4 changes: 2 additions & 2 deletions sc2reader/engine/plugins/creeptracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
from __future__ import absolute_import, print_function, unicode_literals, division

from sets import Set
from Image import open as PIL_open
from Image import ANTIALIAS
from PIL.Image import open as PIL_open
from PIL.Image import ANTIALIAS
from StringIO import StringIO
from collections import defaultdict
from itertools import tee
Expand Down
29 changes: 16 additions & 13 deletions sc2reader/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,8 +252,11 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en
self.build = self.versions[4]
self.base_build = self.versions[5]
self.release_string = "{0}.{1}.{2}.{3}".format(*self.versions[1:5])
self.game_length = utils.Length(seconds=self.frames/16)
self.length = self.real_length = utils.Length(seconds=int(self.frames/self.game_fps))
fps = self.game_fps
if (34784 <= self.build): # lotv replay, adjust time
fps = self.game_fps * 1.4

self.length = self.game_length = self.real_length = utils.Length(seconds=int(self.frames/fps))

# Load basic details if requested
if load_level >= 1:
Expand Down Expand Up @@ -362,7 +365,7 @@ def load_details(self):
self.time_zone = (details['utc_adjustment']-details['file_time'])/(10**7*60*60)

self.game_length = self.length
self.real_length = utils.Length(seconds=int(self.length.seconds/GAME_SPEED_FACTOR[self.speed]))
self.real_length = utils.Length(seconds=int(self.length.seconds/GAME_SPEED_FACTOR[self.expansion][self.speed]))
self.start_time = datetime.utcfromtimestamp(self.unix_timestamp-self.real_length.seconds)
self.date = self.end_time # backwards compatibility

Expand Down Expand Up @@ -772,26 +775,26 @@ def __init__(self, summary_file, filename=None, lang='enUS', **options):
while not buffer.done():
self.parts.append(buffer.read_struct())

self.load_translations()
dependencies = [sheet[1] for sheet in self.lang_sheets['enUS']]
if 'Swarm (Mod)' in dependencies:
self.expansion = 'HotS'
elif 'Liberty (Mod)' in dependencies:
self.expansion = 'WoL'
else:
self.expansion = ''

self.end_time = datetime.utcfromtimestamp(self.parts[0][8])
self.game_speed = LOBBY_PROPERTIES[0xBB8][1][self.parts[0][0][1].decode('utf8')]
self.game_length = utils.Length(seconds=self.parts[0][7])
self.real_length = utils.Length(seconds=int(self.parts[0][7]/GAME_SPEED_FACTOR[self.game_speed]))
self.real_length = utils.Length(seconds=int(self.parts[0][7]/GAME_SPEED_FACTOR[self.expansion][self.game_speed]))
self.start_time = datetime.utcfromtimestamp(self.parts[0][8] - self.real_length.seconds)

self.load_translations()
self.load_map_info()
self.load_settings()
self.load_player_stats()
self.load_players()

dependencies = [sheet[1] for sheet in self.lang_sheets['enUS']]
if 'Swarm (Mod)' in dependencies:
self.expansion = 'HotS'
elif 'Liberty (Mod)' in dependencies:
self.expansion = 'WoL'
else:
self.expansion = ''

self.game_type = self.settings['Teams'].replace(" ", "")
self.real_type = utils.get_real_type(self.teams)

Expand Down
5 changes: 5 additions & 0 deletions test_replays/test_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,11 @@ def test_32(self):
replay = sc2reader.load_replay("test_replays/3.2.0/1.SC2Replay")
self.assertTrue(replay is not None)

def test_lotv_time(self):
replay = sc2reader.load_replay("test_replays/lotv/lotv1.SC2Replay")
self.assertEqual(replay.length.seconds, 1002)
self.assertEqual(replay.real_length.seconds, 1002)


class TestGameEngine(unittest.TestCase):
class TestEvent(object):
Expand Down