//
//################操作ブロックダメージ用################
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;//存在フラグ削除
}
}
・・・中略・・・
//################ブロックプール移動・衝突処理################
function BlockCrashFall_fnc
():Boolean{ var i:int = 0;
var j:int = 0;
var k:int = 0;
var k2:int = 0;
var Flag
:Boolean = false; //落下が終了したかどうかのフラグ保持用
var T_MainPool:BlockClass;
var TempYx16:int = 0;
var TempFailTime:int = Main_Pool.FallTime;
var TempIndex
;Vector.
<BlockClass
> ;
for(i = Pool_y_delen; i >= 0 ; i--){
TempYx16 = (i * Pool_BlockSize) - PoolOutLineLen;
for(j = 0; j < Pool_x_len; j++){
T_MainPool = Main_Pool.BlockPool[j][i];
if( T_MainPool.on_flag ){
if( TempFailTime > T_MainPool.FaillNumber){
FallLineSpeed = TempFailTime - T_MainPool.FaillNumber;
if(T_MainPool.minus_flg ){
if(T_MainPool.y <= TempYx16){
T_MainPool.y = TempYx16;
}else{
T_MainPool.y -= FallLineSpeed ;
if(T_MainPool.y <= TempYx16){
T_MainPool.y = TempYx16;
Damege = ((0 - T_MainPool.Weight * FallLineSpeed + 1.999969482421875)>>1);
if(FallLineSpeed > 10){
Fallsound2 = true;
}else{
Fallsound1 = true;
}
TempIndex = Main_Pool.BlockPool[j];
for(k = 1; k < Pool_y_len; k++){
if((i - k) < 0){
Main_block_damege( j , 0 , (((Damege -k) > 0)?(Damege -k):0) );
break;
}else if( TempIndex[i - k].on_flag ){
Main_block_damege( j , i - k , (((Damege -k) > 0)?(Damege -k):0) );
}else{
Main_block_damege( j , i - k + 1 , (((Damege -k) > 0)?(Damege -k):0) );
Main_block_damege( j , i - k + 2 , (((Damege -k -1) > 0)?(Damege -k -1):0) );
break;
}
}
}else{
Flag = true;
}
}
}else{
if(T_MainPool.y >= TempYx16){
T_MainPool.y = TempYx16;
}else{
T_MainPool.y += FallLineSpeed ;
if(T_MainPool.y >= TempYx16){
T_MainPool.y = TempYx16;
Damege = ((T_MainPool.Weight * FallLineSpeed + 1.999969482421875)>>1);
if(FallLineSpeed > 10){
Fallsound2 = true;
}else{
Fallsound1 = true;
}
TempIndex = Main_Pool.BlockPool[j];
for(k = 1; k < Pool_y_len; k++){
if((i + k) > Pool_y_delen){
Main_block_damege( j , Pool_y_delen , (((Damege -k) > 0)?(Damege -k):0) );
break;
}else if( TempIndex[i + k].on_flag ){
Main_block_damege( j , i + k , (((Damege -k) > 0)?(Damege -k):0) );
}else{
Main_block_damege( j , i + k - 1 ,(((Damege -k) > 0)?(Damege -k):0) );
Main_block_damege( j , i + k - 2 , (((Damege -k -1) > 0)?(Damege -k -1):0) );
break;
}
}
}else{
Flag = true;
}
}
}
}else{
Flag = true;
}
}
}
}
if(LineFallSoundOn){ //衝突音オプション
if( Fallsound1 ){
SE_class.play("RoundOffSound1",SoundEffect_trans); //トンッ
}
if( Fallsound2 ){
SE_class.play("RoundOffSound2",SoundEffect_trans); //ズドーン
}
}
if( !(Flag) ){
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, 0, true,false,2);
}
}
}
}
Main_Pool.MainPoolRefresh = true; //ブロック溜まりの表示更新フラグ
ScoreNum_fuc(); //スコア処理
return Flag;
}