PageRenderTime 58ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/BattleScreen.hx

http://portable-monsters.googlecode.com/
Haxe | 1727 lines | 1512 code | 175 blank | 40 comment | 170 complexity | 6518fb643543131924a6ffe212a23c8f MD5 | raw file
  1. import flash.display.Sprite;
  2. import flash.display.Bitmap;
  3. import flash.display.BitmapData;
  4. import flash.events.Event;
  5. import flash.events.KeyboardEvent;
  6. import flash.events.MouseEvent;
  7. import flash.geom.Point;
  8. import flash.geom.Rectangle;
  9. import flash.text.TextField;
  10. import flash.text.TextFieldAutoSize;
  11. import flash.text.TextFormat;
  12. import flash.text.TextFormatAlign;
  13. import flash.utils.Timer;
  14. import flash.ui.Keyboard;
  15. import haxe.Timer;
  16. import Images;
  17. import AttackButton;
  18. import MonsterButton;
  19. import ItemButton;
  20. class BattleScreenEvent extends Event{
  21. public var Won:Bool;
  22. public function new(customEventString:String,inWon:Bool){
  23. Won = inWon;
  24. super(customEventString, true, false);
  25. }
  26. }
  27. class BattleScreen extends Sprite{
  28. private var myTimer:Timer;
  29. public var isRandomBattle:Bool;
  30. public var PlayerAvatar:Int;
  31. public var OpponentAvatar:Int;
  32. public var Trainer1:Trainer;
  33. public var Trainer2:Trainer;
  34. public var Monster1Health:Sprite;
  35. public var Monster2Health:Sprite;
  36. public var OpponentMonstersLeft:TextField;
  37. public var RandomMonster:Monster;
  38. public var State:String;
  39. public var BattleVSScreen:Sprite;
  40. public var BattleVSScreenTime:Int;
  41. public var BattleField:Sprite;
  42. public var AttackMenu:Sprite;
  43. public var AttackPage:Int;
  44. public var PrevAttackPage:Sprite;
  45. public var NextAttackPage:Sprite;
  46. public var MonsterMenu:Sprite;
  47. public var MonsterMenuTitle:TextField;
  48. public var ItemMenu:Sprite;
  49. public var ItemPage:Int;
  50. public var PrevItemPage:Sprite;
  51. public var NextItemPage:Sprite;
  52. public var currentItem:String;
  53. public var ItemState:String;
  54. public var ItemDisabledBackground:Sprite;
  55. public var ItemConfirmBackground:Sprite;
  56. public var ItemYes:Sprite;
  57. public var ItemNo:Sprite;
  58. public var ItemConfirm:TextField;
  59. public var WikiButton:Sprite;
  60. public var WikiScreen:Sprite;
  61. public var MonsterWiki:MnstrWikiMenu;
  62. public var RunAway:Sprite;
  63. public var RunAwayYes:Sprite;
  64. public var RunAwayNo:Sprite;
  65. public var RunAwayState:String;
  66. public var RunAwayPrompt:TextField;
  67. public var BattleFieldMenu:Sprite;
  68. public var BattleFieldFight:TextField;
  69. public var BattleFieldItem:TextField;
  70. public var BattleFieldSwitch:TextField;
  71. public var BattleFieldFlee:TextField;
  72. public var ActionLocation:Int;
  73. private var mKeyDown:Array<Bool>;
  74. private var _stage:Dynamic;
  75. private var _VSBitmapData:BitmapData;
  76. private var _VSBitmap:Bitmap;
  77. private var _VSMap:Array<Array<Int>>;
  78. private var _BattleBitmapData:BitmapData;
  79. private var _BattleBitmap:Bitmap;
  80. private var _BattleMap:Array<Array<Int>>;
  81. private static inline var MAX_TILE_SIZE:Int = 64;
  82. private var MAP_COLUMNS:Int;
  83. private var MAP_ROWS:Int;
  84. private var _tileSheetBitmapData:BattleSprites;
  85. private var FinishedScreen:Sprite;
  86. private var FinishedAvatar:Sprite;
  87. private var FinishedText:TextField;
  88. private var Continue:Sprite;
  89. public var Won:Bool;
  90. public function new(stage:Dynamic,inRandomMonster:Monster,inTrainer1:Trainer,inTrainer2:Trainer){
  91. super();
  92. Trainer1 = inTrainer1;
  93. Trainer2 = inTrainer2;
  94. Won = false;
  95. AttackPage = 1;
  96. ItemPage = 1;
  97. isRandomBattle = (inRandomMonster != null);
  98. if(isRandomBattle)
  99. {
  100. RandomMonster = inRandomMonster;
  101. RandomMonster.LevelUp();
  102. }
  103. flash.Lib.current.addChild(this);
  104. this._stage = stage;
  105. mKeyDown = [];
  106. MAP_COLUMNS = 5;
  107. MAP_ROWS = 5;
  108. _tileSheetBitmapData = new BattleSprites();
  109. setupVSMap();
  110. _VSBitmapData = new BitmapData(MAP_COLUMNS * MAX_TILE_SIZE,
  111. MAP_ROWS * MAX_TILE_SIZE, true, 0);
  112. _VSBitmap = new Bitmap(_VSBitmapData);
  113. buildMap(_VSMap,_VSBitmapData);
  114. _BattleMap = [
  115. [-1,-1,-1,-1,getOpponentMonster().getTileNumber(false)],
  116. [-1,-1,-1,-1,-1],
  117. [-1,-1,-1,-1,-1],
  118. [TrainerTileNumber(),-1,-1,-1,-1],
  119. [-1,-1,-1,-1,-1]
  120. ];
  121. _BattleBitmapData = new BitmapData(MAP_COLUMNS * MAX_TILE_SIZE,
  122. (MAP_ROWS-1) * MAX_TILE_SIZE, true, 0);
  123. _BattleBitmap = new Bitmap(_BattleBitmapData);
  124. buildMap(_BattleMap,_BattleBitmapData);
  125. // myTimer = new Timer(12);
  126. // myTimer.addEventListener("timer", OnEnter);
  127. // myTimer.start();
  128. BattleVSScreen = new Sprite();
  129. BattleVSScreen.graphics.beginFill(0xFFFFFF);
  130. BattleVSScreen.graphics.lineStyle(5);
  131. BattleVSScreen.graphics.drawRect(0,0,320,320);
  132. BattleVSScreen.x = 150;BattleVSScreen.y=75;
  133. BattleVSScreen.graphics.endFill();
  134. BattleVSScreen.addChild(_VSBitmap);
  135. BattleField = new Sprite();
  136. BattleField.graphics.beginFill(0xFFFFFF);
  137. BattleField.graphics.lineStyle(5);
  138. BattleField.graphics.drawRect(0,0,320,256);
  139. BattleField.graphics.endFill();
  140. BattleField.x = 150;BattleField.y = 139;
  141. BattleField.addChild(_BattleBitmap);
  142. BattleFieldMenu = new Sprite();
  143. BattleFieldMenu.graphics.beginFill(0xFFFFFF);
  144. BattleFieldMenu.graphics.lineStyle(2);
  145. BattleFieldMenu.graphics.drawRect(0,0,316,73);
  146. BattleFieldMenu.x = 2;BattleFieldMenu.y = 249;
  147. BattleFieldMenu.graphics.endFill();
  148. BattleFieldFight = new TextField();
  149. BattleFieldFight.htmlText = "<font size='20'>[ ]FIGHT</font>";
  150. BattleFieldFight.selectable = false;
  151. BattleFieldMenu.addChild(BattleFieldFight);
  152. BattleFieldItem = new TextField();
  153. BattleFieldItem.htmlText = "<font size='20'>[ ]ITEM</font>";
  154. BattleFieldItem.selectable = false;
  155. BattleFieldMenu.addChild(BattleFieldItem);
  156. BattleFieldItem.x = 150;
  157. BattleFieldSwitch = new TextField();
  158. BattleFieldSwitch.htmlText = "<font size='20'>[ ]SWITCH</font>";
  159. BattleFieldSwitch.selectable = false;
  160. BattleFieldMenu.addChild(BattleFieldSwitch);
  161. BattleFieldSwitch.y = 30;
  162. BattleFieldFlee = new TextField();
  163. BattleFieldFlee.htmlText = "<font size='20'>[ ]FLEE</font>";
  164. BattleFieldFlee.selectable = false;
  165. BattleFieldMenu.addChild(BattleFieldFlee);
  166. //BattleField.addChild(BattleFieldMenu);
  167. BattleFieldFlee.x = 150;
  168. BattleFieldFlee.y = 30;
  169. ActionLocation = 1;
  170. getActionText();
  171. addChild(BattleVSScreen);
  172. this.addEventListener(Event.ENTER_FRAME, OnEnter);
  173. _stage.addEventListener(KeyboardEvent.KEY_DOWN, OnKeyDown );
  174. _stage.addEventListener(KeyboardEvent.KEY_UP, OnKeyUp );
  175. PrevAttackPage = new Sprite();
  176. var PrevAttackPageText = new TextField();
  177. PrevAttackPageText.htmlText = "<font size='14'>Prev</font>";
  178. //
  179. this.addChild(PrevAttackPageText);
  180. PrevAttackPageText.width = 70;
  181. PrevAttackPageText.autoSize = TextFieldAutoSize.CENTER;
  182. PrevAttackPageText.selectable = false;
  183. PrevAttackPageText.mouseEnabled = false;
  184. PrevAttackPage.buttonMode = true;
  185. PrevAttackPage.addChild(PrevAttackPageText);
  186. PrevAttackPage.addEventListener(MouseEvent.CLICK, onPrevAttackPageClick);
  187. PrevAttackPage.graphics.beginFill(0xFFFFFF);
  188. PrevAttackPage.graphics.lineStyle(1);
  189. PrevAttackPage.graphics.drawRect(0,0,70,32);
  190. PrevAttackPage.graphics.endFill();
  191. PrevAttackPage.y = 512-32;
  192. NextAttackPage = new Sprite();
  193. var NextAttackPageText = new TextField();
  194. NextAttackPageText.htmlText = "<font size='14'>Next</font>";
  195. //
  196. this.addChild(NextAttackPageText);
  197. NextAttackPageText.width = 70;
  198. NextAttackPageText.autoSize = TextFieldAutoSize.CENTER;
  199. NextAttackPageText.selectable = false;
  200. NextAttackPageText.mouseEnabled = false;
  201. NextAttackPage.buttonMode = true;
  202. NextAttackPage.addChild(NextAttackPageText);
  203. NextAttackPage.addEventListener(MouseEvent.CLICK, onNextAttackPageClick);
  204. NextAttackPage.graphics.beginFill(0xFFFFFF);
  205. NextAttackPage.graphics.lineStyle(1);
  206. NextAttackPage.graphics.drawRect(0,0,70,32);
  207. NextAttackPage.graphics.endFill();
  208. NextAttackPage.y = 512-32;NextAttackPage.x = 72;
  209. PrevItemPage = new Sprite();
  210. var PrevItemPageText = new TextField();
  211. PrevItemPageText.htmlText = "<font size='14'>Prev</font>";
  212. //
  213. this.addChild(PrevItemPageText);
  214. PrevItemPageText.width = 70;
  215. PrevItemPageText.autoSize = TextFieldAutoSize.CENTER;
  216. PrevItemPageText.selectable = false;
  217. PrevItemPageText.mouseEnabled = false;
  218. PrevItemPage.buttonMode = true;
  219. PrevItemPage.addChild(PrevItemPageText);
  220. PrevItemPage.addEventListener(MouseEvent.CLICK, onPrevItemPageClick);
  221. PrevItemPage.graphics.beginFill(0xFFFFFF);
  222. PrevItemPage.graphics.lineStyle(1);
  223. PrevItemPage.graphics.drawRect(0,0,70,32);
  224. PrevItemPage.graphics.endFill();
  225. PrevItemPage.y = 512-32;
  226. NextItemPage = new Sprite();
  227. var NextItemPageText = new TextField();
  228. NextItemPageText.htmlText = "<font size='14'>Next</font>";
  229. //
  230. NextItemPage.addChild(NextItemPageText);
  231. NextItemPageText.width = 70;
  232. NextItemPageText.autoSize = TextFieldAutoSize.CENTER;
  233. NextItemPageText.selectable = false;
  234. NextItemPageText.mouseEnabled = false;
  235. NextItemPage.buttonMode = true;
  236. NextItemPage.addChild(NextItemPageText);
  237. NextItemPage.addEventListener(MouseEvent.CLICK, onNextItemPageClick);
  238. NextItemPage.graphics.beginFill(0xFFFFFF);
  239. NextItemPage.graphics.lineStyle(1);
  240. NextItemPage.graphics.drawRect(0,0,70,32);
  241. NextItemPage.graphics.endFill();
  242. NextItemPage.y = 512-32;NextItemPage.x = 72;
  243. RunAwayState = "";
  244. RunAway = new Sprite();
  245. RunAway.mouseChildren = true;
  246. var RunAwayText = new TextField();
  247. RunAwayText.autoSize = TextFieldAutoSize.CENTER;
  248. RunAwayText.width = 316;
  249. RunAwayText.selectable = false;
  250. RunAwayText.mouseEnabled = false;
  251. RunAway.addChild(RunAwayText);
  252. if(isRandomBattle)
  253. {
  254. RunAwayText.htmlText = "<font size='22'>Run Away!</font>";
  255. RunAway.addEventListener(MouseEvent.CLICK, onRunAwayClick);
  256. RunAway.buttonMode = true;
  257. RunAway.graphics.beginFill(0xFFFFFF);
  258. RunAway.graphics.lineStyle(1);
  259. RunAway.graphics.drawRect(0,0,316,115);
  260. RunAway.graphics.endFill();
  261. RunAway.x =152;RunAway.y = 512-115;
  262. }
  263. else
  264. {
  265. RunAwayText.htmlText = "<font size='22'>Can't Run Away</font>";
  266. RunAway.graphics.beginFill(0x8C8C8C);
  267. RunAway.graphics.lineStyle(1);
  268. RunAway.graphics.drawRect(0,0,316,115);
  269. RunAway.graphics.endFill();
  270. RunAway.x =152;RunAway.y = 512-115;
  271. }
  272. WikiScreen = new Sprite();
  273. WikiScreen.graphics.beginFill(0xFFFFFF);
  274. WikiScreen.graphics.lineStyle(1);
  275. WikiScreen.graphics.drawRect(0,0,640,512);
  276. WikiScreen.graphics.endFill();
  277. WikiScreen.x =0;WikiScreen.y = 0;
  278. WikiButton = new Sprite();
  279. WikiButton.mouseChildren = true;
  280. var WikiButtonText = new TextField();
  281. WikiButtonText.htmlText = "<font size='22'>Wiki</font>";
  282. WikiButtonText.autoSize = TextFieldAutoSize.CENTER;
  283. WikiButtonText.width = 20;
  284. WikiButtonText.selectable = false;
  285. WikiButtonText.mouseEnabled = false;
  286. WikiButton.addChild(WikiButtonText);
  287. WikiButton.addEventListener(MouseEvent.CLICK, onWikiButtonClick);
  288. WikiButton.buttonMode = true;
  289. WikiButton.graphics.beginFill(0xFFFFFF);
  290. WikiButton.graphics.lineStyle(1);
  291. WikiButton.graphics.drawRect(0,0,75,50);
  292. WikiButton.graphics.endFill();
  293. WikiButton.x =392;WikiButton.y = 512-50;
  294. MonsterWiki = new MnstrWikiMenu();
  295. MonsterWiki.addEventListener("Back",onBack);
  296. RunAwayPrompt = new TextField();
  297. RunAwayPrompt.htmlText = "<font size='14'>Are you sure?</font>";
  298. RunAwayPrompt.autoSize = TextFieldAutoSize.CENTER;
  299. RunAwayPrompt.width = 302;
  300. RunAwayPrompt.selectable = false;
  301. RunAwayPrompt.mouseEnabled = false;
  302. RunAwayPrompt.y = 35;
  303. //
  304. RunAwayYes = new Sprite();
  305. var RunAwayYesText = new TextField();
  306. RunAwayYesText.htmlText = "<font size='14'>Yes</font>";
  307. RunAwayYes.addChild(RunAwayYesText);
  308. RunAwayYesText.width = 70;
  309. RunAwayYesText.autoSize = TextFieldAutoSize.CENTER;
  310. RunAwayYesText.selectable = false;
  311. RunAwayYesText.mouseEnabled = false;
  312. RunAwayYes.buttonMode = true;
  313. RunAwayYes.addChild(RunAwayYesText);
  314. RunAwayYes.addEventListener(MouseEvent.CLICK, onRunAwayYesClick);
  315. RunAwayYes.graphics.beginFill(0xFFFFFF);
  316. RunAwayYes.graphics.lineStyle(1);
  317. RunAwayYes.graphics.drawRect(0,0,70,32);
  318. RunAwayYes.graphics.endFill();
  319. RunAwayYes.y = 70;
  320. RunAwayYes.x = 80;
  321. RunAwayNo = new Sprite();
  322. RunAwayNo.mouseChildren = false;
  323. var RunAwayNoText = new TextField();
  324. RunAwayNoText.htmlText = "<font size='14'>No</font>";
  325. //
  326. RunAwayNo.addChild(RunAwayNoText);
  327. RunAwayNoText.width = 70;
  328. RunAwayNoText.autoSize = TextFieldAutoSize.CENTER;
  329. RunAwayNoText.selectable = false;
  330. RunAwayNoText.mouseEnabled = false;
  331. RunAwayNo.buttonMode = true;
  332. RunAwayNo.addChild(RunAwayNoText);
  333. RunAwayNo.addEventListener(MouseEvent.CLICK, onRunAwayNoClick);
  334. RunAwayNo.graphics.beginFill(0xFFFFFF);
  335. RunAwayNo.graphics.lineStyle(1);
  336. RunAwayNo.graphics.drawRect(0,0,70,32);
  337. RunAwayNo.graphics.endFill();
  338. RunAwayNo.y = 70;RunAwayNo.x = 166;
  339. FinishedScreen = new Sprite();
  340. FinishedScreen.graphics.beginFill(0xFFFFFF);
  341. FinishedScreen.graphics.lineStyle(5);
  342. FinishedScreen.graphics.drawRect(0,0,320,320);
  343. FinishedScreen.x = 150;FinishedScreen.y=75;
  344. FinishedScreen.graphics.endFill();
  345. FinishedAvatar = new CustomSprite();
  346. FinishedAvatar.graphics.drawRect(0,0,64,64);
  347. FinishedAvatar.graphics.endFill();
  348. var tileSheetColumn:Int = 1;
  349. var tileSheetRow:Int = 1;
  350. var sourceRectangle:Rectangle = new Rectangle
  351. (tileSheetColumn * 64, tileSheetRow * 64, 64,64);
  352. var destinationPoint:Point = new Point(0, 0);
  353. var modelBitmapData = new BitmapData(64, 64, true, 0);
  354. modelBitmapData.copyPixels
  355. (
  356. new BattleSprites(),
  357. sourceRectangle,
  358. destinationPoint,
  359. null, null, true
  360. );
  361. var resizeBitmapData = HelperMethods.resize(64,64,modelBitmapData);
  362. var modelBitmap = new Bitmap(resizeBitmapData);
  363. FinishedAvatar.addChild(modelBitmap);
  364. FinishedScreen.addChild(FinishedAvatar);
  365. FinishedAvatar.y = 50;
  366. //FinishedScreen.ad
  367. FinishedText = new TextField();
  368. FinishedText.htmlText = "<font size='14'>You Won!</font>";
  369. FinishedScreen.addChild(FinishedText);
  370. FinishedText.width = 70;
  371. FinishedText.x = 0;
  372. FinishedText.autoSize = TextFieldAutoSize.LEFT;
  373. FinishedText.selectable = false;
  374. FinishedText.mouseEnabled = false;
  375. Continue = new Sprite();
  376. Continue.mouseChildren = false;
  377. var ContinueText = new TextField();
  378. ContinueText.htmlText = "<font size='14'>Continue</font>";
  379. //
  380. Continue.addChild(ContinueText);
  381. ContinueText.width = 70;
  382. ContinueText.autoSize = TextFieldAutoSize.CENTER;
  383. ContinueText.selectable = false;
  384. ContinueText.mouseEnabled = false;
  385. Continue.buttonMode = true;
  386. Continue.addChild(ContinueText);
  387. Continue.addEventListener(MouseEvent.CLICK, onContinueClick);
  388. Continue.graphics.beginFill(0xFFFFFF);
  389. Continue.graphics.lineStyle(1);
  390. Continue.graphics.drawRect(0,0,70,32);
  391. Continue.graphics.endFill();
  392. Continue.y = 281;Continue.x = 320-77;
  393. FinishedScreen.addChild(Continue);
  394. this.addEventListener("Attack",onAttack);
  395. this.addEventListener("Item",onItem);
  396. this.addEventListener("Monster",onMonsterSelected);
  397. BattleVSScreenTime = 0;
  398. State = "WaitForBattleVS";
  399. }
  400. private function setupVSMap()
  401. {
  402. if(isRandomBattle)
  403. {
  404. _VSMap = [
  405. [-1,-1,-1,-1,getOpponentMonster().getTileNumber(false)],
  406. [-1,-1,-1,-1,-1],
  407. [-1,-1,0100,-1,-1],
  408. [-1,-1,-1,-1,-1],
  409. [Trainer1.CurrentMonster.getTileNumber(true),-1,-1,-1,-1]
  410. ];
  411. }
  412. else
  413. {
  414. _VSMap = [
  415. [-1,-1,-1,-1,Trainer2.AvatarTile],
  416. [-1,-1,-1,-1,-1],
  417. [-1,-1,0100,-1,-1],
  418. [-1,-1,-1,-1,-1],
  419. [Trainer1.AvatarTile,-1,-1,-1,-1]
  420. ];
  421. }
  422. }
  423. private function drawField()
  424. {
  425. MonsterMenu = new Sprite();
  426. addChild(MonsterMenu);
  427. addChild(BattleField);
  428. drawAttackMenu(AttackPage);
  429. drawMonstersHealth();
  430. drawMonsterMenu();
  431. drawItemMenu(ItemPage);
  432. addChild(RunAway);
  433. addChild(WikiButton);
  434. }
  435. public function getStatus(monster:Monster):String
  436. {
  437. var Status = "";
  438. if(monster.Poisoned)
  439. {
  440. Status += "PSN ";
  441. }
  442. if(monster.Burned)
  443. {
  444. Status += "BRN ";
  445. }
  446. if(monster.Encase > 0)
  447. {
  448. Status += "ENC ";
  449. }
  450. if(monster.Protect > 0)
  451. {
  452. Status += "PRT ";
  453. }
  454. if(monster.Charged > 0)
  455. {
  456. Status += "CHR ";
  457. }
  458. if(monster.Seeded )
  459. {
  460. Status += "SEED ";
  461. }
  462. return Status;
  463. }
  464. private function drawMonstersHealth()
  465. {
  466. var monstersLeft = 0;
  467. var opponentMonsters = getOpponentMonsters();
  468. if(opponentMonsters != null)
  469. {
  470. for(monster in getOpponentMonsters())
  471. {
  472. if(monster.Health > 0)
  473. {
  474. monstersLeft++;
  475. }
  476. }
  477. }
  478. //RunAway.addChild(OpponentMonstersLeft);
  479. Monster1Health = new Sprite();
  480. Monster1Health.graphics.beginFill(0x000000);
  481. Monster1Health.graphics.drawRect(0,0,200,32);
  482. Monster1Health.graphics.endFill();
  483. Monster1Health.graphics.beginFill(0x0000FF);
  484. Monster1Health.graphics.drawRect(1,1,198*(Trainer1.CurrentMonster.Health/Trainer1.CurrentMonster.MaxHealth),30);
  485. Monster1Health.graphics.endFill();
  486. var Monster1StatusText = new TextField();
  487. var Status = getStatus(Trainer1.CurrentMonster);
  488. Monster1StatusText.htmlText = "<font size='14' >" + Status + "</font>";
  489. //
  490. Monster1Health.addChild(Monster1StatusText);
  491. Monster1StatusText.width = 200;
  492. Monster1StatusText.y = -30;
  493. Monster1StatusText.autoSize = TextFieldAutoSize.LEFT;
  494. Monster1StatusText.selectable = false;
  495. Monster1StatusText.mouseEnabled = false;
  496. var Monster1HealthText = new TextField();
  497. Monster1HealthText.htmlText = "<font size='22' color='#FFFFFF'>"+Trainer1.CurrentMonster.Health+"/" + Trainer1.CurrentMonster.MaxHealth + "</font>";
  498. //
  499. Monster1Health.addChild(Monster1HealthText);
  500. Monster1HealthText.width = 200;
  501. Monster1HealthText.y = 0;
  502. Monster1HealthText.autoSize = TextFieldAutoSize.RIGHT;
  503. Monster1HealthText.selectable = false;
  504. Monster1HealthText.mouseEnabled = false;
  505. Monster1Health.x = 85;
  506. Monster1Health.y = 64*3+16;
  507. var Monster1LevelText = new TextField();
  508. Monster1LevelText.htmlText = "<font size='14' >"+"Level: " + Trainer1.CurrentMonster.Level + "</font>";
  509. //
  510. Monster1Health.addChild(Monster1LevelText);
  511. Monster1LevelText.width = 200;
  512. Monster1LevelText.y = -20;
  513. Monster1LevelText.autoSize = TextFieldAutoSize.LEFT;
  514. Monster1LevelText.selectable = false;
  515. Monster1LevelText.mouseEnabled = false;
  516. Monster1Health.x = 85;
  517. Monster1Health.y = 64*3+16;
  518. BattleField.addChild(Monster1Health);
  519. Monster2Health = new Sprite();
  520. Monster2Health.graphics.beginFill(0x000000);
  521. Monster2Health.graphics.drawRect(0,0,200,32);
  522. Monster2Health.graphics.endFill();
  523. Monster2Health.graphics.beginFill(0x0000FF);
  524. Monster2Health.graphics.drawRect(1,1,198*(getOpponentMonster().Health/getOpponentMonster().MaxHealth),30);
  525. Monster2Health.graphics.endFill();
  526. var Monster2StatusText = new TextField();
  527. var Status = getStatus(getOpponentMonster());
  528. Monster2StatusText.htmlText = "<font size='14' >" + Status + "</font>";
  529. //
  530. Monster2Health.addChild(Monster2StatusText);
  531. Monster2StatusText.width = 200;
  532. Monster2StatusText.y = 30;
  533. Monster2StatusText.autoSize = TextFieldAutoSize.LEFT;
  534. Monster2StatusText.selectable = false;
  535. Monster2StatusText.mouseEnabled = false;
  536. var Monster2HealthText = new TextField();
  537. Monster2HealthText.htmlText = "<font size='22' color='#FFFFFF'>"+getOpponentMonster().Health+"/" + getOpponentMonster().MaxHealth + "</font>";
  538. //
  539. Monster2Health.addChild(Monster2HealthText);
  540. Monster2HealthText.width = 200;
  541. Monster2HealthText.y = 0;
  542. Monster2HealthText.autoSize = TextFieldAutoSize.RIGHT;
  543. Monster2HealthText.selectable = false;
  544. Monster2HealthText.mouseEnabled = false;
  545. var Monster2LevelText = new TextField();
  546. Monster2LevelText.htmlText = "<font size='14' >"+"Level: " + getOpponentMonster().Level+ if (monstersLeft > 0) " Monsters Left: " + Std.string(monstersLeft) else "" + "</font>";
  547. //
  548. Monster2Health.addChild(Monster2LevelText);
  549. Monster2LevelText.width = 200;
  550. Monster2LevelText.y = -20;
  551. Monster2LevelText.autoSize = TextFieldAutoSize.LEFT;
  552. Monster2LevelText.selectable = false;
  553. Monster2LevelText.mouseEnabled = false;
  554. Monster2Health.x = 21;
  555. Monster2Health.y = 20;
  556. BattleField.addChild(Monster2Health);
  557. }
  558. private function drawMonsterMenu()
  559. {
  560. removeChild(MonsterMenu);
  561. MonsterMenu = new Sprite();
  562. MonsterMenu.graphics.beginFill(0xFFFFFF);
  563. MonsterMenu.graphics.lineStyle(1);
  564. MonsterMenu.graphics.drawRect(0,0,316,137);
  565. MonsterMenu.graphics.endFill();
  566. MonsterMenu.x =152;
  567. MonsterMenuTitle = new TextField();
  568. MonsterMenuTitle.width = 316;
  569. MonsterMenuTitle.htmlText = "<font size='14'><u>Switch Monsters</u></font>";
  570. MonsterMenuTitle.autoSize = TextFieldAutoSize.CENTER;
  571. MonsterMenuTitle.selectable = false;
  572. MonsterMenuTitle.mouseEnabled = false;
  573. MonsterMenu.addChild(MonsterMenuTitle);
  574. addChild(MonsterMenu);
  575. var buttonPosition = 0;
  576. for(monster in Trainer1.Monsters)
  577. {
  578. var MonsterIcon = new MonsterButton(monster);
  579. MonsterIcon.x = 5 + 150*Math.floor(buttonPosition/2);MonsterIcon.y=23+((buttonPosition*55)-(110*Math.floor(buttonPosition/2)));
  580. MonsterMenu.addChild(MonsterIcon);
  581. buttonPosition++;
  582. }
  583. }
  584. private function drawAttackMenu(?Page:Int=1)
  585. {
  586. AttackMenu = new Sprite();
  587. var start = 13*(Page-1);
  588. var finish = 13*Page;
  589. var buttonPosition = 0;
  590. var Title = new TextField();
  591. Title.selectable = false;
  592. Title.htmlText = "<u><font size = '16'>Attack</font></u>";
  593. Title.width = 150;
  594. Title.autoSize = TextFieldAutoSize.CENTER;
  595. AttackMenu.addChild(Title);
  596. for(move in Trainer1.CurrentMonster.Moves)
  597. {
  598. if(buttonPosition < start || buttonPosition >=finish)
  599. {
  600. if(buttonPosition == 0)
  601. {
  602. AttackMenu.addChild(PrevAttackPage);
  603. }
  604. if(buttonPosition == finish+1)
  605. {
  606. AttackMenu.addChild(NextAttackPage);
  607. }
  608. buttonPosition++;
  609. continue;
  610. }
  611. var Attack = new AttackButton(move);
  612. Attack.x = 5;Attack.y=26+((buttonPosition-((Page-1)*13))*35);
  613. AttackMenu.addChild(Attack);
  614. buttonPosition++;
  615. }
  616. AttackMenu.y = (Math.max(512-(31+((buttonPosition)*35)),0))/2;
  617. AttackMenu.graphics.beginFill(0xFFFFFF);
  618. AttackMenu.graphics.lineStyle(1);
  619. AttackMenu.graphics.drawRect(0,0,150,31+((buttonPosition)*35));
  620. AttackMenu.graphics.endFill();
  621. addChild(AttackMenu);
  622. }
  623. private function drawItemMenu(?Page:Int=1)
  624. {
  625. ItemMenu = new Sprite();
  626. ItemMenu.x = 640-160;
  627. var start = 13*(Page-1);
  628. var finish = 13*Page;
  629. var buttonPosition = 0;
  630. var Title = new TextField();
  631. Title.selectable = false;
  632. Title.htmlText = "<u><font size = '16'>Items</font></u>";
  633. Title.width = 150;
  634. Title.autoSize = TextFieldAutoSize.CENTER;
  635. ItemMenu.addChild(Title);
  636. var countedItems = new List<String>();
  637. for(item in Trainer1.CurrentInventory)
  638. {
  639. var skip = false;
  640. if(!item.useInTrainerBattle() && !isRandomBattle)
  641. {continue;}
  642. for(name in countedItems)
  643. {
  644. if(name == item.ID)
  645. {
  646. skip = true;
  647. break;
  648. }
  649. }
  650. if(skip)
  651. {continue;}
  652. var count = Trainer1.CurrentInventory.getItemsByName(item.ID);
  653. if(buttonPosition < start || buttonPosition >=finish)
  654. {
  655. if(buttonPosition == 0)
  656. {
  657. ItemMenu.addChild(PrevItemPage);
  658. }
  659. if(buttonPosition == finish+1)
  660. {
  661. ItemMenu.addChild(NextItemPage);
  662. }
  663. buttonPosition++;
  664. continue;
  665. }
  666. countedItems.add(item.ID);
  667. var Item = new ItemButton(item.ID,count);
  668. Item.x = 5;Item.y=26+((buttonPosition-((Page-1)*13))*35);
  669. ItemMenu.addChild(Item);
  670. buttonPosition++;
  671. }
  672. var menuSize = ((buttonPosition-((Page-1)*13))*35);
  673. ItemMenu.y = (Math.max(512-(31+((buttonPosition)*35)),0))/2;
  674. ItemMenu.graphics.beginFill(0xFFFFFF);
  675. ItemMenu.graphics.lineStyle(1);
  676. ItemMenu.graphics.drawRect(0,0,150,31+((buttonPosition)*35));
  677. ItemMenu.graphics.endFill();
  678. addChild(ItemMenu);
  679. ItemDisabledBackground = new Sprite();
  680. //ItemDisabledBackground.y = (Math.max(512-(31+((buttonPosition)*35)),0))/2;
  681. ItemDisabledBackground.graphics.beginFill(0xFFFFFF);
  682. ItemDisabledBackground.graphics.lineStyle(1);
  683. ItemDisabledBackground.graphics.drawRect(0,0,150,31+(menuSize));
  684. ItemDisabledBackground.graphics.endFill();
  685. ItemDisabledBackground.alpha = 0.5;
  686. ItemConfirmBackground = new Sprite();
  687. //ItemConfirmBackground.y = (Math.max(512-(31+((buttonPosition)*35)),0))/2;
  688. ItemConfirmBackground.graphics.beginFill(0xFFFFFF);
  689. ItemConfirmBackground.graphics.lineStyle(1);
  690. ItemConfirmBackground.graphics.drawRect(0,0,150,31+(menuSize));
  691. ItemConfirmBackground.graphics.endFill();
  692. ItemConfirmBackground.alpha = 0.5;
  693. ItemConfirm = new TextField();
  694. ItemConfirm.background = true;
  695. ItemConfirm.backgroundColor = 0xFFFFFF;
  696. ItemConfirm.htmlText = "<font size='14'>Use Item?</font>";
  697. ItemConfirm.autoSize = TextFieldAutoSize.CENTER;
  698. ItemConfirm.width = (150 - ItemConfirm.width/2);
  699. ItemConfirm.y = 15;
  700. ItemConfirm.selectable = false;
  701. ItemConfirm.mouseEnabled = false;
  702. //ItemConfirm.y = 12;
  703. ItemYes = new Sprite();
  704. var ItemYesText = new TextField();
  705. ItemYesText.htmlText = "<font size='14'>Confirm</font>";
  706. ItemYes.addChild(ItemYesText);
  707. ItemYesText.width = 70;
  708. ItemYesText.autoSize = TextFieldAutoSize.CENTER;
  709. ItemYesText.selectable = false;
  710. ItemYesText.mouseEnabled = false;
  711. ItemYes.buttonMode = true;
  712. ItemYes.addChild(ItemYesText);
  713. ItemYes.addEventListener(MouseEvent.CLICK, onItemYesClick);
  714. ItemYes.graphics.beginFill(0xFFFFFF);
  715. ItemYes.graphics.lineStyle(1);
  716. ItemYes.graphics.drawRect(0,0,70,32);
  717. ItemYes.graphics.endFill();
  718. ItemYes.y = 30;
  719. ItemYes.x = 0;
  720. ItemNo = new Sprite();
  721. ItemNo.mouseChildren = false;
  722. var ItemNoText = new TextField();
  723. ItemNoText.htmlText = "<font size='14'>Cancel</font>";
  724. //
  725. ItemNo.addChild(ItemNoText);
  726. ItemNoText.width = 70;
  727. ItemNoText.autoSize = TextFieldAutoSize.CENTER;
  728. ItemNoText.selectable = false;
  729. ItemNoText.mouseEnabled = false;
  730. ItemNo.buttonMode = true;
  731. ItemNo.addChild(ItemNoText);
  732. ItemNo.addEventListener(MouseEvent.CLICK, onItemNoClick);
  733. ItemNo.graphics.beginFill(0xFFFFFF);
  734. ItemNo.graphics.lineStyle(1);
  735. ItemNo.graphics.drawRect(0,0,70,32);
  736. ItemNo.graphics.endFill();
  737. ItemNo.y = 30;ItemNo.x = 80;
  738. if(Trainer1.CurrentMonster.Health <= 0)
  739. {
  740. ItemMenu.addChild(ItemConfirmBackground);
  741. }
  742. }
  743. private function onBack(event:Event) {
  744. removeChild(MonsterWiki);
  745. removeChild(WikiScreen);
  746. State = "WaitBattle";
  747. }
  748. private function onWikiButtonClick(event:MouseEvent)
  749. {
  750. //add Wiki
  751. addChild(WikiScreen);
  752. addChild(MonsterWiki);
  753. State = "MonsterWiki";
  754. }
  755. private function onRunAwayClick(event:MouseEvent)
  756. {
  757. if(RunAwayState == "")
  758. {
  759. RunAwayState = "Prompt";
  760. RunAway.addChild(RunAwayYes);
  761. RunAway.addChild(RunAwayNo);
  762. RunAway.addChild(RunAwayPrompt);
  763. }
  764. if(RunAwayState == "Buffer")
  765. {
  766. RunAwayState = "";
  767. }
  768. }
  769. private function onPrevAttackPageClick(event:MouseEvent)
  770. {
  771. AttackPage--;
  772. drawAttackMenu(AttackPage);
  773. }
  774. private function onNextAttackPageClick(event:MouseEvent)
  775. {
  776. AttackPage++;
  777. drawAttackMenu(AttackPage);
  778. }
  779. private function onPrevItemPageClick(event:MouseEvent)
  780. {
  781. ItemPage--;
  782. drawItemMenu(ItemPage);
  783. }
  784. private function onNextItemPageClick(event:MouseEvent)
  785. {
  786. ItemPage++;
  787. drawItemMenu(ItemPage);
  788. }
  789. private function onRunAwayYesClick(event:MouseEvent)
  790. {
  791. State = "Finish";
  792. }
  793. private function onRunAwayNoClick(event:MouseEvent)
  794. {
  795. RunAwayState = "Buffer";
  796. RunAway.removeChild(RunAwayYes);
  797. RunAway.removeChild(RunAwayNo);
  798. RunAway.removeChild(RunAwayPrompt);
  799. }
  800. private function onItemYesClick(event:MouseEvent)
  801. {
  802. //State = "Finish";
  803. MonsterMenuTitle.htmlText = "<font size='14'><u>Switch Monsters</u></font>";
  804. ItemMenu.removeChild(ItemConfirmBackground);
  805. ItemMenu.removeChild(ItemConfirm);
  806. ItemMenu.removeChild(ItemNo);
  807. ItemMenu.removeChild(ItemYes);
  808. var ItemInfo = new Item();
  809. ItemInfo.updateItem(new Point(),currentItem);
  810. var text =Trainer1.CurrentInventory.useItem(currentItem,Trainer1.CurrentMonster,Trainer1,RandomMonster);
  811. var Postion1 = new Point(155,325);
  812. var Postion2 = new Point(460,208);
  813. if(text.Text != "")
  814. {
  815. var Damage = new FadingMovingText();
  816. Damage.htmlText = text.Text;
  817. Damage.x = Postion1.x;
  818. Damage.y = Postion1.y+32;
  819. Damage.start();
  820. }
  821. if(text.OpponentText != "")
  822. {
  823. var Damage = new FadingMovingText();
  824. Damage.htmlText = text.OpponentText;
  825. Damage.Direction = "DOWN";
  826. Damage.x = Postion2.x-Damage.width-5;
  827. Damage.y = Postion2.y-32;
  828. Damage.start();
  829. }
  830. if(!getOpponentMonster().Captured)
  831. {
  832. attackPhase(false,"");
  833. }
  834. //if(currentItem.isCaputureDevice() && !ran
  835. currentItem = "";
  836. ItemState = "";
  837. //removeChild(MonsterMenu);
  838. drawMonsterMenu();
  839. removeChild(ItemMenu);
  840. drawItemMenu(ItemPage);
  841. BattleField.removeChild(Monster1Health);
  842. BattleField.removeChild(Monster2Health);
  843. drawMonstersHealth();
  844. removeChild(AttackMenu);
  845. drawAttackMenu(AttackPage);
  846. }
  847. private function onContinueClick(event:MouseEvent)
  848. {
  849. State = "Finish";
  850. }
  851. private function onItemNoClick(event:MouseEvent)
  852. {
  853. // RunAwayState = "Buffer";
  854. MonsterMenuTitle.htmlText = "<font size='14'><u>Switch Monsters</u></font>";
  855. ItemMenu.removeChild(ItemConfirmBackground);
  856. ItemMenu.removeChild(ItemConfirm);
  857. ItemMenu.removeChild(ItemNo);
  858. if(ItemState == "Confirm")
  859. {
  860. ItemMenu.removeChild(ItemYes);
  861. }
  862. currentItem = "";
  863. ItemState = "";
  864. //removeChild(MonsterMenu);
  865. drawMonsterMenu();
  866. removeChild(ItemMenu);
  867. drawItemMenu(ItemPage);
  868. BattleField.removeChild(Monster1Health);
  869. BattleField.removeChild(Monster2Health);
  870. drawMonstersHealth();
  871. }
  872. private function getOpponentMonsters():List<Monster>
  873. {
  874. if(isRandomBattle)
  875. {
  876. return null;
  877. }
  878. else
  879. {
  880. return Trainer2.Monsters;
  881. }
  882. }
  883. private function getOpponentMonster():Monster
  884. {
  885. if(isRandomBattle)
  886. {
  887. return RandomMonster;
  888. }
  889. else
  890. {
  891. return Trainer2.CurrentMonster;
  892. }
  893. }
  894. private function Trainer1AttackPhase(attackName:String)
  895. {
  896. getOpponentMonster().addEnemyAttacked(Trainer1.CurrentMonster.ID);
  897. var Postion1 = new Point(155,325);
  898. var Postion2 = new Point(460,208);
  899. for(move in Trainer1.CurrentMonster.Moves)
  900. {
  901. if(move.Name == attackName)
  902. {
  903. move.MP--;
  904. var AttackString = move.getAttack(Trainer1.CurrentMonster,getOpponentMonster(),Trainer1.Monsters,getOpponentMonsters());
  905. if(AttackString.Text != "")
  906. {
  907. var Damage = new FadingMovingText();
  908. Damage.htmlText = AttackString.Text;
  909. Damage.x = Postion1.x;
  910. Damage.y = Postion1.y;
  911. Damage.start();
  912. }
  913. if(AttackString.OpponentText != "")
  914. {
  915. var Damage = new FadingMovingText();
  916. Damage.htmlText = AttackString.OpponentText;
  917. Damage.Direction = "DOWN";
  918. Damage.x = Postion2.x-Damage.width-5;
  919. Damage.y = Postion2.y;
  920. Damage.start();
  921. }
  922. BattleField.removeChild(Monster1Health);
  923. BattleField.removeChild(Monster2Health);
  924. drawMonstersHealth();
  925. break;
  926. }
  927. }
  928. var Damage = getStatusAligments(Trainer1.CurrentMonster,getOpponentMonster());
  929. if(Damage != "")
  930. {
  931. var DamageText = new FadingMovingText();
  932. DamageText.htmlText = Damage;
  933. DamageText.x = Postion1.x;
  934. DamageText.y = Postion1.y+10;
  935. DamageText.start();
  936. }
  937. }
  938. private function checkFainted()
  939. {
  940. var Postion1 = new Point(155,325);
  941. var Postion2 = new Point(460,208);
  942. if(Trainer1.CurrentMonster.Health <= 0)
  943. {
  944. ItemMenu.addChild(ItemDisabledBackground);
  945. var Damage = new FadingMovingText();
  946. Damage.htmlText = "Fainted";
  947. Damage.x = Postion1.x;
  948. Damage.y = Postion1.y+32;
  949. Damage.start();
  950. }
  951. if(getOpponentMonster().Health <= 0)
  952. {
  953. var Damage = new FadingMovingText();
  954. Damage.htmlText = "Fainted";
  955. Damage.Direction = "DOWN";
  956. Damage.x = Postion2.x-Damage.width-5;
  957. Damage.y = Postion2.y-32;
  958. Damage.start();
  959. switchOpponentMonster();
  960. }
  961. }
  962. private function switchOpponentMonster()
  963. {
  964. if(!isRandomBattle)
  965. {
  966. for(monster in Trainer2.Monsters)
  967. {
  968. if(monster.Health > 0)
  969. {
  970. Trainer2.CurrentMonster = monster;
  971. break;
  972. }
  973. }
  974. }
  975. BattleField.removeChild(Monster1Health);
  976. BattleField.removeChild(Monster2Health);
  977. drawMonstersHealth();
  978. drawBattleScreen();
  979. }
  980. private function OpponentAttackPhase()
  981. {
  982. Trainer1.CurrentMonster.addEnemyAttacked(getOpponentMonster().ID);
  983. var Postion1 = new Point(155,325);
  984. var Postion2 = new Point(460,208);
  985. var NumOfMoves = 0;
  986. for(move in getOpponentMonster().Moves)
  987. {
  988. if(move.MP > 0 || move.TotalMP <= -1 )
  989. {
  990. NumOfMoves++;
  991. }
  992. }
  993. var randomNumber = Std.random(NumOfMoves);
  994. var NumOfMoves = 0;
  995. for(move in getOpponentMonster().Moves)
  996. {
  997. if(move.MP > 0 || move.TotalMP <= -1)
  998. {
  999. if(NumOfMoves == randomNumber)
  1000. {
  1001. move.MP--;
  1002. var AttackString = move.getAttack(getOpponentMonster(),Trainer1.CurrentMonster,getOpponentMonsters(),Trainer1.Monsters);
  1003. if(AttackString.Text != "")
  1004. {
  1005. var Damage = new FadingMovingText();
  1006. Damage.htmlText = AttackString.Text;
  1007. Damage.Direction = "DOWN";
  1008. Damage.x = Postion2.x-Damage.width-5;
  1009. Damage.y = Postion2.y+14;
  1010. Damage.start();
  1011. }
  1012. if(AttackString.OpponentText != "")
  1013. {
  1014. var Damage = new FadingMovingText();
  1015. Damage.htmlText = AttackString.OpponentText;
  1016. Damage.x = Postion1.x;
  1017. Damage.y = Postion1.y-14;
  1018. Damage.start();
  1019. }
  1020. BattleField.removeChild(Monster1Health);
  1021. BattleField.removeChild(Monster2Health);
  1022. drawMonstersHealth();
  1023. break;
  1024. }
  1025. NumOfMoves++;
  1026. }
  1027. }
  1028. var Damage = getStatusAligments(getOpponentMonster(),Trainer1.CurrentMonster);
  1029. if(Damage != "")
  1030. {
  1031. var DamageText = new FadingMovingText();
  1032. DamageText.htmlText = Damage;
  1033. DamageText.Direction = "DOWN";
  1034. DamageText.x = Postion2.x-DamageText.width-5;
  1035. DamageText.y = Postion2.y+20;
  1036. DamageText.start();
  1037. }
  1038. }
  1039. private function checkLoss():Bool
  1040. {
  1041. var loss = true;
  1042. for(monster in Trainer1.Monsters)
  1043. {
  1044. if(monster.Health > 0)
  1045. {
  1046. loss = false;
  1047. break;
  1048. }
  1049. }
  1050. return loss;
  1051. }
  1052. private function checkWin():Bool
  1053. {
  1054. var win = true;
  1055. if(isRandomBattle)
  1056. {
  1057. if(!RandomMonster.Captured && RandomMonster.Health > 0)
  1058. {
  1059. RandomMonster.Captured = false;
  1060. win = false;
  1061. }
  1062. else
  1063. {
  1064. if( RandomMonster.Captured)
  1065. {
  1066. FinishedText.htmlText = "<font size='14'>You Captured " + RandomMonster.Character +"</font>";
  1067. RandomMonster.Captured = false;
  1068. }
  1069. }
  1070. }
  1071. else
  1072. {
  1073. for(monster in Trainer2.Monsters)
  1074. {
  1075. if(monster.Health > 0)
  1076. {
  1077. win = false;
  1078. break;
  1079. }
  1080. }
  1081. }
  1082. return win;
  1083. }
  1084. private function CheckExp()
  1085. {
  1086. if(getOpponentMonster().Health <= 0)
  1087. {
  1088. Trainer1.CurrentMonster.XP += getOpponentMonster().Level / 2.0;
  1089. }
  1090. }
  1091. public function getStatusAligments(monster:Monster,opponentMonster:Monster):String
  1092. {
  1093. var text = "";
  1094. if(monster.Burned)
  1095. {
  1096. monster.Health -= Std.int(monster.MaxHealth/17);
  1097. text += "Burned: -"+Std.int(monster.MaxHealth/17) + " ";
  1098. }
  1099. if(monster.Poisoned)
  1100. {
  1101. monster.Health -= Std.int(monster.MaxHealth/15);
  1102. text += "Poisoned: -"+Std.int(monster.MaxHealth/15)+ " ";
  1103. }
  1104. if(monster.Seeded)
  1105. {
  1106. monster.Health -= Std.int(monster.MaxHealth/30);
  1107. if(opponentMonster.Health > 0)
  1108. {
  1109. opponentMonster.Health += Std.int(monster.MaxHealth/30);
  1110. }
  1111. text += "Seeded: -"+Std.int(monster.MaxHealth/30)+ " ";
  1112. }
  1113. return text;
  1114. drawMonsterMenu();
  1115. BattleField.removeChild(Monster1Health);
  1116. BattleField.removeChild(Monster2Health);
  1117. drawMonstersHealth();
  1118. }
  1119. private function attackPhase(attacking:Bool,attackName:String)
  1120. {
  1121. if(Trainer1.CurrentMonster.Health <= 0 || getOpponentMonster().Health <= 0)
  1122. {
  1123. return;
  1124. }
  1125. if(Trainer1.CurrentMonster.Speed >= getOpponentMonster().Speed)
  1126. {
  1127. if(attacking)
  1128. {
  1129. Trainer1AttackPhase(attackName);
  1130. }
  1131. checkFainted();
  1132. if(getOpponentMonster().Health > 0)
  1133. {
  1134. OpponentAttackPhase();
  1135. }
  1136. checkFainted();
  1137. }
  1138. else
  1139. {
  1140. OpponentAttackPhase();
  1141. checkFainted();
  1142. if(attacking)
  1143. {
  1144. if(Trainer1.CurrentMonster.Health > 0)
  1145. {
  1146. Trainer1AttackPhase(attackName);
  1147. }
  1148. }
  1149. checkFainted();
  1150. }
  1151. var Postion1 = new Point(155,325);
  1152. var Postion2 = new Point(460,208);
  1153. if(Trainer1.CurrentMonster.Health <= 0)
  1154. {
  1155. var xp = DistrubuteXp(Trainer1.CurrentMonster,getOpponentMonster(),getOpponentMonsters());
  1156. var Damage = new FadingMovingText();
  1157. Damage.htmlText = "XP: " + xp;
  1158. Damage.Direction = "DOWN";
  1159. Damage.x = Postion2.x-Damage.width-5;
  1160. Damage.y = Postion2.y-32;
  1161. Damage.start();
  1162. }
  1163. if(getOpponentMonster().Health <= 0)
  1164. {
  1165. var xp = DistrubuteXp(getOpponentMonster(),Trainer1.CurrentMonster, Trainer1.Monsters);
  1166. var Damage = new FadingMovingText();
  1167. Damage.htmlText = "XP: " + xp;
  1168. Damage.x = Postion1.x;
  1169. Damage.y = Postion1.y+32;
  1170. Damage.start();
  1171. }
  1172. drawBattleScreen();
  1173. }
  1174. public function DistrubuteXp(faintedMonster:Monster,currentMonster:Monster,Team:List<Monster>):Float
  1175. {
  1176. var count = 0;
  1177. var xp:Float = 0;
  1178. if(Team != null)
  1179. {
  1180. for(monster in Team)
  1181. {
  1182. if(faintedMonster.Fought(monster.ID) && monster.Health > 0)
  1183. {count++;}
  1184. }
  1185. for(monster in Team)
  1186. {
  1187. if(monster.ID == currentMonster.ID)
  1188. {
  1189. xp = faintedMonster.Level / (count);
  1190. }
  1191. if(faintedMonster.Fought(monster.ID) && monster.Health > 0)
  1192. {
  1193. monster.XP += faintedMonster.Level / (count);
  1194. monster.LevelUp();
  1195. }
  1196. }
  1197. }
  1198. else
  1199. {
  1200. xp = faintedMonster.Level / 1.0;
  1201. currentMonster.XP += faintedMonster.Level / 1.0;
  1202. currentMonster.LevelUp();
  1203. }
  1204. faintedMonster.clearEnemyMonster();
  1205. return xp;
  1206. }
  1207. public function drawBattleScreen()
  1208. {
  1209. _BattleBitmapData.fillRect(_BattleBitmapData.rect, 0);
  1210. _BattleMap = [
  1211. [-1,-1,-1,-1,OpponentTileNumber()],
  1212. [-1,-1,-1,-1,-1],
  1213. [-1,-1,-1,-1,-1],
  1214. [TrainerTileNumber(),-1,-1,-1,-1],
  1215. [-1,-1,-1,-1,-1]
  1216. ];
  1217. buildMap(_BattleMap,_BattleBitmapData);
  1218. }
  1219. private function TrainerTileNumber()
  1220. {
  1221. if(Trainer1.CurrentMonster.Health <= 0)
  1222. {
  1223. return -1;
  1224. }
  1225. else
  1226. {
  1227. return Trainer1.CurrentMonster.getTileNumber(true);
  1228. }
  1229. }
  1230. private function OpponentTileNumber()
  1231. {
  1232. if(getOpponentMonster().Health <= 0)
  1233. {
  1234. return -1;
  1235. }
  1236. else
  1237. {
  1238. return getOpponentMonster().getTileNumber(false);
  1239. }
  1240. }
  1241. private function onItem(event:ItemButtonEvent){
  1242. var count = 0;
  1243. currentItem = event.Name;
  1244. var ItemInfo = new Item();
  1245. ItemInfo.updateItem(new Point(),currentItem);
  1246. ItemState = "UseItem";
  1247. ItemMenu.addChild(ItemConfirmBackground);
  1248. ItemMenu.addChild(ItemConfirm);
  1249. ItemMenu.addChild(ItemNo);
  1250. if(!ItemInfo.useOnMonster())
  1251. {
  1252. ItemState ="Confirm";
  1253. //addChild Confirm Menu
  1254. ItemMenu.addChild(ItemYes);
  1255. }
  1256. else
  1257. {
  1258. MonsterMenuTitle.htmlText = "<font size='14'><u>Choose Monsters</u></font>";
  1259. }
  1260. }
  1261. private function onAttack(event:AttackButtonEvent) {
  1262. for(move in Trainer1.CurrentMonster.Moves)
  1263. {
  1264. if(move.Name == event.Name)
  1265. {
  1266. attackPhase(true,event.Name);
  1267. break;
  1268. }
  1269. }
  1270. removeChild(AttackMenu);
  1271. drawAttackMenu(AttackPage);
  1272. drawMonsterMenu();
  1273. BattleField.removeChild(Monster1Health);
  1274. BattleField.removeChild(Monster2Health);
  1275. drawMonstersHealth();
  1276. }
  1277. private function onMonsterSelected (event:MonsterButtonEvent) {
  1278. if(State == "MonsterWiki")
  1279. {
  1280. return;
  1281. }
  1282. for(monster in Trainer1.Monsters)
  1283. {
  1284. if(monster.ID == event.ID)
  1285. {
  1286. if(ItemState == "UseItem")
  1287. {
  1288. MonsterMenuTitle.htmlText = "<font size='14'><u>Switch Monsters</u></font>";
  1289. ItemMenu.removeChild(ItemConfirmBackground);
  1290. ItemMenu.removeChild(ItemConfirm);
  1291. ItemMenu.removeChild(ItemNo);
  1292. Trainer1.CurrentInventory.useItem(currentItem,monster,null,null);
  1293. currentItem = "";
  1294. ItemState = "";
  1295. //removeChild(MonsterMenu);
  1296. drawMonsterMenu();
  1297. removeChild(ItemMenu);
  1298. drawItemMenu(ItemPage);
  1299. BattleField.removeChild(Monster1Health);
  1300. BattleField.removeChild(Monster2Health);
  1301. drawMonstersHealth();
  1302. attackPhase(false,"");
  1303. removeChild(AttackMenu);
  1304. drawAttackMenu(AttackPage);
  1305. }
  1306. else
  1307. {
  1308. if(monster.Health > 0)
  1309. {
  1310. Trainer1.CurrentMonster = monster;
  1311. }
  1312. removeChild(AttackMenu);
  1313. drawAttackMenu(AttackPage);
  1314. BattleField.removeChild(Monster1Health);
  1315. BattleField.removeChild(Monster2Health);
  1316. drawMonstersHealth();
  1317. drawBattleScreen();
  1318. drawItemMenu();
  1319. }
  1320. break;
  1321. }
  1322. }
  1323. }
  1324. public function getActionText()
  1325. {
  1326. BattleFieldFight.htmlText = "<font size='20'>[ ]FIGHT</font>";
  1327. BattleFieldItem.htmlText = "<font size='20'>[ ]ITEM</font>";
  1328. BattleFieldSwitch.htmlText = "<font size='20'>[ ]SWITCH</font>";
  1329. BattleFieldFlee.htmlText = "<font size='20'>[ ]FLEE</font>";
  1330. if(ActionLocation == 1)
  1331. {BattleFieldFight.htmlText = "<font size='20'>[X]FIGHT</font>";}
  1332. if(ActionLocation == 2)
  1333. {BattleFieldItem.htmlText = "<font size='20'>[X]ITEM</font>";}
  1334. if(ActionLocation == 3)
  1335. {BattleFieldSwitch.htmlText = "<font size='20'>[X]SWITCH</font>";}
  1336. if(ActionLocation == 4)
  1337. {BattleFieldFlee.htmlText = "<font size='20'>[X]FLEE</font>";}
  1338. }
  1339. private function buildMap(map:Array<Array<Int>>,mapBitmapData:BitmapData)
  1340. {
  1341. for(mapColumn in 0...MAP_COLUMNS)
  1342. {
  1343. for(mapRow in 0...MAP_ROWS)
  1344. {
  1345. var currentTile:Int = map[mapRow][mapColumn];
  1346. if(currentTile > -1)
  1347. {
  1348. //Find the tile's column and row position
  1349. //on the tile sheet
  1350. var tileSheetColumn:Int = Std.int(currentTile / 100);
  1351. var tileSheetRow:Int = Std.int(currentTile % 100);
  1352. switch(currentTile)
  1353. {
  1354. default:
  1355. var Blank:TileModel
  1356. = new TileModel
  1357. (
  1358. MAX_TILE_SIZE,
  1359. tileSheetColumn, tileSheetRow,
  1360. mapRow, mapColumn,
  1361. MAX_TILE_SIZE, MAX_TILE_SIZE
  1362. );
  1363. drawGameObject(Blank, mapBitmapData);
  1364. }
  1365. }
  1366. }
  1367. }
  1368. }
  1369. private function drawGameObject
  1370. (
  1371. tileModel:TileModel,
  1372. screen:BitmapData
  1373. )
  1374. {
  1375. var sourceRectangle:Rectangle = new Rectangle
  1376. (
  1377. tileModel.tileSheetColumn * MAX_TILE_SIZE+ tileModel.ImageX,
  1378. tileModel.tileSheetRow * MAX_TILE_SIZE+ tileModel.ImageY,
  1379. tileModel.ImageWidth,
  1380. tileModel.ImageHeight
  1381. );
  1382. var destinationPoint:Point = new Point
  1383. (
  1384. tileModel.xPos-(tileModel.ImageXOffset),
  1385. tileModel.yPos-(tileModel.ImageYOffset)
  1386. );
  1387. screen.copyPixels
  1388. (
  1389. _tileSheetBitmapData,
  1390. sourceRectangle,
  1391. destinationPoint,
  1392. null, null, true
  1393. );
  1394. }
  1395. public function OnKeyDown(event:KeyboardEvent)
  1396. {
  1397. // When a key is held down, multiple KeyDown events are generated.
  1398. // This check means we only pick up the first one.
  1399. if (!mKeyDown[event.keyCode])
  1400. {
  1401. // Store for use in game
  1402. mKeyDown[event.keyCode] = true;
  1403. if(State == "WaitBattle2")
  1404. {
  1405. if(mKeyDown[Keyboard.LEFT])
  1406. {
  1407. ActionLocation-=1;
  1408. if(ActionLocation < 1)
  1409. {ActionLocation = 4;}
  1410. }
  1411. else if(mKeyDown[Keyboard.RIGHT])
  1412. {
  1413. ActionLocation +=1;
  1414. if(ActionLocation > 4)
  1415. {ActionLocation = 1;}
  1416. }
  1417. else if(mKeyDown[Keyboard.UP])
  1418. {
  1419. ActionLocation -=2;
  1420. if(ActionLocation < 1)
  1421. {ActionLocation = 4+ActionLocation;}
  1422. }
  1423. else if(mKeyDown[Keyboard.DOWN])
  1424. {
  1425. ActionLocation +=2;
  1426. if(ActionLocation > 4)
  1427. {ActionLocation = ActionLocation-4;}
  1428. }
  1429. getActionText();
  1430. if(mKeyDown[13] == true)
  1431. {ExecuteAction();}
  1432. }
  1433. }
  1434. }
  1435. public function ExecuteAction()
  1436. {
  1437. if(ActionLocation == 4)
  1438. {
  1439. State = "Finish";
  1440. }
  1441. }
  1442. public function OnKeyUp (event:KeyboardEvent)
  1443. {
  1444. mKeyDown[event.keyCode] = false;
  1445. }
  1446. function OnEnter(e:flash.events.Event)
  1447. {
  1448. try
  1449. {
  1450. if(State == "WaitForBattleVS")
  1451. {
  1452. BattleVSScreenTime++;
  1453. if(BattleVSScreenTime >= 70)
  1454. {
  1455. removeChild(BattleVSScreen);
  1456. State = "LoadBattle";
  1457. }
  1458. }
  1459. if(State == "LoadBattle")
  1460. {
  1461. drawField();
  1462. State = "WaitBattle";
  1463. }
  1464. if(State == "WaitBattle")
  1465. {
  1466. if(checkWin())
  1467. {
  1468. //remove Battlefield
  1469. removeChild(BattleField);
  1470. removeChild(AttackMenu);
  1471. removeChild(MonsterMenu);
  1472. removeChild(ItemMenu);
  1473. removeChild(RunAway);
  1474. removeChild(WikiButton);
  1475. //Add Win Screen
  1476. addChild(FinishedScreen);
  1477. State = "WaitExit";
  1478. Won = true;
  1479. if(!isRandomBattle)
  1480. {
  1481. var tax = Std.int(Math.ceil(0.2 * Trainer2.Money));
  1482. if(Trainer2.Money > 0)
  1483. {
  1484. Trainer1.Money += Trainer2.Money -tax;
  1485. var MoneyText= new TextField();
  1486. MoneyText.htmlText = "<font size='14'>You Won: "+Trainer2.Money+"\nBattle Tax (20%) = "+tax+"\nYou Gain " + Std.string(Trainer2.Money-tax) +"\nTotal Money: "+ Trainer1.Money+"</font>";
  1487. FinishedScreen.addChild(MoneyText);
  1488. MoneyText.width = 320;
  1489. MoneyText.x = 0;
  1490. MoneyText.y = 100;
  1491. MoneyText.autoSize = TextFieldAutoSize.RIGHT;
  1492. MoneyText.selectable = false;
  1493. MoneyText.mouseEnabled = false;
  1494. }
  1495. }
  1496. }
  1497. if(checkLoss())
  1498. {
  1499. //remove Battlefield
  1500. removeChild(BattleField);
  1501. removeChild(AttackMenu);
  1502. removeChild(MonsterMenu);
  1503. removeChild(ItemMenu);
  1504. removeChild(RunAway);
  1505. removeChild(WikiButton);
  1506. //Add LossScreen
  1507. FinishedText.htmlText = "<font size='14'>You Lose...</font>";
  1508. if(!isRandomBattle)
  1509. {
  1510. if(Trainer2.Money > 0)
  1511. {
  1512. var oldMoney = Trainer1.Money;
  1513. var loss = Std.int(Math.min(Trainer2.Money,Trainer1.Money));
  1514. loss = Std.int(Math.max(loss,0));
  1515. Trainer1.Money -= loss;
  1516. var MoneyText = new TextField();
  1517. var tax = Std.int(Math.ceil(0.2 * loss));
  1518. MoneyText.htmlText = "<font size='14'>You Loss: "+loss+"\nBattle Tax (20%) = "+tax+"\nOpponent Gain " + Std.string(loss-tax) +"\nTotal Money: "+ Trainer1.Money+"</font>";
  1519. FinishedScreen.addChild(MoneyText);
  1520. MoneyText.width = 320;
  1521. MoneyText.x = 0;
  1522. MoneyText.y = 100;
  1523. MoneyText.autoSize = TextFieldAutoSize.RIGHT;
  1524. MoneyText.selectable = false;
  1525. MoneyText.mouseEnabled = false;
  1526. }
  1527. }
  1528. addChild(FinishedScreen);
  1529. State = "WaitExit";
  1530. Won = false;
  1531. }
  1532. }
  1533. if(State == "Finish")
  1534. {
  1535. for(monster in Trainer1.Monsters)
  1536. {
  1537. monster.Seeded = false;
  1538. monster.Protect = 0;
  1539. monster.Encase = 0;
  1540. monster.Charged = 0;
  1541. }
  1542. this.removeEventListener(Event.ENTER_FRAME, OnEnter);
  1543. dispatchEvent(new Event("BattleFinished"));
  1544. flash.Lib.current.removeChild(this);
  1545. }
  1546. }
  1547. catch(err:flash.Error)
  1548. {
  1549. trace(err.message);
  1550. }
  1551. }
  1552. }