BlockCrashFall_fnc

  1. //
  2. //################操作ブロックダメージ用################
  3.  
  4. function Fall_block_damege(Bnum:Number , Damege:Number , Option:Boolean = false, RimitOp:Boolean = false):void{
  5.  
  6. if(Bnum > 24 || Bnum < 0) return;
  7.  
  8. var to_sum:Number = Fall_Pool.Next_Block[0].BlockSum;
  9. var T_FallPoBl:BlockClass = Fall_Pool.Next_Pool[0][Bnum];
  10. if( !(T_FallPoBl.on_flag) ) return;
  11.  
  12. if( T_FallPoBl.Metal_flg ) return;
  13. if( T_FallPoBl.Crystal_flg ) return;
  14.  
  15. if(T_FallPoBl.Weight < 100 && Damege < 1000){
  16. if( !(RimitOp) || (T_FallPoBl.HP - ((Damege)|0)) >= (T_FallPoBl.MAXHP * (1 - Sys_Seting.FrictionFallParMax))){
  17. T_FallPoBl.HP -= ((Damege)|0);
  18. }
  19. }else{
  20. T_FallPoBl.HP -= ((Damege)|0);
  21. }
  22.  
  23. if( !(Option) ) return;
  24.  
  25. if(T_FallPoBl.HP > 0){
  26. T_FallPoBl.fream_counter = 11 - ((T_FallPoBl.HP < T_FallPoBl.MAXHP) ? (T_FallPoBl.HP/ T_FallPoBl.MAXHP * 10 )|0 : 10);//表示されるフレームを変更
  27. }else{
  28. T_FallPoBl.on_flag = false;//存在フラグ削除
  29. }
  30.  
  31. }
  32.  
  33. //################ブロックプールダメージ用################
  34.  
  35. function Main_block_damege( Bx:Number , By:Number , Damege:Number, Option:Boolean = false , RimitOp:Boolean = false , BreakMode:uint = 0):void{
  36. if(Bx < 0 || Bx >= Main_Pool.PoolMaxX){
  37. return;
  38. }
  39. if(By < 0 || By >= Main_Pool.PoolMaxY){
  40. return;
  41. }
  42.  
  43. if(Main_Pool.LineFall && temp_line_flg[By]){
  44. return;
  45. }
  46.  
  47. var T_MainPool:BlockClass = Main_Pool.BlockPool[Bx][By];
  48.  
  49. if( !(T_MainPool.on_flag) ) return;
  50. if( T_MainPool.Metal_flg && (BreakMode <= 0) ) return;
  51. if( T_MainPool.Crystal_flg && (BreakMode <= 1) ) return;
  52.  
  53. if( !(RimitOp) || (T_MainPool.HP - Damege) > (T_MainPool.MAXHP * (1 - Sys_Seting.FrictionMainParMax))){
  54. T_MainPool.HP -= Damege;
  55. }
  56.  
  57. if( !(Option) ) return;
  58.  
  59. if(T_MainPool.HP > 0){
  60. T_MainPool.fream_counter = 11 - ((T_MainPool.HP < T_MainPool.MAXHP) ? (T_MainPool.HP/ T_MainPool.MAXHP * 10)|0 : 10);//表示されるフレームを変更
  61. }else{
  62. T_MainPool.sys_number = 0;//システム上の連結属性をリセット
  63. T_MainPool.NextBreak_flg = false;//ライン巻き込みフラグ削除
  64. T_MainPool.on_flag = false;//存在フラグ削除
  65.  
  66. }
  67.  
  68. }
  69.  
  70. ・・・中略・・・
  71.  
  72. //################ブロックプール移動・衝突処理################
  73.  
  74. function BlockCrashFall_fnc():Boolean{
  75. var TempY:Number = 0;
  76. var i:int = 0;
  77. var j:int = 0;
  78. var k:int = 0;
  79. var k2:int = 0;
  80. var Flag:Boolean = false; //落下が終了したかどうかのフラグ保持用
  81. var Damege:Number = 0;
  82.  
  83. var FallLineSpeed:Number = 0;
  84. var Fallsound1:Boolean = false;
  85. var Fallsound2:Boolean = false;
  86.  
  87. var T_MainPool:BlockClass;
  88. var TempYx16:int = 0;
  89. var TempFailTime:int = Main_Pool.FallTime;
  90. var TempIndex;Vector.<BlockClass> ;
  91.  
  92. for(i = Pool_y_delen; i >= 0 ; i--){
  93. TempYx16 = (i * Pool_BlockSize) - PoolOutLineLen;
  94. for(j = 0; j < Pool_x_len; j++){
  95. T_MainPool = Main_Pool.BlockPool[j][i];
  96. if( T_MainPool.on_flag ){
  97. if( TempFailTime > T_MainPool.FaillNumber){
  98. FallLineSpeed = TempFailTime - T_MainPool.FaillNumber;
  99.  
  100. if(T_MainPool.minus_flg ){
  101. if(T_MainPool.y <= TempYx16){
  102. T_MainPool.y = TempYx16;
  103. }else{
  104. T_MainPool.y -= FallLineSpeed ;
  105.  
  106. if(T_MainPool.y <= TempYx16){
  107. T_MainPool.y = TempYx16;
  108. Damege = ((0 - T_MainPool.Weight * FallLineSpeed + 1.999969482421875)>>1);
  109.  
  110. if(FallLineSpeed > 10){
  111. Fallsound2 = true;
  112. }else{
  113. Fallsound1 = true;
  114. }
  115.  
  116. TempIndex = Main_Pool.BlockPool[j];
  117. for(k = 1; k < Pool_y_len; k++){
  118. if((i - k) < 0){
  119. Main_block_damege( j , 0 , (((Damege -k) > 0)?(Damege -k):0) );
  120. break;
  121. }else if( TempIndex[i - k].on_flag ){
  122. Main_block_damege( j , i - k , (((Damege -k) > 0)?(Damege -k):0) );
  123. }else{
  124. Main_block_damege( j , i - k + 1 , (((Damege -k) > 0)?(Damege -k):0) );
  125. Main_block_damege( j , i - k + 2 , (((Damege -k -1) > 0)?(Damege -k -1):0) );
  126. break;
  127. }
  128. }
  129.  
  130. }else{
  131. Flag = true;
  132. }
  133. }
  134. }else{
  135. if(T_MainPool.y >= TempYx16){
  136. T_MainPool.y = TempYx16;
  137. }else{
  138. T_MainPool.y += FallLineSpeed ;
  139.  
  140. if(T_MainPool.y >= TempYx16){
  141. T_MainPool.y = TempYx16;
  142. Damege = ((T_MainPool.Weight * FallLineSpeed + 1.999969482421875)>>1);
  143.  
  144.  
  145. if(FallLineSpeed > 10){
  146. Fallsound2 = true;
  147. }else{
  148. Fallsound1 = true;
  149. }
  150.  
  151. TempIndex = Main_Pool.BlockPool[j];
  152. for(k = 1; k < Pool_y_len; k++){
  153. if((i + k) > Pool_y_delen){
  154. Main_block_damege( j , Pool_y_delen , (((Damege -k) > 0)?(Damege -k):0) );
  155. break;
  156. }else if( TempIndex[i + k].on_flag ){
  157. Main_block_damege( j , i + k , (((Damege -k) > 0)?(Damege -k):0) );
  158.  
  159. }else{
  160. Main_block_damege( j , i + k - 1 ,(((Damege -k) > 0)?(Damege -k):0) );
  161. Main_block_damege( j , i + k - 2 , (((Damege -k -1) > 0)?(Damege -k -1):0) );
  162. break;
  163. }
  164. }
  165. }else{
  166. Flag = true;
  167. }
  168. }
  169. }
  170.  
  171. }else{
  172. Flag = true;
  173. }
  174. }
  175. }
  176. }
  177.  
  178. if(LineFallSoundOn){ //衝突音オプション
  179. if( Fallsound1 ){
  180. SE_class.play("RoundOffSound1",SoundEffect_trans); //トンッ
  181. }
  182. if( Fallsound2 ){
  183. SE_class.play("RoundOffSound2",SoundEffect_trans); //ズドーン
  184. }
  185. }
  186.  
  187. if( !(Flag) ){
  188. for(i = 0; i < Pool_y_len ; i++){ //ブロックのダメージを一斉に適用
  189. for(j = 0; j < Pool_x_len; j++){
  190. if( Main_Pool.BlockPool[j][i].on_flag ){
  191. Main_block_damege( j, i, 0, true,false,2);
  192. }
  193. }
  194. }
  195. }
  196.  
  197. Main_Pool.MainPoolRefresh = true; //ブロック溜まりの表示更新フラグ
  198.  
  199. ScoreNum_fuc(); //スコア処理
  200. return Flag;
  201. }
  202.  
最終更新:2012年12月19日 07:25