Advertisement
physics1114

Untitled

Apr 20th, 2016
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.65 KB | None | 0 0
  1. package game.entry
  2. {
  3. import flash.utils.Timer;
  4. import flash.desktop.NativeApplication;
  5. import flash.display.NativeWindow;
  6. import lib.engine.sound.fmod.FmodSoundDriver;
  7. import flash.events.InvokeEvent;
  8. import engine.core.util.AppInfo;
  9. import game.view.GameWrapper;
  10. import engine.core.util.CloudSave;
  11. import engine.core.util.CloudSaveDefault;
  12. import engine.core.util.CloudSaveSynchronizer;
  13. import game.saga.GameSaveSynchronizer;
  14. import flash.filesystem.File;
  15. import lib.engine.resource.air.ZipFileResourceScheme;
  16. import lib.engine.resource.air.FallbackVideoFinder;
  17. import engine.core.util.StringUtil;
  18. import engine.resource.loader.SagaURLLoader;
  19. import engine.resource.ResourceManager;
  20. import engine.math.Hash;
  21. import engine.core.logging.ILogger;
  22. import flash.system.Capabilities;
  23. import engine.core.analytic.LocMon;
  24. import engine.core.analytic.Ga;
  25. import flash.events.Event;
  26. import flash.events.TimerEvent;
  27. import flash.utils.getTimer;
  28. import com.adobe.crypto.MD5;
  29. import flash.utils.ByteArray;
  30. import flash.filesystem.FileStream;
  31. import flash.filesystem.FileMode;
  32. import engine.gui.core.GuiApplication;
  33. import lib.engine.util.air.AirAppInfo;
  34. import lib.engine.util.air.NativeText;
  35. import game.view.GameDevSocket;
  36. import game.session.states.VideoState;
  37. import flash.display.StageQuality;
  38.  
  39. public class GameEntryDesktopAir extends GameEntryDesktop
  40. {
  41.  
  42. private var invoked:Boolean;
  43.  
  44. private var readyToSetup:Boolean;
  45.  
  46. private var exitTimer:Timer;
  47.  
  48. private var entryHelper:game.entry.IEntryHelperDesktop;
  49.  
  50. public function GameEntryDesktopAir(param1:GuiApplication)
  51. {
  52. this.exitTimer = new Timer(500,1);
  53. super(param1,new AirAppInfo(param1,"2.28.66","2016-04-17_21-54-51","dev",0),FmodSoundDriver,File.userDirectory.url,NativeText,GameDevSocket);
  54. VideoState.USE_1080_MP4 = true;
  55. param1.stage.quality = StageQuality.BEST;
  56. param1.stage.color = 0;
  57. }
  58.  
  59. public function setEntryHelper(param1:game.entry.IEntryHelperDesktop) : void
  60. {
  61. this.entryHelper = param1;
  62. if(param1)
  63. {
  64. param1.init(this);
  65. }
  66. }
  67.  
  68. override public function set windowWidth(param1:int) : void
  69. {
  70. var _loc2_:NativeWindow = NativeApplication.nativeApplication.activeWindow;
  71. if(!_loc2_)
  72. {
  73. return;
  74. }
  75. _loc2_.x = Math.max(0,_loc2_.x - (param1 - _loc2_.width));
  76. _loc2_.width = param1;
  77. }
  78.  
  79. override public function set windowHeight(param1:int) : void
  80. {
  81. var _loc2_:NativeWindow = NativeApplication.nativeApplication.activeWindow;
  82. if(!_loc2_)
  83. {
  84. return;
  85. }
  86. _loc2_.y = Math.max(0,_loc2_.y - (param1 - _loc2_.height));
  87. _loc2_.height = param1;
  88. }
  89.  
  90. override public function set fmodDebug(param1:Boolean) : void
  91. {
  92. FmodSoundDriver._debug = param1;
  93. }
  94.  
  95. public function invokeHandler(param1:InvokeEvent) : void
  96. {
  97. logInfo("INVOKE reason=[" + param1.reason + "] arguments=[" + param1.arguments + "]");
  98. if(this.invoked)
  99. {
  100. return;
  101. }
  102. if(AppInfo.terminating)
  103. {
  104. return;
  105. }
  106. this.invoked = true;
  107. logInfo("INVOKE approot=[" + appInfo.nativeAppUrlRoot + "]");
  108. var _loc3_:String = param1.currentDirectory.nativePath;
  109. logInfo("INVOKE CWD=[" + _loc3_ + "]");
  110. invokeArguments = param1.arguments;
  111. this.readyToSetup = true;
  112. var _loc4_:Boolean = doSetup();
  113. if(_loc4_)
  114. {
  115. this.startGa();
  116. this.verifyChecksums();
  117. if(AppInfo.terminating)
  118. {
  119. return;
  120. }
  121. logInfo("Starting game");
  122. this.startGame();
  123. }
  124. }
  125.  
  126. override protected function initWrapper(param1:int, param2:Array) : GameWrapper
  127. {
  128. var _loc3_:* = wrappers.length == param1;
  129. var _loc4_:GameWrapper = super.initWrapper(param1,param2);
  130. if(Boolean(_loc3_) && Boolean(this.entryHelper))
  131. {
  132. this.entryHelper.initWrapper(_loc4_);
  133. }
  134. return _loc4_;
  135. }
  136.  
  137. override protected function handleDoSetup() : Boolean
  138. {
  139. var _loc1_:Boolean = super.handleDoSetup();
  140. if(_loc1_)
  141. {
  142. if(this.entryHelper)
  143. {
  144. this.entryHelper.setup();
  145. }
  146. }
  147. return _loc1_;
  148. }
  149.  
  150. override protected function startGame() : void
  151. {
  152. var _loc1_:CloudSave = null;
  153. var _loc3_:GameWrapper = null;
  154. if(this.entryHelper)
  155. {
  156. _loc1_ = this.entryHelper.initCloudSave(wrappers[0].config,appInfo);
  157. betaBranch = this.entryHelper.betaBranch;
  158. userId = this.entryHelper.userId;
  159. }
  160. else
  161. {
  162. _loc1_ = new CloudSaveDefault("none",null);
  163. }
  164. var _loc2_:CloudSaveSynchronizer = new CloudSaveSynchronizer(appInfo.logger);
  165. if(_loc2_)
  166. {
  167. _loc2_.registerCloudSave(_loc1_);
  168. GameSaveSynchronizer.instance.init(wrappers[0].config,_loc2_);
  169. }
  170. this.setupZipAssets();
  171. super.startGame();
  172. var _loc4_:int = 0;
  173. while(_loc4_ < wrappers.length)
  174. {
  175. _loc3_ = wrappers[_loc4_];
  176. if(this.entryHelper)
  177. {
  178. this.entryHelper.startWrapper(_loc3_,_loc4_);
  179. }
  180. _loc4_++;
  181. }
  182. }
  183.  
  184. private function setupZipAssets() : void
  185. {
  186. var _loc1_:File = null;
  187. var _loc2_:String = null;
  188. var _loc3_:ZipFileResourceScheme = null;
  189. var _loc4_:FallbackVideoFinder = null;
  190. if(StringUtil.endsWith(assetsUrl,".zip"))
  191. {
  192. _loc1_ = new File(assetsUrl);
  193. _loc2_ = StringUtil.getFilename(assetsUrl);
  194. appInfo.logger.info("Zip file " + _loc1_.nativePath);
  195. _loc3_ = new ZipFileResourceScheme(appInfo.logger);
  196. _loc3_.registerZipFile(assetsUrl,_loc1_);
  197. SagaURLLoader.registerSchema("zip",_loc3_);
  198. _loc3_.setupForVideo();
  199. assetsUrl = "zip:/" + _loc2_;
  200. _loc4_ = new FallbackVideoFinder(_loc3_,assetsUrl);
  201. ResourceManager.videoURLTransform = _loc4_;
  202. }
  203. }
  204.  
  205. override protected function startGa() : void
  206. {
  207. var _loc9_:* = null;
  208. var _loc10_:Boolean = false;
  209. var _loc1_:String = Hash.DJBHash(appInfo.macAddress).toString(16);
  210. var _loc2_:String = appInfo.buildVersion;
  211. var _loc3_:ILogger = appInfo.logger;
  212. var _loc4_:String = appInfo.ini["google_uid"];
  213. var _loc5_:Vector.<String> = null;
  214. if(_loc4_)
  215. {
  216. _loc9_ = "tbs/" + sku;
  217. if(locally)
  218. {
  219. _loc9_ = _loc9_ + "/locally";
  220. }
  221. else if(Boolean(this.entryHelper) && (Boolean(_loc5_ = this.entryHelper.getAnalyticsInfo())))
  222. {
  223. _loc9_ = _loc9_ + _loc5_[0];
  224. _loc1_ = Hash.DJBHash(_loc5_[1]).toString(16);
  225. }
  226. else
  227. {
  228. _loc9_ = _loc9_ + "/unknown";
  229. _loc10_ = true;
  230. }
  231. if(Boolean(Capabilities.isDebugger) || Boolean(developer) || Boolean(sagaHappening))
  232. {
  233. _loc9_ = _loc9_ + "/developer";
  234. }
  235. LocMon.init(_loc3_,_loc2_,_loc1_);
  236. Ga.init(appInfo,_loc3_,_loc4_,_loc9_,_loc2_,_loc1_);
  237. if(_loc10_)
  238. {
  239. this.startGa_reportUnknown();
  240. }
  241. }
  242. var _loc6_:int = Capabilities.screenResolutionX;
  243. var _loc7_:int = Capabilities.screenResolutionY;
  244. var _loc8_:String = Capabilities.language;
  245. Ga.trackSessionStart(_loc6_,_loc7_,_loc8_);
  246. }
  247.  
  248. private function startGa_reportUnknown() : void
  249. {
  250. var _loc3_:String = null;
  251. var _loc1_:uint = Hash.DJBHash(appInfo.macAddress);
  252. Ga.trackEvent("unknown","user",StringUtil.getBasename(File.userDirectory.url),_loc1_);
  253. var _loc2_:int = 0;
  254. while(_loc2_ < invokeArguments.length)
  255. {
  256. _loc3_ = invokeArguments[_loc2_];
  257. Ga.trackEvent("unknown","invoke_arg",_loc3_,_loc1_);
  258. _loc2_++;
  259. }
  260. Ga.trackEvent("unknown","os",Capabilities.os,_loc1_);
  261. Ga.trackEvent("unknown","mac_address",appInfo.macAddress,_loc1_);
  262. Ga.trackEvent("unknown","build",appInfo.buildVersion,_loc1_);
  263. Ga.trackEvent("unknown","appdir",appInfo.applicationDirectoryUrl_native,_loc1_);
  264. }
  265.  
  266. public function closingHandler(param1:Event) : void
  267. {
  268. logInfo("GameEntryDesktopAir.closingHandler");
  269. }
  270.  
  271. public function exitingHandler(param1:Event) : void
  272. {
  273. logInfo("GameMainAir.exitingHandler autoExit=" + NativeApplication.nativeApplication.autoExit + ", event=" + param1);
  274. AppInfo.terminating = true;
  275. handleExit();
  276. param1.preventDefault();
  277. this.exitTimer.addEventListener(TimerEvent.TIMER_COMPLETE,this.exitTimerCompleteHandler);
  278. this.exitTimer.start();
  279. }
  280.  
  281. private function exitTimerCompleteHandler(param1:TimerEvent) : void
  282. {
  283. logInfo("exitTimerCompleteHandler");
  284. NativeApplication.nativeApplication.exit(appInfo.exitCode);
  285. }
  286.  
  287. override protected function processArgument(param1:String) : Boolean
  288. {
  289. if(this.entryHelper)
  290. {
  291. if(this.entryHelper.processArgument(param1))
  292. {
  293. return true;
  294. }
  295. }
  296. return super.processArgument(param1);
  297. }
  298.  
  299. private function verifyChecksums() : void
  300. {
  301. var start:int = 0;
  302. var steamworksAneContext_library_swf:String = null;
  303. var steamworksAneContext_catalog_xml:String = null;
  304. var end:int = 0;
  305. var delta:int = 0;
  306. var gamesave_bin_txt:String = null;
  307. var swf_md5:String = null;
  308. var worldserpent:String = null;
  309. var input_1:String = null;
  310. var input_md5_1:String = null;
  311. var os:String = Capabilities.os;
  312. if(!os || os.indexOf("Windows") != 0)
  313. {
  314. return;
  315. }
  316. var rp:String = File.applicationDirectory.nativePath;
  317. if(!rp)
  318. {
  319. throw new ArgumentError("no nativepath");
  320. }
  321. rp = rp.replace(/\\/g,"/");
  322. if(!StringUtil.endsWith(rp,"/"))
  323. {
  324. rp = rp + "/";
  325. }
  326. if(Capabilities.isDebugger)
  327. {
  328. rp = "C:/Program Files (x86)/Steam/SteamApps/common/tbs2/win32/";
  329. }
  330. try
  331. {
  332. start = getTimer();
  333. gamesave_bin_txt = this.readChecksumFile("Front-Buffer subsystem M",rp + "gamesave.bin");
  334. gamesave_bin_txt = gamesave_bin_txt.replace("\n","");
  335. gamesave_bin_txt = gamesave_bin_txt.replace("\r","");
  336. swf_md5 = this.verifyChecksum("Front-Buffer subsystem W",rp + "app.game-" + appInfo.sku + ".air.swf",null);
  337. logInfo("Front-Buffer " + (getTimer() - start));
  338. worldserpent = "zabbawabba";
  339. input_1 = swf_md5 + "\r\n" + worldserpent;
  340. input_md5_1 = MD5.hash(input_1);
  341. logInfo("INVOKE entry recursion timestamp [" + swf_md5 + "]");
  342. if(input_md5_1 != gamesave_bin_txt)
  343. {
  344. throw new ArgumentError("Bitswizzle I/O/D error on evaluation of quest parameters");
  345. }
  346. this.verifyChecksum("Back-Buffer subsystem Z",rp + "steam_appid.txt","0");
  347. this.verifyChecksum("Back-Buffer subsystem Y",rp + "tbs_config.ini","4b1702756792ee383b9a3359ac9de7b3");
  348. this.verifyChecksum("Back-Buffer subsystem A",rp + "AudioFX.dll","5e05c532a87ae596567cd3731ca25c15");
  349. steamworksAneContext_library_swf = "150278a3f1fcdbcc3855eac8e4d32ea0";
  350. steamworksAneContext_catalog_xml = "150278a3f1fcdbcc3855eac8e4d32ea0";
  351. steamworksAneContext_library_swf = "efca2ff3d3d91830e5910ade6037ae7c";
  352. steamworksAneContext_catalog_xml = "55572fa131ad48c362aafb9ce72e9d6a";
  353. this.verifyChecksum("Back-Buffer subsystem G",rp + "META-INF/AIR/extensions/air.steamworks.ane.SteamworksAneContext/library.swf",steamworksAneContext_library_swf);
  354. this.verifyChecksum("Back-Buffer subsystem J",rp + "META-INF/AIR/extensions/air.steamworks.ane.SteamworksAneContext/META-INF/ANE/Windows-x86/library.swf",steamworksAneContext_library_swf);
  355. this.verifyChecksum("Back-Buffer subsystem H",rp + "META-INF/AIR/extensions/air.steamworks.ane.SteamworksAneContext/catalog.xml",steamworksAneContext_catalog_xml);
  356. this.verifyChecksum("Back-Buffer subsystem I",rp + "META-INF/AIR/extensions/air.steamworks.ane.SteamworksAneContext/META-INF/ANE/extension.xml","38786f21049f9a0741ac67646f7ff351");
  357. this.verifyChecksum("Back-Buffer subsystem K",rp + "META-INF/AIR/extensions/air.steamworks.ane.SteamworksAneContext/META-INF/ANE/Windows-x86/NativeSteamworks.dll","c10cf1fa21773aac3458b4ba6392093d");
  358. end = getTimer();
  359. delta = end - start;
  360. logInfo("Game saga unpack " + delta + " ms");
  361. return;
  362. }
  363. catch(e:Error)
  364. {
  365. appInfo.terminateError("Game saga unpacking encountered termination: " + e);
  366. return;
  367. }
  368. }
  369.  
  370. private function readChecksumFile(param1:String, param2:String) : String
  371. {
  372. var _loc3_:File = new File(param2);
  373. if(!_loc3_.exists)
  374. {
  375. throw new ArgumentError("Bitswizzle I/O/M error on " + param1);
  376. }
  377. var _loc4_:ByteArray = new ByteArray();
  378. var _loc5_:FileStream = new FileStream();
  379. _loc5_.open(_loc3_,FileMode.READ);
  380. var _loc6_:String = _loc5_.readUTFBytes(_loc5_.bytesAvailable);
  381. _loc5_.close();
  382. return _loc6_;
  383. }
  384.  
  385. private function verifyChecksum(param1:String, param2:String, param3:String, param4:Boolean = false) : String
  386. {
  387. logDebug(":::: " + param2);
  388. var _loc5_:* = param3 == "0";
  389. var _loc6_:File = new File(param2);
  390. if(!_loc6_.exists)
  391. {
  392. if(_loc5_)
  393. {
  394. return null;
  395. }
  396. if(!param4)
  397. {
  398. throw new ArgumentError("Bitswizzle I/O error on " + param1);
  399. }
  400. return null;
  401. }
  402. if(_loc5_)
  403. {
  404. throw new ArgumentError("Bitswizzle I/O error on " + param1);
  405. }
  406. var _loc7_:ByteArray = new ByteArray();
  407. var _loc8_:FileStream = new FileStream();
  408. _loc8_.open(_loc6_,FileMode.READ);
  409. _loc8_.readBytes(_loc7_,0,_loc8_.bytesAvailable);
  410. _loc8_.close();
  411. _loc8_ = null;
  412. var _loc9_:String = MD5.hashBytes(_loc7_);
  413. if(param3)
  414. {
  415. if(_loc9_ != param3)
  416. {
  417. throw new ArgumentError("Bitswizzle overflow error on " + param1 + " [" + _loc9_ + "]");
  418. }
  419. }
  420. return _loc9_;
  421. }
  422. }
  423. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement