SHOW:
|
|
- or go back to the newest paste.
| 1 | - | // header |
| 1 | + | |
| 2 | #ScriptVersion[3] | |
| 3 | #Title["テスト「ダークネス」"] | |
| 4 | #Text["azakacrossのはじめのスペカー"] | |
| 5 | - | #Text["azaka`crossのはじめのスペカー"] |
| 5 | + | |
| 6 | // include files | |
| 7 | #include"script/default_system/Default_ShotConst.txt" | |
| 8 | #include"script/default_system/Default_Effect.txt" | |
| 9 | ||
| 10 | // globs | |
| 11 | let objEnemy; | |
| 12 | let inMotion = false; | |
| 13 | let stgX = GetStgFrameWidth() / 2; // Obtains the X coordinate of the center of the stage | |
| 14 | ||
| 15 | @Initialize | |
| 16 | {
| |
| 17 | objEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS); // generates boss obj | |
| 18 | ObjEnemy_Regist(objEnemy); // Sets objEnemy to active | |
| 19 | ObjEnemy_SetDamageRate(objEnemy, 50, 75); // 50% dmg from bullets, 75% dmg from bomb | |
| 20 | ||
| 21 | // Load important tasks here | |
| 22 | // Tasks are "microthreads" which perform independently of one another | |
| 23 | // Using the yield; command in a task suspends it, when placed in loop(n) { }
| |
| 24 | // It will suspend for n frames. | |
| 25 | ||
| 26 | TWork; | |
| 27 | TEnemDraw; | |
| 28 | TFinish; | |
| 29 | ||
| 30 | } | |
| 31 | ||
| 32 | @MainLoop | |
| 33 | {
| |
| 34 | let enemyX = ObjMove_GetX(objEnemy); | |
| 35 | let enemyY = ObjMove_GetY(objEnemy); | |
| 36 | ||
| 37 | // Enemy collision to bullets | |
| 38 | ObjEnemy_SetIntersectionCircleToShot(objEnemy, enemyX, enemyY, 32); | |
| 39 | ||
| 40 | // Enemy collision to player chara | |
| 41 | ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, enemyX, enemyY, 24); | |
| 42 | ||
| 43 | yield; // Allows all tasks to perform their job before repeating @MainLoop | |
| 44 | } | |
| 45 | ||
| 46 | @Event | |
| 47 | {
| |
| 48 | alternative(GetEventType()) | |
| 49 | case(EV_REQUEST_LIFE) | |
| 50 | {
| |
| 51 | SetScriptResult(250) // Set eHP to 500 | |
| 52 | } | |
| 53 | case(EV_REQUEST_TIMER) | |
| 54 | {
| |
| 55 | SetScriptResult(120) // Set timer to 120s | |
| 56 | } | |
| 57 | case(EV_REQUEST_SPELL_SCORE) | |
| 58 | {
| |
| 59 | SetScriptResult(50000) // Set score get to 50k | |
| 60 | } | |
| 61 | } | |
| 62 | ||
| 63 | /******* | |
| 64 | * Tasks | |
| 65 | ********/ | |
| 66 | ||
| 67 | // Power task, performing the bulk | |
| 68 | ||
| 69 | task TWork | |
| 70 | {
| |
| 71 | - | let stgX = GetStgFrameWidth() / 2; // Obtains the X coordinate of the center of the stage |
| 71 | + | |
| 72 | * Parameters: | |
| 73 | * real: object id , | |
| 74 | * real: X-coordinate (in this example, X coord of the center) , | |
| 75 | * real: Y-coordinate (in this example, 60 pixels below (stgX,0)) , | |
| 76 | * real: the frame the object should be placed in (stgX, 60) | |
| 77 | ********/ | |
| 78 | ObjMove_SetDestAtFrame(objEnemy, stgX, 60, 60); | |
| 79 | ||
| 80 | loop(60) { yield; } // Suspend this task for 60 frames or 1 second
| |
| 81 | ||
| 82 | // Performs spell card activation | |
| 83 | let objScene = GetEnemyBossSceneObjectID(); | |
| 84 | ObjEnemyBossScene_StartSpell(objScene); | |
| 85 | ||
| 86 | // Perform this while the enemy isn't dead yet | |
| 87 | while(!Obj_IsDeleted(objEnemy)) | |
| 88 | {
| |
| 89 | loop(90) { yield; }
| |
| 90 | TShotBallA(135); | |
| 91 | - | // Danmaku processing goes here. |
| 91 | + | TShotBallA(90); |
| 92 | TShotBallA(45); | |
| 93 | } | |
| 94 | } | |
| 95 | ||
| 96 | // Drawing task | |
| 97 | ||
| 98 | task TEnemDraw | |
| 99 | {
| |
| 100 | let imgExRumia = GetCurrentScriptDirectory ~ "ExRumia.png"; | |
| 101 | ObjPrim_SetTexture(objEnemy, imgExRumia); // Set exrumia.png as texture to objEnemy | |
| 102 | ||
| 103 | while(!Obj_IsDeleted(objEnemy)) // perform this while the enemy isn't dead yet | |
| 104 | {
| |
| 105 | let angle = ObjMove_GetAngle(objEnemy); | |
| 106 | let speed = ObjMove_GetSpeed(objEnemy); | |
| 107 | ||
| 108 | if(speed == 0) // Only perform this entire block if Rumia's speed was 0 | |
| 109 | {
| |
| 110 | if(inMotion) // Perform this block if Rumia was in motion | |
| 111 | {
| |
| 112 | /************************** | |
| 113 | * Parameters - Takes only ONE texture image: | |
| 114 | * real: object's id , | |
| 115 | * real: lower-left point , | |
| 116 | * real: upper-left point , | |
| 117 | * real: upper-right point , | |
| 118 | * real: lower-right point | |
| 119 | **************************/ | |
| 120 | ObjSprite2D_SetSourceRect(objEnemy, 64, 1, 127, 64); | |
| 121 | } | |
| 122 | else // Otherwise, make her appear stationary. | |
| 123 | {
| |
| 124 | ObjSprite2D_SetSourceRect(objEnemy, 1, 1, 64, 64); | |
| 125 | } | |
| 126 | } | |
| 127 | // positive value = move right, so make Rumia's body go right | |
| 128 | else if (cos(angle) > 0) { ObjSprite2D_SetSourceRect(objEnemy, 192, 1, 255, 64); }
| |
| 129 | // negative value = move left, so make Rumia's body go left | |
| 130 | else if (cos(angle) < 0) { ObjSprite2D_SetSourceRect(objEnemy, 128, 1, 191, 64); }
| |
| 131 | ||
| 132 | ObjSprite2D_SetDestCenter(objEnemy); | |
| 133 | ||
| 134 | yield; // This loop performed once per frame | |
| 135 | } | |
| 136 | } | |
| 137 | - | // Bullet routines |
| 137 | + | |
| 138 | /****************** | |
| 139 | * Bullet routines | |
| 140 | * go here | |
| 141 | ******************/ | |
| 142 | ||
| 143 | // Shoots a big ball forward which spawns smaller stars | |
| 144 | // Parameters: | |
| 145 | // angle1 - real : the angle from Rumia which the bullet is shot | |
| 146 | ||
| 147 | task TShotBallA(angle1) | |
| 148 | {
| |
| 149 | let posX = ObjMove_GetX(objEnemy); | |
| 150 | let posY = ObjMove_GetY(objEnemy); | |
| 151 | ||
| 152 | // Create bullet object | |
| 153 | /********************** | |
| 154 | * Parameters | |
| 155 | * real: X coordinate of the origin | |
| 156 | * real: Y coordinate of the origin | |
| 157 | * real: acceleration of the object | |
| 158 | * real: angle from the origin of the object | |
| 159 | * real: top speed | |
| 160 | - | TExplosionA = (enemyX, enemyY, 45, 0.7); |
| 160 | + | * real: object id of the shot to generate |
| 161 | * real: delay time | |
| 162 | **********************/ | |
| 163 | let bObj = CreateShotA2(posX, posY, 3, angle1, 0.05, 0, DS_BALL_L_PURPLE, 0); | |
| 164 | ||
| 165 | ascent(i in 0 .. 250) | |
| 166 | {
| |
| 167 | if(Obj_IsDeleted(bObj)) { break; }
| |
| 168 | let bSpd = rand(0.3,2); | |
| 169 | let bx = ObjMove_GetX(bObj); | |
| 170 | let by = ObjMove_GetY(bObj); | |
| 171 | // spawn a small star bullet as the bigger bullet travels | |
| 172 | CreateShotA1(bx, by, bSpd, rand(0,360), DS_STAR_S_PURPLE, 45); | |
| 173 | yield; | |
| 174 | } | |
| 175 | } | |
| 176 | ||
| 177 | // Post-fight processing | |
| 178 | ||
| 179 | task TFinish | |
| 180 | {
| |
| 181 | // Suspend this task indefinitely as long as enemy is still alive | |
| 182 | while(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) > 0) | |
| 183 | {
| |
| 184 | yield; | |
| 185 | } | |
| 186 | ||
| 187 | let enemyX = ObjMove_GetX(objEnemy); | |
| 188 | let enemyY = ObjMove_GetY(objEnemy); | |
| 189 | ||
| 190 | /****** | |
| 191 | * TExplosionA is found in "script/default_system/..." | |
| 192 | * Parameters: | |
| 193 | * real: X coordinate of the explosion , | |
| 194 | * real: Y coordinate of the explosion , | |
| 195 | * real: "dAlpha" - reduce the brightness of the explosion by this amount | |
| 196 | * real: "dScale" - adjust the size of the explosion by this multiplier | |
| 197 | ******/ | |
| 198 | TExplosionA(enemyX, enemyY, 45, 0.7); | |
| 199 | ||
| 200 | DeleteShotAll(TYPE_ALL, TYPE_ITEM); // Get rid of everything | |
| 201 | Obj_Delete(objEnemy); // Delete the enemy to kill the loops | |
| 202 | ||
| 203 | loop(30) { yield; } // suspend this task for half a second
| |
| 204 | ||
| 205 | // Don't forget to close the script when it ends! | |
| 206 | CloseScript(GetOwnScriptID()); | |
| 207 | } |