void Stage::initID(){ //i => kind of id for(int i = 0; i < 5; ++i) mapchipDefinition.push_back( MapchipDefinition(i) ); for(auto& chip : mapchipDefinition){ switch(chip.id){ case 0://chip which can't move chip.image = MV1LoadModel("data/image/3Dmodel/chip/00 null/00 null.mqo"); //chip.image = GetColor(255, 128, 0); chip.resistance = INT_MAX; break; case 1://movable(id=1 => 草原, id=2 => 岩… などにする) chip.image = MV1LoadModel("data/image/3Dmodel/chip/01 grass.mqo"); //chip.image = GetColor(128, 255, 0); chip.resistance = 1; break; case 2://沼地的な chip.image = MV1LoadModel("data/image/3Dmodel/chip/02 marsh.mqo"); //chip.image = GetColor(128, 0, 128); chip.resistance = 2; break; default: chip.resistance = INT_MAX; break; } } }
// キャラクターの共通情報を初期化 void CharaCommon_Initialize( void ) { // モデルの読み込み chcmn.BaseModelHandle = MV1LoadModel( "DxChara.x" ) ; // 影描画用の画像の読み込み chcmn.ShadowHandle = LoadGraph( "Shadow.tga" ) ; }
Boss::Boss(){ graph = MV1LoadModel("Graph/Active Frame/Active Frame.pmx"); if (!graph){ DxLib_End(); } boss_attack_sound = LoadSoundMem("sound/bomb.mp3"); ChangeVolumeSoundMem(125, boss_attack_sound); score = 20000; }
Enemy::Enemy(float x, float y, float z, int life, int timer){ this->x = x; this->y = y; this->z = z; this->life = life; this->timer = timer; graph = MV1LoadModel("R-13A.pmd"); MV1SetScale( graph, VGet(0.025f, 0.025f, 0.025f)); ShotSpeed = 1.5f; }
//public--start inline MODEL :: MODEL(SHOT* mS, float rotateY){ init(); ModelHandle = MV1LoadModel("model\\heri\\heri.mv1"); MV1SetFrameVisible(ModelHandle, 39, FALSE); MV1SetupCollInfo(ModelHandle, 39, 8, 16, 32); attachIndex = MV1AttachAnim(ModelHandle, 0, -1, FALSE); animTime = MV1GetAttachAnimTotalTime(ModelHandle, attachIndex); playTime = 0.0f; this->mS = mS; this->rotateY = rotateY; }
void Character::Init(float a, float b, float c, float X, float Y, float Z, int graph){ x = a; y = b; z = c; RotateX = X; RotateY = Y; RotateZ = Z; RotateZ2 = 0; life = 10; power = 0; this->graph = graph; DeathTimer = 180; targetwindow = MV1LoadModel("target.mqo"); MV1SetScale(targetwindow, VGet(0.025f, 0.025f, 0.025f)); MV1SetScale(graph, VGet(0.06f, 0.06f, 0.06f)); for(int i = 0; i < SNUM; i++){ shot[i].flag = 0; shot[i].graph = MV1LoadModel("shotp.pmx"); shot[i].attach = MV1AttachAnim( shot[i].graph, 0, -1, FALSE ) ; shot[i].shottime = MV1GetAttachAnimTotalTime( shot[i].graph, shot[i].attach ); shot[i].playtime = 0; MV1SetScale(shot[i].graph, VGet(0.3f, 0.3f, 0.8f)); } //ブーストの初期化 boost.graph = MV1LoadModel("boost.pmd"); boost.attach = MV1AttachAnim(boost.graph, 1, -1, FALSE ) ; boost.totaltime= MV1GetAttachAnimTotalTime( boost.graph, boost.attach ) ; boost.playtime = 0; MV1SetScale(boost.graph, VGet(0.11f, 0.11f, 0.11f)); boost2.graph = MV1LoadModel("boost.pmd"); boost2.attach = MV1AttachAnim(boost2.graph, 2, -1, FALSE ) ; boost2.totaltime= MV1GetAttachAnimTotalTime( boost2.graph, boost2.attach ) ; boost2.playtime = 0; MV1SetScale(boost2.graph, VGet(0.11f, 0.11f, 0.11f)); shotsound = LoadSoundMem( "sound/shoot1.mp3" ); ChangeVolumeSoundMem( 100, shotsound ) ; }
Character::Character(float a, float b, float c, float X, float Y, float Z, int graph){ x = a; y = b; z = c; RotateX = X; RotateY = Y; RotateZ = Z; life = 10; this->graph = graph; targetwindow = MV1LoadModel("target.mqo"); MV1SetScale(targetwindow, VGet(0.025f, 0.025f, 0.025f)); MV1SetScale(graph, VGet(0.015f, 0.015f, 0.015f)); for(int i = 0; i < SNUM; i++){ shot[i].flag = 0; shot[i].graph = MV1LoadModel("aaaa.mqo"); } damage_sound = LoadSoundMem("sound/nc84550.mp3"); ChangeVolumeSoundMem(100, damage_sound); damaged_timer = 0; damaged_flag = false; }
void Enemy::Death(){ float x = 0.3f, y = 0.3f, z =0.3f; if(life <= 0 ){ DeathTimer --; RotateY --; RotateX --; MV1SetScale(graph, VGet( x, y , z)); } if( life == 0){ graph = MV1LoadModel("爆発消x1.pmd"); life --; } }
void Character::Death(){ if(KeyGet(KEY_INPUT_L)) life = 0; float x = 0.3f, y = 0.3f, z =0.3f; if(life <= 0 ){ DeathTimer --; RotateY --; RotateX --; MV1SetScale(graph, VGet( x, y , z)); if(DeathTimer == 0) gamestate = 2; } if( life == 0){ graph = MV1LoadModel("Graph/消せる爆発/爆発消x1.pmd"); life --; } }
void MANAGIMENT :: freeMode(){ int ModelHandle; //床読み込み ModelHandle = MV1LoadModel("model\\floor\\floor.mqo"); MV1SetScale(ModelHandle, VGet(250.0f, 100.0f, 250.0f)); MV1SetPosition(ModelHandle, VGet(0, 0, 0)); BUILDING buil; //弾の配列の確保 SHOT* mShot; mShot = new SHOT(GetColor(255, 255, 0), 15.0f, 85.0f); //モデルの読み込み PLAYER* p; p = new PLAYER(VGet(0, 0, 0), 0.0, mShot); //ターゲットの読み込み TARGET t; t.newTarget(); while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 fpsDisplay(); //モデルの操作,描画 p->control(); p->display(); t.display(); p->doNotMove(buil.collision(p->getPos(), p->getRotate())); p->doNotMove(t.collision(p->getPos(), p->getRotate())); mShot->collisionTarget(buil.getModelHandle()); if(mShot->collisionTarget(t.getModelHandle()) > 0){ t.delTarget(); t.newTarget(); } //裏画面の内容を表画面に反映 ScreenFlip(); } MV1DeleteModel(ModelHandle); delete mShot; delete p; }
void Enemy::SetAll( float x, float y, float z, int life, int timer, int shotpattern, int movepattern , int Itemflag){ SetX(x); SetY(y); SetZ(z); SetLife(life); SetTimer(timer); this->Itemflag = Itemflag; this->shotpattern = shotpattern; this->movepattern = movepattern; for(int i = 0; i < ESNUM; i++){ es[i].graph = MV1LoadModel("aaaa.mqo"); es[i].flag = 0; MV1SetScale(es[i].graph, VGet(0.01f, 0.01f, 0.01f)); } score = life * 100; DeathTimer = 120; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //細かい設定色々 ChangeWindowMode(true); SetGraphMode(Window::Width, Window::Height, 32); SetWindowSizeChangeEnableFlag(TRUE); SetWindowSizeExtendRate(1.0); //背景の色替え //SetBackgroundColor(255, 255, 255); int ModelHandle; // DXライブラリ初期化処理(エラーが起きたら直ちに終了) if (DxLib_Init() == -1) return -1; //ウラ画面に描画する SetDrawScreen(DX_SCREEN_BACK); ModelHandle = MV1LoadModel("res/car04.mqo"); MV1SetPosition(ModelHandle, VGet(200.0f, -200.0f, 600.0f)); //メインループ //whileの()にあるProcessMessageを消すと、正常に動かなくなる while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { ClearDrawScreen(); //画面を消去する MV1DrawModel(ModelHandle); ScreenFlip(); //オモテ画面とウラ画面を入れ替える } //DXライブラリ使用の終了処理 DxLib_End(); //ソフトの終了 return 0; }
// 初期化をする Room *Room_Initialize() { Room *self; self = new Room(); self->room = MV1LoadModel("meta/room.mqo") ; //model画像ハンドルの格納 self->window = MV1SearchFrame(self->room, "window"); self->coffee = MV1SearchFrame(self->room, "coffee"); self->door = MV1LoadModel("meta/door.mqo") ; //model画像ハンドルの格納 self->glass = MV1LoadModel("meta/glass.mqo") ; self->hammer = MV1LoadModel("meta/hammer.mqo") ; self->pot = MV1LoadModel("meta/pot.mqo") ; self->paper0 = MV1LoadModel("meta/paper.mqo") ; self->paper1 = MV1DuplicateModel(self->paper0) ; self->paper2 = MV1DuplicateModel(self->paper1) ; self->paper3 = MV1DuplicateModel(self->paper1) ; self->table = MV1LoadModel("meta/table.mqo") ; self->bed = MV1LoadModel("meta/bed.mqo") ; self->makura = MV1SearchFrame(self->bed, "makura"); self->huton = MV1SearchFrame(self->bed, "huton"); self->stand = MV1SearchFrame(self->bed, "cover"); self->black_cap = MV1SearchFrame(self->table, "black_futa"); self->yellow_cap = MV1SearchFrame(self->table, "yellow_futa"); self->green_cap = MV1SearchFrame(self->table, "green_futa"); self->door_close_count = 0; self->rotY = 0.0f; self->swit = 0; self->count = 0; self->s_swit = 0; self->s_count = 0; self->slide = 0; self->role = 0; return self; }
void Boss::Init(){ x = 0; y = -200; z = 130; life = LIFE; SetAnimPattern(appear); AnimSpeed = 0.8; AnimTime = 0.0f; for (int i = 0; i < BSNUM; i++){ bs[i].flag = 0; bs[i].graph = 0; } timer = 0; flag = 0 + APPEAR; ShotSpeed = 1.5f; for (int i = 0; i < 16; i++){ HitEffectGraph[i] = MV1LoadModel("Graph/消せる爆発/リング3連.pmd"); HitEffectPosition[i] = VGet(0, 0, 0); HitEffect[i].AnimTime = 0.0f; HitEffect[i].TotalTime = 5.0f; HitEffectFlag[i] = 0; } }
// ステージの初期化処理 void Stage_Initialize( void ) { // ステージモデルの読み込み stg.ModelHandle = MV1LoadModel( "ColTestStage.mqo" ) ; // モデル全体のコリジョン情報のセットアップ MV1SetupCollInfo( stg.ModelHandle, -1 ) ; // 作成する画像のフォーマットを不動小数点型で1チャンネル、16ビットにする SetDrawValidFloatTypeGraphCreateFlag( TRUE ) ; SetCreateDrawValidGraphChannelNum( 1 ) ; SetCreateGraphColorBitDepth( 16 ) ; // 影用深度記録画像の作成 DepthBufferGraphHandle = MakeScreen( 4096, 4096, FALSE ) ; // 設定を元に戻す SetDrawValidFloatTypeGraphCreateFlag( FALSE ) ; SetCreateDrawValidGraphChannelNum( 4 ) ; SetCreateGraphColorBitDepth( 32 ) ; // 深度記録画像描画用の頂点シェーダーを読み込む Skin4_DepthShadow_Step1_VertexShader = LoadVertexShader( "SkinMesh4_DepthShadow_Step1VS.vso" ) ; Normal_DepthShadow_Step1_VertexShader = LoadVertexShader( "NormalMesh_DepthShadow_Step1VS.vso" ) ; // 深度記録画像描画用のピクセルシェーダーを読み込む DepthShadow_Step1_PixelShader = LoadPixelShader( "DepthShadow_Step1PS.pso" ) ; // 深度記録画像を使ったディレクショナルライト一つの描画用頂点シェーダーを読み込む Skin4_DirLight_DepthShadow_Step2_VertexShader = LoadVertexShader( "SkinMesh4_DirLight_DepthShadow_Step2VS.vso" ) ; Normal_DirLight_DepthShadow_Step2_VertexShader = LoadVertexShader( "NormalMesh_DirLight_DepthShadow_Step2VS.vso" ) ; // 深度記録画像を使ったディレクショナルライト一つの描画用ピクセルシェーダーを読み込む DirLight_DepthShadow_Step2_PixelShader = LoadPixelShader( "DirLight_DepthShadow_Step2PS.pso" ) ; }
void MANAGIMENT :: battleModeC(){ int ModelHandle; //床読み込み ModelHandle = MV1LoadModel("model\\floor\\floor.mqo"); MV1SetScale(ModelHandle, VGet(250.0f, 100.0f, 250.0f)); MV1SetPosition(ModelHandle, VGet(0, 0, 0)); //弾の配列の確保 SHOT* mShot; SHOT* eShot; mShot = new SHOT(GetColor(255, 255, 0), 15.0f, 85.0f); eShot = new SHOT(GetColor(255, 0, 0), 15.0f, 85.0f); //モデルの読み込み PLAYER* p; ENEMY* e; p = new PLAYER(VGet(0, 0, 3500.0), 0.0f, mShot); e = new ENEMY(VGet(0, 0, -3500), PI, eShot); BUILDING buil; int pH; int eH; while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 fpsDisplay(); //モデルの操作,描画 //プレイヤー p->control(); p->display(); //敵 VECTOR rotateP = p->getRotate(); e->control(rotateP.y, p->getVector()); e->display(); p->doNotMove(buil.collision(p->getPos(), p->getRotate())); e->doNotMove(buil.collision(e->getPos(), e->getRotate())); mShot->collisionTarget(buil.getModelHandle()); eShot->collisionTarget(buil.getModelHandle()); p->doNotMove(p->collision(e->getPos(), e->getRotate())); e->doNotMove(e->collision(p->getPos(), p->getRotate())); pH = p->damageCheck(eShot); eH = e->damageCheck(mShot); if(pH <=0 || eH <= 0) break; mShot->collisionModel(e->getModelHandle()); eShot->collisionModel(p->getModelHandle()); //裏画面の内容を表画面に反映 ScreenFlip(); } while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 SetFontSize(16); fpsDisplay(); p->addCR(0.01f); p->display(); e->display(); SetFontSize(32); pH = p->getHp(); eH = e->getHp(); if(pH == eH) DrawFormatString(300, 350, GetColor(255, 255, 255), "Draw"); else if(pH > eH) DrawFormatString(310, 350, GetColor(255, 255, 255), "Win"); else DrawFormatString(300, 350, GetColor(255, 255, 255), "Loss"); //裏画面の内容を表画面に反映 ScreenFlip(); } SetFontSize(16); MV1DeleteModel(ModelHandle); delete mShot; delete eShot; delete p; delete e; }
void MANAGIMENT :: battleModeH(){ int ModelHandle; //床読み込み ModelHandle = MV1LoadModel("model\\floor\\floor.mqo"); MV1SetScale(ModelHandle, VGet(250.0f, 100.0f, 250.0f)); MV1SetPosition(ModelHandle, VGet(0, 0, 0)); BUILDING buil; //弾の配列の確保 SHOT* mShot; SHOT* eShot; mShot = new SHOT(GetColor(255, 255, 0), 15.0f, 85.0f); eShot = new SHOT(GetColor(255, 0, 0), 15.0f, 85.0f); READ_INIT* read; read = new READ_INIT(); char src_ip[32]; int src_port; char sin_ip[32]; int sin_port; VECTOR pPos; VECTOR ePos; float pR, eR; read->read(src_ip, &src_port, sin_ip, &sin_port, &pPos, &ePos, &pR, &eR); delete read; NET_TRANS* net; net = new NET_TRANS(src_ip, src_port, sin_ip, sin_port); net->setBind(); hTh = (HANDLE)_beginthreadex(NULL, 0, &thread_recv, net, 0, &thID); while(1){ DrawFormatString(20, 20, GetColor(0, 0, 0), "通信中"); if(!nflag2) net->send("start"); if(nflag1) net->send("ok"); if(nflag1 && nflag2) break; if(ProcessMessage() != 0 || CheckHitKey(KEY_INPUT_ESCAPE) != 0){ sflag1 = true; WaitForSingleObject(hTh, INFINITE); CloseHandle(hTh); delete net; delete mShot; delete eShot; MV1DeleteModel(ModelHandle); return; } ScreenFlip(); } sflag1 = true; WaitForSingleObject(hTh, INFINITE); CloseHandle(hTh); //モデルの読み込み PLAYER* p; ENEMY_NET* e; p = new PLAYER(pPos, pR, mShot, net); e = new ENEMY_NET(ePos, eR, eShot, net); int pH; int eH; e->start(e); while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 fpsDisplay(); //モデルの操作,描画 //プレイヤー p->control(); p->send(); p->doNotMove(buil.collision(p->getPos(), p->getRotate())); mShot->collisionTarget(buil.getModelHandle()); p->display(); e->display(); e->enterCritical(); eShot->collisionTarget(buil.getModelHandle()); pH = p->damageCheck(eShot); e->leaveCritical(); p->doNotMove(p->collision(e->getPos(), e->getRotate())); if(e->getHp() <= 0 || pH <= 0){ break; } eH = e->damageCheck(mShot); //裏画面の内容を表画面に反映 ScreenFlip(); } while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){ p->send(); // 画面をクリア ClearDrawScreen(); //床の描画 MV1DrawModel(ModelHandle); buil.display(); //FPSの表示 SetFontSize(16); fpsDisplay(); p->addCR(0.01f); p->display(); e->display(); SetFontSize(32); pH = p->getHp(); eH = e->getHp(); if(pH == eH) DrawFormatString(300, 350, GetColor(255, 255, 255), "Draw"); else if(pH > eH) DrawFormatString(310, 350, GetColor(255, 255, 255), "Win"); else DrawFormatString(300, 350, GetColor(255, 255, 255), "Loss"); //裏画面の内容を表画面に反映 ScreenFlip(); } e->stop(); SetFontSize(16); delete net; MV1DeleteModel(ModelHandle); delete mShot; delete eShot; delete p; delete e; }
//public--start inline TARGET :: TARGET(void){ srand((unsigned)time(NULL)); ModelHandle = MV1LoadModel("model\\target\\target.mqo"); MV1SetScale(ModelHandle, VGet(3.0f, 3.0f, 3.0f)); }
void Boss::Shot(float px, float py, float pz){ if (timer == 119){ SetAnimPattern(firebomb); flag |= HORIZONTAL; } if (count == 6){ flag &= ~HORIZONTAL + ~VERTICAL; flag |= APPROACH; } if (AnimPattern == firebomb && AnimTime >= 20 && !(flag & ATTACK) && flag & HORIZONTAL){ float len = 3; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - target_x; float sby = y - target_y + 40; float sbz = z - target_z; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px - len; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len * 2; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len * -2; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } flag |= ATTACK + VERTICAL; flag &= ~HORIZONTAL; count++; PlaySoundMem(boss_attack_sound, DX_PLAYTYPE_BACK); } if (AnimPattern == firebomb && AnimTime >= 20 && !(flag & ATTACK) && flag & VERTICAL){ float len = 3; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - target_x; float sby = y - target_y + 40; float sbz = z - target_z; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 - len; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 + len; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px ; float sby = y - py + 40 + len * 2; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px ; float sby = y - py + 40 + len * -2; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } flag |= ATTACK; flag &= ~VERTICAL; flag |= HORIZONTAL; count++; PlaySoundMem(boss_attack_sound, DX_PLAYTYPE_BACK); } if (AnimPattern == firebomb && AnimTime >= 20 && !(flag & ATTACK) && flag & CROSS){ float len = 3; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - target_x; float sby = y - target_y + 40; float sbz = z - target_z; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 - len; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 + len; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 + len * 2; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px; float sby = y - py + 40 + len * -2; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px - len; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len * 2; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - px + len * -2; float sby = y - py + 40; float sbz = z - pz; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } flag |= ATTACK; count++; PlaySoundMem(boss_attack_sound, DX_PLAYTYPE_BACK); } if (flag & APPROACH){ if (AnimPattern != flight && !(flag & CONTINUITY)){ SetAnimPattern(flight); flag &= ~HORIZONTAL + ~VERTICAL + ~CROSS; } if (!(flag & CONTINUITY)){ z -= 2; } if (z <= 80 && AnimPattern == flight){ flag |= CONTINUITY; SetAnimPattern(firebomb); } if (AnimPattern == firebomb && AnimTime >= 20 && (int(AnimTime) % 5 == 0) && flag & CONTINUITY){ float len = 3; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag == 0){ if (bs[i].graph == 0){ bs[i].graph = MV1LoadModel("aaaa.mqo"); MV1SetScale(bs[i].graph, VGet(0.01f, 0.01f, 0.01f)); } bs[i].flag = 1; bs[i].x = x; bs[i].y = y + 40; bs[i].z = z; float sbx = x - target_x; float sby = y - target_y + 40; float sbz = z - target_z; float sb = sqrt(sbx * sbx + sbz * sbz); bs[i].rx = sbx / sb * ShotSpeed; bs[i].rz = sbz / sb * ShotSpeed; bs[i].ry = sby / sqrt(sb * sb + py * py) * ShotSpeed; break; } } flag |= ATTACK; count += 100; PlaySoundMem(boss_attack_sound, DX_PLAYTYPE_BACK); } } if (count >= 2100){ count = 0; flag |= LEAVE; flag &= ~APPROACH; } if (flag & LEAVE){ z += 1; if (z >= 130){ flag &= ~LEAVE; flag &= ~CONTINUITY; if (life <= LIFE / 2) { flag |= CROSS; } else{ flag |= HORIZONTAL; } count = 0; } } if (AnimPattern == firebomb && AnimTime == 0) flag &= ~ATTACK; for (int i = 0; i < BSNUM; i++){ if (bs[i].flag) { bs[i].x -= bs[i].rx; bs[i].y -= bs[i].ry; bs[i].z -= bs[i].rz; MV1SetPosition(bs[i].graph, VGet(bs[i].x, bs[i].y, bs[i].z)); MV1DrawModel(bs[i].graph); if (bs[i].z < -10){ bs[i].flag = 0; } } } }
Model(const String &source) { handle = MV1LoadModel(source.c_str()); }
Enemy::Enemy(){ life = -1; graph = MV1LoadModel("Graph/Tブースター.pmx"); MV1SetScale( graph, VGet(0.5f, 0.5f, 0.5f)); }