Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "./../system/Sound.txt"
- #include "./../system/Music.txt"
- #include "./../system/SpellName.txt"
- #include "../system/package/functions_score.txt"
- let SCENE_MAIN = 00;
- let SCENE_START = 10;
- let SCENE_MODE = 11;
- let SCENE_QUIT = 70;
- let objScene = SCENE_MAIN;
- let mainX = 0;
- let mainY = 0;
- let shiftTime = 0;
- let shiftNum = 0;
- let whitePng = GetCurrentScriptDirectory ~ "../system/img/WhiteSquare.png";
- @Initialize
- {
- GenPaths;
- LoadCommonDataAreaA2("CONFIG",GetCurrentScriptDirectory ~ "../system/data/CONFIG");
- SetAutoDeleteObject(true);
- TBackground;
- }
- @MainLoop
- {
- yield;
- }
- @Finalize
- {
- EndMusic(0);
- }
- function LoadImages
- {
- LoadTexture(whitePng);
- LoadTexture(GetCurrentScriptDirectory ~ "../system/img/RSS_Item.png");
- LoadTexture(GetCurrentScriptDirectory ~ "./img/Title_Main.png");
- }
- task TBackground
- {
- LoadImages;
- loop(90){yield;}
- PlayMusic(0);
- let back = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(back,GetCurrentScriptDirectory ~ "img/Title_Main.png");
- ObjSprite2D_SetSourceRect(back,0,0,640,480);
- ObjSprite2D_SetDestRect(back,0,0,640,480);
- Obj_SetRenderPriority(back,0.01);
- let shad = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(shad,GetCurrentScriptDirectory ~ "img/Title_Effect.png");
- ObjSprite2D_SetDestRect(shad,0,0,640,480);
- Obj_SetRenderPriority(shad,0.01);
- ObjRender_SetAlpha(shad,70);
- ObjRender_SetBlendType(shad,BLEND_ADD_ARGB);
- let counter = -1;
- loop
- {
- counter+=1;
- let alpha = min(30,counter)/30;
- ObjRender_SetColorHSV(back,0,0,alpha*255);
- ObjRender_SetAlpha(shad,alpha*120);
- ObjSprite2D_SetSourceRect(shad,-counter*0.4,counter*0.175,256-counter*0.4,256+counter*0.175);
- if(counter == 30)
- {
- TScene_Main;
- }
- yield;
- }
- }
- task TScene_Main
- {
- let distm = 170;
- let texts = ["Game Start","Practice","Upgrade","Replay","Result","Music Room","Options","Quit"];
- let glw = length(texts);
- let obj = [];
- ascent(i in 0..glw+1)
- {
- let text;
- obj = obj ~ [CreateText];
- if(i == glw)
- {
- ObjText_SetText(obj[i],texts[0]);
- ObjRender_SetBlendType(obj[i],BLEND_ADD_ARGB);
- }
- else
- {
- ObjText_SetText(obj[i],texts[i]);
- }
- ObjRender_SetScaleXYZ(obj[i],-1,-1,0);
- ObjText_SetFontSize(obj[i], 32);
- ObjText_SetHorizontalAlignment(obj[i],ALIGNMENT_RIGHT);
- ObjText_SetMaxWidth(obj[i],distm);
- Obj_SetRenderPriority(obj[i], 0.1);
- }
- let count = 90;
- let back = [];
- ascent(i in 0..2)
- {
- back = back ~ [ObjPrim_Create(OBJ_SPRITE_2D)];
- ObjPrim_SetPrimitiveType(back[i],PRIMITIVE_TRIANGLESTRIP);
- ObjPrim_SetTexture(back[i],whitePng);
- Obj_SetRenderPriority(back[i],0.09);
- ObjPrim_SetVertexCount(back[i],count*2);
- }
- let orb = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(orb,GetCurrentScriptDirectory ~ "../system/img/YinYang.png");
- ObjSprite2D_SetSourceRect(orb,0,0,256,256);
- ObjSprite2D_SetDestRect(orb,0,0,1,1);
- ObjRender_SetScaleXYZ(orb,distm*0.9,distm*0.9,0);
- Obj_SetRenderPriority(orb,0.09);
- let selectIndex = 0;
- let frameKeyHold = 0;
- let frameTurn = 0;
- let dir = 0;
- let scene = SCENE_MAIN;
- objScene = scene;
- let xM = mainX+1;
- let yM = mainY;
- let cenx = GetScreenWidth-45;
- let ceny = GetScreenHeight-75;
- let x = 0;
- let y = 0;
- let counter = 0;
- shiftTime = 45;
- FShiftX(xM);
- loop
- {
- counter+=1;
- x = (xM-mainX)*GetScreenWidth;
- y = (yM-mainY)*GetScreenHeight;
- ascent(i in 0..glw+1)
- {
- let angle = 180-i*360/glw;
- if(i == glw)
- {
- if(dir == 1)
- {
- angle+=(-1+selectIndex%1)*360/glw;
- ObjText_SetText(obj[i],texts[ceil(selectIndex)%glw]);
- }
- else if(dir == -1)
- {
- angle+=(selectIndex%1)*360/glw;
- ObjText_SetText(obj[i],texts[floor(selectIndex)]);
- }
- else
- {
- ObjText_SetText(obj[i],texts[floor(selectIndex)]);
- }
- }
- else
- {
- angle+=selectIndex*360/glw;
- if(cos(angle) >= cos(90-360/glw))
- {
- Obj_SetVisible(obj[i],false);
- }
- else
- {
- Obj_SetVisible(obj[i],true);
- }
- }
- ObjRender_SetPosition(obj[i],x-distm*0.5+cenx+distm*1.075*cos(angle),y-22+ceny+distm*1.075*sin(angle),0);
- ObjRender_SetAngleZ(obj[i],angle);
- }
- ascent(i0 in 0..length(back))
- {
- ascent(i1 in 0..count*2)
- {
- let dist = distm*(0.35+i0*0.65+(i1%2)*(0.65-i0*0.2));
- let color = 0;
- let alpha = 125;
- if(i1%2 == i0)
- {
- color = 0;
- alpha = 255;
- }
- let angle = floor(i1*0.5)*360/(count-1);
- ObjPrim_SetVertexPosition(back[i0],i1,x+cenx+dist*cos(angle),y+ceny+dist*sin(angle),0);
- ObjPrim_SetVertexAlpha(back[i0],i1,alpha);
- ObjPrim_SetVertexColor(back[i0],i1,color,color,color);
- }
- }
- ObjRender_SetPosition(orb,x+cenx,y+ceny,0);
- ObjRender_SetAngleZ(orb,30-selectIndex*360/glw);
- if(scene == objScene && counter >= shiftTime)
- {
- shiftTime = 30;
- let ind = IndexScroll([VK_UP,VK_DOWN],selectIndex,frameKeyHold,frameTurn,glw,dir,14);
- selectIndex = ind[0];
- frameKeyHold = ind[1];
- frameTurn = ind[2];
- dir = ind[3];
- if(IsKeyState([VK_OK],[KEY_PUSH]))
- {
- PlaySound("se_Confirm",120);
- alternative(selectIndex)
- case(0)
- {
- TScene_Start(selectIndex);
- TFakeTexts;
- }
- case(7)
- {
- SetScriptResult(["EXIT"]);
- loop(20){yield;}
- CloseScript(GetOwnScriptID);
- return;
- }
- }
- if(IsKeyState([VK_CANCEL],[KEY_PUSH]))
- {
- if(selectIndex == 7)
- {
- PlaySound("se_Cancel",120);
- SetScriptResult(["EXIT"]);
- loop(20){yield;}
- CloseScript(GetOwnScriptID);
- return;
- }
- else
- {
- PlaySound("se_Cancel",120);
- selectIndex = 7;
- }
- }
- }
- yield;
- }
- task TFakeTexts
- {
- let obj = [];
- ascent(i in 0..glw+1)
- {
- let text;
- obj = obj ~ [CreateText];
- if(i == glw)
- {
- ObjText_SetText(obj[i],texts[(selectIndex)%glw]);
- ObjRender_SetBlendType(obj[i],BLEND_ADD_ARGB);
- }
- else
- {
- ObjText_SetText(obj[i],texts[(glw-i)%glw]);
- }
- ObjRender_SetScaleXYZ(obj[i],1,1,0);
- ObjText_SetFontSize(obj[i], 32);
- ObjText_SetHorizontalAlignment(obj[i],ALIGNMENT_LEFT);
- ObjText_SetMaxWidth(obj[i],distm);
- Obj_SetRenderPriority(obj[i], 0.1);
- }
- loop
- {
- if(objScene != SCENE_MAIN)
- {
- ascent(i in 0..glw+1)
- {
- let angle = i*360/glw;
- if(i != glw)
- {
- angle+=selectIndex*360/glw;
- if(cos(angle) <= cos(90))
- {
- Obj_SetVisible(obj[i],false);
- }
- else
- {
- Obj_SetVisible(obj[i],true);
- }
- }
- ObjRender_SetPosition(obj[i],x-distm*0.5+60+cenx+distm*0.75*cos(angle),y-22+ceny+distm*0.75*sin(angle),0);
- ObjRender_SetAngleZ(obj[i],angle);
- }
- }
- else
- {
- ascent(i in 0..length(obj))
- {
- Obj_Delete(obj[i]);
- }
- return;
- }
- yield;
- }
- }
- }
- task TScene_Start(type_main)
- {
- let textsMode = ["Barrier Mode","Classic Mode"];
- let textsDesc = ["Brilliant Pagoda or Haze Castle style. You have a health[r]bar and barriers, different colored bullets do different[r]amounts of damage, etc. You're intended to play this one.","Classic Touhou style. Your barriers become extra lives,[r]but each bullet is an instant kill. Unlike the original,[r]you don't get extra booze for playing in this mode."];
- let distx = GetScreenWidth*0.5-75;
- let glw = length(textsMode);
- let objMode = [];
- ascent(i in 0..glw+1)
- {
- let text;
- objMode = objMode ~ [CreateText];
- if(i == glw)
- {
- ObjText_SetText(objMode[i],textsMode[0]);
- ObjRender_SetBlendType(objMode[i],BLEND_ADD_ARGB);
- }
- else
- {
- ObjText_SetText(objMode[i],textsMode[i]);
- }
- ObjText_SetFontSize(objMode[i], 40);
- ObjText_SetHorizontalAlignment(objMode[i],ALIGNMENT_LEFT);
- Obj_SetRenderPriority(objMode[i], 0.12);
- }
- ObjText_SetFontColorTop(objMode[0], 155, 196, 255);
- ObjText_SetFontColorBottom(objMode[0], 96, 96, 255);
- ObjText_SetFontColorTop(objMode[1], 255, 196, 55);
- ObjText_SetFontColorBottom(objMode[1], 255, 96, 96);
- ObjRender_SetAlpha(objMode[glw],85);
- let objDesc = CreateText;
- ObjText_SetText(objDesc,textsDesc[0]);
- ObjText_SetFontSize(objDesc, 20);
- ObjText_SetHorizontalAlignment(objDesc,ALIGNMENT_LEFT);
- Obj_SetRenderPriority(objDesc, 0.12);
- let objMaj = CreateText;
- ObjText_SetText(objMaj,"Select the Game Style");
- ObjText_SetFontSize(objMaj, 54);
- ObjText_SetHorizontalAlignment(objMaj,ALIGNMENT_LEFT);
- Obj_SetRenderPriority(objMaj, 0.12);
- let objS;
- local
- {
- objS = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
- ObjPrim_SetTexture(objS,GetCurrentScriptDirectory ~ "../system/img/RSS_Item.png");
- Obj_SetRenderPriority(objS,0.12);
- ObjRender_SetBlendType(objS,BLEND_ADD_ARGB);
- ascent(i in 0..2)
- {
- ObjSpriteList2D_AddVertex(objS);
- ObjSpriteList2D_SetSourceRect(objS,11*32,1*32,12*32,2*32);
- ObjRender_SetAngleZ(objS,(i*2-1)*90);
- ObjSpriteList2D_SetDestRect(objS,-24,i*250-24,24,i*250+24);
- }
- ObjSpriteList2D_AddVertex(objS);
- ObjSpriteList2D_CloseVertex(objS);
- ObjRender_SetColor(objS,64,64,255);
- }
- let back;
- local
- {
- back = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
- ObjPrim_SetTexture(back,whitePng);
- Obj_SetRenderPriority(back,0.11);
- ObjRender_SetAlpha(back,155);
- descent(i in 0..2)
- {
- ObjSpriteList2D_AddVertex(back);
- ObjSpriteList2D_SetDestRect(back,-distx-i*2,40-i*2,distx+i*2,90+i*2);
- ObjRender_SetColorHSV(back,0,0,i*155);
- ObjSpriteList2D_AddVertex(back);
- ObjSpriteList2D_SetDestRect(back,-distx*0.75-i*2,125-i*2,distx*0.75+i*2,335+i*2);
- ObjRender_SetColorHSV(back,0,0,i*155);
- ObjSpriteList2D_AddVertex(back);
- ObjSpriteList2D_SetDestRect(back,-distx-i*2,350-i*2,distx+i*2,450+i*2);
- ObjRender_SetColorHSV(back,0,0,i*155);
- }
- ObjSpriteList2D_AddVertex(back);
- ObjSpriteList2D_CloseVertex(back);
- }
- let selectIndex = 0;
- let ind = selectIndex;
- let frameKeyHold = 0;
- let frameTurn = 0;
- let dir = 0;
- let scene = SCENE_START;
- objScene = scene;
- let xM = mainX+1;
- let yM = mainY;
- let cenx = GetScreenWidth*0.5;
- let ceny = 0;
- let x = 0;
- let y = 0;
- let xm = x;
- let ym = y;
- let shiftingBack = false;
- let counterShift = 0;
- let counter = 0;
- FShiftX(xM);
- loop
- {
- counter+=1;
- x = (xM-mainX)*GetScreenWidth;
- y = (yM-mainY)*GetScreenHeight;
- if(ind != selectIndex || xm != x || ym != y)
- {
- ind = selectIndex;
- xm = x;
- ym = y;
- ascent(i in 0..glw+1)
- {
- let v = i;
- if(i == glw)
- {
- v = trunc(selectIndex);
- ObjText_SetText(objMode[i],textsMode[v]);
- }
- ObjRender_SetPosition(objMode[i],x+cenx-78,y+ceny+135+v*200/glw,0);
- }
- ObjRender_SetPosition(back,x+cenx,y+ceny,0);
- ObjRender_SetPosition(objDesc,x+GetScreenWidth*0.5-distx+4,y+ceny+350,0);
- ObjText_SetText(objDesc,textsDesc[trunc(selectIndex)]);
- ObjRender_SetPosition(objMaj,x+cenx-172,y+ceny+40,0);
- ObjRender_SetPosition(objS,x+cenx+130,y+ceny+158+trunc(selectIndex)*200/glw,0);
- }
- if(scene == objScene && counter >= shiftTime)
- {
- let ind = IndexScroll([VK_UP,VK_DOWN],selectIndex,frameKeyHold,frameTurn,glw,dir,4);
- selectIndex = ind[0];
- frameKeyHold = ind[1];
- frameTurn = ind[2];
- dir = ind[3];
- if(shiftingBack == false)
- {
- if(IsKeyState([VK_CANCEL],[KEY_PUSH]))
- {
- PlaySound("se_Cancel",120);
- FShiftX(xM-1);
- shiftingBack = true;
- }
- if(IsKeyState([VK_OK],[KEY_PUSH]))
- {
- PlaySound("se_Confirm",120);
- alternative(selectIndex)
- case(0)
- {
- SetCommonData("GAME_STYLE","BARRIER");
- }
- case(1)
- {
- SetCommonData("GAME_STYLE","CLASSIC");
- }
- return;
- }
- }
- else
- {
- counterShift+=1;
- if(counterShift >= shiftTime)
- {
- ascent(i in 0..length(objMode))
- {
- Obj_Delete(objMode[i]);
- }
- Obj_Delete(objDesc);
- Obj_Delete(objMaj);
- Obj_Delete(back);
- Obj_Delete(objS);
- objScene = SCENE_MAIN;
- return;
- }
- }
- }
- yield;
- }
- }task FShiftX(x)
- {
- let xM = mainX;
- shiftNum+=1;
- let time = shiftTime;
- let num = shiftNum;
- ascent(t in 0..time)
- {
- if(num != shiftNum){return;}
- mainX+=(x-xM)*(1-cos(t*360/time))/time;
- yield;
- }
- }
- task FShiftY(y)
- {
- let yM = mainY;
- shiftNum+=1;
- let time = shiftTime;
- let num = shiftNum;
- ascent(t in 0..time)
- {
- if(num != shiftNum){return;}
- mainY+=(y-yM)*(1-cos(t*360/time))/time;
- yield;
- }
- }
- function IndexScroll(Key,selectIndex,frameKeyHold,frameTurn,countMenu,dir,scrollSpeed)
- {
- if(dir != 0)
- {
- selectIndex+=dir/scrollSpeed;
- if(IsKeyState(Key,[KEY_HOLD]))
- {
- frameTurn = (frameTurn+1)%scrollSpeed;
- if(frameTurn == 0)
- {
- dir = 0;
- selectIndex = round(selectIndex)%countMenu;
- }
- }
- else
- {
- frameTurn = (frameTurn+1)%scrollSpeed;
- if(frameTurn == 0)
- {
- dir = 0;
- selectIndex = round(selectIndex)%countMenu;
- }
- }
- }
- else
- {
- dir = 0;
- if(IsKeyState([Key[0]],[KEY_PUSH]))
- {
- PlaySound("se_Select",120);
- dir = -1;
- }
- else if(IsKeyState([Key[1]],[KEY_PUSH]))
- {
- PlaySound("se_Select",120);
- dir = 1;
- }
- else if(IsKeyState([Key[0]],[KEY_HOLD]))
- {
- frameKeyHold++;
- if(frameKeyHold == 30 || frameKeyHold > 30)
- {
- PlaySound("se_Select",120);
- dir = -1;
- }
- }
- else if(IsKeyState([Key[1]],[KEY_HOLD]))
- {
- frameKeyHold++;
- if(frameKeyHold == 30 || frameKeyHold > 30)
- {
- PlaySound("se_Select",120);
- dir = 1;
- }
- }
- else
- {
- frameKeyHold = 0;
- }
- selectIndex+=absolute(dir)*dir/scrollSpeed;
- frameTurn=absolute(dir)*((frameTurn+1)%scrollSpeed);
- }
- if(selectIndex < 0)
- {
- selectIndex += countMenu;
- }
- else if(selectIndex >= countMenu)
- {
- selectIndex -= countMenu;
- }
- return [selectIndex,frameKeyHold,frameTurn,dir];
- }
- function CreateText
- {
- let obj = ObjText_Create;
- ObjText_SetFontType(obj,"Cirno");
- ObjText_SetFontColorTop(obj, 255, 255, 255);
- ObjText_SetFontColorBottom(obj, 196, 196, 196);
- ObjText_SetFontBorderType(obj, BORDER_FULL);
- ObjText_SetFontBorderColor(obj,64, 64, 64);
- ObjText_SetFontBorderWidth(obj, 2);
- ObjText_SetSidePitch(obj,1);
- return obj;
- }
- task DeleteArray(array)
- {
- ascent(i in 0..length(array))
- {
- Obj_Delete(array[i]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement