void CDialogParticleEditor::OnBnClickedButtonAddstage() { AddStage(); }
//============================================================== // <CShtGame>스테이지 구축(특수 공격) void CShtGame::MakeStages_Special() { CMover *stage; CMoverGroup* mg=MoverGroupManager->GetGroup(MYSHIP_GROUP); CMoverGroup* sg=MoverGroupManager->GetGroup(STAGE_GROUP); CMoverGroup* bg=MoverGroupManager->GetGroup(BULLET_GROUP); CMoverGroup* eg=MoverGroupManager->GetGroup(ENEMY_GROUP); CMoverGroup* wg=MoverGroupManager->GetGroup(WEAPON_GROUP); CMoverGroup* gg=MoverGroupManager->GetGroup(GROUND_GROUP); CMoverGroup* ig=MoverGroupManager->GetGroup(ITEM_GROUP); CMoverGroup* ag=MoverGroupManager->GetGroup(WATER_GROUP); CMoverGroup* rg=MoverGroupManager->GetGroup(BARRIER_GROUP); CMover *myship; CMover* shot=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_SMALL]) ->SetDirected(3.0f, 0.75f) ->SetDamage(1, 1, NULL, NULL, false, false); CMover* max_shot=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_LARGE]) ->SetDirected(3.0f, 0.75f) ->SetDamage(1, 1, NULL, NULL, false, false); CMover* enemy_crash=(new CMover(sg)) ->AddSpawn((new CMover(sg)) ->SetObj3D(Obj3D[CRASH_ENEMY]) ->SetScale(0.5f, 0.5f, 0.1f, 0.1f) ->SetAlpha(2, -0.04f) ->SetNext(NULL, 50) , 0, 0, 1); CMover* enemy=(new CMover(eg)) ->SetObj3D(Obj3D[ENEMY]) ->SetPos(37.5f, 0) ->SetAiming(0.3f, 0) ->SetAutoYaw() ->SetDamage(1, 1, enemy_crash, NULL, false, false); CMover* bullet=(new CMover(bg)) ->SetObj3D(Obj3D[BULLET_SMALL_BLUE]) ->SetAiming(0.6f, 0) ->SetYaw(0.05f); //========================================================== // 폭탄 CMover* bomb_bullet=(new CMover(eg)) ->SetObj3D(Obj3D[BULLET_SMALL_BLUE]) ->SetAiming(0.6f, 0) ->SetYaw(0.05f) ->SetDamage(1, 1, NULL, NULL, false, false); CMover* bomb_enemy=(new CMover(enemy)) ->AddSpawn(bomb_bullet, 0, 50, -1); CMover* bomb_crash=(new CMover(wg)) ->SetObj3D(Obj3D[CRASH_MISSILE]) ->SetScale(8, 8, 0.1f, 0.1f) ->SetAlpha(2, -0.02f) ->SetNext(NULL, 200); CMover* bomb=(new CMover(wg)) ->SetObj3D(Obj3D[MISSILE_SMALL]) ->SetDirected(1.0f, 0.75f) ->SetDamage(0, 1, NULL, NULL, false, false) ->AddSpawn(bomb_crash, 40, 0, 1) ->SetNext(NULL, 40); myship=(new CMover(MyShipTopView)) ->SetWeapon_Shot(WP_BASIC_SHOT, bomb); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(bomb_enemy, 0, 100, -1); AddStage(stage, L"폭탄", L"폭발할 때까지 잠시 시간이 걸리는 폭탄. \n메인 캐릭터는 무적상태가 되지 않음.\n\n" L"■폭탄■\n[X]키/버튼2"); //========================================================== // 근접 공격 CMover* punch=(new CMover(wg)) ->SetObj3D(Obj3D[PUNCH]) ->SetAlpha(0.2f, 0.03f); myship=(new CMover(MyShipTopView)) ->SetPunch(punch, 1, 60); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(bomb_enemy, 0, 100, -1); AddStage(stage, L"근접공격", L"버튼을 누르면 일정 시간동안 근접공격을 함.\n\n" L"■근접공격■\n[X]키/버튼2"); //========================================================== // 유도 폭파 CMover* ie_crash=(new CMover(wg)) ->SetObj3D(Obj3D[CRASH_ENEMY]) ->SetScale(0.5f, 0.5f, 0.1f, 0.1f) ->SetAlpha(2, -0.04f) ->SetNext(NULL, 50); CMover* ie_enemy=(new CMover(eg)) ->SetObj3D(Obj3D[ENEMY]) ->SetAiming(0.3f, 0) ->SetAutoYaw() ->SetDamage(1, 1, ie_crash, NULL, false, false); CMover* ie_enemy0=(new CMover(ie_enemy))->SetPos(37.5f, 0); CMover* ie_enemy1=(new CMover(ie_enemy))->SetPos(0, 20); CMover* ie_enemy2=(new CMover(ie_enemy))->SetPos(75, 20); myship=(new CMover(MyShipTopView)) ->SetWeapon_Shot(WP_BASIC_SHOT, shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(ie_enemy0, 0, 60, -1) ->AddSpawn(ie_enemy1, 20, 60, -1) ->AddSpawn(ie_enemy2, 40, 60, -1); AddStage(stage, L"유도 폭파", L"파괴된 적기의 후폭풍이 다른 적기에게 피해를 줌.\n\n" L"■샷■\n[X]키/버튼2"); //========================================================== // 아이템에 의한 특수공격 CMover* sa_item0=(new CMover(ig)) ->SetObj3D(Obj3D[ITEM_YELLOW]) ->SetPos(37.5f, 0) ->SetDirected(0.3f, 0.25f) ->SetRoll(0.01f) ->SetItemEffect_SA(true); CMover* sa_effect=(new CMover(sg)) ->SetObj3D(Obj3D[BERSERK]) ->SetRoll(0.01f); myship=(new CMover(MyShipTopView)) ->SetWeapon_Shot(WP_AUTO_SHOT, shot) ->SetSAItem(max_shot, sa_effect, 300, 60); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(sa_item0, 0, 150, -1); AddStage(stage, L"아이템에 의한 특수공격", L"아이템을 얻으면 일정시간동안 강력한 샷을 쏠 수 있게됨.\n\n" L"■샷■\n[X]키/버튼2"); //========================================================== // 무적상태 CMover* inv_bullet=(new CMover(eg)) ->SetObj3D(Obj3D[BULLET_SMALL_BLUE]) ->SetAiming(0.6f, 0) ->SetYaw(0.05f) ->SetDamage(1, 1, NULL, NULL, false, false); CMover* inv_enemy=(new CMover(enemy)) ->AddSpawn(inv_bullet, 0, 50, -1); myship=(new CMover(MyShipTopView)) ->SetDamage(1, 1, NULL, NULL, true, false); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(inv_enemy, 0, 60, -1); AddStage(stage, L"무적상태", L"적기나 탄에 맞아도 끄떡없는 무적상태."); //========================================================== // 버서크 CMover* bs_item=(new CMover(ig)) ->SetObj3D(Obj3D[SHOT_SMALL]) ->SetDirected(3.0f, 0.75f); CMover* bs_myship2=(new CMover(mg)) ->SetObj3D(Obj3D[MYSHIP2]) ->SetPos(37.5f, 60) ->AddSpawn(bs_item, 0, 5, -1); CMover* bs_shot=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_LARGE]) ->SetDirected(3.0f, 0) ->SetAutoYaw() ->SetRand(1, 1) ->SetDamage(1, 1, NULL, NULL, false, false); CMover* bs_effect=(new CMover(sg)) ->SetObj3D(Obj3D[BERSERK]) ->SetRoll(0.04f) ->AddSpawn(bs_shot, 0, 1, -1) ->AddSpawn(bs_shot, 0, 1, -1); myship=(new CMover(MyShipTopView)) ->SetBerserk(bs_effect, 10, 300, 60, 200) ->SetWeapon_Shot(WP_BASIC_SHOT, shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(bs_myship2, 0, 0, 1); AddStage(stage, L"버서크", L"아군 캐릭터의 샷을 연달아 맞으면 버서크 상태가 됨.\n" L"버서크 상태에서는 모든 방향으로 샷을 난사함.\n\n" L"■샷■\n[X]키/버튼2"); //========================================================== // 아군을 집어서 던지기 CMover* tfs_shot=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_SMALL]) ->SetDirected(3.0f, 0.75f) ->SetAutoYaw(); CHit* tfs_hit=new CHit(-6, 6, -6, 6); CMover* tfs_myship2=(new CMover(mg)) ->SetMyShip(1, 37.5f, 60, 0.5f) ->SetObj3D(Obj3D[MYSHIP2]) ->AddSpawn(tfs_shot, 0, 5, -1) ->SetThrow(1, tfs_hit, -1.0f, -2.0f, 0.1f, 300); myship=(new CMover(MyShipTopView)) ->SetThrow(1, tfs_hit, -1.0f, -2.0f, 0.1f, 300); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(tfs_myship2, 0, 0, 1); AddStage(stage, L"아군을 집어서 던지기", L"아군 캐릭터 근처에서 버튼을 누르면 아군을 집어서 던질 수 있게됨.\n\n" L"■던지기■\n[X]키/버튼2"); //========================================================== // 적기를 집어서 던지기 CMover* te_enemy=(new CMover(enemy)); CMover* te_crash=(new CMover(wg)) ->SetObj3D(Obj3D[CRASH_ENEMY]) ->SetScale(0.5f, 0.5f, 0.1f, 0.1f) ->SetAlpha(2, -0.04f) ->SetNext(NULL, 50); CMover* te_shot=(new CMover(wg)) ->SetObj3D(Obj3D[ENEMY]) ->SetDirected(2.0f, 0.75f) ->SetRoll(0.05f) ->SetDamage(1, 1, te_crash, NULL, false, false); myship=(new CMover(MyShipTopView)) ->SetArm(2, Obj3D[BARRIER], Obj3D[BULLET_SMALL_BLUE], 2.0f, 20, 10, 5) ->SetWeapon_Shot(WP_BASIC_SHOT, te_shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(te_enemy, 0, 60, -1); AddStage(stage, L"적기를 집어서 던지기", L"적기를 집게로 집어서 다른 버튼을 눌러 던지기.\n\n" L"■던지기■\n[X]키/버튼2\n\n" L"■집게■\n[C]키/버튼3"); //========================================================== // 적기를 사로잡아서 아군으로 만들기 CMover* ce_enemy=(new CMover(enemy)) ->AddSpawn(bullet, 0, 50, -1); CMover* ce_shot=(new CMover(rg)) ->SetObj3D(Obj3D[ENEMY]) ->SetRoll(0.02f) ->AddSpawn(shot, 0, 5, -1) ->SetDamage(1, 10, enemy_crash, NULL, false, false); myship=(new CMover(MyShipTopView)) ->SetArm(2, Obj3D[BARRIER], Obj3D[BULLET_SMALL_BLUE], 2.0f, 20, 10, 5) ->SetWeapon_Shot(WP_BASIC_SHOT, ce_shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(ce_enemy, 0, 60, -1); AddStage(stage, L"적기를 사로잡아서 아군으로 만들기", L"적기를 집게로 사로잡은 후 다른 버튼으로 공격시키기.\n\n" L"■사로잡은 적기 공격■\n[X]키/버튼2\n\n" L"■집게■\n[C]키/버튼3"); //========================================================== // 적기에 사로잡힌 메인 캐릭터를 되찾아서 파워 업 하기 CMover* cp_beam=(new CMover(bg)) ->SetObj3D(Obj3D[BARRIER]) ->SetScale(0.5f, 0.1f, 0.1f, 0.05f) ->SetDirected(1.0f, 0.25f) ->SetAlpha(1, -0.02f) ->SetNext(NULL, 30); CMover* cp_enemy=(new CMover(eg)) ->SetObj3D(Obj3D[ENEMY_REV]) ->SetCaptor(cp_beam); CMover* cp_enemy_crash=(new CMover(sg)) ->SetObj3D(Obj3D[CRASH_ENEMY]) ->SetScale(0.2f, 0.2f, 0.2f, 0.2f) ->SetAlpha(2, -0.04f) ->AddSpawn(cp_enemy, 50, 0, 1) ->SetNext(NULL, 50); cp_enemy ->SetDamage(1, 1, cp_enemy_crash, NULL, false, false); myship=(new CMover(MyShipTopView)) ->SetWeapon_Shot(WP_BASIC_SHOT, shot) ->SetCaptee(); CMover* cp_myship_crash=(new CMover(sg)) ->SetObj3D(Obj3D[CRASH_MYSHIP]) ->SetScale(0.2f, 0.2f, 0.2f, 0.2f) ->SetAlpha(2, -0.04f) ->AddSpawn(myship, 50, 0, 1) ->SetNext(NULL, 50); myship ->SetDamage(1, 1, cp_myship_crash, NULL, false, false); stage=(new CMover(sg)) ->SetPos(37.5f, 30) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(cp_enemy, 0, 0, 1); AddStage(stage, L"적기에 사로잡힌 메인 캐릭터를 되찾아서 파워업하기", L"적기의 빔을 맞으면 메인 캐릭터를 빼앗김.\n" L"빼앗긴 상태에서 적기를 파괴하면 메인 캐릭터가 파워업하여 2중 공격이 됨.\n\n" L"■샷■\n[X]키/버튼2"); //========================================================== // 아군에 접근하여 샷을 강화시키기 CMover* rf1_myship=(new CMover(mg)) ->SetMyShip(1, 37.5f, 60, 0.5f) ->SetObj3D(Obj3D[MYSHIP2]); CMover* rf1_shot=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_LARGE]) ->SetDirected(3.0f, 0.75f) ->SetAutoYaw() ->SetDamage(1, 1, NULL, NULL, false, false); CHit* rf1_hit=new CHit(-4, 4, -4, 4); myship=(new CMover(MyShipTopView)) ->SetRFShot(0, rf1_shot, rf1_hit) ->SetWeapon_Shot(WP_AUTO_SHOT, shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(rf1_myship, 0, 0, 1); AddStage(stage, L"아군에 접근하여 샷을 강화시키기", L"아군 캐릭터에 접근하면 강력한 샷을 쏠 수 있음.\n\n" L"■샷■\n[X]키/버튼2"); //========================================================== // 아군 방향으로 강한 샷을 발사하기 myship=(new CMover(MyShipTopView)) ->SetRFShot(1, rf1_shot, rf1_hit) ->SetWeapon_Shot(WP_AUTO_SHOT, shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(rf1_myship, 0, 0, 1); AddStage(stage, L"아군 방향으로 강한 샷을 발사하기", L"아군 캐릭터에 접근하면 강력한 샷을 쏠 수 있음.\n" L"아군 캐릭터와의 위치관계에 따라 샷의 방향이 바뀜.\n\n" L"■샷■\n[X]키/버튼2"); //========================================================== // 샷을 아군에 맞춰서 강화시키기 CMover* rf3_myship=(new CMover(mg)) ->SetMyShip(1, 37.5f, 60, 0.5f) ->SetRFShot(2, rf1_shot, rf1_hit) ->SetObj3D(Obj3D[MYSHIP2]); myship=(new CMover(MyShipTopView)) ->SetWeapon_Shot(WP_AUTO_SHOT, shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(rf3_myship, 0, 0, 1); AddStage(stage, L"샷을 아군에 맞춰서 강화시키기", L"아군 캐릭터에게 샷을 쏘아 맞추면 강력한 샷으로 바뀜.\n\n" L"■샷■\n[X]키/버튼2"); //========================================================== // 메인 캐릭터의 색을 바꾸어 탄을 흡수하기 CMover** sc_effect=new CMover*[2]; sc_effect[0]=sc_effect[1]=(new CMover(sg)) ->SetObj3D(Obj3D[BERSERK]) ->SetScale(0.5f, 0.5f, 0.1f, 0.1f) ->SetAlpha(1, -0.08f) ->SetNext(NULL, 10); CMover* sc_crash1=(new CMover(sg)) ->SetObj3D(Obj3D[BULLET_SMALL_ORANGE]) ->SetScale(1, 1, 0.01f, 0.01f) ->SetAlpha(1, -0.1f) ->SetNext(NULL, 10); CMover* sc_crash2=(new CMover(sg)) ->SetObj3D(Obj3D[BULLET_SMALL_GREEN]) ->SetScale(1, 1, 0.01f, 0.01f) ->SetAlpha(1, -0.1f) ->SetNext(NULL, 10); CMover* sc_bullet1=(new CMover(bullet)) ->SetObj3D(Obj3D[BULLET_SMALL_ORANGE]) ->SetColor(1) ->SetPos(20, 0) ->SetRand(0.2f, 0.2f) ->SetDamage(1, 1, sc_crash1, NULL, false, false); CMover* sc_bullet2=(new CMover(bullet)) ->SetObj3D(Obj3D[BULLET_SMALL_GREEN]) ->SetColor(2) ->SetPos(55, 0) ->SetRand(0.2f, 0.2f) ->SetDamage(1, 1, sc_crash2, NULL, false, false); CMover** sc_shot=new CMover*[2]; sc_shot[0]=(new CMover(shot)) ->SetColor(1) ->SetObj3D(Obj3D[SHOT_SMALL_ORANGE]); sc_shot[1]=(new CMover(shot)) ->SetColor(2) ->SetObj3D(Obj3D[SHOT_SMALL_GREEN]); CHit* sc_hit=new CHit(-4, 4, -4, 4); CObject3D** sc_obj3d=new CObject3D*[2]; sc_obj3d[0]=Obj3D[MYSHIP]; sc_obj3d[1]=Obj3D[MYSHIP2]; myship=(new CMover(MyShipTopView)) ->SetColor(1) ->SetChangeColor(2, 2, sc_obj3d, sc_shot, sc_effect, sc_hit) ->SetWeapon_Shot(WP_AUTO_SHOT, sc_shot[0]); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(sc_bullet1, 0, 1, -1) ->AddSpawn(sc_bullet2, 0, 1, -1); AddStage(stage, L"메인 캐릭터의 색을 바꾸어 탄을 흡수하기", L"메인 캐릭터와 같은 색의 탄을 흡수하는 특수공격.\n" L"샷도 메인 캐릭터와 같은 색깔이 됨.\n\n" L"■샷■\n" L"[X]키/버튼2\n\n" L"■색깔 전환■\n" L"[C]키/버튼3"); //========================================================== // 적기의 탄을 튕겨내기 CMover* rf_enemy0=(new CMover(enemy)) ->SetPos(20, 0) ->SetDamage(1, 10, enemy_crash, NULL, false, false) ->AddSpawn(bullet, 0, 10, -1); CMover* rf_enemy1=(new CMover(enemy)) ->SetPos(55, 0) ->SetDamage(1, 10, enemy_crash, NULL, false, false) ->AddSpawn(bullet, 0, 10, -1); CMover* rf_shot=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_MEDIUM]) ->SetAiming(3.0f, 0) ->SetAutoYaw() ->SetTarget(TG_RANDOM_ENEMY, 0, shot) ->SetDamage(1, 1, NULL, NULL, false, false); CMover* reflect=(new CMover(sg)) ->SetObj3D(Obj3D[BERSERK]); myship=(new CMover(MyShipTopView)) ->SetReflect(1, reflect, rf_shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(rf_enemy0, 0, 50, -1) ->AddSpawn(rf_enemy1, 25, 50, -1); AddStage(stage, L"적기의 탄을 튕겨내기", L"보호막에 맞은 탄을 적기에게 튕겨내는 특수공격.\n\n" L"■보호막■\n" L"[X]키/버튼2"); //========================================================== // 레이저끼리 부딪히기 CMover* lc_crash=(new CMover(wg)) ->SetObj3D(Obj3D[CRASH_MISSILE]) ->SetScale(12, 12, 0.2f, 0.2f) ->SetAlpha(1, -0.05f) ->SetNext(NULL, 20); CMover* lc_crash_small=(new CMover(sg)) ->SetObj3D(Obj3D[CRASH_MISSILE]) ->SetScale(4, 4, 0.2f, 0.2f) ->SetAlpha(1, -0.05f) ->SetNext(NULL, 20); CMover* lc_shot0=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_LARGE]) ->SetDirected(3.0f, 0.75f) ->SetAutoYaw() ->SetDamage(1, 1, lc_crash_small, NULL, false, false) ->SetCollision(20, lc_crash); CMover* lc_shot1=(new CMover(eg)) ->SetObj3D(Obj3D[SHOT_LARGE]) ->SetPos(37.5f, 0) ->SetDirected(3.0f, 0.25f) ->SetAutoYaw() ->SetDamage(1, 1, NULL, NULL, false, false); myship=(new CMover(MyShipTopView)) ->SetWeapon_Shot(WP_AUTO_SHOT, lc_shot0); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(lc_shot1, 0, 1, -1); AddStage(stage, L"레이저끼리 부딪히기", L"레이저끼리 충돌시키면 강력한 공격이 발생함.\n\n" L"■레이저■\n[X]키/버튼2"); //========================================================== // 적기의 탄에 메인 캐릭터를 스치기 CMover* gb_bullet=(new CMover(bullet)) ->SetPos(37.5f, 0) ->SetRand(0.2f, 0.2f); CMover* gb_effect=(new CMover(sg)) ->SetObj3D(Obj3D[BULLET_SMALL_PURPLE]) ->SetScale(1.4f, 1.4f, -0.1f, -0.1f) ->SetAlpha(1, -0.1f) ->SetNext(NULL, 10); CMover* gb_field=(new CMover(wg)) ->SetObj3D(Obj3D[BERSERK]) ->SetFollowParent() ->SetGraze(gb_effect) ->SetDamage(1, 1, NULL, NULL, true, false); myship=(new CMover(MyShipTopView)) ->AddSpawn(gb_field, 0, 0, 1); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(gb_bullet, 0, 1, -1); AddStage(stage, L"적기의 탄에 메인 캐릭터를 스치기", L"적기가 쏜 탄이 메인 캐릭터 근처를 지나가면 '스침'판정"); //========================================================== // 적기나 탄의 움직임을 느리게 하기 CMover* sl_bullet=(new CMover(bullet)) ->SetRand(0.1f, 0.1f); CMover* sl_enemy=(new CMover(enemy)) ->SetRand(0.1f, 0.1f) ->AddSpawn(sl_bullet, 0, 8, -1); myship=(new CMover(MyShipTopView)) ->SetSlow(1, -1) ->SetQuick(2, 1); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(sl_enemy, 0, 50, -1); AddStage(stage, L"적기나 탄의 움직임을 느리게 하기", L"버튼조작으로 탄이나 적기의 움직임을 변화시키기.\n\n" L"■슬로우■\n" L"[X]키/버튼2\n\n" L"■퀵■\n" L"[C]키/버튼3" ); //========================================================== // 자유롭게 움직일 수 있는 조준 CMover* ms1_sight=(new CMover(sg)) ->SetObj3D(Obj3D[SIGHT_BOMB_READY]); CMover* ms1_shot=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_LARGE]) ->SetDirected(3.0f, 0.75f) ->SetDamage(1, 1, NULL, NULL, false, false); CMover* ms1_attack=(new CMover(sg)) ->SetPos(37.5f, 50) ->SetObj3D(Obj3D[SIGHT_BOMB_TARGET]) ->AddSpawn(ms1_shot, 0, 1, -1) ->SetNext(NULL, 60); CMover* ms1_enemy=(new CMover(enemy)) ->SetRand(0.1f, 0.1f); myship=(new CMover(MyShipTopView)) ->SetMovableSightB(1, 0, -10, 1.0f, ms1_sight, ms1_attack); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(ms1_enemy, 0, 50, -1); AddStage(stage, L"자유롭게 움직일 수 있는 조준", L"버튼을 꾹 누르고 있으면 조준을 움직일 수 있음.\n" L"버튼을 떼면 조준의 위치에 공격을 가함.\n\n" L"■조준이동■\n[X]키/버튼2"); //========================================================== // 메인 캐릭터와 조준을 동시에 움직이기 CMover* ms2_sight=(new CMover(sg)) ->SetObj3D(Obj3D[SIGHT_BOMB_READY]); CMover* ms2_shot=(new CMover(wg)) ->SetObj3D(Obj3D[SHOT_MEDIUM]) ->SetAiming(3.0f, 0) ->SetAutoYaw() ->SetDamage(1, 1, NULL, NULL, false, false); myship=(new CMover(MyShipTopView)) ->SetMovableSightS(0, -20, 1.0f, ms2_sight) ->SetWeapon_Shot(WP_AUTO_SHOT, ms2_shot); stage=(new CMover(sg)) ->AddSpawn(myship, 0, 0, 1) ->AddSpawn(ms1_enemy, 0, 50, -1); AddStage(stage, L"메인 캐릭터와 조준을 동시에 움직이기.", L"메인 캐릭터와 조준을 서로 다른 키로 조작하기.\n" L"샷은 조준을 향해 발사됨.\n\n" L"■조준이동■\n[E][D][S][F]키\n\n" L"■샷■\n[X]키/버튼2" ); }
//============================================================== // 플레이어 세팅 void CrazyShootingGame::MakeStages_Player() { CMover* stage; CMoverGroup* mg = _moverGroupManager->GetGroup(MYSHIP_GROUP); CMoverGroup* stageGroup = _moverGroupManager->GetGroup(STAGE_GROUP); CMoverGroup* bg = _moverGroupManager->GetGroup(BULLET_GROUP); CMoverGroup* enemyGroup = _moverGroupManager->GetGroup(ENEMY_GROUP); CMoverGroup* weaponGroup = _moverGroupManager->GetGroup(WEAPON_GROUP); CMoverGroup* gg = _moverGroupManager->GetGroup(GROUND_GROUP); CMoverGroup* ig = _moverGroupManager->GetGroup(ITEM_GROUP); CMoverGroup* ag = _moverGroupManager->GetGroup(WATER_GROUP); CMover* player; CMover* shot = (new CMover(weaponGroup)) ->SetObj3D(_obj3D[SHOT_SMALL]) ->SetDirected(3.0f, 0.75f) ->SetDamage(1, 1, nullptr, nullptr, false, false); CMover* max_shot = (new CMover(weaponGroup)) ->SetObj3D(_obj3D[SHOT_LARGE]) ->SetDirected(3.0f, 0.75f) ->SetDamage(1, 1, nullptr, nullptr, false, false); CMover* enemy_crash = (new CMover(stageGroup)) ->AddSpawn((new CMover(stageGroup)) ->SetObj3D(_obj3D[CRASH_ENEMY]) ->SetScale(0.5f, 0.5f, 0.1f, 0.1f) ->SetAlpha(2, -0.04f) ->SetNext(nullptr, 50), 0, 0, 1); CMover* enemy = (new CMover(enemyGroup)) ->SetObj3D(_obj3D[ENEMY]) ->SetAiming(0.3f, 0) ->SetAutoYaw() ->SetDamage(1, 1, enemy_crash, nullptr, false, false); //========================================================== // 워프 이동 CMover* warp_effect = (new CMover(stageGroup)) ->SetObj3D(_obj3D[MYSHIP]) ->SetAlpha(0.6f, -0.02f) ->SetNext(nullptr, 30); player = (new CMover(_viewPlayerShipTop)) ->SetWarp(10, 20, warp_effect); stage=(new CMover(stageGroup)) ->AddSpawn(player, 0, 0, 1); AddStage(stage, L"워프 이동", L"떨어지 장소로 순간이동\n" L"\n" L"■워프■\n" L"방향키 혹은 스틱을 같은 방향으로 재빨리 2번 입력"); //========================================================== // 버튼에 의한 스피드 조절 player=(new CMover(_viewPlayerShipTop)) ->SetSCButton(0.5f, 0.5f, 1.5f, 1); stage=(new CMover(stageGroup)) ->AddSpawn(player, 0, 0, 1); AddStage(stage, L"버튼에 의한 스피드 조절", L"버튼을 누를 때마다 메인 캐릭터의 스피드가 변화함.\n\n" L"■스피드 조절■\n[X]키/버튼2"); //========================================================== // 아이템에 의한 스피드조절 CMover* sc_item0=(new CMover(ig)) ->SetObj3D(_obj3D[ITEM_YELLOW]) ->SetPos(20, 0) ->SetDirected(0.3f, 0.25f) ->SetRoll(0.01f) ->SetItemEffect_Accel(0.5f); CMover* sc_item1=(new CMover(ig)) ->SetObj3D(_obj3D[ITEM_BLUE]) ->SetPos(55, 0) ->SetDirected(0.3f, 0.25f) ->SetRoll(-0.01f) ->SetItemEffect_Accel(-0.5f); player=(new CMover(_viewPlayerShipTop)) ->SetSCItem(0.5f, 1.5f); stage=(new CMover(stageGroup)) ->AddSpawn(player, 0, 0, 1) ->AddSpawn(sc_item0, 0, 150, -1) ->AddSpawn(sc_item1, 75, 150, -1); AddStage(stage, L"아이템에 의한 스피드 조절", L"아이템을 얻을 때마다 메인 캐릭터의 스피드가 변화함.\n" L"노란색은 스피드 업, 파란색은 스피드 다운."); //========================================================== // 합체하는 메인 캐릭터 CMover* docking_item=(new CMover(ig)) ->SetObj3D(_obj3D[DOCKING_ITEM]) ->SetDirected(0.3f, 0.25f) ->SetRoll(0.01f) ->SetItemEffect_Docking(true); CMover* docking_enemy=(new CMover(enemy)) ->SetObj3D(_obj3D[DOCKING_ENEMY]) ->SetPos(37.5f, 0); CMover* docking_shot=(new CMover(shot)) ->SetDamage(1, 1, docking_item, NULL, false, false); player=(new CMover(_viewPlayerShipTop)) ->SetWeapon_Shot(WP_BASIC_SHOT, docking_shot) ->SetDocking(_obj3D[DOCKING_MYSHIP], max_shot); stage=(new CMover(stageGroup)) ->AddSpawn(player, 0, 0, 1) ->AddSpawn(docking_enemy, 1, 250, -1); AddStage(stage, L"합체하는 메인 캐릭터", L"파트를 나르는 적기를 파괴하여 파트를 얻으면 메인 캐릭터가 강화됨.\n\n" L"■샷■\n[X]키/버튼2"); //========================================================== // 땅 위를 걷는 메인 캐릭터 CMover* side_shot=(new CMover(weaponGroup)) ->SetObj3D(_obj3D[SHOT_SMALL]) ->SetDirected(2.0f, 0.0f) ->SetAutoYaw() ->SetDamage(1, 1, NULL, NULL, false, false); player=(new CMover(_viewPlayerShipSide)) ->SetObj3D(_obj3D[WALK_MYSHIP]) ->SetWeapon_Shot(WP_BASIC_SHOT, side_shot) ->SetWalk(0, 0.2f, 0, -0.8f, 60, 2); CMover* air_e=(new CMover(enemy)) ->SetDirected(0.8f, 0.5f); CMover* air0=(new CMover(stageGroup)) ->SetPos(100, 30) ->AddSpawn(air_e, 0, 80, -1); CMover* gnd_e=(new CMover(enemyGroup)) ->SetObj3D(_obj3D[ENEMY_CANNON]) ->SetYaw(0.01f) ->SetDirected(0.4f, 0.5f) ->SetDamage(1, 1, enemy_crash, NULL, false, false); CMover* gnd0=(new CMover(stageGroup)) ->SetPos(105, 65) ->AddSpawn(gnd_e, 0, 170, -1); CMover* gnd_y=(new CMover(gg)) ->SetObj3D(_obj3D[GROUND_YELLOW]) ->SetDirected(0.4f, 0.5f); CMover* gnd1=(new CMover(stageGroup)) ->SetPos(105, 71) ->AddSpawn(gnd_y, 0, 19, -1); stage=(new CMover(stageGroup)) ->AddSpawn(player, 0, 0, 1) ->AddSpawn(air0, 0, 0, 1) ->AddSpawn(gnd0, 100, 0, 1) ->AddSpawn(gnd1, 0, 0, 1); AddStage(stage, L"땅 위를 갇는 메인 캐릭터", L"땅 위를 걷거나 점프하는 적기.\n\n" L"■샷■\n[X]키/버튼2\n\n" L"■점프■\n[C]키/버튼3" ,VIEW_SIDE); //========================================================== // 변신하는 메인 캐릭터 CMover* tr_effect=(new CMover(stageGroup)) ->SetObj3D(_obj3D[BERSERK]) ->SetScale(0.5f, 0.5f, 0.1f, 0.1f) ->SetAlpha(1, -0.08f) ->SetNext(NULL, 10); CMover* tr_myship1=(new CMover(_viewPlayerShipSide)); CMover* tr_myship2=(new CMover(_viewPlayerShipSide)) ->SetObj3D(_obj3D[WALK_MYSHIP]) ->SetMyShip(0, 50, 30, 0.5f) ->SetWalk(0, 0.2f, 0, -0.8f, 60, 2); tr_myship1->SetTransform(tr_myship2, tr_effect, 1); tr_myship2->SetTransform(tr_myship1, tr_effect, 1); CMover* tr_gnd0=(new CMover(stageGroup)) ->SetPos(105, 65) ->AddSpawn(gnd_e, 0, 170, -1); CMover* tr_gnd1=(new CMover(stageGroup)) ->SetPos(105, 71) ->AddSpawn(gnd_y, 0, 19, -1); stage=(new CMover(stageGroup)) ->AddSpawn(tr_myship1, 0, 0, 1) ->AddSpawn(air0, 0, 0, 1) ->AddSpawn(tr_gnd0, 100, 0, 1) ->AddSpawn(tr_gnd1, 0, 0, 1); AddStage(stage, L"변신하는 메인 캐릭터", L"보행상태와 비행상태를 전환할 수 있는 메인 캐릭터.\n\n" L"■변신■\n[X]키/버튼2\n\n" L"■점프■\n[C]키/버튼3" ,VIEW_SIDE); //========================================================== // 수중의 이동 auto wat = (new CMover(ag)) ->SetObj3D(_obj3D[WATER]) ->SetDirected(0.4f, 0.5f); auto wat0=(new CMover(ag)) ->SetPos(105, 47) ->AddSpawn(wat, 0, 19, -1); auto wat1=(new CMover(ag)) ->SetPos(105, 55) ->AddSpawn(wat, 0, 19, -1); auto wat2=(new CMover(ag)) ->SetPos(105, 63) ->AddSpawn(wat, 0, 19, -1); auto wave=(new CMover(stageGroup)) ->SetObj3D(_obj3D[WAVE]) ->SetDirected(2.0f, 0.5f) ->SetScale(2.0f, 2.0f, -0.1f, -0.1f) ->SetAlpha(1, -0.02f) ->SetNext(nullptr, 20); player = (new CMover(_viewPlayerShipSide)) ->SetUnderwater(0.1f, 42, 43, wave); stage = (new CMover(stageGroup)) ->AddSpawn(player, 200, 0, 1) ->AddSpawn(wat0, 0, 0, 1) ->AddSpawn(wat1, 0, 0, 1) ->AddSpawn(wat2, 0, 0, 1) ->AddSpawn(gnd1, 0, 0, 1); AddStage(stage, L"Moving in water.", L"수중에서는 속도가 느려지고 수면에 부딪힐 때는 물이 튀어오름", VIEW_SIDE); //========================================================== // 옵션 player = (new CMover(_viewPlayerShipTop)) ->SetMyShip(0, 37.5f, 90, 0.8f) ->SetOption(4, 10, _obj3D[OPTION]); stage=(new CMover(stageGroup)) ->AddSpawn(player, 0, 0, 1); AddStage(stage, L"옵션", L"메인 캐릭터 뒤를 따라다니는 지원군."); //========================================================== // 보호막 CMover* bullet=(new CMover(enemyGroup)) ->SetObj3D(_obj3D[BULLET_SMALL_BLUE]) ->SetAiming(0.6f, 0) ->SetYaw(0.05f) ->SetDamage(1, 1, NULL, NULL, false, false); CMover* barrier=(new CMover(weaponGroup)) ->SetObj3D(_obj3D[BARRIER]) ->SetDamage(1, 5, NULL, NULL, false, false); CMover* enemy_b=(new CMover(enemy)) ->SetPos(37.5f, 0) ->AddSpawn(bullet, 0, 50, -1); player=(new CMover(_viewPlayerShipTop)) ->SetBarrier(barrier, 5.0f); stage=(new CMover(stageGroup)) ->AddSpawn(player, 0, 0, 1) ->AddSpawn(enemy_b, 0, 100, -1); AddStage(stage, L"보호막", L"탄과 적기로부터 메인 캐릭터를 보호해 주지만 피해가 쌓이면 사라짐"); }