BlockFallHit_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 BlockFallHit_fnc(Break_block:Array):void{//落下ブロック衝突ダメージ処理
  75. var Damege:Number = Fall_Pool.this_speed;
  76. var i:uint = 0;
  77. var j:uint = 0;
  78. var k:uint = 0;
  79. var Temp_x:Number = 0;
  80. var Temp_y:Number = 0;
  81. var AvWeight:Number = 0;
  82. var to_sum:Number = Fall_Pool.Next_Block[0].BlockSum;
  83.  
  84. var BrBcCount:int = Break_block.length;//衝突したブロックの番号リストから長さを取得
  85. var fall_sum:int = 0;
  86.  
  87. for (i = 0; i < 24; i++){ if( Fall_Pool.Next_Pool[0][i].on_flag ){ fall_sum++; } }
  88.  
  89. for(i = 0 ; i < to_sum ; i++ ){
  90. if(Fall_Pool.Next_Pool[0][i].on_flag ){
  91. AvWeight += Fall_Pool.Next_Pool[0][i].Weight;
  92. }
  93. }
  94. Damege = Damege * Math.abs(AvWeight) / BrBcCount;
  95.  
  96. for(i = 0 ; i < BrBcCount ; i++ ){//衝突したブロックを順に計算
  97. Fall_block_damege(Break_block[i] , Math.ceil(Damege / 1.5)); //操作ブロックダメージ加算
  98. Temp_x = Fall_Pool.this_x + Fall_Pool.Next_Block[0].B_x[ Break_block[i] ]; //衝突したブロックのX座標取得
  99. Temp_y = Fall_Pool.this_y + Fall_Pool.Next_Block[0].B_y[ Break_block[i] ]; //衝突したブロックのY座標取得
  100. for (j = 1; j < Pool_y_delen; j++){ //ブロックプールの下底(Pool_y_delen)までブロックを検索。
  101. if( (j + Temp_y) > Pool_y_delen){ //ブロックプールの下底(Pool_y_delen)に達した場合
  102. Main_block_damege( Temp_x , Temp_y + (j -1) , Math.ceil(Math.max(Damege - j,0) / 2));//ブロック溜まりダメージ加算
  103. Fall_block_damege(Break_block[i] , Math.ceil(Damege / Math.pow(2 , j) / 2));//操作ブロックダメージ加算
  104. break;
  105. }
  106.  
  107. if( Main_Pool.BlockPool[Temp_x][Temp_y + j].on_flag){//ブロックの存在を確認
  108. Main_block_damege( Temp_x , Temp_y + j , Math.ceil(Math.max(Damege - j,0) / 2));//ブロック溜まりダメージ加算
  109.  
  110. }else{//ブロックの存在がない場合、別処理に移る。
  111.  
  112. for(k = 1; k <= j + 3; k++ ){
  113. if( Temp_x - k < 0){
  114. break;
  115. }else if( Main_Pool.BlockPool[Temp_x - k][Temp_y + j -1].on_flag ){
  116. Main_block_damege( Temp_x - k , Temp_y + j -1, Math.ceil(Math.max(Damege - j - k,0) / (j + k)));//ブロック溜まりダメージ加算
  117. }else{
  118. break;
  119. }
  120. }
  121. for(k = 1; k <= j + 3; k++ ){
  122. if( Temp_x + k > Pool_x_delen){
  123. break;
  124. }else if( Main_Pool.BlockPool[Temp_x + k][Temp_y + j -1].on_flag ){
  125. Main_block_damege( Temp_x + k , Temp_y + j -1, Math.ceil(Math.max(Damege - j - k,0) / (j + k)));//ブロック溜まりダメージ加算
  126. }else{
  127. break;
  128. }
  129. }
  130.  
  131. break;
  132. }
  133. }
  134. }
  135. for(i = 0 ; i < 24 ; i++ ){
  136. Fall_block_damege(i , (( Damege /10 )|0) , true);//操作ブロックダメージ適用処理
  137. }
  138.  
  139.  
  140. for(i = 0; i < Pool_y_len ; i++){
  141. for(j = 0; j < Pool_x_len; j++){
  142. Main_block_damege( j, i, 0, true);//ブロック溜まりダメージ適用処理
  143. }
  144. }
  145.  
  146. Fall_Pool.StatusChen_flg = true;//操作ブロックの更新通知フラグ
  147. Main_Pool.MainPoolRefresh = true;//ブロック溜まりの更新通知フラグ
  148.  
  149. ScoreNum_fuc();//スコア計算呼び出し
  150. }
  151.  
  152. //衝突した後にダメージ適用をすることで、同時に衝突したのと同じ効果を得る。
  153. //各更新フラグは、グラフィック更新に使われる。
最終更新:2012年12月18日 07:00