Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #TouhouDanmakufu[Single]
- #ScriptVersion[3]
- #Title["Tutorial Sign 'Just Kind Of Bullets I Guess'"]
- #Text["This here boss is coming together VERY nicely. Now for some more advanced bullets."]
- let bossObj;
- let bossX = 0;
- let bossY = 0;
- let animFrame = 0;
- let animFrame2 = 0;
- let objScene = GetEnemyBossSceneObjectID();
- let imgBoss = GetCurrentScriptDirectory ~ "texture/someassholesheet.png";
- let japanhouse = GetCurrentScriptDirectory ~ "texture/japanhouse.png";
- let spellcardSFX = GetCurrentScriptDirectory ~ "SFX/SPELLCARD.wav";
- let bossdeathSFX = GetCurrentScriptDirectory ~ "SFX/DEFEATED.wav";
- let bulletSFX = GetCurrentScriptDirectory ~ "SFX/ATTACK4.wav";
- let gunSFX = GetCurrentScriptDirectory ~ "SFX/GUN.wav";
- #include "script/default_system/Default_ShotConst.txt"
- #include "script/default_system/Default_Effect.txt"
- @Initialize {
- //automatically deletes objects when script ends
- SetAutoDeleteObject(true);
- // define a boss in bossObj and register it
- bossObj = ObjEnemy_Create(OBJ_ENEMY_BOSS);
- ObjEnemy_Regist(bossObj);
- //warp boss to this location when initialized
- ObjMove_SetPosition(bossObj,192,-100);
- // move boss to desired x y location at desired speed
- ObjMove_SetDestAtSpeed(bossObj,190,120,5);
- //load sounds
- LoadSound(spellcardSFX);
- LoadSound(bossdeathSFX);
- LoadSound(bulletSFX);
- LoadSound(gunSFX);
- ObjEnemyBossScene_StartSpell(objScene);
- PlaySE(spellcardSFX);
- mainTask; //run mainTask
- }
- @Event {
- //setting the boss timer and life
- alternative(GetEventType())
- case(EV_REQUEST_LIFE) {
- SetScriptResult(1500);
- }
- case(EV_REQUEST_TIMER) {
- SetScriptResult(60);
- }
- case(EV_REQUEST_SPELL_SCORE) {
- SetScriptResult(30000);
- }
- }
- @MainLoop {
- bossX = ObjMove_GetX(bossObj);
- bossY = ObjMove_GetY(bossObj);
- //collision for the shots and player
- ObjEnemy_SetIntersectionCircleToShot(bossObj,bossX,bossY,24);
- ObjEnemy_SetIntersectionCircleToPlayer(bossObj,bossX,bossY,32);
- yield;
- }
- function GetCenterX{
- return GetStgFrameWidth/2;
- }
- function GetCenterY{
- return GetStgFrameHeight/2;
- }
- //your best friend forever
- function wait(w) { loop(w) {yield; } }
- task mainTask {
- renderBoss;
- renderBG;
- wait(60);
- //fireA;
- wait(120);
- movement;
- TEnd;
- }
- task renderBoss {
- let dir;
- let speed;
- // texture the boss, set center as true center
- ObjPrim_SetTexture(bossObj,imgBoss);
- ObjSprite2D_SetSourceRect(bossObj,0,0,100,100);
- ObjSprite2D_SetDestCenter(bossObj);
- ObjRender_SetScaleXYZ(bossObj,1.0,1.0,0);
- while(!Obj_IsDeleted(bossObj)) {
- // update boss speed and direction locally
- dir = ObjMove_GetAngle(bossObj);
- speed = ObjMove_GetSpeed(bossObj);
- // animation handling
- if(speed == 0){
- ObjRender_SetAngleXYZ(bossObj,0,0,0);
- if(animFrame < 15) { ObjSprite2D_SetSourceRect(bossObj,0,0,101,100); }
- if(animFrame >= 15 && animFrame < 30) { ObjSprite2D_SetSourceRect(bossObj,0,100,101,200); }
- if(animFrame >= 30 && animFrame < 45) { ObjSprite2D_SetSourceRect(bossObj,0,200,101,300); }
- if(animFrame >= 45) { ObjSprite2D_SetSourceRect(bossObj,0,100,101,200); }
- }
- else if(cos(dir) < 0){
- ObjRender_SetAngleXYZ(bossObj,0,0,0);
- ObjSprite2D_SetSourceRect(bossObj,202,100,303,200);
- }
- else if(cos(dir) > 0){
- ObjRender_SetAngleXYZ(bossObj,0,0,0);
- ObjSprite2D_SetSourceRect(bossObj,202,200,303,300);
- }
- animFrame++; // count animFrame. (++ is +1)
- if(animFrame > 60) { animFrame = 0; } //reset animFrame when it is higher than 60.
- yield;
- }
- }
- task renderBG{
- let scrollTex = 0;
- //background
- let obj = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(obj,21);
- ObjPrim_SetTexture(obj,japanhouse);
- ObjSprite2D_SetSourceRect(obj,0,0,1920,1200);
- ObjSprite2D_SetDestRect(obj,0,0,GetStgFrameWidth,GetStgFrameHeight);
- }
- function angletoPlayer {
- let dir = GetAngleToPlayer(bossObj);
- return dir;
- }
- task movement {
- while(ObjEnemy_GetInfo(bossObj,INFO_LIFE) > 0) {
- ObjMove_SetDestAtFrame(bossObj,rand(GetCenterX+90,GetCenterX-90),rand(GetCenterY-60,GetCenterY-120),60);
- fireB;
- wait(180);
- }
- }
- task fireA {
- let dir = angletoPlayer;
- while(ObjEnemy_GetInfo(bossObj,INFO_LIFE) > 0) {
- loop {
- loop(13) {
- ascent(i in 0..8) {
- CreateShotA1(bossX,bossY,2.5-i/3,dir,73+i,5);
- dir += 360/13;
- PlaySE(bulletSFX);
- }
- }
- wait(90);
- yield;
- }
- yield;
- }
- }
- task fireB {
- wait(120);
- PlaySE(gunSFX);
- loop(150) {
- let animFrame2 = 0;
- CreateShotA1(ObjMove_GetX(bossObj),ObjMove_GetY(bossObj),3,angletoPlayer,41,0);
- ObjRender_SetAngleXYZ(bossObj,0,0,0);
- if(animFrame2 < 6) { ObjSprite2D_SetSourceRect(bossObj,303,0,404,100); }
- if(animFrame2 >= 6 && animFrame < 12) { ObjSprite2D_SetSourceRect(bossObj,303,100,404,200); }
- if(animFrame2 >= 12 && animFrame < 18) { ObjSprite2D_SetSourceRect(bossObj,303,200,404,300); }
- if(animFrame2 >= 18 && animFrame < 24) { ObjSprite2D_SetSourceRect(bossObj,303,300,404,400); }
- if(animFrame2 >= 24) { ObjSprite2D_SetSourceRect(bossObj,303,400,404,500); }
- animFrame2++;
- if(animFrame2 > 30) { animFrame = 0; }
- yield;
- }
- }
- task TEnd {
- while(ObjEnemy_GetInfo(bossObj,INFO_LIFE)) {
- yield;
- }
- if(ObjEnemyBossScene_GetInfo(objScene,INFO_PLAYER_SHOOTDOWN_COUNT)
- + ObjEnemyBossScene_GetInfo(objScene,INFO_PLAYER_SPELL_COUNT) == 0) {
- AddScore(ObjEnemyBossScene_GetInfo(objScene,INFO_SPELL_SCORE));
- }
- PlaySE(bossdeathSFX);
- TExplosionA(bossX,bossY,10,0.5);
- Obj_Delete(bossObj);
- DeleteShotAll(TYPE_ALL,TYPE_ITEM);
- wait(120);
- CloseScript(GetOwnScriptID);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement