Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #TouhouDanmakufu[Package]
- #Title["Heart's EverLasting Lunacy"]
- #Text["Package"]
- #include "./lib_sound.dnh"
- let titleImg;
- let titleImg1;
- let objTitleText;
- let titleShine;
- let k1;
- let k2;
- let k3;
- let k4;
- let k5;
- let CSD = GetCurrentScriptDirectory;
- let mask;
- let line;
- let line1;
- let Reimu;
- let canvas;
- let text;
- let stageCounter = 1;
- let TitleIndex = 1;
- let fixTitleIndex = 0;
- let restriction = 1;
- let titleSceneIndex = 1;
- let selectIndex = 0;
- function wait(n){
- loop(n){yield;}
- }
- function rand_int(min, max){
- return round(rand(min, max))
- }
- @Initialize{
- TTitle;
- }
- @MainLoop{
- yield;
- }
- @Finalize{
- }
- task TTitle{
- text = ObjText_Create;
- ObjText_SetText(text, GetCommonData("TDBGClose", 2));
- let pathImg = CSD ~ "images/Title1.png";
- mask = ObjMask_Create("example_mask", 21, 21);
- ObjRender_SetAlpha(mask, 0);
- canvas = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(canvas, GetCurrentScriptDirectory() ~ "white.png"); // white pixel
- ObjSprite2D_SetSourceRect(canvas, 0, 0, 1024, 512); // 1024x512 is render target size
- ObjSprite2D_SetDestRect(canvas, 0, 0, 1024, 512);
- ObjMask_AddSource(mask, canvas);
- Shader;
- titleImg = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(titleImg, 21);
- ObjPrim_SetTexture(titleImg, pathImg);
- ObjSprite2D_SetSourceRect(titleImg, 0, 0, 1280, 960);
- ObjSprite2D_SetDestRect(titleImg, 0, 0, 640, 480);
- titleImg1 = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(titleImg1, 20);
- ObjPrim_SetTexture(titleImg1, pathImg);
- ObjSprite2D_SetSourceRect(titleImg1, 0, 0, 1280, 960);
- ObjSprite2D_SetDestRect(titleImg1, 0, 0, 640, 480);
- ObjRender_SetBlendType(titleImg1, BLEND_ADD_ARGB);
- Reimu = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(Reimu, 22);
- ObjPrim_SetTexture(Reimu, GetCurrentScriptDirectory() ~ "images/Reimu.png");
- ObjSprite2D_SetSourceRect(Reimu, 0, 0, 432, 735);
- ObjSprite2D_SetDestCenter(Reimu);
- ObjRender_SetScaleXYZ(Reimu, 0.45, 0.45, 0.45);
- ObjRender_SetPosition(Reimu, 97, 315, 0);
- Slide(Reimu);
- objTitleText = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(objTitleText, GetCurrentScriptDirectory ~ "images/TitleName.png");
- ObjSprite2D_SetSourceRect(objTitleText, 1025, 0, 2048, 1024);
- ObjSprite2D_SetDestCenter(objTitleText);
- ObjRender_SetScaleXYZ(objTitleText, 0.35, 0.35, 0);
- ObjRender_SetPosition(objTitleText, 200, 200, 0);
- Obj_SetRenderPriorityI(objTitleText, 20);
- Appear(objTitleText);
- k1 = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(k1, 22);
- ObjPrim_SetTexture(k1, GetCurrentScriptDirectory ~ "images/k1.png");
- ObjSprite2D_SetSourceRect(k1, 0, 0, 256, 256);
- ObjSprite2D_SetDestCenter(k1);
- ObjRender_SetPosition(k1, GetScreenWidth/2 + 20, GetScreenHeight/2 - 100, 0);
- ObjRender_SetScaleXYZ(k1, 0.35, 0.35, 0.35);
- Spin(k1);
- wait(10);
- k2 = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(k2, 22);
- ObjPrim_SetTexture(k2, GetCurrentScriptDirectory ~ "images/k2.png");
- ObjSprite2D_SetSourceRect(k2, 0, 0, 256, 256);
- ObjSprite2D_SetDestCenter(k2);
- ObjRender_SetPosition(k2, GetScreenWidth/2 + 50, GetScreenHeight/2 - 20, 0);
- ObjRender_SetScaleXYZ(k2, 0.35, 0.35, 0.35);
- Spin(k2);
- wait(10);
- k3 = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(k3, 22);
- ObjPrim_SetTexture(k3, GetCurrentScriptDirectory ~ "images/k3.png");
- ObjSprite2D_SetSourceRect(k3, 0, 0, 256, 256);
- ObjSprite2D_SetDestCenter(k3);
- ObjRender_SetPosition(k3, GetScreenWidth/2 - 20, GetScreenHeight/2 + 30, 0);
- ObjRender_SetScaleXYZ(k3, 0.35, 0.35, 0.35);
- Spin(k3);
- wait(10);
- k4 = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(k4, 22);
- ObjPrim_SetTexture(k4, GetCurrentScriptDirectory ~ "images/k4.png");
- ObjSprite2D_SetSourceRect(k4, 0, 0, 256, 256);
- ObjSprite2D_SetDestCenter(k4);
- ObjRender_SetPosition(k4, GetScreenWidth/2 + 50, GetScreenHeight/2 + 100, 0);
- ObjRender_SetScaleXYZ(k4, 0.35, 0.35, 0.35);
- Spin(k4);
- MainMenu;
- wait(10);
- k5 = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(k5, 22);
- ObjPrim_SetTexture(k5, GetCurrentScriptDirectory ~ "images/k5.png");
- ObjSprite2D_SetSourceRect(k5, 0, 0, 256, 256);
- ObjSprite2D_SetDestCenter(k5);
- ObjRender_SetPosition(k5, GetScreenWidth/2, GetScreenHeight/2 + 190, 0);
- ObjRender_SetScaleXYZ(k5, 0.35, 0.35, 0.35);
- Spin(k5);
- task Slide(obj){
- ObjRender_SetPosition(obj, 47, 315, 0);
- ObjRender_SetAlpha(obj, 0);
- let X = 27;
- let alp = 0;
- loop(30){
- X += 70/60;
- alp += 255/30;
- ObjRender_SetX(obj, X);
- ObjRender_SetAlpha(obj, alp);
- yield;
- }
- loop(30){
- X += 70/60;
- ObjRender_SetX(obj, X);
- yield;
- }
- }
- task Spin(obj){
- ObjRender_SetScaleXYZ(obj, 2, 2, 2);
- ObjRender_SetAlpha(obj, 0);
- let alp = 0;
- let scale = 2;
- let angleZ = 0;
- let r = [-1, 1][rand_int(0, 1)];
- loop(45){
- alp += 255/45;
- scale -= 1.65/45;
- angleZ += 8*r;
- ObjRender_SetAngleZ(obj, angleZ);
- ObjRender_SetScaleXYZ(obj, scale, scale, 0);
- ObjRender_SetAlpha(obj, alp);
- yield;
- }
- }
- task Appear(obj){
- line = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(line, 20);
- ObjPrim_SetTexture(line, GetCurrentScriptDirectory ~ "images/outline.png");
- ObjSprite2D_SetSourceRect(line, 0, 0, 128, 1024);
- ObjSprite2D_SetDestCenter(line);
- ObjRender_SetScaleXYZ(line, 0.25, 0.25, 0);
- ObjRender_SetY(line, 150);
- ObjRender_SetBlendType(line, BLEND_ADD_ARGB);
- line1 = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(line1, 20);
- ObjPrim_SetTexture(line1, GetCurrentScriptDirectory ~ "images/outline1.png");
- ObjSprite2D_SetSourceRect(line1, 0, 0, 128, 1024);
- ObjSprite2D_SetDestCenter(line1);
- ObjRender_SetScaleXYZ(line1, 0.25, 0.25, 0);
- ObjRender_SetY(line1, 150);
- ObjRender_SetBlendType(line1, BLEND_ADD_ARGB);
- let r = 0;
- let X = ObjRender_GetX(obj) - (1024*0.35);
- let X1 = X + 179; //1024 multiplied by 0.35 and then divided by 2. Former gets scale in X, latter finds the scale of each side(right and left)
- loop(90){
- r += 1024/90;
- X += (1024*0.35)/90;
- X1 += (1024*0.35)/90;
- ObjSprite2D_SetSourceRect(obj, 1025 + r, 0, 2048 + r, 1024);
- ObjRender_SetX(obj, X);
- ObjRender_SetX(line, X1);
- ObjRender_SetX(line1, X1);
- yield;
- }
- }
- }
- task TMenuItem1(Index, X, Y, text, ind, reqIndex){
- let objText = CreateTextObject(X, Y, text);
- let objSelect = CreateTextObject(X, Y, text);
- ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
- while(reqIndex == TitleIndex){
- Obj_SetVisible(objSelect, Index == selectIndex);
- yield;
- }
- Obj_Delete(objText);
- Obj_Delete(objSelect);
- function CreateTextObject(X, Y, text){
- let obj = ObjText_Create();
- ObjText_SetText(obj, text);
- ObjText_SetFontSize(obj, 30);
- ObjText_SetFontBold(obj, true);
- ObjText_SetFontColorTop(obj, 128, 128, 255);
- ObjText_SetFontColorBottom(obj, 64, 64, 255);
- ObjText_SetFontBorderType(obj, BORDER_FULL);
- ObjText_SetFontType(obj, "Vijaya");
- ObjText_SetFontBorderColor(obj,255, 255, 255);
- ObjText_SetFontBorderWidth(obj, 2);
- Obj_SetRenderPriorityI(obj, 30);
- ObjRender_SetX(obj, X);
- ObjRender_SetY(obj, Y);
- return obj;
- }
- }
- task TMenuItem(Index, X, Y, ind, reqIndex, angleT){
- let l = 257;
- let r = 512;
- let obj = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(obj, GetCurrentScriptDirectory ~ "images/TitleItems.png");
- ObjSprite2D_SetSourceRect(obj, l, 1 + 64*Index, r, 64 + 64*Index);
- ObjSprite2D_SetDestCenter(obj);
- ObjRender_SetScaleXYZ(obj, 0.6, 0.6, 0);
- ObjRender_SetPosition(obj, X + 300*cos(angleT), Y + 300*sin(angleT), 0);
- let obj1 = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(obj1, GetCurrentScriptDirectory ~ "images/TitleItems.png");
- ObjSprite2D_SetSourceRect(obj1, l - 256, 1 + 64*Index, r - 256, 64 + 64*Index);
- ObjSprite2D_SetDestCenter(obj1);
- ObjRender_SetScaleXYZ(obj1, 0.6, 0.6, 0);
- ObjRender_SetPosition(obj1, X + 300*cos(angleT), Y + 300*sin(angleT), 0);
- Obj_SetVisible(obj1, Index == selectIndex);
- ObjRender_SetBlendType(obj1, BLEND_ADD_ARGB);
- let alp = 0;
- ObjRender_SetX(obj, ObjRender_GetX(obj) + 200);
- ObjRender_SetX(obj1, ObjRender_GetX(obj1) + 200);
- loop(20){
- alp += 255/20;
- ObjRender_SetAlpha(obj, alp);
- ObjRender_SetX(obj, ObjRender_GetX(obj) - 200/20);
- ObjRender_SetX(obj1, ObjRender_GetX(obj1) - 200/20);
- yield;
- }
- while(reqIndex == TitleIndex){
- Obj_SetVisible(obj1, Index == selectIndex);
- yield;
- }
- Obj_Delete(obj);
- Obj_Delete(obj1);
- }
- task MainMenu{
- let pathImg = CSD ~ "images/TitleItems.png";
- let INDEX_START = 0;
- let INDEX_EXTRA = 1;
- let INDEX_PRACTICE = 2;
- let INDEX_REPLAY = 3;
- let INDEX_DATA = 4;
- let INDEX_MUSIC = 5;
- let INDEX_OPTION = 6;
- let INDEX_MANUAL = 7;
- let INDEX_QUIT = 8;
- selectIndex = 0;
- let X = 250;
- let Y = 300;
- let elementCount = 9;
- let i = 0;
- let angleT = -30;
- loop(9){
- TMenuItem(i, X, Y, 1, 1, angleT);
- i ++;
- angleT += 60/8;
- }
- wait(20);
- while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}
- let frameKeyHold = 0;
- while(TitleIndex == 1){
- if(GetVirtualKeyState(VK_OK) == KEY_PUSH){
- ok0(40);
- if(selectIndex == INDEX_START){
- TitleIndex = 2;
- titleSceneIndex ++;
- DifficultyMenu;
- break;
- }else if(selectIndex == INDEX_QUIT){
- ClosePackage();
- }
- }
- if(GetVirtualKeyState(VK_CANCEL) == KEY_PUSH){
- selectIndex = INDEX_QUIT;
- cancel0(35);
- }
- if(GetVirtualKeyState(VK_UP) == KEY_PUSH){
- select0(30);
- selectIndex--;
- if(selectIndex == 1 && GetCommonData("Extra", 0) == 0){
- selectIndex --;
- }
- }else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH){
- select0(30);
- selectIndex++;
- if(selectIndex == 1 && GetCommonData("Extra", 0) == 0){
- selectIndex ++;
- }
- }else if(GetVirtualKeyState(VK_UP) == KEY_HOLD){
- frameKeyHold++;
- if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10 == 0))){
- select0(30);
- selectIndex--;
- if(selectIndex == 1 && GetCommonData("Extra", 0) == 0){
- selectIndex --;
- }
- }
- }else if(GetVirtualKeyState(VK_DOWN) == KEY_HOLD){
- frameKeyHold++;
- if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10 == 0))){
- select0(30);
- selectIndex++;
- if(selectIndex == 1 && GetCommonData("Extra", 0) == 0){
- selectIndex ++;
- }
- }
- }else{
- frameKeyHold = 0;
- }
- if(0 > selectIndex){
- selectIndex = elementCount - 1;
- }else{
- selectIndex %= elementCount;
- }
- yield;
- }
- }
- task DifficultyMenu{
- let Easy = 0;
- let Normal = 1;
- let Hard = 2;
- let Lunatic = 3;
- let Back = 4;
- selectIndex = 1;
- let diffText = ["Easy", "Normal", "Hard", "Lunatic", "Back"];
- let elementCount = length(diffText);
- let X = 450;
- let Y = 240;
- ascent(i in 0..elementCount){
- TMenuItem1(i, X, Y, diffText[i], 2, 2);
- Y += 40;
- }
- while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}
- let frameKeyHold = 0;
- CreateCommonDataArea("Difficulty");
- SaveCommonDataAreaA2("Difficulty", "./CDarea.dnh");
- while(TitleIndex == 2){
- if(GetVirtualKeyState(VK_OK) == KEY_PUSH && 4 > selectIndex){
- if(selectIndex == 0){
- SetAreaCommonData("Difficulty", "diff", 0);
- SaveCommonDataAreaA2("Difficulty", "./CDarea.dnh");
- }else if(selectIndex == 1){
- SetAreaCommonData("Difficulty", "diff", 1);
- SaveCommonDataAreaA2("Difficulty", "./CDarea.dnh");
- }else if(selectIndex == 2){
- SetAreaCommonData("Difficulty", "diff", 2);
- SaveCommonDataAreaA2("Difficulty", "./CDarea.dnh");
- }else if(selectIndex == 3){
- SetAreaCommonData("Difficulty", "diff", 3);
- SaveCommonDataAreaA2("Difficulty", "./CDarea.dnh");
- }
- TStageScene("");
- TitleIndex = 0;
- Obj_Delete(titleImg);
- Obj_Delete(titleImg1);
- Obj_Delete(objTitleText);
- Obj_Delete(k1);
- Obj_Delete(k2);
- Obj_Delete(k3);
- Obj_Delete(k4);
- Obj_Delete(k5);
- Obj_Delete(line);
- Obj_Delete(line1);
- Obj_Delete(mask);
- Obj_Delete(Reimu);
- Obj_Delete(canvas);
- }
- if(GetVirtualKeyState(VK_OK) == KEY_PUSH){
- if(selectIndex == 4){
- titleSceneIndex = 1;
- TitleIndex = 1;
- MainMenu;
- }
- }
- if(GetVirtualKeyState(VK_CANCEL) == KEY_PUSH){
- selectIndex = 4;
- }
- if(GetVirtualKeyState(VK_UP) == KEY_PUSH){
- selectIndex--;
- }else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH){
- selectIndex++;
- }else if(GetVirtualKeyState(VK_UP) == KEY_HOLD){
- frameKeyHold++;
- if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10 == 0))){
- selectIndex--;
- }
- }else if(GetVirtualKeyState(VK_DOWN) == KEY_HOLD){
- frameKeyHold++;
- if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10 == 0))){
- selectIndex++;
- }
- }else{
- frameKeyHold = 0;
- }
- if(0 > selectIndex){
- selectIndex = elementCount - 1;
- }else{
- selectIndex %= elementCount;
- }
- yield;
- }
- }
- function RenderSceneToTransitionTexture(){
- let textureName = GetTransitionRenderTargetName();
- RenderToTextureA1(textureName, 0, 100, true);
- }
- task TTransition{
- let textureName = GetTransitionRenderTargetName();
- let objImage = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(objImage, 100);
- ObjPrim_SetTexture(objImage, textureName);
- ObjSprite2D_SetSourceRect(objImage, 0, 0, 640, 480);
- ObjSprite2D_SetDestRect(objImage, 0, 0, 640, 480);
- let alpha = 255;
- while(alpha > 0){
- ObjRender_SetAlpha(objImage, alpha);
- alpha -= 16;
- yield;
- }
- Obj_Delete(objImage);
- }
- function ObjMask_Create(texture_name, layer_min, layer_max){
- // Set up render target
- CreateRenderTarget(texture_name);
- // Set up shader
- let obj = ObjShader_Create();
- ObjShader_SetShaderF(obj, GetCurrentScriptDirectory() ~ "SamplePS02_HLSL.dnh");
- ObjShader_SetTechnique(obj, "TecMask");
- ObjShader_SetTexture(obj, "textureMask_", texture_name);
- SetShaderI(obj, layer_min, layer_max);
- Obj_SetValue(obj, "MASK_CONTENTS", []);
- task run(){
- while(!Obj_IsDeleted(obj)){
- let contents = Obj_GetValueD(obj, "MASK_CONTENTS", []);
- // Remove any deleted objects from list
- contents = remove_deleted_objs(contents);
- ascent(i in 0..length(contents)){
- // Make visible when drawing to render target
- //Obj_SetVisible(contents[i], true);
- Obj_SetVisible(contents[i], false);
- RenderToTextureB1(texture_name, contents[i], (i==0));
- // Otherwise invisible
- //Obj_SetVisible(contents[i], false);
- }
- Obj_SetValue(obj, "MASK_CONTENTS", contents);
- yield;
- }
- let contents = Obj_GetValueD(obj, "MASK_CONTENTS", []);
- ascent(i in 0..length(contents)){ Obj_Delete(contents[i]); }
- RemoveTexture(texture_name);
- }
- run();
- return obj;
- function remove_deleted_objs(a){
- let res = [0][0..0]; // typed array
- let slices = [];
- let prev = 0;
- ascent(i in 0..length(a)){
- if(Obj_IsDeleted(a[i])){
- slices = slices ~ [[prev, i]];
- prev = i+1;
- }
- }
- // if unchanged, return
- if(length(slices) == 0 && prev == 0){ return a; }
- // last slice
- slices = slices ~ [[prev, length(a)]];
- // join slices
- ascent(j in 0..length(slices)){
- res = res ~ a[slices[j][0]..slices[j][1]];
- }
- return res;
- }
- }
- function ObjMask_AddSource(obj, src){
- Obj_SetValue(obj, "MASK_CONTENTS", Obj_GetValueD(obj, "MASK_CONTENTS", []) ~ [src]);
- }
- task Shader{
- let title = ObjPrim_Create(OBJ_SPRITE_2D);
- let alpha = 255;
- ObjPrim_SetTexture(title, GetCurrentScriptDirectory() ~ "images/TitleNameMask.png");
- ObjSprite2D_SetSourceRect(title, 0, 0, 1024, 1024);
- ObjRender_SetPosition(title, 200, 200, 0);
- ObjSprite2D_SetDestCenter(title);
- ObjRender_SetBlendType(title, BLEND_SUBTRACT);
- ObjMask_AddSource(mask, title);
- ObjRender_SetScaleXYZ(title, 0.35, 0.35, 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment