Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Initialize {
- renderStage;
- scrollStage;
- SetAutoDeleteObject(true); //automatically deletes object when THIS script ends
- bossObj = ObjEnemy_Create(OBJ_ENEMY_BOSS);
- ObjEnemy_Regist(bossObj);
- ObjMove_SetPosition(bossObj,182,200); //warps the boss
- ObjMove_SetDestAtSpeed(bossObj,180,120,10); //movement function
- LoadSound (spellcardSFX);
- LoadSound(bossdeathSFX);
- PlaySE(spellcardSFX);
- LoadSound(shootSFX);
- mainTask;
- }
- @MainLoop {
- bossX = ObjMove_GetX(bossObj);
- bossY = ObjMove_GetY(bossObj);
- //enemy collision
- ObjEnemy_SetIntersectionCircleToShot(bossObj,bossX,bossY,24);
- ObjEnemy_SetIntersectionCircleToPlayer(bossObj,bossX,bossY,32);
- if(count == 0){
- CreateOrb2(1, 64);
- CreateOrb2(-1, 64);
- }
- count++;
- yield;
- }
- task CreateOrb2(dir, dist) {
- wait(100);
- let objcount = 0; //counter to control firing of bullets and movement
- //obtain object ID
- let graphic = GetCurrentScriptDirectory() ~ "sprite/familiar.png"; //Define path
- let obj = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(obj, graphic);
- ObjSprite2D_SetSourceRect(obj, 0, 0, 60, 53); //use whatever dimensions necessary
- ObjSprite2D_SetDestCenter(obj);
- //----
- //ObjRender_SetBlendType(obj, BLEND_ALPHA);
- while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > 0) { //linked to the parent enemy's life
- ObjRender_SetPosition(obj, ObjMove_GetX(bossObj) + dir * dist,
- ObjMove_GetY(bossObj), 1);
- if (objcount % 20 == 0) { //control firing rate
- let curx = ObjRender_GetX(obj);
- let cury = ObjRender_GetY(obj);
- ascent(i in 0..36) {
- CreateShotA1(curx, cury, 2 + 2*sin(i * 8), 90 + 60*sin(i * 3) + objcount * 4 * dir, DS_RICE_S_RED, 0);
- CreateShotA1(curx, cury, 2 + 2*sin(i * 8), 90 - 60*sin(i * 3) + objcount * 4 * dir, DS_RICE_S_RED, 0);
- }
- }
- objcount++;
- yield;
- }
- Obj_Delete(obj);
- }
- task mainTask {
- renderBoss;
- renderBG;
- movement;
- TEnd;
- }
- task movement {
- loop {
- wait(60);
- }
- }
- @Event {
- //boss health and timer
- alternative(GetEventType())
- case(EV_REQUEST_LIFE) {
- SetScriptResult(1800);
- }
- case(EV_REQUEST_TIMER) {
- SetScriptResult(70);
- }
- }
- @Finalize {
- }
- function wait(w) { loop(w) { yield; } }
- task renderBoss {
- let dir;
- let speed;
- //texture the boss and set the center
- ObjPrim_SetTexture(bossObj,imgBoss);
- ObjSprite2D_SetSourceRect(bossObj,0,0,77,100);
- ObjSprite2D_SetDestCenter(bossObj);
- ObjRender_SetScaleXYZ(bossObj,0.6,0.6,0);
- while(!Obj_IsDeleted(bossObj)) {
- //when the boss is NOT deleted
- dir = ObjMove_GetAngle(bossObj);
- speed = ObjMove_GetSpeed(bossObj);
- //animation handling
- if(speed == 0){
- ObjRender_SetAngleXYZ(bossObj,0,0,0);
- if(animFrame < 10) { ObjSprite2D_SetSourceRect(bossObj,12,0,65,68); }
- if(animFrame >= 20 && animFrame < 30) { ObjSprite2D_SetSourceRect(bossObj,68,0,115,68); }
- if(animFrame >= 30 && animFrame < 40) { ObjSprite2D_SetSourceRect(bossObj,115,0,160,68); }
- if(animFrame >= 50) { ObjSprite2D_SetSourceRect(bossObj,160,0,212,68); }
- animFrame2 = 0;
- }
- else if(cos(dir) < 0){
- ObjRender_SetAngleXYZ(bossObj,0,0,0); // flip vertical
- if(animFrame2 < 15) { ObjSprite2D_SetSourceRect(bossObj,210,0,263,68); }
- if(animFrame2 >= 15 && animFrame2 < 30) { ObjSprite2D_SetSourceRect(bossObj,259,0,313,68); }
- if(animFrame2 >= 30 && animFrame2 < 40){ ObjSprite2D_SetSourceRect(bossObj,210,0,263,68); }
- if(animFrame2 >= 40) { ObjSprite2D_SetSourceRect(bossObj,259,0,313,68); }
- }
- else if(cos(dir) > 0){
- ObjRender_SetAngleXYZ(bossObj,0,180,0); // flip vertical
- if(animFrame2 < 15) { ObjSprite2D_SetSourceRect(bossObj,210,0,263,68); }
- if(animFrame2 >= 15 && animFrame2 < 30) { ObjSprite2D_SetSourceRect(bossObj,259,0,313,68); }
- if(animFrame2 >= 30 && animFrame2 < 40){ ObjSprite2D_SetSourceRect(bossObj,210,0,263,68); }
- if(animFrame2 >= 40) { ObjSprite2D_SetSourceRect(bossObj,259,0,313,68); }
- }
- animFrame++; // count animFrame. (++ is +1)
- animFrame2+=2; // count animFrame2.
- if(animFrame > 60) { animFrame = 0; } // reset animFrame when it is higher than 60.
- yield;
- }
- }
- function angleToPlayer {
- let dir = atan2(GetPlayerY-bossY,GetPlayerX-bossX);
- return dir;
- }
- task fire {
- let angleT = angleToPlayer;
- loop(13){
- }
- }
- task SnakePattern(obj, angleT){
- let wvel = 1;
- ascent(i in 0..12){
- ObjMove_AddPatternA2(obj, i * 30, ObjMove_GetSpeed(obj), angleT, 0.01, wvel, 3);
- wvel *= -1;
- }
- }
- task TDrawLoop {
- let imgBoss = GetCurrentScriptDirectory() ~ "sprite/testsheet.png";
- ObjPrim_SetTexture(bossObj, imgBoss);
- ObjSprite2D_SetSourceRect(bossObj, 64, 1, 127, 64);
- ObjSprite2D_SetDestCenter(bossObj);
- }
- task TDrawLoopFamiliar(obj){
- let objFami = ObjPrim_Create(OBJ_SPRITE_2D);
- // things for getting it set up (SetTexture, SetRenderPriority, etc)
- let familiar = GetCurrentScriptDirectory() ~ "sprite/familiar.png";
- ObjPrim_SetTexture(objFami, familiar);
- ObjSprite2D_SetSourceRect(bossObj, 64, 1, 127, 64);
- ObjSprite2D_SetDestCenter(bossObj);
- let animFrame = 0;
- let interval = 5;
- let x = 64;
- let y = 64;
- while(!Obj_IsDeleted(obj)){
- // Set the position of the sprite to the position of the object you want to have a texture.
- ObjRender_SetPosition(objFami, ObjMove_GetX(obj), ObjMove_GetY(obj), 0);
- if(animFrame < 15){
- ObjSprite2D_SetSourceRect(objFami, 0, 0, 60, 53);
- }
- if(animFrame >= 20 && animFrame < 25){
- ObjSprite2D_SetSourceRect(objFami, 60, 0, 120, 53);
- }
- if(animFrame >= 25 && animFrame < 30){
- ObjSprite2D_SetSourceRect(objFami, 120, 0, 180, 53);
- }
- if(animFrame >= 30){
- ObjSprite2D_SetSourceRect(objFami, 180, 0, 240, 53);
- }
- if(animFrame > 35){
- // Loop back to the start after 4 frames of animation
- animFrame = 0;
- }
- animFrame ++;
- yield;
- }
- }
- task TEnd
- {
- while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > 0) {
- yield;
- }
- Obj_Delete(bossObj);
- DeleteShotAll(TYPE_ALL, TYPE_ITEM);
- wait(20);
- CloseScript(GetOwnScriptID());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement