//回転時のダメージ判定用
//################操作ブロックダメージ用################
if(Bnum > 24 || Bnum < 0) return;
var to_sum
:Number = Fall_Pool.
Next_Block[0].
BlockSum; var T_FallPoBl:BlockClass = Fall_Pool.Next_Pool[0][Bnum];
if( !(T_FallPoBl.on_flag) ) return;
if( T_FallPoBl.Metal_flg ) return;
if( T_FallPoBl.Crystal_flg ) return;
if(T_FallPoBl.Weight < 100 && Damege < 1000){
if( !(RimitOp) || (T_FallPoBl.HP - ((Damege)|0)) >= (T_FallPoBl.MAXHP * (1 - Sys_Seting.FrictionFallParMax))){
T_FallPoBl.HP -= ((Damege)|0);
}
}else{
T_FallPoBl.HP -= ((Damege)|0);
}
if(T_FallPoBl.HP > 0){
T_FallPoBl.fream_counter = 11 - ((T_FallPoBl.HP < T_FallPoBl.MAXHP) ? (T_FallPoBl.HP/ T_FallPoBl.MAXHP * 10 )|0 : 10);//表示されるフレームを変更
}else{
T_FallPoBl.on_flag = false;//存在フラグ削除
}
}
//################ブロックプールダメージ用################
if(Bx < 0 || Bx >= Main_Pool.PoolMaxX){
return;
}
if(By < 0 || By >= Main_Pool.PoolMaxY){
return;
}
if(Main_Pool.LineFall && temp_line_flg[By]){
return;
}
var T_MainPool:BlockClass = Main_Pool.BlockPool[Bx][By];
if( !(T_MainPool.on_flag) ) return;
if( T_MainPool.Metal_flg && (BreakMode <= 0) ) return;
if( T_MainPool.Crystal_flg && (BreakMode <= 1) ) return;
if( !(RimitOp) || (T_MainPool.HP - Damege) > (T_MainPool.MAXHP * (1 - Sys_Seting.FrictionMainParMax))){
T_MainPool.HP -= Damege;
}
if(T_MainPool.HP > 0){
T_MainPool.fream_counter = 11 - ((T_MainPool.HP < T_MainPool.MAXHP) ? (T_MainPool.HP/ T_MainPool.MAXHP * 10)|0 : 10);//表示されるフレームを変更
}else{
T_MainPool.sys_number = 0;//システム上の連結属性をリセット
T_MainPool.NextBreak_flg = false;//ライン巻き込みフラグ削除
T_MainPool.on_flag = false;//存在フラグ削除
}
}
・・・中略・・・
//操作ブロック回転時のダメージ判定のソース
//################操作ブロック回転用################
fall_rotate_function():void{
if( !(VsWatchMode) ) Block_loopFunc(); //観戦モードでないなら回転開始処理を呼ぶ。
if( !(Fall_Pool.rotat_block) ) return; //回転していないならメインに戻る。
var This_rotation
:Number = Fall_Pool.
this_rotation; var i:int = 0;
var j:int = 0;
var k:int = 0;
var to_sum
:Number = Fall_Pool.
Next_Block[0].
BlockSum; var Fall_x
:Number = Fall_Pool.
this_x + 0.5; var Fall_y
:Number = Fall_Pool.
this_y + Fall_Pool.
this_y_mili / Pool_BlockSize
- 0.4375;
if(This_rotation != 0 ){ //回転が終了していないなら当たり判定
if(Sys_Seting.Friction_flg){
if(true){
sin = Appro.sin(This_rotation); //sinを1度単位で並べた配列から値をGET
cos = Appro.cos(This_rotation); //cosを1度単位で並べた配列から値をGET
for(i = 0; i < to_sum; i++ ){
if( Fall_Pool.Next_Pool[0][i].on_flag ){// 5x5のブロックとして全ての点で計測
temp_x_master = Fall_Pool.Next_Block[0].B_x[i] * 4;
temp_y_master = Fall_Pool.Next_Block[0].B_y[i] * 4;
for(j = -2; j <= 2; j++){
for(k = -2; k <= 2; k++){
temp_x = temp_x_master + j;
temp_y = temp_y_master + k;
this_x = (((cos * temp_x - sin * temp_y)/4 + Fall_x +1)|0) -1;
this_y = (((sin * temp_x + cos * temp_y)/4 + Fall_y +1)|0) -1;
if(this_x < 0 || this_x > Pool_x_delen || this_y > Pool_y_delen || this_y < 10){
if(this_y >= 10) FallDamege_Ary[i] += Sys_Seting.FrictionFallDamege;
}else{
if( Main_Pool.BlockPool[this_x][this_y].on_flag ){
FallDamege_Ary[i] += Sys_Seting.FrictionFallDamege;
MainDamege_Ary[this_x][this_y] += Sys_Seting.FrictionMainDamege;
}
}
}
}
Fall_block_damege(i , FallDamege_Ary[i] , true , true);
FallDamege_Ary[i] = 0;
}
}
for(i = 0; i < Pool_y_len ; i++){
for(j = 0; j < Pool_x_len; j++){
if( Main_Pool.BlockPool[j][i].on_flag ){
Main_block_damege( j, i, MainDamege_Ary[j][i] , true , true);
}
MainDamege_Ary[j][i] = 0;
}
}
}
}
if(This_rotation > 0){ //判定が終わったら15度回す。
This_rotation -= 15;
}else{
This_rotation += 15;
}
if( !(VsWatchMode) ){ //観戦モードでないなら表示更新通知フラグをONにする。
Main_Pool.MainPoolRefresh = true;
Fall_Pool.StatusChen_flg = true;
}
}else{ //回転が終了した時
if( !(VsWatchMode) ){ //観戦モードでないならデータを送信
Fall_Pool.this_rotation = This_rotation;
Main_Pool.MainPoolRefresh = true;
Fall_Pool.StatusChen_flg = true;
Fall_Pool.rotat_block = false;
NetDataWrite(false , true , true , true);//Count_flg , Fall_flg , Main_flg , Sys_flg
}
}
ScoreNum_fuc(); //スコア処理
Fall_Pool.this_rotation = This_rotation; //角度を収める。
}
//Approというクラスからsinやcosを参照しているが、これは端末ごとにsinやcosの計算結果が異なるため、
//予め計算しておいた数値をリスト化してApproクラスで管理しているためである。