Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #TouhouDanmakufu[Single]
- #ScriptVersion[3]
- #ID["Bound_and_Rebound"]
- #Title["Disaster Sign 'Shock and Aftershock'"]
- #Text["Resonating bullets are wonderful things, aren't they?"]
- //#Image["./bar.png"]
- //#Background["./tower.png"]
- //#BGM["./boss.mp3"]
- #Replay Name["Ear.Hard"]
- let speed = 1;
- let tick = 0;
- let tick2 = 384;
- let bossObj;
- let bossX = 0;
- let bossY = 0;
- let imgBoss = GetCurrentScriptDirectory ~ "standin.png";
- #include "script/default_system/Default_ShotConst.txt"
- let difficulty = 2;
- //0 = Easy
- //1 = Normal
- //2 = Hard
- //3 = Lunatic
- //4 = Ultra
- //-1 = Stable
- @Initialize {
- //boss defines
- bossObj = ObjEnemy_Create(OBJ_ENEMY_BOSS);
- ObjEnemy_Regist(bossObj);
- ObjMove_SetPosition(bossObj,192,-100);
- //move Seraph Midori to correct place
- ObjMove_SetDestAtSpeed(bossObj,192,120,5);
- mainTask;
- }
- @Event {
- //set boss timer
- alternative(GetEventType())
- case(EV_REQUEST_LIFE) {
- SetScriptResult(3000);
- }
- case(EV_REQUEST_TIMER) {
- SetScriptResult(60);
- }
- }
- @MainLoop {
- bossX = ObjMove_GetX(bossObj);
- bossY = ObjMove_GetY(bossObj);
- //collision
- ObjEnemy_SetIntersectionCircleToShot(bossObj,bossX,bossY,32);
- ObjEnemy_SetIntersectionCircleToPlayer(bossObj,bossX,bossY,16);
- yield;
- }
- @Finalize {
- }
- function angleToPlayer {
- let dir = atan2(GetPlayerY-bossY,GetPlayerX-bossX);
- return dir
- }
- //height == 448
- task movement {
- let var_quake1 = CreateShotA1(bossX,bossY,3,0,DS_BALL_L_GREEN,0);
- let var_quake2 = CreateShotA1(bossX,bossY,3,180,DS_BALL_L_GREEN,0);
- let q1_x = ObjMove_GetX(var_quake1);
- let q1_y = ObjMove_GetY(var_quake1);
- let q2_x = ObjMove_GetX(var_quake2);
- let q2_y = ObjMove_GetY(var_quake2);
- function q1_angleToPlayer {
- let q1_atp = atan2(GetPlayerY-q1_y,GetPlayerX-q1_x);
- return q1_atp
- }
- function q2_angleToPlayer {
- let q2_atp = atan2(GetPlayerY-q2_y,GetPlayerX-q2_x);
- return q2_atp
- }
- loop{
- let q1_atp = q1_angleToPlayer;
- let q2_atp = q2_angleToPlayer;
- if(q1_x > 384) { ObjMove_AddPatternA1(var_quake1,0,NO_CHANGE,q1_atp); }
- if(q1_x < 0) { ObjMove_AddPatternA1(var_quake1,0,NO_CHANGE,q1_atp); }
- if(q1_y > 448) { ObjMove_AddPatternA1(var_quake1,0,NO_CHANGE,q1_atp); }
- if(q1_y < 0) { ObjMove_AddPatternA1(var_quake1,0,NO_CHANGE,q1_atp); }
- if(q2_x > 384) { ObjMove_AddPatternA1(var_quake2,0,NO_CHANGE,q2_atp); }
- if(q2_x < 0) { ObjMove_AddPatternA1(var_quake2,0,NO_CHANGE,q2_atp); }
- if(q2_y > 448) { ObjMove_AddPatternA1(var_quake2,0,NO_CHANGE,q2_atp); }
- if(q2_y < 0) { ObjMove_AddPatternA1(var_quake2,0,NO_CHANGE,q2_atp); }
- yield;
- }
- }
- //Best function ever; very convenient
- function wait(w) {
- loop(w) { yield; }
- }
- task mainTask {
- renderBoss;
- ObjMove_SetDestAtSpeed(bossObj,196,224,5);
- wait(70);
- movement;
- }
- task renderBoss {
- let dir;
- let speed;
- ObjPrim_SetTexture(bossObj,imgBoss);
- ObjSprite2D_SetSourceRect(bossObj,0,0,16,32);
- ObjSprite2D_SetDestCenter(bossObj);
- ObjRender_SetScaleXYZ(bossObj,2,2,0);
- while(!Obj_IsDeleted(bossObj)) {
- dir = ObjMove_GetAngle(bossObj);
- speed = ObjMove_GetSpeed(bossObj);
- if(speed == 0) { ObjSprite2D_SetSourceRect(bossObj,0,0,16,32); ObjRender_SetAngleXYZ(bossObj,0,0,0); }
- else if(cos(dir) < 0) { ObjSprite2D_SetSourceRect(bossObj,0,0,16,32); ObjRender_SetAngleXYZ(bossObj,0,0,0); }
- else if(cos(dir) > 0) { ObjSprite2D_SetSourceRect(bossObj,0,0,16,32); ObjRender_SetAngleXYZ(bossObj,0,180,0); }
- yield;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement