2022-12-02 18:19:58 +01:00
|
|
|
package{
|
|
|
|
import starling.display.*;
|
|
|
|
import starling.events.*;
|
|
|
|
import starling.textures.*;
|
2020-01-01 21:29:24 +01:00
|
|
|
import flash.geom.*;
|
|
|
|
import flash.net.*;
|
2022-12-02 18:19:58 +01:00
|
|
|
import starling.core.*;
|
|
|
|
import starling.text.BitmapFont;
|
|
|
|
import starling.text.TextField;
|
|
|
|
import starling.utils.AssetManager;
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
import flash.display.Bitmap;
|
|
|
|
import flash.display.BitmapData;
|
|
|
|
|
|
|
|
public class dwgraphicsclass {
|
|
|
|
public var screenwidth:int = 320;
|
|
|
|
public var screenheight:int = 240;
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
public var BUTTON_BLANK:int = 0;
|
|
|
|
public var BUTTON_MENU:int = 1;
|
|
|
|
public var BUTTON_BACK:int = 2;
|
|
|
|
public var BUTTON_TALK:int = 3;
|
|
|
|
public var BUTTON_USE:int = 4;
|
|
|
|
public var BUTTON_TELEPORT:int = 5;
|
|
|
|
public var BUTTON_GAMECENTER:int = 6;
|
|
|
|
public var BUTTON_CONTROLS:int = 7;
|
|
|
|
public var BUTTON_DPAD:int = 8;
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function init(_stage:Stage):void {
|
|
|
|
starstage = _stage;
|
|
|
|
starstage.touchable = false;
|
|
|
|
|
|
|
|
backbuffer = new RenderTexture(screenwidth, screenheight, false);
|
|
|
|
frontbuffer_meshbatch = new MeshBatch();
|
|
|
|
towerbufferforeground_meshbatch = new MeshBatch();
|
|
|
|
towerbufferbackground_meshbatch = new MeshBatch();
|
|
|
|
warpzonevertical_meshbatch = new MeshBatch();
|
|
|
|
warpzonehorizontal_meshbatch = new MeshBatch();
|
|
|
|
towerbufferstatic_meshbatch = new MeshBatch();
|
|
|
|
menubuffer = new RenderTexture(screenwidth, screenheight, false);
|
|
|
|
menubuffer_image = new Image(menubuffer);
|
|
|
|
menubuffer_image.touchable = false;
|
|
|
|
menubuffer_image.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
screenmenubuffer = new RenderTexture(screenwidth, screenheight, false);
|
|
|
|
screenmenubuffer_image = new Image(screenmenubuffer);
|
|
|
|
screenmenubuffer_image.touchable = false;
|
|
|
|
screenmenubuffer_image.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
|
|
|
|
screen = new Image(backbuffer);
|
|
|
|
screen.touchable = false;
|
|
|
|
screen.textureSmoothing = TextureSmoothing.BILINEAR;
|
|
|
|
smallscreen = new Image(backbuffer);
|
|
|
|
smallscreen.touchable = false;
|
|
|
|
smallscreen.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
starstage.addChild(screen);
|
|
|
|
|
|
|
|
tquad = new Quad(1, 1, RGB(255, 255, 255));
|
|
|
|
|
|
|
|
ttf = new TextField(320, 120, "");
|
|
|
|
ttf.touchable = false;
|
|
|
|
ttf.format.font = "c64";
|
|
|
|
ttf.format.color = 0xFFFFFF;
|
|
|
|
ttf.format.size = BitmapFont.NATIVE_SIZE;
|
|
|
|
ttf.format.horizontalAlign = "left";
|
|
|
|
ttf.format.verticalAlign = "top";
|
|
|
|
tposition = new Matrix();
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
//We initialise a few things
|
|
|
|
updatebackground = true;
|
|
|
|
tiles_rect=new Rectangle(0,0,8,8);
|
|
|
|
sprites_rect=new Rectangle(0,0,32,32);
|
|
|
|
bfont_rect=new Rectangle(0,0,8,8);
|
|
|
|
bfontmask_rect=new Rectangle(0,0,9,9);
|
|
|
|
bg_rect = new Rectangle(0, 0, 320, 240);
|
|
|
|
footerrect = new Rectangle(0, 230, 320, 10);
|
|
|
|
prect = new Rectangle(0, 0, 4, 4);
|
|
|
|
line_rect = new Rectangle();
|
|
|
|
tl = new Point(0, 0); tpoint = new Point(0, 0); trect = new Rectangle();
|
|
|
|
ct = new ColorTransform(0, 0, 0, 1, 255, 255, 255, 1); //Set to white
|
|
|
|
madpoint = new Point;
|
|
|
|
madrect = new Rectangle;
|
|
|
|
|
|
|
|
trinketcolset = false;
|
|
|
|
|
|
|
|
showcutscenebars = false;
|
|
|
|
cutscenebarspos = 0;
|
|
|
|
|
|
|
|
flipmode = false; setflipmode = false;
|
|
|
|
flipmatrix.scale(1, -1);
|
|
|
|
flipmatrix.translate(0, 240);
|
|
|
|
flipfontmatrix.scale(1, -1); flipfontmatrix.translate(0, 8);
|
|
|
|
flipfontmatrix2.scale(1, -1); flipfontmatrix2.translate(0, 9);
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
//Android optimisations
|
|
|
|
var tbg:Array = [0x19090A, 0x190C0A, 0x190F0A, 0x191309, 0x191609, 0x191909,
|
|
|
|
0x171909, 0x151909, 0x131909, 0x111909, 0x0F1909, 0x0E190C,
|
|
|
|
0x0D190F, 0x0B1813, 0x0A1816, 0x091819, 0x0A1519, 0x0C1219,
|
|
|
|
0x0E0F19, 0x100C19, 0x110919, 0x130919, 0x140919, 0x160919,
|
|
|
|
0x170919, 0x190919, 0x190916, 0x190913, 0x190910, 0x19090D];
|
|
|
|
for (i = 0; i < tbg.length; i++){
|
|
|
|
tower_bgcol.push(tbg[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
tbg = [0x0A0304, 0x0A0504, 0x0A0604, 0x0A0703, 0x0A0803, 0x0A0A03,
|
|
|
|
0x090A03, 0x080A03, 0x070A03, 0x070A03, 0x060A03, 0x050A05,
|
|
|
|
0x050A06, 0x040907, 0x040908, 0x03090A, 0x04080A, 0x05070A,
|
|
|
|
0x05060A, 0x06040A, 0x07030A, 0x07030A, 0x08030A, 0x08030A,
|
|
|
|
0x09030A, 0x0A030A, 0x0A0309, 0x0A0307, 0x0A0306, 0x0A0305];
|
|
|
|
for (i = 0; i < tbg.length; i++){
|
|
|
|
tower_bgdarkcol.push(tbg[i]);
|
|
|
|
}
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
//Background inits
|
|
|
|
for (i = 0; i < 50; i++) {
|
|
|
|
var s:Rectangle = new Rectangle(Math.random() * 320, Math.random() * 240, 2, 2);
|
|
|
|
var s2:int = 4+(Math.random()*4);
|
|
|
|
stars.push(s); starsspeed.push(s2);
|
|
|
|
|
|
|
|
var bb:Rectangle;
|
|
|
|
var bvx:int = 0; var bvy:int = 0;
|
|
|
|
if(Math.random()*100 > 50){
|
|
|
|
bvx = 9 - (Math.random() * 19); if (bvx > -6 && bvx < 6) bvx = 6;
|
2022-12-02 18:19:58 +01:00
|
|
|
bvx = bvx * 1.5;
|
2020-01-01 21:29:24 +01:00
|
|
|
bb = new Rectangle(Math.random() * 320, Math.random() * 240, 32, 12);
|
|
|
|
}else {
|
|
|
|
bvy = 9 - (Math.random() * 19); if (bvy > -6 && bvy < 6) bvy = 6;
|
2022-12-02 18:19:58 +01:00
|
|
|
bvy = bvy * 1.5;
|
2020-01-01 21:29:24 +01:00
|
|
|
bb = new Rectangle(Math.random() * 320, Math.random() * 240, 12, 32);
|
|
|
|
}
|
|
|
|
var bint:Number = 0.5 + ((Math.random() * 100) / 200);
|
|
|
|
backboxes.push(bb);
|
|
|
|
backboxvx.push(bvx); backboxvy.push(bvy);
|
|
|
|
backboxint.push(bint);
|
|
|
|
}
|
|
|
|
backboxrect = new Rectangle();
|
|
|
|
backoffset = 0; backgrounddrawn = false;
|
|
|
|
|
|
|
|
warpskip = 0;
|
|
|
|
warpfcol = 0x000000; warpbcol = 0x000000;
|
|
|
|
warprect = new Rectangle(0, 0, 0, 0);
|
|
|
|
|
|
|
|
spcol = 0; spcoldel = 0;
|
|
|
|
|
|
|
|
crewframe = 0; crewframedelay = 4;
|
|
|
|
menuoffset = 0; resumegamemode = false;
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
//Textboxes!
|
2020-01-01 21:29:24 +01:00
|
|
|
for (i = 0; i < 30; i++) {
|
|
|
|
var t:textboxclass = new textboxclass;
|
|
|
|
textbox.push(t);
|
|
|
|
}
|
|
|
|
ntextbox = 0;
|
|
|
|
|
|
|
|
//Fading stuff
|
|
|
|
for (i = 0; i < 15; i++) {
|
|
|
|
fadebars.push(0);
|
|
|
|
}
|
|
|
|
fadeamount = 0;
|
|
|
|
fademode = 0;
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
|
|
|
|
//var devicexres:int = int(Capabilities.screenResolutionX);
|
|
|
|
//var deviceyres:int = int(Capabilities.screenResolutionY);
|
|
|
|
//updatescreen(starstage.stageWidth, starstage.stageHeight);
|
|
|
|
|
|
|
|
//Starling.current.showStats = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function initbuttonstuff():void {
|
|
|
|
button_image_width.push(0); button_image_height.push(0);
|
|
|
|
button_image_width.push(0); button_image_height.push(0);
|
|
|
|
button_image_width.push(0); button_image_height.push(0);
|
|
|
|
button_image_width.push(0); button_image_height.push(0);
|
|
|
|
button_image.push(new Image(button_texture[0]));
|
|
|
|
button_image.push(new Image(button_texture[1]));
|
|
|
|
button_image.push(new Image(button_texture[2]));
|
|
|
|
button_image.push(new Image(button_texture[3]));
|
|
|
|
button_image[0].touchable = false; button_image[0].textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
button_image[1].touchable = false; button_image[1].textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
button_image[2].touchable = false; button_image[2].textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
button_image[3].touchable = false; button_image[3].textureSmoothing = TextureSmoothing.NONE;
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
for (i = 0; i < 10; i++) {
|
|
|
|
buttonlerp.push(int(0));
|
|
|
|
buttonstate.push(int(0));
|
|
|
|
currentbuttontype.push(int(-1));
|
|
|
|
newbuttontype.push(int(-1));
|
|
|
|
buttonframe.push(int(-1));
|
|
|
|
}
|
|
|
|
|
|
|
|
buttonactive.push(false);
|
|
|
|
buttonactive.push(false);
|
|
|
|
buttonactive.push(false);
|
|
|
|
buttonactive.push(false);
|
|
|
|
buttonhighlight.push(0); buttonhighlight.push(0); buttonhighlight.push(0); buttonhighlight.push(0);
|
|
|
|
buttonpos.push(new Point(0, 0)); buttonpos.push(new Point(0, 0));
|
|
|
|
buttonpos.push(new Point(0, 0)); buttonpos.push(new Point(0, 0));
|
|
|
|
//So, 0-4 are buffers that can be overwritten. 5+ contains graphics for each button.
|
|
|
|
|
|
|
|
initbuttonpositions();
|
|
|
|
|
|
|
|
drawonscreenbutton(0, -1);
|
|
|
|
drawonscreenbutton(1, -1);
|
|
|
|
drawonscreenbutton(2, -1);
|
|
|
|
drawonscreenbutton(3, -1);
|
2022-12-02 18:19:58 +01:00
|
|
|
starstage.addChild(button_image[0]);
|
|
|
|
starstage.addChild(button_image[1]);
|
|
|
|
starstage.addChild(button_image[2]);
|
|
|
|
starstage.addChild(button_image[3]);
|
|
|
|
|
|
|
|
buttonsready = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function updatescreen(w:int, h:int):void {
|
|
|
|
starstage.stageWidth = w;
|
|
|
|
starstage.stageHeight = h;
|
|
|
|
|
|
|
|
Starling.current.viewPort = new Rectangle(0, 0, w, h);
|
|
|
|
|
|
|
|
// set rectangle dimensions for viewPort:
|
|
|
|
var stretchscalex:Number = w / screenwidth;
|
|
|
|
var stretchscaley:Number = h / screenheight;
|
|
|
|
screensizemultiplier = Math.min(stretchscalex, stretchscaley);
|
|
|
|
|
|
|
|
//Never mess with starling's viewport for VVVVVV - instead, mess with the
|
|
|
|
//screen image
|
|
|
|
screen.width = screenwidth * screensizemultiplier;
|
|
|
|
screen.height = screenheight * screensizemultiplier;
|
|
|
|
|
|
|
|
screen.x = (w / 2) - (screenwidth * screensizemultiplier / 2);
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
public function initbuttonpositions():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
devicex = device.xres;
|
2020-01-01 21:29:24 +01:00
|
|
|
devicey = device.yres;
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
buttonsize = devicey / (32 / 3);
|
2020-01-01 21:29:24 +01:00
|
|
|
buttonyspacing = buttonsize / 3;
|
2022-12-02 18:19:58 +01:00
|
|
|
buttonxspacing = (buttonsize * 3) / 3;
|
|
|
|
|
|
|
|
button_image[0].width = (buttonsize * 46) / 15; button_image[0].height = buttonsize;
|
|
|
|
button_image[1].width = (buttonsize * 46) / 15; button_image[1].height = buttonsize;
|
|
|
|
button_image[2].width = (buttonsize * 5) / 3; button_image[2].height = (buttonsize * 5) / 3;
|
|
|
|
button_image[3].width = (buttonsize * 5) / 3; button_image[3].height = (buttonsize * 5) / 3;
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
button_image_width[0] = int(button_image[0].width);
|
|
|
|
button_image_width[1] = int(button_image[1].width);
|
|
|
|
button_image_width[2] = int(button_image[2].width);
|
|
|
|
button_image_width[3] = int(button_image[3].width);
|
|
|
|
button_image_height[0] = int(button_image[0].height);
|
|
|
|
button_image_height[1] = int(button_image[1].height);
|
|
|
|
button_image_height[2] = int(button_image[2].height);
|
|
|
|
button_image_height[3] = int(button_image[3].height);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
buttonydiff = button_image_height[2] / 2;
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
button_image[0].x = devicex + 1;
|
|
|
|
button_image[0].y = 0;
|
|
|
|
buttonpos[0].setTo(button_image[0].x, button_image[0].y);
|
|
|
|
|
|
|
|
button_image[1].x = 0;
|
|
|
|
button_image[1].y = 0;
|
|
|
|
buttonpos[1].setTo(button_image[1].x, button_image[1].y);
|
|
|
|
|
|
|
|
button_image[2].x = (buttonxspacing / 2);
|
|
|
|
button_image[2].y = devicey - buttonsize-buttonyspacing - buttonydiff;
|
|
|
|
buttonpos[2].setTo(button_image[2].x, button_image[2].y);
|
|
|
|
|
|
|
|
button_image[3].x = (buttonxspacing/2) + buttonsize + buttonxspacing ;
|
|
|
|
button_image[3].y = devicey - buttonsize-buttonyspacing;
|
|
|
|
buttonpos[3].setTo(button_image[3].x, button_image[3].y);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function mobile_changebutton(t:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
if (newbuttontype[0] != t) {
|
2020-01-01 21:29:24 +01:00
|
|
|
if (currentbuttontype[0] != t) {
|
|
|
|
newbuttontype[0] = t;
|
|
|
|
buttonstate[0] = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function mobile_changeleftbutton(t:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
if (newbuttontype[1] != t) {
|
2020-01-01 21:29:24 +01:00
|
|
|
if (currentbuttontype[1] != t) {
|
|
|
|
newbuttontype[1] = t;
|
|
|
|
buttonstate[1] = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function mobile_hidearrows():void {
|
|
|
|
if (newbuttontype[2] != BUTTON_BLANK) {
|
|
|
|
if (currentbuttontype[2] != BUTTON_BLANK) {
|
|
|
|
newbuttontype[2] = BUTTON_BLANK;
|
|
|
|
buttonstate[2] = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function mobile_showarrows(t:int):void {
|
|
|
|
if (t == 2) {
|
|
|
|
if (newbuttontype[2] != BUTTON_DPAD) {
|
|
|
|
if (currentbuttontype[2] != BUTTON_DPAD) {
|
|
|
|
newbuttontype[2] = BUTTON_DPAD;
|
|
|
|
buttonstate[2] = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawbutton(game:gameclass, help:helpclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
//Called every frame, this function controls what buttons appear and when,
|
2020-01-01 21:29:24 +01:00
|
|
|
//and lerps them in and out in a nice way.
|
|
|
|
//buttonstate[0]:
|
|
|
|
// 0 - Normal, slide in if not in
|
|
|
|
// 1 - Sliding out, change to new button state
|
|
|
|
for (i = 0; i < 3; i++){
|
|
|
|
switch(buttonstate[i]) {
|
|
|
|
case 0:
|
|
|
|
if (buttonlerp[i] > 60) {
|
|
|
|
buttonlerp[i] = 60;
|
|
|
|
}
|
|
|
|
if (buttonlerp[i] > 0) {
|
|
|
|
buttonlerp[i] -= 20;
|
|
|
|
if (buttonlerp[i] < 0) {
|
|
|
|
buttonlerp[i] = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (buttonlerp[i] < 100) {
|
|
|
|
buttonlerp[i] += 20;
|
|
|
|
}
|
|
|
|
if (buttonlerp[i] >= 60) buttonlerp[i] = 100;
|
|
|
|
|
|
|
|
if (buttonlerp[i] >= 100) {
|
|
|
|
buttonlerp[i] = 100;
|
|
|
|
buttonstate[i] = 0;
|
|
|
|
currentbuttontype[i] = newbuttontype[i];
|
|
|
|
newbuttontype[i] = -1;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(currentbuttontype[2]) {
|
|
|
|
case BUTTON_BLANK:
|
|
|
|
changebuttonframe(2, -1);
|
|
|
|
changebuttonframe(3, -1);
|
|
|
|
break;
|
|
|
|
case BUTTON_DPAD:
|
|
|
|
changebuttonframe(2, 11);
|
|
|
|
changebuttonframe(3, 12);
|
|
|
|
|
|
|
|
if (game.press_left) {
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(2, (buttonxspacing/2), devicey - buttonsize-buttonyspacing - buttonydiff+10);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(2, (buttonxspacing/2), devicey - buttonsize-buttonyspacing - buttonydiff);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (game.press_right) {
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(3, (buttonxspacing/2) + buttonsize + buttonxspacing, devicey - buttonsize-buttonyspacing - buttonydiff+10);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else{
|
|
|
|
changebuttonpos(3, (buttonxspacing/2) + buttonsize + buttonxspacing, devicey - buttonsize-buttonyspacing - buttonydiff);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(currentbuttontype[1]) {
|
|
|
|
case BUTTON_BLANK:
|
|
|
|
//Blank
|
|
|
|
changebuttonframe(1, -1);
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(1, 0 - ((button_image_width[1] * (buttonlerp[1])) / 100), 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
case BUTTON_CONTROLS:
|
|
|
|
//Controls button
|
|
|
|
if (game.menupage >= 30) {
|
|
|
|
changebuttonframe(1, 9);
|
|
|
|
}else{
|
|
|
|
changebuttonframe(1, 8);
|
|
|
|
}
|
|
|
|
if (flipmode) {
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(1, 0 - ((button_image_width[1] * (buttonlerp[1])) / 100), devicey - buttonyspacing - button_image_height[1]);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(1, 0 - ((button_image_width[1] * (buttonlerp[1])) / 100), buttonyspacing);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
case BUTTON_GAMECENTER:
|
|
|
|
changebuttonframe(1, 10);
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(1, 0 - ((button_image_width[1] * (buttonlerp[1])) / 100), 5);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(currentbuttontype[0]) {
|
|
|
|
case BUTTON_BLANK:
|
|
|
|
//Blank
|
|
|
|
changebuttonframe(0, -1);
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(0, devicex - ((button_image_width[0] * (100-buttonlerp[0])) / 100), 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
case BUTTON_MENU:
|
|
|
|
//Menu button
|
|
|
|
changebuttonframe(0, 0);
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(0, devicex - ((button_image_width[0] * (100-buttonlerp[0])) / 100), 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
case BUTTON_BACK:
|
|
|
|
//Back button
|
|
|
|
changebuttonframe(0, 1);
|
|
|
|
if (flipmode) {
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(0, devicex - ((button_image_width[0] * (100 - buttonlerp[0])) / 100), devicey - buttonyspacing - button_image_height[0]);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(0, devicex - ((button_image_width[0] * (100 - buttonlerp[0])) / 100), buttonyspacing);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case BUTTON_USE:
|
|
|
|
//Use button
|
|
|
|
if (help.slowsine % 16 > 8) {
|
|
|
|
changebuttonframe(0, 4);
|
|
|
|
}else {
|
|
|
|
changebuttonframe(0, 5);
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(0, devicex - ((button_image_width[0] * (100-buttonlerp[0])) / 100), buttonyspacing);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
case BUTTON_TALK:
|
|
|
|
//Talk button
|
|
|
|
if (help.slowsine % 16 > 8) {
|
|
|
|
changebuttonframe(0, 2);
|
|
|
|
}else {
|
|
|
|
changebuttonframe(0, 3);
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(0, devicex - ((button_image_width[0] * (100-buttonlerp[0])) / 100), buttonyspacing);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
case BUTTON_TELEPORT:
|
|
|
|
//Teleport button
|
|
|
|
if (help.slowsine % 16 > 8) {
|
|
|
|
changebuttonframe(0, 6);
|
|
|
|
}else {
|
|
|
|
changebuttonframe(0, 7);
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
changebuttonpos(0, devicex - ((button_image_width[0] * (100-buttonlerp[0])) / 100), buttonyspacing);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function addbutton(imgname:String):void {
|
|
|
|
var sourcetexture:Texture = starlingassets.getTexture(imgname);
|
|
|
|
var tmpimage:Image = new Image(sourcetexture);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
var newtexture:RenderTexture = new RenderTexture(int(tmpimage.texture.width), int(tmpimage.texture.height));
|
|
|
|
newtexture.draw(tmpimage);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
sourcetexture.dispose();
|
|
|
|
tmpimage.dispose();
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
button_texture.push(newtexture);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawonscreenbutton(t:int, t2:int):void {
|
|
|
|
//Draw button t with frame t2
|
|
|
|
if (t2 == -1) {
|
2022-12-02 18:19:58 +01:00
|
|
|
button_texture[t].clear();
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
if (buttonframe[t] != t2) {
|
|
|
|
buttonframe[t] = t2;
|
2022-12-02 18:19:58 +01:00
|
|
|
button_texture[t].clear();
|
|
|
|
var tempimg:Image = new Image(button_texture[4 + t2]);
|
|
|
|
button_texture[t].draw(tempimg);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function changebuttonframe(t:int, t2:int):void {
|
|
|
|
//Draw button t with frame t2
|
|
|
|
if (buttonframe[t] != t2) {
|
|
|
|
buttonframe[t] = t2;
|
|
|
|
if (t2 == -1) {
|
2022-12-02 18:19:58 +01:00
|
|
|
button_texture[t].clear();
|
2020-01-01 21:29:24 +01:00
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
button_texture[t].clear();
|
|
|
|
var tempimg:Image = new Image(button_texture[4 + t2]);
|
|
|
|
button_texture[t].draw(tempimg);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function changebuttonpos(t:int, xp:int, yp:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
button_image[t].x = xp;
|
|
|
|
button_image[t].y = yp;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function changebuttonxpos(t:int, xp:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
button_image[t].x = xp;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function showarrows():void {
|
|
|
|
if (buttonactive[0] == false) {
|
|
|
|
buttonhighlight[0] = 120;
|
|
|
|
buttonactive[0] = true;
|
2022-12-02 18:19:58 +01:00
|
|
|
starstage.addChild(button_image[0]);
|
|
|
|
starstage.addChild(button_image[1]);
|
|
|
|
starstage.addChild(button_image[2]);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function hidearrows():void {
|
|
|
|
if (buttonactive[0] == true) {
|
|
|
|
buttonactive[0] = false;
|
2022-12-02 18:19:58 +01:00
|
|
|
starstage.removeChild(button_image[0]);
|
|
|
|
starstage.removeChild(button_image[1]);
|
|
|
|
starstage.removeChild(button_image[2]);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawspritesetcol(x:int, y:int, t:int, c:int, help:helpclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
setcol(c, help);
|
|
|
|
sprites[t].color = ct.color;
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(sprites[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function makeentcolourarray():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
var sourcetexture:Texture = starlingassets.getTexture("entcolours");
|
|
|
|
for (var j:int = 0; j < 60; j++) {
|
|
|
|
for (var i:int = 0; i < 12; i++) {
|
|
|
|
var tiletex:Texture = Texture.fromTexture(sourcetexture, new Rectangle(i * 8, j * 8, 8, 8));
|
|
|
|
var t:Image = new Image(tiletex);
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
t.touchable = false;
|
2020-01-01 21:29:24 +01:00
|
|
|
entcolours.push(t);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function maketilearray():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
var sourcetexture:Texture = starlingassets.getTexture("tiles");
|
|
|
|
for (var j:int = 0; j < 30; j++) {
|
|
|
|
for (var i:int = 0; i < 40; i++) {
|
|
|
|
var tiletex:Texture = Texture.fromTexture(sourcetexture, new Rectangle(i * 8, j * 8, 8, 8));
|
|
|
|
var tile:Image = new Image(tiletex);
|
|
|
|
tile.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
tile.touchable = false;
|
|
|
|
tiles.push(tile);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function maketile2array():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
var sourcetexture:Texture = starlingassets.getTexture("tiles2");
|
|
|
|
for (var j:int = 0; j < 30; j++) {
|
|
|
|
for (var i:int = 0; i < 40; i++) {
|
|
|
|
var tiletex:Texture = Texture.fromTexture(sourcetexture, new Rectangle(i * 8, j * 8, 8, 8));
|
|
|
|
var tile:Image = new Image(tiletex);
|
|
|
|
tile.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
tile.touchable = false;
|
|
|
|
tiles2.push(tile);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function maketile3array():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
var sourcetexture:Texture = starlingassets.getTexture("tiles3");
|
|
|
|
for (var j:int = 0; j < 30; j++) {
|
|
|
|
for (var i:int = 0; i < 30; i++) {
|
|
|
|
var tiletex:Texture = Texture.fromTexture(sourcetexture, new Rectangle(i * 8, j * 8, 8, 8));
|
|
|
|
var tile:Image = new Image(tiletex);
|
|
|
|
tile.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
tile.touchable = false;
|
|
|
|
tiles3.push(tile);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function makespritearray():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
var sourcetexture:Texture = starlingassets.getTexture("sprites");
|
|
|
|
for (var j:int = 0; j < 16; j++) {
|
|
|
|
for (var i:int = 0; i < 12; i++) {
|
|
|
|
var tiletex:Texture = Texture.fromTexture(sourcetexture, new Rectangle(i * 32, j * 32, 32, 32));
|
|
|
|
var t:Image = new Image(tiletex);
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
t.touchable = false;
|
2020-01-01 21:29:24 +01:00
|
|
|
sprites.push(t);
|
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
|
|
|
|
//Sprites also need to load flash bitmapdatas, which are used for pixel perfect hittests
|
|
|
|
var b:Bitmap = new img_bitmapsprites();
|
|
|
|
var buffer:BitmapData = b.bitmapData;
|
|
|
|
|
|
|
|
for (j = 0; j < 16; j++) {
|
|
|
|
for (i = 0; i < 12; i++) {
|
|
|
|
var tb:BitmapData = new BitmapData(32, 32, true, 0x000000);
|
|
|
|
var temprect:Rectangle = new Rectangle(i * 32, j * 32, 32, 32);
|
|
|
|
tb.copyPixels(buffer, temprect, tl);
|
|
|
|
sprites_bitmap.push(tb);
|
|
|
|
}
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function makeflipspritearray():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
var sourcetexture:Texture = starlingassets.getTexture("flipsprites");
|
|
|
|
for (var j:int = 0; j < 16; j++) {
|
|
|
|
for (var i:int = 0; i < 12; i++) {
|
|
|
|
var tiletex:Texture = Texture.fromTexture(sourcetexture, new Rectangle(i * 32, j * 32, 32, 32));
|
|
|
|
var t:Image = new Image(tiletex);
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
t.touchable = false;
|
2020-01-01 21:29:24 +01:00
|
|
|
flipsprites.push(t);
|
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
|
|
|
|
|
|
|
|
//Sprites also need to load flash bitmapdatas, which are used for pixel perfect hittests
|
|
|
|
var b:Bitmap = new img_bitmapflipsprites();
|
|
|
|
var buffer:BitmapData = b.bitmapData;
|
|
|
|
|
|
|
|
for (j = 0; j < 16; j++) {
|
|
|
|
for (i = 0; i < 12; i++) {
|
|
|
|
var tb:BitmapData = new BitmapData(32, 32, true, 0x000000);
|
|
|
|
var temprect:Rectangle = new Rectangle(i * 32, j * 32, 32, 32);
|
|
|
|
tb.copyPixels(buffer, temprect, tl);
|
|
|
|
flipsprites_bitmap.push(tb);
|
|
|
|
}
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function maketelearray():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
var sourcetexture:Texture = starlingassets.getTexture("teleporter");
|
|
|
|
for (var i:int = 0; i < 10; i++) {
|
|
|
|
var tiletex:Texture = Texture.fromTexture(sourcetexture, new Rectangle(i * 96, j * 96, 96, 96));
|
|
|
|
var t:Image = new Image(tiletex);
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
t.touchable = false;
|
2020-01-01 21:29:24 +01:00
|
|
|
tele.push(t);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawmobilebutton(game:gameclass, xp:int, yp:int, wp:int, hp:int, t:String, cr:int, cg:int, cb:int, xoff:int = -8, yoff:int = -10):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
xp = xp + xoff;
|
2020-01-01 21:29:24 +01:00
|
|
|
yp = yp + yoff;
|
|
|
|
drawfillrect(xp + 4, yp + 4, wp, hp, cr * 0.25, cg * 0.25, cb * 0.25);
|
|
|
|
drawfillrect(xp, yp, wp, hp, cr, cg, cb);
|
|
|
|
drawfillrect(xp + 2, yp + 2, wp - 4, hp - 4, cr * 0.75, cg * 0.75, cb * 0.75);
|
|
|
|
xp = xp + (wp / 2) - (t.length * 4);
|
|
|
|
print(xp, yp + 9, t, 255, 255, 255);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawmenu(game:gameclass, cr:int, cg:int, cb:int, help:helpclass, division:int = 30):void {
|
|
|
|
if (game.mobilemenu) {
|
|
|
|
for (i = 0; i < game.nummenuoptions; i++) {
|
|
|
|
/*
|
|
|
|
if (i == game.currentmenuoption) {
|
|
|
|
//Draw it highlighted
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
tempstring = game.menuoptions[i]; tempstring = "[ " + tempstring.toUpperCase() + " ]";
|
|
|
|
print(110 + (i * division) - 16 +game.menuxoff, 140 + (i * 12) +game.menuyoff, tempstring, cr, cg, cb);
|
|
|
|
}else {
|
|
|
|
tempstring = game.menuoptions[i]; tempstring = "[ " + tempstring + " ]";
|
|
|
|
//Draw it in gray
|
|
|
|
print(110 + (i * division) - 16 +game.menuxoff, 140 + (i * 12)+game.menuyoff, tempstring, 128, 128, 128);
|
|
|
|
}
|
|
|
|
}else {
|
|
|
|
*/
|
|
|
|
//Draw it normally
|
|
|
|
if (game.menuoptionslayout[i] == 0) {
|
|
|
|
//Normal Buttons
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
drawfillrect(160 - 70 + 4, 140 + (i * b_gap) + game.menuyoff - 6 + 4, 140, b_size, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(160 - 70, 140 + (i * b_gap) + game.menuyoff - 6, 140, b_size, cr, cg, cb);
|
|
|
|
drawfillrect(160 - 70 + 2, 140 + (i * b_gap) + game.menuyoff - 6 + 2, 140 - 4, b_size - 4, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) + game.menuyoff+3, game.menuoptions[i], 255, 255, 255, true);
|
|
|
|
}else {
|
|
|
|
drawfillrect(160 - 70 + 4, 140 + (i * b_gap) + game.menuyoff - 6 + 4, 140, b_size, 128*0.25, 128*0.25, 128*0.25);
|
|
|
|
drawfillrect(160 - 70, 140 + (i * b_gap) + game.menuyoff - 6, 140, b_size, 128, 128, 128);
|
|
|
|
drawfillrect(160 - 70 + 2, 140 + (i * b_gap) + game.menuyoff - 6 + 2, 140 - 4, b_size - 4, 128*0.75, 128*0.75, 128*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) + game.menuyoff+3, "LOCKED", 255, 255, 255, true);
|
|
|
|
}
|
|
|
|
}else if (game.menuoptionslayout[i] == 1) {
|
|
|
|
//Super big button for main menu play
|
|
|
|
drawfillrect(160 - 70 + 4, 140 + (i * b_gap) -10+ game.menuyoff - 6 + 4, 140, b_size*2, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(160 - 70, 140 + (i * b_gap)-10 + game.menuyoff - 6, 140, b_size*2, cr, cg, cb);
|
|
|
|
drawfillrect(160 - 70 + 2, 140 + (i * b_gap)-10 + game.menuyoff - 6 + 2, 140 - 4, (b_size*2) - 4, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
bigprint(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) -10 + game.menuyoff + 10, game.menuoptions[i], 255, 255, 255, true);
|
|
|
|
}else if (game.menuoptionslayout[i] == 2) {
|
|
|
|
//Main menu: Player levels and super gravitron
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
drawfillrect(160 - 70 + 4, 140 + (i * b_gap)+20 + game.menuyoff - 6 + 4, 140, b_size, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(160 - 70, 140 + (i * b_gap)+20 + game.menuyoff - 6, 140, b_size, cr, cg, cb);
|
|
|
|
drawfillrect(160 - 70 + 2, 140 + (i * b_gap) +20+ game.menuyoff - 6 + 2, 140 - 4, b_size - 4, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) + 20 + game.menuyoff+3, game.menuoptions[i], 255, 255, 255, true);
|
|
|
|
}else {
|
|
|
|
drawfillrect(160 - 70 + 4, 140 + (i * b_gap)+20 + game.menuyoff - 6 + 4, 140, 20, 128*0.25, 128*0.25, 128*0.25);
|
|
|
|
drawfillrect(160 - 70, 140 + (i * b_gap)+20 + game.menuyoff - 6, 140, 20, 128, 128, 128);
|
|
|
|
drawfillrect(160 - 70 + 2, 140 + (i * b_gap) +20+ game.menuyoff - 6 + 2, 140 - 4, 20 - 4, 128*0.75, 128*0.75, 128*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) + 20 + game.menuyoff+3, "LOCKED", 255, 255, 255, true);
|
|
|
|
}
|
|
|
|
}else if (game.menuoptionslayout[i] == 3) {
|
|
|
|
//Back Button
|
|
|
|
drawfillrect(-4, 230 - 6 + 4, 70, b_size, cr*0.10, cg*0.10, cb*0.10);
|
|
|
|
drawfillrect(-8, 230 - 6, 70, b_size, cr*0.5, cg*0.5, cb*0.5);
|
|
|
|
drawfillrect(-8+2, 230 - 6 + 2, 70 - 4, b_size - 4, cr*0.4, cg*0.4, cb*0.4);
|
|
|
|
print(8, 230, game.menuoptions[i], 196, 196, 196);
|
|
|
|
}else if (game.menuoptionslayout[i] == 4) {
|
|
|
|
//Normal Buttons except wider for longer text
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
drawfillrect(160 - 90 + 4, 140 + (i * b_gap) + game.menuyoff - 6 + 4, 180, b_size, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(160 - 90, 140 + (i * b_gap) + game.menuyoff - 6, 180, b_size, cr, cg, cb);
|
|
|
|
drawfillrect(160 - 90 + 2, 140 + (i * b_gap) + game.menuyoff - 6 + 2, 180 - 4, b_size - 4, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) + game.menuyoff+3, game.menuoptions[i], 255, 255, 255, true);
|
|
|
|
}else {
|
|
|
|
drawfillrect(160 - 90 + 4, 140 + (i * b_gap) + game.menuyoff - 6 + 4, 180, b_size, 128*0.25, 128*0.25, 128*0.25);
|
|
|
|
drawfillrect(160 - 90, 140 + (i * b_gap) + game.menuyoff - 6, 180, b_size, 128, 128, 128);
|
|
|
|
drawfillrect(160 - 90 + 2, 140 + (i * b_gap) + game.menuyoff - 6 + 2, 180 - 4, b_size - 4, 128*0.75, 128*0.75, 128*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) + game.menuyoff+3, "LOCKED", 255, 255, 255, true);
|
|
|
|
}
|
|
|
|
}else if (game.menuoptionslayout[i] == 5) {
|
|
|
|
//Time trial button, left
|
|
|
|
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
drawfillrect(10, 140 + (i * 68) -10+ game.menuyoff - 6 + 4, 140, 40, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(10, 140 + (i * 68)-10 + game.menuyoff - 6, 140, 40, cr, cg, cb);
|
|
|
|
drawfillrect(12, 140 + (i * 68)-10 + game.menuyoff - 6 + 2, 140 - 4, 40 - 4, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
print(18, 140 + (i * 68) -10 + game.menuyoff + 20, game.menuoptions[i], 255, 255, 255);
|
|
|
|
|
|
|
|
if (game.besttimes[i] == -1) {
|
|
|
|
print( 18, 140 + (i * 68) -10 + game.menuyoff + 3, "Not attempted", 196, 196, 196, false);
|
|
|
|
}else {
|
|
|
|
print( 18, 140 + (i * 68) -10 + game.menuyoff + 3, game.timetstring(game.besttimes[i], help), 196, 196, 196);
|
|
|
|
|
|
|
|
print( 18+72, 140 + (i * 68) -10 + game.menuyoff + 3, "Rank: ", 196, 196, 196);
|
|
|
|
switch(game.bestrank[i]) {
|
|
|
|
case 0: print( 18+116, 140 + (i * 68) -10 + game.menuyoff + 3, "B", 255, 255, 255); break;
|
|
|
|
case 1: print( 18+116, 140 + (i * 68) -10 + game.menuyoff + 3, "A", 255, 255, 255); break;
|
|
|
|
case 2: print( 18+116, 140 + (i * 68) -10 + game.menuyoff + 3, "S", 255, 255, 255); break;
|
|
|
|
case 3: print( 18+116, 140 + (i * 68) -10 + game.menuyoff + 3, "V", 255, 255, 255); break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else {
|
|
|
|
drawfillrect(10, 140 + (i * 68) -10+ game.menuyoff - 6 + 4, 140, 40, 128*0.25, 128*0.25, 128*0.25);
|
|
|
|
drawfillrect(10, 140 + (i * 68)-10 + game.menuyoff - 6, 140, 40, 128, 128, 128);
|
|
|
|
drawfillrect(12, 140 + (i * 68)-10 + game.menuyoff - 6 + 2, 140 - 4, 40 - 4, 128*0.75, 128*0.75, 128*0.75);
|
|
|
|
|
|
|
|
print( 18, 140 + (i * 68) -10 + game.menuyoff + 12, "Locked...", 255, 255, 255, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
}else if (game.menuoptionslayout[i] == 6) {
|
|
|
|
//Time trial button, right
|
|
|
|
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
drawfillrect(170, 140 + ((i-3) * 68) -10+ game.menuyoff - 6 + 4, 140, 40, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(170, 140 + ((i-3) * 68)-10 + game.menuyoff - 6, 140, 40, cr, cg, cb);
|
|
|
|
drawfillrect(172, 140 + ((i-3) * 68)-10 + game.menuyoff - 6 + 2, 140 - 4, 40 - 4, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
print(178, 140 + ((i - 3) * 68) -10 + game.menuyoff + 20, game.menuoptions[i], 255, 255, 255);
|
|
|
|
|
|
|
|
if (game.besttimes[i] == -1) {
|
|
|
|
print( 178, 140 + ((i - 3) * 68) -10 + game.menuyoff + 3, "Not attempted", 196, 196, 196, false);
|
|
|
|
}else {
|
|
|
|
print( 178, 140 + ((i - 3) * 68) -10 + game.menuyoff + 3, game.timetstring(game.besttimes[i], help), 196, 196, 196);
|
|
|
|
|
|
|
|
print( 178+72, 140 + ((i - 3) * 68) -10 + game.menuyoff + 3, "Rank: ", 196, 196, 196);
|
|
|
|
switch(game.bestrank[i]) {
|
|
|
|
case 0: print( 178+116, 140 + ((i - 3) * 68) -10 + game.menuyoff + 3, "B", 255, 255, 255); break;
|
|
|
|
case 1: print( 178+116, 140 + ((i - 3) * 68) -10 + game.menuyoff + 3, "A", 255, 255, 255); break;
|
|
|
|
case 2: print( 178+116, 140 + ((i - 3) * 68) -10 + game.menuyoff + 3, "S", 255, 255, 255); break;
|
|
|
|
case 3: print( 178+116, 140 + ((i - 3) * 68) -10 + game.menuyoff + 3, "V", 255, 255, 255); break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else {
|
|
|
|
drawfillrect(170, 140 + ((i-3) * 68) -10+ game.menuyoff - 6 + 4, 140, 40, 128*0.25, 128*0.25, 128*0.25);
|
|
|
|
drawfillrect(170, 140 + ((i-3) * 68)-10 + game.menuyoff - 6, 140, 40, 128, 128, 128);
|
|
|
|
drawfillrect(172, 140 + ((i - 3) * 68) - 10 + game.menuyoff - 6 + 2, 140 - 4, 40 - 4, 128 * 0.75, 128 * 0.75, 128 * 0.75);
|
|
|
|
|
|
|
|
print( 178, 140 + ((i - 3) * 68) -10 + game.menuyoff + 12, "Locked...", 255, 255, 255, false);
|
|
|
|
}
|
|
|
|
}else if (game.menuoptionslayout[i] == 7) {
|
|
|
|
//Options button on the main menu - don't draw anything, just have a detection zone
|
|
|
|
}else if (game.menuoptionslayout[i] == 8) {
|
|
|
|
//credits button on the main menu - don't draw anything, just have a detection zone
|
|
|
|
}else if (game.menuoptionslayout[i] == 9) {
|
|
|
|
//For unlocking and relocking things
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
drawfillrect(160 - 90 + 4, 140 + (i * b_gap) + game.menuyoff - 6 + 4, 180, b_size, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(160 - 90, 140 + (i * b_gap) + game.menuyoff - 6, 180, b_size, cr, cg, cb);
|
|
|
|
drawfillrect(160 - 90 + 2, 140 + (i * b_gap) + game.menuyoff - 6 + 2, 180 - 4, b_size - 4, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) + game.menuyoff+3, game.menuoptions[i], 255, 255, 255, true);
|
|
|
|
}else {
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * b_gap) + game.menuyoff+3, game.menuoptions_alt[i], 255, 255, 255, true);
|
|
|
|
}
|
|
|
|
}else if (game.menuoptionslayout[i] == 10) {
|
|
|
|
//Player level menu next page button
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
drawfillrect(160 - 70 + 4, 240 - b_gap + 4, 140, b_size, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(160 - 70, 240 - b_gap, 140, b_size, cr, cg, cb);
|
|
|
|
drawfillrect(160 - 70 + 2, 240 - b_gap + 2, 140 - 4, b_size - 4, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 240 - b_gap+3+6, game.menuoptions[i], 255, 255, 255, true);
|
|
|
|
}else {
|
|
|
|
drawfillrect(160 - 70 + 4, 240 - b_gap + 4, 140, 20, 128*0.25, 128*0.25, 128*0.25);
|
|
|
|
drawfillrect(160 - 70, 240 - b_gap, 140, 20, 128, 128, 128);
|
|
|
|
drawfillrect(160 - 70 + 2, 240 - b_gap + 2, 140 - 4, 20 - 4, 128*0.75, 128*0.75, 128*0.75);
|
|
|
|
print(110 + (i * division) +game.menuxoff, 240 - b_gap +3+6, "LOCKED", 255, 255, 255, true);
|
|
|
|
}
|
|
|
|
}else if (game.menuoptionslayout[i] == 11) {
|
|
|
|
//Player level
|
|
|
|
drawfillrect(160 - 140 + 4, 140 + (i * 65) -10+ game.menuyoff - 6 + 4, 280, (b_size*2)+5, cr*0.25, cg*0.25, cb*0.25);
|
|
|
|
drawfillrect(160 - 140, 140 + (i * 65)-10 + game.menuyoff - 6, 280, (b_size*2)+5, cr, cg, cb);
|
|
|
|
drawfillrect(160 - 140 + 2, 140 + (i * 65)-10 + game.menuyoff - 6 + 2, 280 - 4, (b_size*2) - 4+5, cr*0.75, cg*0.75, cb*0.75);
|
|
|
|
print(120, 140 + (i * 65) -10 + game.menuyoff, editor.ListOfMetaData[int(game.menuoptions[i])].title, 255, 255, 255);
|
|
|
|
print(120, 140 + (i * 65) -10 + game.menuyoff + 10, editor.ListOfMetaData[int(game.menuoptions[i])].creator, 196, 196, 196);
|
|
|
|
|
|
|
|
print(120, 140 + (i * 65) -10 + game.menuyoff + 35+3, "spikyness: ", 196, 196, 196);
|
|
|
|
for (var tiii:int = 0; tiii < editor.playerlevel_spikyness[int(game.menuoptions[i])]; tiii++){
|
|
|
|
drawtile(120 + (8 * 11)+(8*tiii), 140 + (i * 65) -10 + game.menuyoff + 35+3, 8);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (int(game.menuoptions_alt[i]) == 3) {
|
|
|
|
drawsprite(280-20, 140 + (i * 65) -10 + game.menuyoff + 30-3, 188, 255, 255, 255);
|
|
|
|
drawsprite(280, 140 + (i * 65) -10 + game.menuyoff + 30, 184, 255, 255, 255);
|
|
|
|
}else if (int(game.menuoptions_alt[i]) == 1) {
|
|
|
|
drawsprite(280, 140 + (i * 65) -10 + game.menuyoff + 30, 184, 255, 255, 255);
|
|
|
|
}
|
|
|
|
|
|
|
|
drawplayerlevelimage(int(game.menuoptions[i]), 160 - 140 + 4+2, 140 + (i * 65) -10 + game.menuyoff - 6 + 4+2);
|
|
|
|
}else if (game.menuoptionslayout[i] == 12) {
|
|
|
|
//more games button on the main menu - don't draw anything, just have a detection zone
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else {
|
|
|
|
for (i = 0; i < game.nummenuoptions; i++) {
|
|
|
|
if (i == game.currentmenuoption) {
|
|
|
|
//Draw it highlighted
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
tempstring = game.menuoptions[i]; tempstring = "[ " + tempstring.toUpperCase() + " ]";
|
|
|
|
print(110 + (i * division) - 16 +game.menuxoff, 140 + (i * 12) +game.menuyoff, tempstring, cr, cg, cb);
|
|
|
|
}else {
|
|
|
|
tempstring = game.menuoptions[i]; tempstring = "[ " + tempstring + " ]";
|
|
|
|
//Draw it in gray
|
|
|
|
print(110 + (i * division) - 16 +game.menuxoff, 140 + (i * 12)+game.menuyoff, tempstring, 128, 128, 128);
|
|
|
|
}
|
|
|
|
}else {
|
|
|
|
//Draw it normally
|
|
|
|
if (game.menuoptionsactive[i]) {
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * 12)+game.menuyoff, game.menuoptions[i], cr, cg, cb);
|
|
|
|
}else {
|
|
|
|
//Draw it in gray
|
|
|
|
print(110 + (i * division) +game.menuxoff, 140 + (i * 12)+game.menuyoff, game.menuoptions[i], 128, 128, 128);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawlevelmenu(game:gameclass, cr:int, cg:int, cb:int, division:int = 30):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
trace("dwgfx.drawlevelmenu() is not implemented yet");
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
//Fade functions
|
|
|
|
public function processfade():void {
|
|
|
|
if (fademode > 1) {
|
|
|
|
if (fademode == 2) {
|
|
|
|
//prepare fade out
|
|
|
|
for (i = 0; i < 15; i++) {
|
|
|
|
fadebars[i] = -int(Math.random() * 12) * 8;
|
|
|
|
}
|
|
|
|
fadeamount = 0;
|
|
|
|
fademode = 3;
|
|
|
|
}else if (fademode == 3) {
|
|
|
|
fadeamount += 24;
|
|
|
|
if (fadeamount > 416) {
|
|
|
|
fademode = 1; //faded
|
|
|
|
}
|
|
|
|
}else if (fademode == 4) {
|
|
|
|
//prepare fade in
|
|
|
|
for (i = 0; i < 15; i++) {
|
|
|
|
fadebars[i] = 320 + int(Math.random() * 12) * 8;
|
|
|
|
}
|
|
|
|
fadeamount = 416;
|
|
|
|
fademode = 5;
|
|
|
|
}else if (fademode == 5) {
|
|
|
|
fadeamount -= 24;
|
|
|
|
if (fadeamount <= 0) {
|
|
|
|
fademode = 0; //normal
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawfade():void {
|
|
|
|
if (fademode == 1) {
|
2022-12-02 18:19:58 +01:00
|
|
|
cls(0x000000);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if(fademode==3){
|
|
|
|
for (i = 0; i < 15; i++) {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(fadebars[i], i * 16, fadeamount, 16, 0, 0, 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if(fademode==5){
|
|
|
|
for (i = 0; i < 15; i++) {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(fadebars[i]-fadeamount, i * 16, 500, 16, 0, 0, 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setwarprect(a:int, b:int, c:int, d:int):void {
|
|
|
|
warprect.x = a; warprect.y = b;
|
|
|
|
warprect.width = c; warprect.height = d;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function createtextbox(t:String, xp:int, yp:int, r:int = 255, g:int = 255, b:int = 255):void {
|
|
|
|
if(ntextbox == 0) {
|
|
|
|
//If there are no active textboxes, Z=0;
|
|
|
|
m = 0; ntextbox++;
|
|
|
|
}else {
|
|
|
|
/*i = 0; m = -1;
|
|
|
|
while (i < ntextbox) {
|
|
|
|
if (!textbox[i].active) { m = i; i = ntextbox;}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
if (m == -1) {m = ntextbox; ntextbox++;}
|
|
|
|
*/
|
|
|
|
m = ntextbox; ntextbox++;
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
if (m < 20) {
|
2020-01-01 21:29:24 +01:00
|
|
|
textbox[m].clear();
|
|
|
|
textbox[m].line[0] = t;
|
|
|
|
textbox[m].xp = xp;
|
|
|
|
if (xp == -1) textbox[m].xp = 160 - (((t.length / 2) + 1) * 8);
|
|
|
|
textbox[m].yp = yp;
|
|
|
|
textbox[m].initcol(r, g, b);
|
|
|
|
textbox[m].resize();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxcleanup():void {
|
|
|
|
i = ntextbox - 1; while (i >= 0 && !textbox[i].active) { ntextbox--; i--; }
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxcenter():void {
|
|
|
|
textbox[m].centerx(); textbox[m].centery();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxcenterx():void {
|
|
|
|
textbox[m].centerx();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxwidth():int {
|
|
|
|
return textbox[m].w;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxmove(xo:int, yo:int):void {
|
|
|
|
textbox[m].xp += xo; textbox[m].yp += yo;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxmoveto(xo:int):void {
|
|
|
|
textbox[m].xp = xo;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxcentery():void {
|
|
|
|
textbox[m].centery();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxadjust():void {
|
|
|
|
textbox[m].adjust();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addline(t:String):void {
|
|
|
|
textbox[m].addline(t);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxtimer(t:int):void {
|
|
|
|
textbox[m].timer=t;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxremove():void {
|
|
|
|
//Remove all textboxes
|
|
|
|
for (i = 0; i < ntextbox; i++) {
|
|
|
|
textbox[i].remove();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxremovefast():void {
|
|
|
|
//Remove all textboxes
|
|
|
|
for (i = 0; i < ntextbox; i++) {
|
|
|
|
textbox[i].removefast();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textboxactive():void {
|
|
|
|
//Remove all but the most recent textbox
|
|
|
|
for (i = 0; i < ntextbox; i++) {
|
|
|
|
if (m != i) textbox[i].remove();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setmadrect(x:int, y:int, w:int, h:int):void {
|
|
|
|
madrect.x = x; madrect.y = y; madrect.width = w; madrect.height = h;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtextbox(x:int, y:int, w:int, h:int, r:int, g:int, b:int):void {
|
|
|
|
//given these parameters, draw a textbox
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(x, y, w * 8, h * 8, r / 6, g / 6, b / 6);
|
2020-01-01 21:29:24 +01:00
|
|
|
drawcoloredtile(x, y, 40, r, g, b);
|
|
|
|
drawcoloredtile(x + (w*8) - 8, y, 42, r, g, b);
|
|
|
|
drawcoloredtile(x, y + (h*8) - 8, 45, r, g, b);
|
|
|
|
drawcoloredtile(x + (w*8) - 8, y + (h*8) - 8, 47, r, g, b);
|
|
|
|
|
|
|
|
for (k = 0; k < w-2; k++) {
|
|
|
|
drawcoloredtile(x + 8 + (k * 8), y, 41, r, g, b);
|
|
|
|
drawcoloredtile(x + 8 + (k * 8), y + (h * 8) - 8, 46, r, g, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (k = 0; k < h-2; k++) {
|
|
|
|
drawcoloredtile(x, y + 8 + (k * 8), 43, r, g, b);
|
|
|
|
drawcoloredtile(x + (w * 8) - 8, y + 8 + (k * 8), 44, r, g, b);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function drawpixeltextbox(x:int, y:int, w:int, h:int, w2:int, h2:int, r:int, g:int, b:int, xo:int = 0, yo:int = 0):void {
|
2020-01-01 21:29:24 +01:00
|
|
|
//given these parameters, draw a textbox with a pixel width
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(x, y, w, h, r / 6, g / 6, b / 6);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
for (k = 0; k < w2-2; k++) {
|
|
|
|
drawcoloredtile(x + 8-xo + (k * 8), y, 41, r, g, b);
|
|
|
|
drawcoloredtile(x + 8-xo + (k * 8), y + (h) - 8, 46, r, g, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (k = 0; k < h2-2; k++) {
|
|
|
|
drawcoloredtile(x, y + 8-yo + (k * 8), 43, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 8, y + 8-yo + (k * 8), 44, r, g, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
drawcoloredtile(x, y, 40, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 8, y, 42, r, g, b);
|
|
|
|
drawcoloredtile(x, y + (h) - 8, 45, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 8, y + (h) - 8, 47, r, g, b);
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function drawcustompixeltextbox(x:int, y:int, w:int, h:int, w2:int, h2:int, r:int, g:int, b:int, xo:int = 0, yo:int = 0):void {
|
2020-01-01 21:29:24 +01:00
|
|
|
//given these parameters, draw a textbox with a pixel width
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(x, y, w, h, r / 6, g / 6, b / 6);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
for (k = 0; k < w2-2; k++){
|
|
|
|
drawcoloredtile(x + 8-xo + (k * 8), y, 41, r, g, b);
|
|
|
|
drawcoloredtile(x + 8-xo + (k * 8), y + (h) - 8, 46, r, g, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
drawcoloredtile(x + (w) - 16, y, 41, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 16, y + (h) - 8, 46, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 24, y, 41, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 24, y + (h) - 8, 46, r, g, b);
|
|
|
|
|
|
|
|
for (k = 0; k < h2-2; k++){
|
|
|
|
drawcoloredtile(x, y + 8-yo + (k * 8), 43, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 8, y + 8-yo + (k * 8), 44, r, g, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
drawcoloredtile(x, y + (h) - 16, 43, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 8, y + (h) - 16, 44, r, g, b);
|
|
|
|
drawcoloredtile(x, y + (h) - 24, 43, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 8, y + (h) - 24, 44, r, g, b);
|
|
|
|
|
|
|
|
drawcoloredtile(x, y, 40, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 8, y, 42, r, g, b);
|
|
|
|
drawcoloredtile(x, y + (h) - 8, 45, r, g, b);
|
|
|
|
drawcoloredtile(x + (w) - 8, y + (h) - 8, 47, r, g, b);
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public var subtex:Texture;
|
|
|
|
public var subimage:Image;
|
|
|
|
public function drawpartimage(t:Texture, xp:int, yp:int, wp:int, hp:int):void {
|
|
|
|
// Acquire SubTexture and build an Image from it.
|
|
|
|
trect.x = 0;
|
|
|
|
trect.y = 0;
|
|
|
|
trect.width = wp;
|
|
|
|
trect.height = hp;
|
|
|
|
|
|
|
|
if (subtex == null) {
|
|
|
|
subtex = Texture.fromTexture(t, trect);
|
|
|
|
subimage = new Image(subtex); // alloc. avoidable with pooling?
|
|
|
|
subimage.touchable = false;
|
|
|
|
subimage.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(xp, yp);
|
|
|
|
backbuffer.draw(subimage, tposition);
|
|
|
|
return;
|
|
|
|
}else {
|
|
|
|
//dispose of the old one
|
|
|
|
//No memory leaks, but this is throwing away a texture every call, which might
|
|
|
|
//get expensive? Ideally you'd reuse an image here if it hasn't changed.
|
|
|
|
//Or, maybe easier, make a function that grabs the chunk we need and keeps it somewhere
|
|
|
|
//else, hardcoding around the problem. Let's see if this is a problem in practice, though.
|
|
|
|
subtex.dispose();
|
|
|
|
subimage.dispose();
|
|
|
|
|
|
|
|
subtex = Texture.fromTexture(t, trect);
|
|
|
|
subimage = new Image(subtex);
|
|
|
|
subimage.touchable = false;
|
|
|
|
subimage.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(xp, yp);
|
|
|
|
backbuffer.draw(subimage, tposition);
|
|
|
|
return;
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function cutscenebars():void {
|
|
|
|
if (showcutscenebars) {
|
|
|
|
cutscenebarspos += 25;
|
|
|
|
if (cutscenebarspos >= 360) cutscenebarspos = 360;
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(0, 0, cutscenebarspos, 16, 0, 0, 0);
|
|
|
|
drawfillrect(360 - cutscenebarspos, 224, cutscenebarspos, 16, 0, 0, 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
|
|
|
//disappearing
|
|
|
|
if (cutscenebarspos > 0) {
|
|
|
|
cutscenebarspos -= 25;
|
2022-12-02 18:19:58 +01:00
|
|
|
//draw
|
|
|
|
drawfillrect(0, 0, cutscenebarspos, 16, 0, 0, 0);
|
|
|
|
drawfillrect(360 - cutscenebarspos, 224, cutscenebarspos, 16, 0, 0, 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
//For android: this function draws textboxes to a buffer first, where they're later copied to the screen
|
|
|
|
//buffer is a 320x500 image. X coordinates aren't changed, but y coordinates are
|
|
|
|
public var textbox_ybuffer:int;
|
|
|
|
public var textbox_ybufferheight:int = 0;
|
2020-01-01 21:29:24 +01:00
|
|
|
public function drawgui(help:helpclass):void {
|
|
|
|
textboxcleanup();
|
|
|
|
//Draw all the textboxes to the screen
|
|
|
|
for (i = 0; i<ntextbox; i++) {
|
|
|
|
//This routine also updates the textboxs
|
|
|
|
textbox[i].update();
|
|
|
|
if (textbox[i].active) {
|
|
|
|
if (textbox[i].r == 0 && textbox[i].g == 0 && textbox[i].b == 0) {
|
|
|
|
if(flipmode){
|
|
|
|
for (j = 0; j < textbox[i].numlines; j++) {
|
|
|
|
print(textbox[i].xp + 8, textbox[i].yp + (textbox[i].numlines*8) - (j * 8), textbox[i].line[j], 196, 196, 255 - help.glow);
|
|
|
|
}
|
|
|
|
}else {
|
|
|
|
for (j = 0; j < textbox[i].numlines; j++) {
|
|
|
|
print(textbox[i].xp + 8, textbox[i].yp + 8 + (j * 8), textbox[i].line[j], 196, 196, 255 - help.glow);
|
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
}else {
|
|
|
|
drawfillrect(textbox[i].textrect.x, textbox[i].textrect.y, textbox[i].textrect.width, textbox[i].textrect.height, textbox[i].r/6, textbox[i].g/6, textbox[i].b / 6);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
drawcoloredtile(textbox[i].xp, textbox[i].yp, 40, textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
drawcoloredtile(textbox[i].xp+textbox[i].w-8, textbox[i].yp, 42, textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
drawcoloredtile(textbox[i].xp, textbox[i].yp+textbox[i].h-8, 45, textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
drawcoloredtile(textbox[i].xp+textbox[i].w-8, textbox[i].yp+textbox[i].h-8, 47, textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
for (k = 0; k < textbox[i].lw; k++) {
|
|
|
|
drawcoloredtile(textbox[i].xp + 8 + (k * 8), textbox[i].yp, 41, textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
drawcoloredtile(textbox[i].xp + 8 + (k * 8), textbox[i].yp+textbox[i].h-8, 46, textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
}
|
|
|
|
for (k = 0; k < textbox[i].numlines; k++) {
|
|
|
|
drawcoloredtile(textbox[i].xp, textbox[i].yp + 8 + (k * 8), 43, textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
drawcoloredtile(textbox[i].xp + textbox[i].w-8, textbox[i].yp + 8 + (k * 8), 44, textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(flipmode){
|
|
|
|
for (j = 0; j < textbox[i].numlines; j++) {
|
|
|
|
print(textbox[i].xp + 8, textbox[i].yp + (textbox[i].numlines*8) - (j * 8), textbox[i].line[j], textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
}
|
|
|
|
}else {
|
|
|
|
for (j = 0; j < textbox[i].numlines; j++) {
|
|
|
|
print(textbox[i].xp + 8, textbox[i].yp +8 + (j * 8), textbox[i].line[j], textbox[i].r, textbox[i].g, textbox[i].b);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((textbox[i].yp == 12 || textbox[i].yp == 180) && textbox[i].r == 165) {
|
|
|
|
if (flipmode) { drawimage(5, 0, 180, true);
|
|
|
|
}else{ drawimage(0, 0, 12, true); }
|
|
|
|
}else if ((textbox[i].yp == 12 || textbox[i].yp == 180) && textbox[i].g == 165) {
|
|
|
|
if (flipmode) { drawimage(6, 0, 180, true);
|
|
|
|
}else{ drawimage(4, 0, 12, true); }
|
|
|
|
}
|
|
|
|
if (flipmode) {
|
|
|
|
if (textbox[i].r == 175 && textbox[i].g == 175) {
|
|
|
|
//purple guy
|
|
|
|
drawsprite(80 - 6, 64 + 48 + 4, 6, 220- help.glow/4 - (Math.random()*20), 120- help.glow/4, 210 - help.glow/4);
|
|
|
|
}else if (textbox[i].r == 175 && textbox[i].b == 175) {
|
|
|
|
//red guy
|
|
|
|
drawsprite(80 - 6, 64 + 48+ 4, 6, 255 - help.glow/8, 70 - help.glow/4, 70 - help.glow / 4);
|
|
|
|
}else if (textbox[i].r == 175) {
|
|
|
|
//green guy
|
|
|
|
drawsprite(80 - 6, 64 + 48 + 4, 6, 120 - help.glow / 4 - (Math.random() * 20), 220 - help.glow / 4, 120 - help.glow / 4);
|
|
|
|
}else if (textbox[i].g == 175) {
|
|
|
|
//yellow guy
|
|
|
|
drawsprite(80 - 6, 64 + 48+ 4, 6, 220- help.glow/4 - (Math.random()*20), 210 - help.glow/4, 120- help.glow/4);
|
|
|
|
}else if (textbox[i].b == 175) {
|
|
|
|
//blue guy
|
|
|
|
drawsprite(80 - 6, 64 + 48+ 4, 6, 75, 75, 255- help.glow/4 - (Math.random()*20));
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
if (textbox[i].r == 175 && textbox[i].g == 175) {
|
|
|
|
//purple guy
|
|
|
|
drawsprite(80 - 6, 64 + 32 + 4, 0, 220- help.glow/4 - (Math.random()*20), 120- help.glow/4, 210 - help.glow/4);
|
|
|
|
}else if (textbox[i].r == 175 && textbox[i].b == 175) {
|
|
|
|
//red guy
|
|
|
|
drawsprite(80 - 6, 64 + 32 + 4, 0, 255 - help.glow/8, 70 - help.glow/4, 70 - help.glow / 4);
|
|
|
|
}else if (textbox[i].r == 175) {
|
|
|
|
//green guy
|
|
|
|
drawsprite(80 - 6, 64 + 32 + 4, 0, 120 - help.glow / 4 - (Math.random() * 20), 220 - help.glow / 4, 120 - help.glow / 4);
|
|
|
|
}else if (textbox[i].g == 175) {
|
|
|
|
//yellow guy
|
|
|
|
drawsprite(80 - 6, 64 + 32 + 4, 0, 220- help.glow/4 - (Math.random()*20), 210 - help.glow/4, 120- help.glow/4);
|
|
|
|
}else if (textbox[i].b == 175) {
|
|
|
|
//blue guy
|
|
|
|
drawsprite(80 - 6, 64 + 32 + 4, 0, 75, 75, 255- help.glow/4 - (Math.random()*20));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function RGBA(red:Number,green:Number,blue:Number):Number{
|
|
|
|
return (blue | (green << 8) | (red << 16)) + 0xFF000000;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function RGB(red:Number,green:Number,blue:Number):Number{
|
|
|
|
return (blue | (green << 8) | (red << 16))
|
|
|
|
}
|
|
|
|
|
|
|
|
public function RGBf(red:Number, green:Number, blue:Number):Number {
|
|
|
|
red = (red+128) / 3; green = (green+128) / 3; blue = (blue+128) / 3;
|
|
|
|
return (blue | (green << 8) | (red << 16))
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function addmobileimage(imgname:String):void {
|
|
|
|
var sourcetexture:Texture = starlingassets.getTexture(imgname);
|
|
|
|
var t:Image = new Image(sourcetexture);
|
|
|
|
t.touchable = false;
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
2020-01-01 21:29:24 +01:00
|
|
|
mobileimages.push(t);
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function addimage(imgname:String):void {
|
|
|
|
var sourcetexture:Texture = starlingassets.getTexture(imgname);
|
|
|
|
var t:Image = new Image(sourcetexture);
|
|
|
|
t.touchable = false;
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
|
|
|
images.push(t);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addimage_rendertexture(imgname:String):void {
|
|
|
|
customminimap = starlingassets.getTexture(imgname) as RenderTexture;
|
|
|
|
var t:Image = new Image(customminimap);
|
|
|
|
t.touchable = false;
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
2020-01-01 21:29:24 +01:00
|
|
|
images.push(t);
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function addplayerlevelimage(imgname:String):void {
|
|
|
|
var sourcetexture:Texture = starlingassets.getTexture(imgname);
|
|
|
|
var t:Image = new Image(sourcetexture);
|
|
|
|
t.touchable = false;
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
2020-01-01 21:29:24 +01:00
|
|
|
playerlevelimages.push(t);
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function addbackground(imgname:String):void {
|
|
|
|
//Don't think this is actually used in VVVVVV
|
|
|
|
var sourcetexture:Texture = starlingassets.getTexture(imgname);
|
|
|
|
var t:Image = new Image(sourcetexture);
|
|
|
|
t.touchable = false;
|
|
|
|
t.textureSmoothing = TextureSmoothing.NONE;
|
2020-01-01 21:29:24 +01:00
|
|
|
backgrounds.push(t);
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public var towerx_pix:int;
|
|
|
|
public var towery_pix:int;
|
|
|
|
public var tower_bgcol:Vector.<int> = new Vector.<int>;
|
|
|
|
public var tower_bgdarkcol:Vector.<int> = new Vector.<int>;
|
|
|
|
public var lasttowercolstate:int = -1;
|
|
|
|
public var lasttowercolstate_front:int = -1;
|
|
|
|
public var maptdrawfront:Boolean = true;
|
|
|
|
public var forcetowerupdate:int = 10;
|
|
|
|
public var forcefronttowerupdate:int = 10;
|
|
|
|
public var towerfront_lastypos:int = 0;
|
|
|
|
public var tower_lastypos:int = 0;
|
|
|
|
|
|
|
|
public var forcewarpzonehorizontalupdate:int = 2;
|
|
|
|
public var forcewarpzoneverticalupdate:int = 1;
|
|
|
|
public var forcetowerstaticupdate:int = 1;
|
|
|
|
|
|
|
|
public function forcescreenupdates():void {
|
|
|
|
if (forcetowerupdate < 3) forcetowerupdate = 3;
|
|
|
|
if (forcefronttowerupdate < 3) forcefronttowerupdate = 3;
|
|
|
|
if (forcetowerstaticupdate < 3) forcetowerstaticupdate = 3;
|
|
|
|
if (forcewarpzoneverticalupdate < 1) forcewarpzoneverticalupdate = 1;
|
|
|
|
if (forcewarpzonehorizontalupdate < 1) forcewarpzonehorizontalupdate = 1;
|
|
|
|
}
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
public function drawtowerbackground(map:mapclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
if (map.bypos < 0) {
|
|
|
|
map.bypos += 120 * 8;
|
|
|
|
forcetowerupdate += 5;
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
if (map.scrolldir == 1) {
|
|
|
|
if (map.tdrawback || lasttowercolstate != map.colstate || forcetowerupdate > 0) {
|
|
|
|
//Draw the whole thing; needed for every colour cycle!
|
|
|
|
towerbufferbackground_meshbatch.y = 0;
|
|
|
|
tower_lastypos = map.bypos;
|
|
|
|
|
|
|
|
towerbufferbackground_meshbatch.clear();
|
|
|
|
//Draw the whole thing; needed for every colour cycle!
|
|
|
|
for (j = 0; j < 40; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
temp = map.tower.backat(i, j, map.bypos);
|
|
|
|
drawtowertile3(i * 8, (j * 8) - (map.bypos % 8), temp, map.colstate);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
backbuffer.draw(towerbufferbackground_meshbatch);
|
|
|
|
|
|
|
|
map.tdrawback = false;
|
|
|
|
lasttowercolstate = map.colstate;
|
|
|
|
if (forcetowerupdate > 0) forcetowerupdate--;
|
|
|
|
}else {
|
|
|
|
//just scroll down a bit
|
|
|
|
towerbufferbackground_meshbatch.y = -int(map.bypos - tower_lastypos);
|
|
|
|
backbuffer.draw(towerbufferbackground_meshbatch);
|
|
|
|
|
|
|
|
if (towerbufferbackground_meshbatch.y < -80) {
|
|
|
|
towerbufferbackground_meshbatch.y = 0;
|
|
|
|
map.tdrawback = true;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
}else{
|
|
|
|
if (map.tdrawback || lasttowercolstate != map.colstate || forcetowerupdate > 0) {
|
|
|
|
//Draw the whole thing; needed for every colour cycle!
|
|
|
|
towerbufferbackground_meshbatch.y = 0;
|
|
|
|
tower_lastypos = map.bypos;
|
|
|
|
|
|
|
|
towerbufferbackground_meshbatch.clear();
|
|
|
|
//Draw the whole thing; needed for every colour cycle!
|
|
|
|
for (j = -10; j < 30; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
temp = map.tower.backat(i, j, map.bypos);
|
|
|
|
drawtowertile3(i * 8, (j * 8) - (map.bypos % 8), temp, map.colstate);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
backbuffer.draw(towerbufferbackground_meshbatch);
|
|
|
|
|
|
|
|
map.tdrawback = false;
|
|
|
|
lasttowercolstate = map.colstate;
|
|
|
|
if (forcetowerupdate > 0) forcetowerupdate--;
|
|
|
|
}else {
|
|
|
|
//just scroll down a bit
|
|
|
|
towerbufferbackground_meshbatch.y = -int(map.bypos - tower_lastypos);
|
|
|
|
backbuffer.draw(towerbufferbackground_meshbatch);
|
|
|
|
|
|
|
|
if (towerbufferbackground_meshbatch.y > 80) {
|
|
|
|
towerbufferbackground_meshbatch.y = 0;
|
|
|
|
map.tdrawback = true;
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtowerbackgroundsolo(map:mapclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
if (map.bypos < 0) {
|
|
|
|
map.bypos += 120 * 8;
|
|
|
|
forcetowerupdate += 5;
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
if (map.scrolldir == 1) map.tdrawback = true;
|
|
|
|
|
|
|
|
if (map.tdrawback || lasttowercolstate != map.colstate || forcetowerupdate > 0) {
|
|
|
|
//Draw the whole thing; needed for every colour cycle!
|
|
|
|
towerbufferbackground_meshbatch.y = 0;
|
|
|
|
tower_lastypos = map.bypos;
|
|
|
|
|
|
|
|
towerbufferbackground_meshbatch.clear();
|
2020-01-01 21:29:24 +01:00
|
|
|
//Draw the whole thing; needed for every colour cycle!
|
2022-12-02 18:19:58 +01:00
|
|
|
for (j = -10; j < 31; j++) {
|
2020-01-01 21:29:24 +01:00
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
temp = map.tower.backat(i, j, map.bypos);
|
|
|
|
drawtowertile3(i * 8, (j * 8) - (map.bypos % 8), temp, map.colstate);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
backbuffer.draw(towerbufferbackground_meshbatch);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
map.tdrawback = false;
|
2022-12-02 18:19:58 +01:00
|
|
|
lasttowercolstate = map.colstate;
|
|
|
|
if (forcetowerupdate > 0) forcetowerupdate--;
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
//just scroll down a bit
|
|
|
|
towerbufferbackground_meshbatch.y = -int(map.bypos - tower_lastypos);
|
|
|
|
backbuffer.draw(towerbufferbackground_meshbatch);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
if (towerbufferbackground_meshbatch.y > 80) {
|
|
|
|
towerbufferbackground_meshbatch.y = 0;
|
|
|
|
map.tdrawback = true;
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function drawtowermap(game:gameclass, map:mapclass):void {
|
|
|
|
if (game.deathseq > 0) { forcefronttowerupdate = 20; }
|
|
|
|
|
|
|
|
if (map.scrolldir == 1) {
|
|
|
|
if (maptdrawfront || lasttowercolstate_front != map.colstate || forcefronttowerupdate > 0) {
|
|
|
|
towerbufferforeground_meshbatch.y = 0;
|
|
|
|
towerfront_lastypos = map.ypos;
|
|
|
|
towerbufferforeground_meshbatch.clear();
|
|
|
|
|
|
|
|
for (j = 0; j < 40; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
temp = map.tower.at(i, j, map.ypos);
|
|
|
|
if (temp > 0) drawtile3_batch(i * 8, (j * 8) - (map.ypos % 8), temp, map.colstate);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
backbuffer.draw(towerbufferforeground_meshbatch);
|
|
|
|
|
|
|
|
maptdrawfront = false;
|
|
|
|
lasttowercolstate_front = map.colstate;
|
|
|
|
if (forcefronttowerupdate > 0) forcefronttowerupdate--;
|
|
|
|
}else {
|
|
|
|
//just scroll down a bit
|
|
|
|
towerbufferforeground_meshbatch.y = -int(map.ypos - towerfront_lastypos);
|
|
|
|
backbuffer.draw(towerbufferforeground_meshbatch);
|
|
|
|
|
|
|
|
if (towerbufferforeground_meshbatch.y < -80) {
|
|
|
|
towerbufferforeground_meshbatch.y = 0;
|
|
|
|
maptdrawfront = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
if (maptdrawfront || lasttowercolstate_front != map.colstate || forcefronttowerupdate > 0) {
|
|
|
|
towerbufferforeground_meshbatch.y = 0;
|
|
|
|
towerfront_lastypos = map.ypos;
|
|
|
|
towerbufferforeground_meshbatch.clear();
|
|
|
|
|
|
|
|
for (j = -10; j < 30; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
temp = map.tower.at(i, j, map.ypos);
|
|
|
|
if (temp > 0) drawtile3_batch(i * 8, (j * 8) - (map.ypos % 8), temp, map.colstate);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
backbuffer.draw(towerbufferforeground_meshbatch);
|
|
|
|
|
|
|
|
maptdrawfront = false;
|
|
|
|
lasttowercolstate_front = map.colstate;
|
|
|
|
if (forcefronttowerupdate > 0) forcefronttowerupdate--;
|
|
|
|
}else {
|
|
|
|
//just scroll down a bit
|
|
|
|
towerbufferforeground_meshbatch.y = -int(map.ypos - towerfront_lastypos);
|
|
|
|
backbuffer.draw(towerbufferforeground_meshbatch);
|
|
|
|
|
|
|
|
if (towerbufferforeground_meshbatch.y > 80) {
|
|
|
|
towerbufferforeground_meshbatch.y = 0;
|
|
|
|
maptdrawfront = true;
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtowermap_nobackground(map:mapclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
towerbufferforeground_meshbatch.clear();
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
for (j = 0; j < 30; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
temp = map.tower.at(i, j, map.ypos);
|
2022-12-02 18:19:58 +01:00
|
|
|
if (temp > 0 && temp<28) drawtile3_batch(i * 8, (j * 8) - (map.ypos % 8), temp, map.colstate);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
|
|
|
|
backbuffer.draw(towerbufferforeground_meshbatch);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtowerspikes(map:mapclass):void {
|
|
|
|
for (i = 0; i < 40; i++) {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawtile3(i * 8, -8 + map.spikeleveltop, 9, map.colstate);
|
|
|
|
drawtile3(i * 8, 230 - map.spikelevelbottom, 8, map.colstate);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtowerentities(map:mapclass, obj:entityclass, help:helpclass):void {
|
|
|
|
//Update line colours!
|
|
|
|
if (linedelay <= 0) {
|
|
|
|
linestate++;
|
|
|
|
if (linestate >= 10) linestate = 0;
|
|
|
|
linedelay = 2;
|
|
|
|
}else {
|
|
|
|
linedelay--;
|
|
|
|
}
|
|
|
|
|
|
|
|
var j:int, k:int;
|
|
|
|
for (var i:int = 0; i < obj.nentity; i++) {
|
|
|
|
if (!obj.entities[i].invis && obj.entities[i].active) {
|
|
|
|
if (obj.entities[i].size == 0) { // Sprites
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(obj.entities[i].xp, obj.entities[i].yp - map.ypos);
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
sprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
//screenwrapping!
|
|
|
|
if (!map.minitowermode) {
|
|
|
|
if ( map.ypos >= 500 && map.ypos <= 5000) { //The "wrapping" area of the tower
|
|
|
|
if (tpoint.x < 0) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(obj.entities[i].xp + 320, obj.entities[i].yp - map.ypos);
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
if (tpoint.x > 300) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(obj.entities[i].xp - 320, obj.entities[i].yp - map.ypos);
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
}else if (obj.entities[i].size == 1) { // Tiles
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(obj.entities[i].xp, obj.entities[i].yp - map.ypos);
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].size == 2) { // Special: Moving platform, 4 tiles
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(obj.entities[i].xp, obj.entities[i].yp - map.ypos);
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(obj.entities[i].xp + 8, obj.entities[i].yp - map.ypos);
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(obj.entities[i].xp + 16, obj.entities[i].yp - map.ypos);
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(obj.entities[i].xp + 24, obj.entities[i].yp - map.ypos);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].size == 3) { // Big chunky pixels!
|
|
|
|
prect.x = obj.entities[i].xp; prect.y = obj.entities[i].yp-map.ypos;
|
|
|
|
//A seperate index of colours, for simplicity
|
2022-12-02 18:19:58 +01:00
|
|
|
if (obj.entities[i].colour == 1) {
|
|
|
|
drawfillrect(prect.x, prect.y, prect.width, prect.height, 196 - (Math.random() * 64), 10, 10);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].colour == 2) {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(prect.x, prect.y, prect.width, prect.height, 160- help.glow/2 - (Math.random()*20), 200- help.glow/2, 220 - help.glow);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if (obj.entities[i].size == 4) { // Small pickups
|
|
|
|
drawhuetile(obj.entities[i].xp, obj.entities[i].yp-map.ypos, obj.entities[i].tile, obj.entities[i].colour);
|
|
|
|
}else if (obj.entities[i].size == 5) { //Horizontal Line
|
|
|
|
line_rect.x = obj.entities[i].xp; line_rect.y = obj.entities[i].yp-map.ypos;
|
|
|
|
line_rect.width = obj.entities[i].w; line_rect.height = 1;
|
|
|
|
drawgravityline(i, obj);
|
|
|
|
}else if (obj.entities[i].size == 6) { //Vertical Line
|
|
|
|
line_rect.x = obj.entities[i].xp; line_rect.y = obj.entities[i].yp-map.ypos;
|
|
|
|
line_rect.width = 1; line_rect.height = obj.entities[i].h;
|
|
|
|
drawgravityline(i, obj);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawbackground(t:int, map:mapclass):void {
|
|
|
|
switch(t) {
|
|
|
|
case 1:
|
2022-12-02 18:19:58 +01:00
|
|
|
//Starfield
|
|
|
|
drawfillrect(0, 0, 320, 240, 0, 0, 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
for (i = 0; i < 50; i++) {
|
|
|
|
if (starsspeed[i] <= 6) {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(stars[i].x, stars[i].y, stars[i].width, stars[i].height, 34, 34, 34);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(stars[i].x, stars[i].y, stars[i].width, stars[i].height, 85, 85, 85);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
stars[i].x -= starsspeed[i];
|
|
|
|
if (stars[i].x < -10) {
|
|
|
|
stars[i].x += 340;
|
|
|
|
stars[i].y = Math.random() * 240;
|
2022-12-02 18:19:58 +01:00
|
|
|
starsspeed[i] = 4 + (Math.random()*4);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
2022-12-02 18:19:58 +01:00
|
|
|
//Lab
|
|
|
|
i = 0;
|
2020-01-01 21:29:24 +01:00
|
|
|
switch(rcol) {
|
|
|
|
//Akward ordering to match tileset
|
|
|
|
case 0: bcol2 = RGB(0, 16*backboxint[i], 16*backboxint[i]); break; //Cyan
|
|
|
|
case 1: bcol2 = RGB(16*backboxint[i], 0, 0); break; //Red
|
|
|
|
case 2: bcol2 = RGB(16*backboxint[i], 0, 16*backboxint[i]); break; //Purple
|
|
|
|
case 3: bcol2 = RGB(0, 0, 16*backboxint[i]); break; //Blue
|
|
|
|
case 4: bcol2 = RGB(16*backboxint[i], 16*backboxint[i], 0); break; //Yellow
|
|
|
|
case 5: bcol2 = RGB(0, 16 * backboxint[i], 0); break; //Green
|
|
|
|
case 6:
|
|
|
|
//crazy case
|
|
|
|
spcoldel--;
|
|
|
|
if (spcoldel <= 0) {
|
|
|
|
spcoldel = 15;
|
|
|
|
spcol++;
|
|
|
|
if (spcol >= 12) spcol = 0;
|
|
|
|
}
|
|
|
|
switch(spcol) {
|
2022-12-02 18:19:58 +01:00
|
|
|
case 0: bcol2 = RGB(0, 16 * backboxint[i], 16 * backboxint[i]); break; //Cyan
|
2020-01-01 21:29:24 +01:00
|
|
|
case 1: bcol2 = RGB(0, (spcoldel+1)*backboxint[i], 16*backboxint[i]); break; //Cyan
|
|
|
|
case 2: bcol2 = RGB(0, 0, 16*backboxint[i]); break; //Blue
|
|
|
|
case 3: bcol2 = RGB((16-spcoldel)*backboxint[i], 0, 16*backboxint[i]); break; //Blue
|
|
|
|
case 4: bcol2 = RGB(16*backboxint[i], 0, 16*backboxint[i]); break; //Purple
|
|
|
|
case 5: bcol2 = RGB(16*backboxint[i], 0, (spcoldel+1)*backboxint[i]); break; //Purple
|
|
|
|
case 6: bcol2 = RGB(16*backboxint[i], 0, 0); break; //Red
|
|
|
|
case 7: bcol2 = RGB(16*backboxint[i], (16-spcoldel)*backboxint[i], 0); break; //Red
|
|
|
|
case 8: bcol2 = RGB(16*backboxint[i], 16*backboxint[i], 0); break; //Yellow
|
|
|
|
case 9: bcol2 = RGB((spcoldel+1)*backboxint[i], 16*backboxint[i], 0); break; //Yellow
|
|
|
|
case 10: bcol2 = RGB(0, 16 * backboxint[i], 0); break; //Green
|
|
|
|
case 11: bcol2 = RGB(0, 16 * backboxint[i], (16-spcoldel)*backboxint[i]); break; //Green
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
cls(bcol2);
|
2020-01-01 21:29:24 +01:00
|
|
|
for (i = 0; i < 18; i++) {
|
|
|
|
switch(rcol) {
|
|
|
|
//Akward ordering to match tileset
|
|
|
|
case 0: bcol = RGB(16, 128*backboxint[i], 128*backboxint[i]); break; //Cyan
|
|
|
|
case 1: bcol = RGB(128*backboxint[i], 16, 16); break; //Red
|
|
|
|
case 2: bcol = RGB(128*backboxint[i], 16, 128*backboxint[i]); break; //Purple
|
|
|
|
case 3: bcol = RGB(16, 16, 128*backboxint[i]); break; //Blue
|
|
|
|
case 4: bcol = RGB(128*backboxint[i], 128*backboxint[i], 16); break; //Yellow
|
|
|
|
case 5: bcol = RGB(16, 128 * backboxint[i], 16); break; //Green
|
|
|
|
case 6:
|
|
|
|
//crazy case
|
|
|
|
switch(spcol) {
|
|
|
|
case 0: bcol = RGB(16, 128*backboxint[i], 128*backboxint[i]); break; //Cyan
|
|
|
|
case 1: bcol = RGB(16, ((spcoldel+1)*8)*backboxint[i], 128*backboxint[i]); break; //Cyan
|
|
|
|
case 2: bcol = RGB(16, 16, 128*backboxint[i]); break; //Blue
|
|
|
|
case 3: bcol = RGB((128-(spcoldel*8))*backboxint[i], 16, 128*backboxint[i]); break; //Blue
|
|
|
|
case 4: bcol = RGB(128*backboxint[i], 16, 128*backboxint[i]); break; //Purple
|
|
|
|
case 5: bcol = RGB(128*backboxint[i], 16, ((spcoldel+1)*8)*backboxint[i]); break; //Purple
|
|
|
|
case 6: bcol = RGB(128*backboxint[i], 16, 16); break; //Red
|
|
|
|
case 7: bcol = RGB(128*backboxint[i], (128-(spcoldel*8))*backboxint[i], 16); break; //Red
|
|
|
|
case 8: bcol = RGB(128*backboxint[i], 128*backboxint[i], 16); break; //Yellow
|
|
|
|
case 9: bcol = RGB(((spcoldel+1)*8)*backboxint[i], 128*backboxint[i], 16); break; //Yellow
|
|
|
|
case 10: bcol = RGB(16, 128 * backboxint[i], 16); break; //Green
|
|
|
|
case 11: bcol = RGB(16, 128 * backboxint[i], (128-(spcoldel*8))*backboxint[i]); break; //Green
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(backboxes[i].x, backboxes[i].y, backboxes[i].width, backboxes[i].height, bcol);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
backboxrect.x = backboxes[i].x + 1; backboxrect.y = backboxes[i].y + 1;
|
|
|
|
backboxrect.width = backboxes[i].width - 2; backboxrect.height = backboxes[i].height - 2;
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(backboxrect.x, backboxrect.y, backboxrect.width, backboxrect.height, bcol2);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
backboxes[i].x += backboxvx[i];
|
|
|
|
backboxes[i].y += backboxvy[i];
|
|
|
|
if (backboxes[i].x < -40) { backboxes[i].x = 320; backboxes[i].y = Math.random() * 240; }
|
|
|
|
if (backboxes[i].x > 320) { backboxes[i].x = -32; backboxes[i].y = Math.random() * 240; }
|
|
|
|
if (backboxes[i].y < -40) { backboxes[i].y = 240; backboxes[i].x = Math.random() * 320; }
|
|
|
|
if (backboxes[i].y > 260) { backboxes[i].y = -32; backboxes[i].x = Math.random() * 320; }
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3: //Warp zone (horizontal)
|
2022-12-02 18:19:58 +01:00
|
|
|
backoffset += 3; if (backoffset >= 16) backoffset -= 16;
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
if (forcewarpzonehorizontalupdate > 0) {
|
|
|
|
warpzonehorizontal_meshbatch.x = 0;
|
|
|
|
warpzonehorizontal_meshbatch.clear();
|
2020-01-01 21:29:24 +01:00
|
|
|
for (j = 0; j < 15; j++) {
|
2022-12-02 18:19:58 +01:00
|
|
|
for (i = -1; i < 21; i++) {
|
2020-01-01 21:29:24 +01:00
|
|
|
temp = 680 + (rcol * 3);
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity(); tposition.translate(int((i * 16) - backoffset), int(j * 16));
|
|
|
|
warpzonehorizontal_meshbatch.addMesh(tiles2[temp+40], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int((i * 16) - backoffset + 8), int((j * 16)));
|
|
|
|
warpzonehorizontal_meshbatch.addMesh(tiles2[temp + 41], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int((i * 16) - backoffset), int((j * 16) + 8));
|
|
|
|
warpzonehorizontal_meshbatch.addMesh(tiles2[temp + 80], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int((i * 16) - backoffset + 8), int((j * 16) + 8));
|
|
|
|
warpzonehorizontal_meshbatch.addMesh(tiles2[temp + 81], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
|
|
|
|
backbuffer.draw(warpzonehorizontal_meshbatch);
|
|
|
|
forcewarpzonehorizontalupdate--;
|
|
|
|
}else {
|
|
|
|
warpzonehorizontal_meshbatch.x = backoffset;
|
|
|
|
backbuffer.draw(warpzonehorizontal_meshbatch);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
case 4: //Warp zone (vertical)
|
2022-12-02 18:19:58 +01:00
|
|
|
backoffset += 3;
|
|
|
|
if (backoffset >= 16) backoffset -= 16;
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
if (forcewarpzoneverticalupdate > 0) {
|
|
|
|
warpzonevertical_meshbatch.y = 0;
|
|
|
|
warpzonevertical_meshbatch.clear();
|
|
|
|
for (j = -1; j < 16; j++) {
|
2020-01-01 21:29:24 +01:00
|
|
|
for (i = 0; i < 21; i++) {
|
|
|
|
temp = 760 + (rcol * 3);
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity(); tposition.translate(int((i * 16)), int((j * 16) - backoffset));
|
|
|
|
warpzonevertical_meshbatch.addMesh(tiles2[temp+40], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int((i * 16) + 8), int((j * 16) - backoffset));
|
|
|
|
warpzonevertical_meshbatch.addMesh(tiles2[temp + 41], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int((i * 16)), int((j * 16) - backoffset + 8));
|
|
|
|
warpzonevertical_meshbatch.addMesh(tiles2[temp + 80], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int((i * 16) + 8), int((j * 16) - backoffset + 8));
|
|
|
|
warpzonevertical_meshbatch.addMesh(tiles2[temp + 81], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
|
|
|
|
backbuffer.draw(warpzonevertical_meshbatch);
|
|
|
|
forcewarpzoneverticalupdate--;
|
|
|
|
}else {
|
|
|
|
warpzonevertical_meshbatch.y = backoffset;
|
|
|
|
backbuffer.draw(warpzonevertical_meshbatch);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
//backbuffer.copyPixels(towerbuffer, towerbuffer.rect, tl);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
case 5:
|
2022-12-02 18:19:58 +01:00
|
|
|
//Warp zone, central
|
2020-01-01 21:29:24 +01:00
|
|
|
switch(rcol) {
|
|
|
|
//Akward ordering to match tileset
|
|
|
|
case 0: warpbcol = 0x0A100E; warpfcol = 0x102221; break; //Cyan
|
|
|
|
case 1: warpbcol = 0x11090B; warpfcol = 0x221011; break; //Red
|
|
|
|
case 2: warpbcol = 0x0F0A10; warpfcol = 0x221022; break; //Purple
|
|
|
|
case 3: warpbcol = 0x0A0B10; warpfcol = 0x101022; break; //Blue
|
|
|
|
case 4: warpbcol = 0x100D0A; warpfcol = 0x221E10; break; //Yellow
|
|
|
|
case 5: warpbcol = 0x0D100A; warpfcol = 0x142210; break; //Green
|
|
|
|
case 6: warpbcol = 0x0A0A0A; warpfcol = 0x121212; break; //Gray
|
|
|
|
}
|
|
|
|
|
|
|
|
backoffset += 1;
|
|
|
|
if (backoffset >= 16) {
|
|
|
|
backoffset -= 16;
|
|
|
|
warpskip = (warpskip + 1) % 2;
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
for (i = 10; i >= 0; i--) {
|
2020-01-01 21:29:24 +01:00
|
|
|
temp = (i << 4) + backoffset;
|
|
|
|
setwarprect(160 - temp, 120 - temp, temp * 2, temp * 2);
|
|
|
|
if (i % 2 == warpskip) {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(warprect.x, warprect.y, warprect.width, warprect.height, warpbcol);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(warprect.x, warprect.y, warprect.width, warprect.height, warpfcol);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
//Final Starfield
|
2022-12-02 18:19:58 +01:00
|
|
|
cls(0x000000);
|
2020-01-01 21:29:24 +01:00
|
|
|
for (i = 0; i < 50; i++) {
|
|
|
|
if (starsspeed[i] <= 8) {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(stars[i].x, stars[i].y, stars[i].width, stars[i].height, 0x222222);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(stars[i].x, stars[i].y, stars[i].width, stars[i].height, 0x555555);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
stars[i].y -= starsspeed[i];
|
|
|
|
if (stars[i].y < -10) {
|
|
|
|
stars[i].y += 260;
|
|
|
|
stars[i].x = Math.random() * 320;
|
|
|
|
starsspeed[i] = 5+(Math.random()*5);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
//Static, unscrolling section of the tower
|
2022-12-02 18:19:58 +01:00
|
|
|
if (forcetowerstaticupdate > 0) {
|
|
|
|
towerbufferstatic_meshbatch.clear();
|
|
|
|
|
|
|
|
for (j = 0; j < 30; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(i * 8), int(j * 8));
|
|
|
|
towerbufferstatic_meshbatch.addMesh(tiles3[map.tower.backat(i, j, 200) + (15 * 30)], tposition);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
backbuffer.draw(towerbufferstatic_meshbatch);
|
|
|
|
forcetowerstaticupdate--;
|
|
|
|
}else {
|
|
|
|
backbuffer.draw(towerbufferstatic_meshbatch);
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
//Static, unscrolling section of the tower
|
2022-12-02 18:19:58 +01:00
|
|
|
if (forcetowerstaticupdate > 0) {
|
|
|
|
towerbufferstatic_meshbatch.clear();
|
|
|
|
|
|
|
|
for (j = 0; j < 30; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(i * 8), int(j * 8));
|
|
|
|
towerbufferstatic_meshbatch.addMesh(tiles3[map.tower.backat(i, j, 200) + (15 * 10)], tposition);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
backbuffer.draw(towerbufferstatic_meshbatch);
|
|
|
|
forcetowerstaticupdate--;
|
|
|
|
}else {
|
|
|
|
backbuffer.draw(towerbufferstatic_meshbatch);
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
//Static, unscrolling section of the tower
|
2022-12-02 18:19:58 +01:00
|
|
|
if (forcetowerstaticupdate > 0) {
|
|
|
|
towerbufferstatic_meshbatch.clear();
|
|
|
|
|
|
|
|
for (j = 0; j < 30; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(i * 8), int(j * 8));
|
|
|
|
towerbufferstatic_meshbatch.addMesh(tiles3[map.tower.backat(i, j, 600)], tposition);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
backbuffer.draw(towerbufferstatic_meshbatch);
|
|
|
|
forcetowerstaticupdate--;
|
|
|
|
}else {
|
|
|
|
backbuffer.draw(towerbufferstatic_meshbatch);
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
default:
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(0, 0, 320, 240, 0, 0, 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function textbox_drawimage(t:int, xp:int, yp:int, cent:Boolean=false):void {
|
|
|
|
trace("dwgfx.textbox_drawimage() is not implemented yet");
|
|
|
|
}
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
public function drawimage(t:int, xp:int, yp:int, cent:Boolean=false):void {
|
|
|
|
if (cent) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(160 - int(images[t].width / 2), yp);
|
|
|
|
backbuffer.draw(images[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(xp, yp);
|
|
|
|
backbuffer.draw(images[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawmobileimage(t:int, xp:int, yp:int, cent:Boolean=false):void {
|
|
|
|
if (cent) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(160 - int(mobileimages[t].width / 2), yp);
|
|
|
|
backbuffer.draw(mobileimages[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(xp, yp);
|
|
|
|
backbuffer.draw(mobileimages[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawmobilehands(t:int, xp:int, yp:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(xp, yp);
|
|
|
|
backbuffer.draw(mobileimages[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawplayerlevelimage(t:int, xp:int, yp:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(xp, yp);
|
|
|
|
backbuffer.draw(playerlevelimages[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawimagecol(t:int, xp:int, yp:int, r:int, g:int, b:int, cent:Boolean = false):void {
|
|
|
|
if (cent) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(160 - int(images[t].width / 2), yp);
|
|
|
|
images[t].color = RGB(r, g, b);
|
|
|
|
backbuffer.draw(images[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(xp, yp);
|
|
|
|
images[t].color = RGB(r, g, b);
|
|
|
|
backbuffer.draw(images[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function crewcolour(t:int):int {
|
|
|
|
//given crewmate t, return colour in setcol
|
|
|
|
if (t == 0) return 0;
|
|
|
|
if (t == 1) return 20;
|
|
|
|
if (t == 2) return 14;
|
|
|
|
if (t == 3) return 15;
|
|
|
|
if (t == 4) return 13;
|
|
|
|
if (t == 5) return 16;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setcol(t:int, help:helpclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
//Setup predefinied colours as per our zany palette
|
2020-01-01 21:29:24 +01:00
|
|
|
switch(t) {
|
|
|
|
//Player Normal
|
|
|
|
case 0: ct.color = RGB(160- help.glow/2 - (Math.random()*20), 200- help.glow/2, 220 - help.glow); break;
|
|
|
|
//Player Hurt
|
|
|
|
case 1: ct.color = RGB(196 - (Math.random() * 64), 10, 10); break;
|
|
|
|
//Enemies and stuff
|
|
|
|
case 2: ct.color = RGB(225-(help.glow/2), 75, 30); break;
|
|
|
|
case 3: //Trinket
|
|
|
|
if (!trinketcolset) {
|
|
|
|
trinketr = 200 - (Math.random() * 64);
|
|
|
|
trinketg = 200 - (Math.random() * 128);
|
|
|
|
trinketb = 164 + (Math.random() * 60);
|
|
|
|
trinketcolset = true;
|
|
|
|
}
|
|
|
|
ct.color = RGB(trinketr, trinketg, trinketb);
|
|
|
|
break;
|
|
|
|
case 4: //Inactive savepoint
|
|
|
|
temp = (help.glow/2) + (Math.random() * 8);
|
|
|
|
ct.color = RGB(80 + temp, 80 + temp, 80 + temp);
|
|
|
|
break;
|
|
|
|
case 5: //Active savepoint
|
|
|
|
ct.color = RGB(164+(Math.random()*64),164+(Math.random()*64), 255-(Math.random()*64))
|
|
|
|
break;
|
|
|
|
case 6: //Enemy : Red
|
|
|
|
ct.color = RGB(250 - help.glow/2, 60- help.glow/2, 60 - help.glow/2);
|
|
|
|
break;
|
|
|
|
case 7: //Enemy : Green
|
|
|
|
ct.color = RGB(100 - help.glow/2 - (Math.random()*30), 250 - help.glow/2, 100 - help.glow/2 - (Math.random()*30));
|
|
|
|
break;
|
|
|
|
case 8: //Enemy : Purple
|
|
|
|
ct.color = RGB(250 - help.glow/2, 20, 128 - help.glow/2 + (Math.random()*30));
|
|
|
|
break;
|
|
|
|
case 9: //Enemy : Yellow
|
|
|
|
ct.color = RGB(250 - help.glow/2, 250 - help.glow/2, 20);
|
|
|
|
break;
|
|
|
|
case 10: //Warp point (white)
|
|
|
|
ct.color = RGB(255 - (Math.random() * 64), 255 - (Math.random() * 64), 255 - (Math.random() * 64));
|
|
|
|
break;
|
|
|
|
case 11: //Enemy : Cyan
|
|
|
|
ct.color = RGB(20, 250 - help.glow/2, 250 - help.glow/2);
|
|
|
|
break;
|
|
|
|
case 12: //Enemy : Blue
|
|
|
|
ct.color = RGB(90- help.glow/2, 90 - help.glow/2, 250 - help.glow/2);
|
|
|
|
break;
|
|
|
|
//Crew Members
|
|
|
|
//green
|
|
|
|
case 13: ct.color = RGB(120- help.glow/4 - (Math.random()*20), 220 - help.glow/4, 120- help.glow/4); break;
|
|
|
|
//Yellow
|
|
|
|
case 14: ct.color = RGB(220- help.glow/4 - (Math.random()*20), 210 - help.glow/4, 120- help.glow/4); break;
|
|
|
|
//pink
|
|
|
|
case 15: ct.color = RGB(255 - help.glow/8, 70 - help.glow/4, 70 - help.glow / 4); break;
|
|
|
|
//Blue
|
|
|
|
case 16: ct.color = RGB(75, 75, 255- help.glow/4 - (Math.random()*20)); break;
|
|
|
|
|
|
|
|
|
|
|
|
case 17: //Enemy : Orange
|
|
|
|
ct.color = RGB(250 - help.glow/2, 130 - help.glow/2, 20);
|
|
|
|
break;
|
|
|
|
case 18: //Enemy : Gray
|
|
|
|
ct.color = RGB(130- help.glow/2, 130 - help.glow/2, 130 - help.glow/2);
|
|
|
|
break;
|
|
|
|
case 19: //Enemy : Dark gray
|
|
|
|
ct.color = RGB(60- help.glow/8, 60 - help.glow/8, 60 - help.glow/8);
|
|
|
|
break;
|
|
|
|
//Purple
|
|
|
|
case 20: ct.color = RGB(220 - help.glow / 4 - (Math.random() * 20), 120 - help.glow / 4, 210 - help.glow / 4); break;
|
|
|
|
|
|
|
|
case 21: //Enemy : Light Gray
|
|
|
|
ct.color = RGB(180- help.glow/2, 180 - help.glow/2, 180 - help.glow/2);
|
|
|
|
break;
|
|
|
|
case 22: //Enemy : Indicator Gray
|
|
|
|
ct.color = RGB(230- help.glow/2, 230- help.glow/2, 230- help.glow/2);
|
|
|
|
break;
|
|
|
|
case 23: //Enemy : Indicator Gray
|
|
|
|
ct.color = RGB(255- help.glow/2 - (Math.random() * 40) , 255- help.glow/2 - (Math.random() * 40), 255- help.glow/2 - (Math.random() * 40));
|
|
|
|
break;
|
|
|
|
|
|
|
|
//Trophies
|
|
|
|
//cyan
|
|
|
|
case 30: ct.color = RGBf(160, 200, 220); break;
|
|
|
|
//Purple
|
|
|
|
case 31: ct.color = RGBf(220, 120, 210); break;
|
|
|
|
//Yellow
|
|
|
|
case 32: ct.color = RGBf(220, 210, 120); break;
|
|
|
|
//red
|
|
|
|
case 33: ct.color = RGBf(255, 70, 70); break;
|
|
|
|
//green
|
|
|
|
case 34: ct.color = RGBf(120, 220, 120); break;
|
|
|
|
//Blue
|
|
|
|
case 35: ct.color = RGBf(75, 75, 255); break;
|
|
|
|
//Gold
|
|
|
|
case 36: ct.color = RGB(180, 120, 20); break;
|
|
|
|
case 37: //Trinket
|
|
|
|
if (!trinketcolset) {
|
|
|
|
trinketr = 200 - (Math.random() * 64);
|
|
|
|
trinketg = 200 - (Math.random() * 128);
|
|
|
|
trinketb = 164 + (Math.random() * 60);
|
|
|
|
trinketcolset = true;
|
|
|
|
}
|
|
|
|
ct.color = RGBf(trinketr, trinketg, trinketb);
|
|
|
|
break;
|
|
|
|
//Silver
|
|
|
|
case 38: ct.color = RGBf(196, 196, 196); break;
|
|
|
|
//Bronze
|
|
|
|
case 39: ct.color = RGBf(128, 64, 10); break;
|
|
|
|
//Awesome
|
|
|
|
case 40: //Teleporter in action!
|
|
|
|
temp = Math.random() * 150;
|
|
|
|
if(temp<33){
|
|
|
|
ct.color = RGBf(255 - (Math.random() * 64), 64 + (Math.random() * 64), 64 + (Math.random() * 64));
|
|
|
|
}else if (temp < 66) {
|
|
|
|
ct.color = RGBf(64 + (Math.random() * 64), 255 - (Math.random() * 64), 64 + (Math.random() * 64));
|
|
|
|
}else if (temp < 100) {
|
|
|
|
ct.color = RGBf(64 + (Math.random() * 64), 64 + (Math.random() * 64), 255 - (Math.random() * 64));
|
|
|
|
}else {
|
|
|
|
ct.color = RGBf(164+(Math.random()*64),164+(Math.random()*64), 255-(Math.random()*64))
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 100: //Inactive Teleporter
|
|
|
|
temp = (help.glow/2) + (Math.random() * 8);
|
|
|
|
ct.color = RGB(42 + temp, 42 + temp, 42 + temp);
|
|
|
|
break;
|
|
|
|
case 101: //Active Teleporter
|
|
|
|
ct.color = RGB(164+(Math.random()*64),164+(Math.random()*64), 255-(Math.random()*64))
|
|
|
|
break;
|
|
|
|
case 102: //Teleporter in action!
|
|
|
|
temp = Math.random() * 150;
|
|
|
|
if(temp<33){
|
|
|
|
ct.color = RGB(255 - (Math.random() * 64), 64 + (Math.random() * 64), 64 + (Math.random() * 64));
|
|
|
|
}else if (temp < 66) {
|
|
|
|
ct.color = RGB(64 + (Math.random() * 64), 255 - (Math.random() * 64), 64 + (Math.random() * 64));
|
|
|
|
}else if (temp < 100) {
|
|
|
|
ct.color = RGB(64 + (Math.random() * 64), 64 + (Math.random() * 64), 255 - (Math.random() * 64));
|
|
|
|
}else {
|
|
|
|
ct.color = RGB(164+(Math.random()*64),164+(Math.random()*64), 255-(Math.random()*64))
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default: ct.color = 0xFFFFFF; break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setcolreal(t:int):void {
|
|
|
|
ct.color = t;
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
|
|
|
|
public function textbox_drawcoloredtile(x:int, y:int, t:int, r:int, g:int, b:int):void {
|
|
|
|
trace("dwgfx.textbox_drawcoloredtile() is not implemented yet");
|
|
|
|
}
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
public function drawcoloredtile(x:int, y:int, t:int, r:int, g:int, b:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
|
|
|
|
tiles[t].color = RGB(r, g, b);
|
|
|
|
backbuffer.draw(tiles[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawhuetile(x:int, y:int, t:int, c:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
2020-01-01 21:29:24 +01:00
|
|
|
switch(c) {
|
2022-12-02 18:19:58 +01:00
|
|
|
case 0: tiles[t].color = RGB(250-(Math.random()*32), 250-(Math.random()*32), 10); break;
|
|
|
|
case 1: tiles[t].color = RGB(250-(Math.random()*32), 250-(Math.random()*32), 10); break;
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
default: tiles[t].color = RGB(250-(Math.random()*32), 250-(Math.random()*32), 10); break;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
backbuffer.draw(tiles[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawcrewman(x:int, y:int, t:int, act:Boolean, help:helpclass, noshift:Boolean=false):void {
|
|
|
|
if (!act) {
|
|
|
|
if (noshift) {
|
|
|
|
if (flipmode) { drawspritesetcol(x, y, 14, 19, help);
|
|
|
|
}else{ drawspritesetcol(x, y, 12, 19, help); }
|
|
|
|
}else{
|
|
|
|
if (flipmode) { drawspritesetcol(x - 8, y, 14, 19, help);
|
|
|
|
}else{ drawspritesetcol(x - 8, y, 12, 19, help); }
|
|
|
|
}
|
|
|
|
}else {
|
|
|
|
if (flipmode) crewframe += 6;
|
|
|
|
|
|
|
|
switch(t) {
|
|
|
|
case 0: drawspritesetcol(x, y, crewframe, 0, help); break;
|
|
|
|
case 1: drawspritesetcol(x, y, crewframe, 20, help); break;
|
|
|
|
case 2: drawspritesetcol(x, y, crewframe, 14, help); break;
|
|
|
|
case 3: drawspritesetcol(x, y, crewframe, 15, help); break;
|
|
|
|
case 4: drawspritesetcol(x, y, crewframe, 13, help); break;
|
|
|
|
case 5: drawspritesetcol(x, y, crewframe, 16, help); break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (flipmode) crewframe -= 6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtrophytext(obj:entityclass, help:helpclass):void {
|
|
|
|
if (obj.trophytext < 15) {
|
|
|
|
temp = (196 * obj.trophytext) / 15; temp2 = (196 * obj.trophytext) / 15; temp3 = ((255 - help.glow) * obj.trophytext) / 15;
|
|
|
|
}else { temp = 196; temp2 = 196; temp3 = 255 - help.glow; }
|
|
|
|
switch(obj.trophytype) {
|
|
|
|
case 1:
|
|
|
|
print( -1, 6, "SPACE STATION 1 MASTERED", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Obtain a V Rank in this Time Trial", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
print( -1, 6, "LABORATORY MASTERED", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Obtain a V Rank in this Time Trial", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
print( -1, 6, "THE TOWER MASTERED", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Obtain a V Rank in this Time Trial", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
print( -1, 6, "SPACE STATION 2 MASTERED", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Obtain a V Rank in this Time Trial", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
print( -1, 6, "WARP ZONE MASTERED", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Obtain a V Rank in this Time Trial", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
print( -1, 6, "FINAL LEVEL MASTERED", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Obtain a V Rank in this Time Trial", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
print( -1, 6, "GAME COMPLETE", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Complete the game", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
print( -1, 6, "FLIP MODE COMPLETE", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Complete the game in flip mode", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
print( -1, 11, "Win with less than 50 deaths", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
print( -1, 11, "Win with less than 100 deaths", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 11:
|
|
|
|
print( -1, 11, "Win with less than 250 deaths", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 12:
|
|
|
|
print( -1, 11, "Win with less than 500 deaths", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 13:
|
|
|
|
print( -1, 11, "Last 5 seconds on the Super Gravitron", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 14:
|
|
|
|
print( -1, 11, "Last 10 seconds on the Super Gravitron", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 15:
|
|
|
|
print( -1, 11, "Last 15 seconds on the Super Gravitron", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 16:
|
|
|
|
print( -1, 11, "Last 20 seconds on the Super Gravitron", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 17:
|
|
|
|
print( -1, 11, "Last 30 seconds on the Super Gravitron", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 18:
|
|
|
|
print( -1, 11, "Last 1 minute on the Super Gravitron", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
case 20:
|
|
|
|
print( -1, 6, "MASTER OF THE UNIVERSE", temp, temp2, temp3, true);
|
|
|
|
print( -1, 16, "Complete the game in no death mode", temp, temp2, temp3, true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawsprite(x:int, y:int, t:int, r:int, g:int, b:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
sprites[t].color = RGB(r, g, b);
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(sprites[t], tposition);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textbox_drawsprite(x:int, y:int, t:int, r:int, g:int, b:int):void {
|
|
|
|
trace("dwgfx.textbox_drawsprite() is not implemented yet");
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawgravityline(t:int, obj:entityclass):void {
|
|
|
|
if (obj.entities[t].life == 0) {
|
|
|
|
switch(linestate) {
|
2022-12-02 18:19:58 +01:00
|
|
|
case 0: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 200 - 20, 200 - 20, 200 - 20); break;
|
|
|
|
case 1: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 225 - 30, 245 - 30, 245 - 30); break;
|
|
|
|
case 2: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 245 - 30, 245 - 30, 225 - 30); break;
|
|
|
|
case 3: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 164 - 10, 200 - 20, 200 - 20); break;
|
|
|
|
case 4: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 224 - 20, 255 - 30, 196 - 20); break;
|
|
|
|
case 5: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 205 - 20, 235 - 30, 196 - 20); break;
|
|
|
|
case 6: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 164 - 10, 164 - 10, 164 - 10); break;
|
|
|
|
case 7: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 225 - 30, 245 - 30, 205 - 20); break;
|
|
|
|
case 8: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 205 - 20, 255 - 30, 225 - 30); break;
|
|
|
|
case 9: drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 245 - 30, 245 - 30, 245 - 30); break;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(line_rect.x, line_rect.y, line_rect.width, line_rect.height, 96, 96, 96);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawentities(map:mapclass, obj:entityclass, help:helpclass):void {
|
|
|
|
//Update line colours!
|
|
|
|
if (linedelay <= 0) {
|
|
|
|
linestate++;
|
|
|
|
if (linestate >= 10) linestate = 0;
|
|
|
|
linedelay = 2;
|
|
|
|
}else {
|
|
|
|
linedelay--;
|
|
|
|
}
|
|
|
|
|
|
|
|
var j:int, k:int;
|
|
|
|
for (var i:int = obj.nentity - 1; i >= 0; i--) {
|
|
|
|
if (!obj.entities[i].invis && obj.entities[i].active) {
|
|
|
|
if (obj.entities[i].size == 0) { // Sprites
|
|
|
|
if (flipmode) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
2020-01-01 21:29:24 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
flipsprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
if (map.warpx) {
|
|
|
|
//screenwrapping!
|
|
|
|
if (tpoint.x < 0) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) + 320, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
if (tpoint.x > 300) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) - 320, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if (map.warpy) {
|
|
|
|
if (tpoint.y < 0) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp) + 230);
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
if (tpoint.y > 210) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp) - 230);
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
}else {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
2020-01-01 21:29:24 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
sprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
if (map.warpx) {
|
|
|
|
//screenwrapping!
|
|
|
|
if (tpoint.x < 0) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) + 320, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
if (tpoint.x > 300) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) - 320, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if (map.warpy) {
|
|
|
|
if (tpoint.y < 0) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp) + 230);
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
if (tpoint.y > 210) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp) - 230);
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else if (obj.entities[i].size == 1) { // Tiles
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].size == 2) { // Special: Moving platform, 4 tiles
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
|
|
|
if (map.custommode) {
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp) + 8, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp) + 16, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition)
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp) + 24, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition)
|
|
|
|
}else {
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp) + 8, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp) + 16, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition)
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp) + 24, int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition)
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if (obj.entities[i].size == 3) { // Big chunky pixels!
|
2022-12-02 18:19:58 +01:00
|
|
|
prect.x = int(obj.entities[i].xp); prect.y = int(obj.entities[i].yp);
|
2020-01-01 21:29:24 +01:00
|
|
|
//A seperate index of colours, for simplicity
|
2022-12-02 18:19:58 +01:00
|
|
|
if (obj.entities[i].colour == 1) {
|
|
|
|
drawfillrect(prect.x, prect.y, prect.width, prect.height, 196 - (Math.random() * 64), 10, 10);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].colour == 2) {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(prect.x, prect.y, prect.width, prect.height, 160 - help.glow / 2 - (Math.random() * 20), 200 - help.glow / 2, 220 - help.glow);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if (obj.entities[i].size == 4) { // Small pickups
|
2022-12-02 18:19:58 +01:00
|
|
|
drawhuetile(int(obj.entities[i].xp), int(obj.entities[i].yp), obj.entities[i].tile, obj.entities[i].colour);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].size == 5) { //Horizontal Line
|
2022-12-02 18:19:58 +01:00
|
|
|
line_rect.x = int(obj.entities[i].xp); line_rect.y = int(obj.entities[i].yp);
|
2020-01-01 21:29:24 +01:00
|
|
|
line_rect.width = obj.entities[i].w; line_rect.height = 1;
|
|
|
|
drawgravityline(i, obj);
|
|
|
|
}else if (obj.entities[i].size == 6) { //Vertical Line
|
2022-12-02 18:19:58 +01:00
|
|
|
line_rect.x = int(obj.entities[i].xp); line_rect.y = int(obj.entities[i].yp);
|
2020-01-01 21:29:24 +01:00
|
|
|
line_rect.width = 1; line_rect.height = obj.entities[i].h;
|
|
|
|
drawgravityline(i, obj);
|
|
|
|
}else if (obj.entities[i].size == 7) { //Teleporter
|
2022-12-02 18:19:58 +01:00
|
|
|
drawtele(int(obj.entities[i].xp), int(obj.entities[i].yp), obj.entities[i].drawframe, obj.entities[i].colour, help);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].size == 8) { // Special: Moving platform, 8 tiles
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
2020-01-01 21:29:24 +01:00
|
|
|
if (map.custommode) {
|
2022-12-02 18:19:58 +01:00
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 8), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 16), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 24), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 32), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 40), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 48), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 56), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(entcolours[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 8), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 16), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 24), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 32), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 40), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 48), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
|
|
|
tposition.identity(); tposition.translate(int(obj.entities[i].xp + 56), int(obj.entities[i].yp));
|
|
|
|
backbuffer.draw(tiles[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if (obj.entities[i].size == 9) { // Really Big Sprite! (2x2)
|
|
|
|
if (flipmode) {
|
2022-12-02 18:19:58 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
|
|
|
flipsprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) + 32, int(obj.entities[i].yp));
|
|
|
|
flipsprites[obj.entities[i].drawframe + 1].color = ct.color;
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe + 1], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp) + 32);
|
|
|
|
flipsprites[obj.entities[i].drawframe + 12].color = ct.color;
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe + 12], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) + 32, int(obj.entities[i].yp) + 32);
|
|
|
|
flipsprites[obj.entities[i].drawframe + 13].color = ct.color;
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe + 13], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
|
|
|
sprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) + 32, int(obj.entities[i].yp));
|
|
|
|
sprites[obj.entities[i].drawframe + 1].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe + 1], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp) + 32);
|
|
|
|
sprites[obj.entities[i].drawframe + 12].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe + 12], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) + 32, int(obj.entities[i].yp) + 32);
|
|
|
|
sprites[obj.entities[i].drawframe + 13].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe + 13], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if (obj.entities[i].size == 10) { // 2x1 Sprite
|
|
|
|
if (flipmode) {
|
2022-12-02 18:19:58 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
|
|
|
flipsprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) + 32, int(obj.entities[i].yp));
|
|
|
|
flipsprites[obj.entities[i].drawframe + 1].color = ct.color;
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe + 1], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
|
|
|
sprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int(obj.entities[i].xp) + 32, int(obj.entities[i].yp));
|
|
|
|
sprites[obj.entities[i].drawframe + 1].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe + 1], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else if (obj.entities[i].size == 11) { //The fucking elephant
|
2022-12-02 18:19:58 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
|
|
|
images[3].color = ct.color;
|
|
|
|
drawimage(3, int(obj.entities[i].xp), int(obj.entities[i].yp));
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].size == 12) { // Regular sprites that don't wrap
|
|
|
|
if (flipmode) {
|
|
|
|
//forget this for a minute;
|
2022-12-02 18:19:58 +01:00
|
|
|
tpoint.x = int(obj.entities[i].xp); tpoint.y = int(obj.entities[i].yp);
|
2020-01-01 21:29:24 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
flipsprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(tpoint.x, tpoint.y);
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
//if we're outside the screen, we need to draw indicators
|
|
|
|
if (obj.entities[i].xp < -20 && obj.entities[i].vx > 0) {
|
|
|
|
if (obj.entities[i].xp < -100) {
|
|
|
|
tpoint.x = -5 + (int(( -obj.entities[i].xp) / 10));
|
|
|
|
}else{
|
|
|
|
tpoint.x = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
tpoint.y = tpoint.y+4;
|
|
|
|
setcol(23, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
tiles[1167].color = ct.color;
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(tpoint.x, tpoint.y);
|
|
|
|
|
|
|
|
backbuffer.draw(tiles[1167], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].xp > 340 && obj.entities[i].vx < 0) {
|
|
|
|
if (obj.entities[i].xp > 420) {
|
|
|
|
tpoint.x = 320 - (int(( obj.entities[i].xp-320) / 10));
|
|
|
|
}else{
|
|
|
|
tpoint.x = 310;
|
|
|
|
}
|
|
|
|
|
|
|
|
tpoint.y = tpoint.y+4;
|
|
|
|
setcol(23, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
tiles[1166].color = ct.color;
|
|
|
|
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(tpoint.x, tpoint.y);
|
|
|
|
|
|
|
|
backbuffer.draw(tiles[1166], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
tpoint.x = int(obj.entities[i].xp); tpoint.y = int(obj.entities[i].yp);
|
2020-01-01 21:29:24 +01:00
|
|
|
setcol(obj.entities[i].colour, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
sprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(tpoint.x, tpoint.y);
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
//if we're outside the screen, we need to draw indicators
|
|
|
|
|
|
|
|
if (obj.entities[i].xp < -20 && obj.entities[i].vx > 0) {
|
|
|
|
if (obj.entities[i].xp < -100) {
|
|
|
|
tpoint.x = -5 + (int(( -obj.entities[i].xp) / 10));
|
|
|
|
}else{
|
|
|
|
tpoint.x = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
tpoint.y = tpoint.y+4;
|
|
|
|
setcol(23, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
tiles[1167].color = ct.color;
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(tpoint.x, tpoint.y);
|
|
|
|
|
|
|
|
backbuffer.draw(tiles[1167], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else if (obj.entities[i].xp > 340 && obj.entities[i].vx < 0) {
|
|
|
|
if (obj.entities[i].xp > 420) {
|
|
|
|
tpoint.x = 320 - (int(( obj.entities[i].xp-320) / 10));
|
|
|
|
}else{
|
|
|
|
tpoint.x = 310;
|
|
|
|
}
|
|
|
|
|
|
|
|
tpoint.y = tpoint.y+4;
|
|
|
|
setcol(23, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
tiles[1166].color = ct.color;
|
|
|
|
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(tpoint.x, tpoint.y);
|
|
|
|
|
|
|
|
backbuffer.draw(tiles[1166], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}else if (obj.entities[i].size == 13) { // Special for epilogue: huge hero!
|
|
|
|
if (flipmode) {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(6, 6);
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
setcol(obj.entities[i].colour, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
flipsprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(flipsprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(6, 6);
|
|
|
|
tposition.translate(int(obj.entities[i].xp), int(obj.entities[i].yp));
|
2020-01-01 21:29:24 +01:00
|
|
|
|
|
|
|
setcol(obj.entities[i].colour, help);
|
2022-12-02 18:19:58 +01:00
|
|
|
sprites[obj.entities[i].drawframe].color = ct.color;
|
|
|
|
backbuffer.draw(sprites[obj.entities[i].drawframe], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawbuffertile(x:int, y:int, t:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
trace("dwgfx.drawbuffertile() is not implemented yet");
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawforetile(x:int, y:int, t:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
frontbuffer_meshbatch.addMesh(tiles[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawforetile2(x:int, y:int, t:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
frontbuffer_meshbatch.addMesh(tiles2[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawforetile3(x:int, y:int, t:int, off:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
frontbuffer_meshbatch.addMesh(tiles3[t+(off*30)], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtele(x:int, y:int, t:int, c:int, help:helpclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tele[0].color = RGB(16, 16, 16);
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(tele[0], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
setcol(c, help);
|
2020-01-01 21:29:24 +01:00
|
|
|
if (t > 9) t = 8; if (t < 0) t = 0;
|
2022-12-02 18:19:58 +01:00
|
|
|
tele[t].color = ct.color;
|
|
|
|
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(tele[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtile(x:int, y:int, t:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(tiles[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtile2(x:int, y:int, t:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(tiles2[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtile3(x:int, y:int, t:int, off:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(tiles3[t + (off * 30)], tposition);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtile3_batch(x:int, y:int, t:int, off:int):void {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
towerbufferforeground_meshbatch.addMesh(tiles3[t + (off * 30)], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtowertile3(x:int, y:int, t:int, off:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
towerbufferbackground_meshbatch.addMesh(tiles3[t+(off*30)], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawtowertile(x:int, y:int, t:int):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(tiles2[t], tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawmap(map:mapclass):void {
|
|
|
|
if (!foregrounddrawn) {
|
2022-12-02 18:19:58 +01:00
|
|
|
frontbuffer_meshbatch.clear();
|
2020-01-01 21:29:24 +01:00
|
|
|
if(map.tileset==0){
|
|
|
|
for (j = 0; j < 29+map.extrarow; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
if(map.contents[i + map.vmult[j]]>0) drawforetile(i * 8, j * 8, map.contents[i + map.vmult[j]]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else if (map.tileset == 1) {
|
|
|
|
for (j = 0; j < 29+map.extrarow; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
if(map.contents[i + map.vmult[j]]>0) drawforetile2(i * 8, j * 8, map.contents[i + map.vmult[j]]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else if (map.tileset == 2) {
|
|
|
|
for (j = 0; j < 29+map.extrarow; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
if(map.contents[i + map.vmult[j]]>0) drawforetile3(i * 8, j * 8, map.contents[i + map.vmult[j]],map.rcol);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
foregrounddrawn = true;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
backbuffer.draw(frontbuffer_meshbatch);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawfinalmap(map:mapclass):void {
|
|
|
|
//Update colour cycling for final level
|
|
|
|
if (map.final_colormode) {
|
|
|
|
map.final_aniframedelay--;
|
2022-12-02 18:19:58 +01:00
|
|
|
if (map.final_aniframedelay == 0) foregrounddrawn = false;
|
2020-01-01 21:29:24 +01:00
|
|
|
if (map.final_aniframedelay <= 0) {
|
|
|
|
map.final_aniframedelay = 2;
|
|
|
|
map.final_aniframe++;
|
|
|
|
if (map.final_aniframe >= 4) map.final_aniframe = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!foregrounddrawn) {
|
2022-12-02 18:19:58 +01:00
|
|
|
frontbuffer_meshbatch.clear();
|
2020-01-01 21:29:24 +01:00
|
|
|
if(map.tileset==0){
|
2022-12-02 18:19:58 +01:00
|
|
|
for (j = 0; j < 29 + map.extrarow; j++) {
|
2020-01-01 21:29:24 +01:00
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
if(map.contents[i + map.vmult[j]]>0) drawforetile(i * 8, j * 8, map.finalat(i,j));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else if (map.tileset == 1) {
|
|
|
|
for (j = 0; j < 29+map.extrarow; j++) {
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
|
|
if(map.contents[i + map.vmult[j]]>0) drawforetile2(i * 8, j * 8, map.finalat(i,j));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
foregrounddrawn=true;
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
backbuffer.draw(frontbuffer_meshbatch);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawmaptileat(xp:int, yp:int, mapx:int, mapy:int, map:mapclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
//Not used anymore, phew
|
|
|
|
trace("dwgfx.drawmaptileat() is not implemented yet");
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function drawminimap(game:gameclass, map:mapclass):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
//Not used anymore, phew
|
|
|
|
trace("dwgfx.drawminimap() is not implemented yet");
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
public function drawrect(x:int, y:int, w:int, h:int, r:int, g:int, b:int):void {
|
|
|
|
//Draw the retangle indicated by that object
|
2022-12-02 18:19:58 +01:00
|
|
|
tquad.x = x; tquad.y = y;
|
|
|
|
tquad.width = w; tquad.height = 1;
|
|
|
|
tquad.color = RGB(r, g, b);
|
|
|
|
backbuffer.draw(tquad);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tquad.width = 1; tquad.height = h;
|
|
|
|
backbuffer.draw(tquad);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
tquad.x = x + w - 1;
|
|
|
|
backbuffer.draw(tquad);
|
|
|
|
|
|
|
|
tquad.x = x; tquad.y = y + h - 1;
|
|
|
|
tquad.width = w; tquad.height = 1;
|
|
|
|
backbuffer.draw(tquad);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function cls(c:int):void {
|
|
|
|
drawfillrect(0, 0, screenwidth, screenheight, c);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function drawfillrect(x:int, y:int, w:int, h:int, r:int, g:int = -1, b:int = -1):void {
|
|
|
|
//Draw the retangle indicated by that object
|
|
|
|
tquad.x = x;
|
|
|
|
tquad.y = y;
|
|
|
|
tquad.width = w;
|
|
|
|
tquad.height = h;
|
|
|
|
if (b == -1) {
|
|
|
|
tquad.color = r;
|
|
|
|
}else{
|
|
|
|
tquad.color = RGB(r, g, b);
|
|
|
|
}
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
backbuffer.draw(tquad);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function drawfillrect_onimage(img:RenderTexture, x:int, y:int, w:int, h:int, r:int, g:int = -1, b:int = -1):void {
|
2020-01-01 21:29:24 +01:00
|
|
|
//Draw the retangle indicated by that object
|
2022-12-02 18:19:58 +01:00
|
|
|
tquad.x = x;
|
|
|
|
tquad.y = y;
|
|
|
|
tquad.width = w;
|
|
|
|
tquad.height = h;
|
|
|
|
if (b == -1) {
|
|
|
|
tquad.color = r;
|
|
|
|
}else{
|
|
|
|
tquad.color = RGB(r, g, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
img.draw(tquad);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function printcrewname(x:int, y:int, t:int):void {
|
|
|
|
//Print the name of crew member t in the right colour
|
|
|
|
switch(t) {
|
|
|
|
case 0: print(x, y, "Viridian", 16, 240, 240); break;
|
|
|
|
case 1: print(x, y, "Violet", 240, 16, 240); break;
|
|
|
|
case 2: print(x, y, "Vitellary", 240, 240, 16); break;
|
|
|
|
case 3: print(x, y, "Vermilion", 240, 16, 16); break;
|
|
|
|
case 4: print(x, y, "Verdigris", 16, 240, 16); break;
|
|
|
|
case 5: print(x, y, "Victoria", 16, 16, 240); break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function printcrewnamestatus(x:int, y:int, t:int):void {
|
|
|
|
//Print the status of crew member t in the right colour
|
|
|
|
switch(t) {
|
|
|
|
case 0: print(x, y, "(that's you!)", 12, 140, 140); break;
|
|
|
|
case 1: print(x, y, "Rescued!", 140, 12, 140); break;
|
|
|
|
case 2: print(x, y, "Rescued!", 140, 140, 12); break;
|
|
|
|
case 3: print(x, y, "Rescued!", 140, 12, 12); break;
|
|
|
|
case 4: print(x, y, "Rescued!", 12, 140, 12); break;
|
|
|
|
case 5: print(x, y, "Rescued!", 12, 12, 140); break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function printcrewnamedark(x:int, y:int, t:int):void {
|
|
|
|
//Print the name of crew member t as above, but in black and white
|
|
|
|
switch(t) {
|
|
|
|
case 0: print(x, y, "Viridian", 128,128,128); break;
|
|
|
|
case 1: print(x, y, "Violet", 128,128,128); break;
|
|
|
|
case 2: print(x, y, "Vitellary", 128,128,128); break;
|
|
|
|
case 3: print(x, y, "Vermilion", 128,128,128); break;
|
|
|
|
case 4: print(x, y, "Verdigris", 128,128,128); break;
|
|
|
|
case 5: print(x, y, "Victoria", 128,128,128); break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function printmask(x:int, y:int, t:String, cen:Boolean = false):void {
|
|
|
|
trace("dwgfx.printmask() is not implemented yet");
|
|
|
|
}
|
|
|
|
|
|
|
|
public function textbox_print(x:int, y:int, t:String, r:int, g:int, b:int, cen:Boolean = false):void {
|
|
|
|
trace("dwgfx.textbox_print() is not implemented yet");
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function print(x:int, y:int, t:String, r:int, g:int, b:int, cen:Boolean = false):void {
|
|
|
|
if (r < 0) r = 0; if (g < 0) g = 0; if (b < 0) b = 0;
|
|
|
|
if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255;
|
2022-12-02 18:19:58 +01:00
|
|
|
if (cen) {
|
|
|
|
x = 0;
|
|
|
|
ttf.format.horizontalAlign = "center";
|
|
|
|
}else {
|
|
|
|
ttf.format.horizontalAlign = "left";
|
|
|
|
}
|
|
|
|
|
|
|
|
ttf.format.color = RGB(r, g, b);
|
|
|
|
ttf.text = t;
|
|
|
|
|
|
|
|
if (flipmode) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(1, -1);
|
|
|
|
tposition.translate(x, y + 8);
|
|
|
|
backbuffer.draw(ttf, tposition);
|
|
|
|
}else{
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(ttf, tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function rprint(x:int, y:int, t:String, r:int, g:int, b:int, cen:Boolean = false):void {
|
|
|
|
if (r < 0) r = 0; if (g < 0) g = 0; if (b < 0) b = 0;
|
|
|
|
if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255;
|
2022-12-02 18:19:58 +01:00
|
|
|
ttf.format.horizontalAlign = "right";
|
|
|
|
x = x - 320;
|
|
|
|
|
|
|
|
ttf.format.color = RGB(r, g, b);
|
|
|
|
ttf.text = t;
|
|
|
|
|
|
|
|
if (flipmode) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(1, -1);
|
|
|
|
tposition.translate(x, y + 8);
|
|
|
|
backbuffer.draw(ttf, tposition);
|
|
|
|
}else {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(ttf, tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function printoff(x:int, y:int, t:String, r:int, g:int, b:int, cen:Boolean = false):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
if (r < 0) r = 0; if (g < 0) g = 0; if (b < 0) b = 0;
|
2020-01-01 21:29:24 +01:00
|
|
|
if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255;
|
2022-12-02 18:19:58 +01:00
|
|
|
if (cen) {
|
|
|
|
ttf.format.horizontalAlign = "center";
|
|
|
|
}else {
|
|
|
|
ttf.format.horizontalAlign = "left";
|
|
|
|
}
|
|
|
|
|
|
|
|
ttf.format.color = RGB(r, g, b);
|
|
|
|
ttf.text = t;
|
|
|
|
|
|
|
|
if (flipmode) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(1, -1);
|
|
|
|
tposition.translate(x, y + 8);
|
|
|
|
backbuffer.draw(ttf, tposition);
|
|
|
|
}else {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(ttf, tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public function bprint(x:int, y:int, t:String, r:int, g:int, b:int, cen:Boolean = false):void {
|
2020-01-01 21:29:24 +01:00
|
|
|
//printmask(x, y, t, cen);
|
|
|
|
print(x, y - 1, t, 0, 0, 0, cen);
|
|
|
|
if (cen) {
|
|
|
|
printoff(-1, y, t, 0, 0, 0, cen); //kludge :i
|
|
|
|
printoff(1, y, t, 0, 0, 0, cen);
|
|
|
|
}else{
|
|
|
|
print(x-1, y, t, 0, 0, 0, cen);
|
|
|
|
print(x+1, y, t, 0, 0, 0, cen);
|
|
|
|
}
|
|
|
|
print(x, y+1, t, 0, 0, 0, cen);
|
|
|
|
|
|
|
|
print(x, y, t, r, g, b, cen);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function printmasktemptile(x:int, y:int, t:String, cen:Boolean = false):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
trace("dwgfx.printmasktemptile() is not implemented yet");
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function printtemptile(x:int, y:int, t:String, r:int, g:int, b:int, cen:Boolean = false):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
trace("dwgfx.printtemptile() is not implemented yet");
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function onscreen(t:int):Boolean {
|
|
|
|
if (t >= -40 && t <= 280) return true;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function bigrprint(x:int, y:int, t:String, r:int, g:int, b:int, cen:Boolean = false, sc:Number = 2):void {
|
|
|
|
if (r < 0) r = 0; if (g < 0) g = 0; if (b < 0) b = 0;
|
|
|
|
if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255;
|
2022-12-02 18:19:58 +01:00
|
|
|
ttf.format.horizontalAlign = "right";
|
|
|
|
x = x - 320;
|
|
|
|
|
|
|
|
ttf.format.color = RGB(r, g, b);
|
|
|
|
ttf.format.size = BitmapFont.NATIVE_SIZE * sc;
|
|
|
|
ttf.text = t;
|
|
|
|
|
|
|
|
if (flipmode) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(1, -1);
|
|
|
|
tposition.translate(x, y + (8 * sc));
|
|
|
|
backbuffer.draw(ttf, tposition);
|
|
|
|
}else {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(ttf, tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
ttf.format.size = BitmapFont.NATIVE_SIZE;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function bigprint(x:int, y:int, t:String, r:int, g:int, b:int, cen:Boolean = false, sc:Number = 2):void {
|
2022-12-02 18:19:58 +01:00
|
|
|
if (r < 0) r = 0; if (g < 0) g = 0; if (b < 0) b = 0;
|
2020-01-01 21:29:24 +01:00
|
|
|
if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255;
|
2022-12-02 18:19:58 +01:00
|
|
|
if (cen) {
|
|
|
|
x = 0;
|
|
|
|
ttf.format.horizontalAlign = "center";
|
|
|
|
}else {
|
|
|
|
ttf.format.horizontalAlign = "left";
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
ttf.format.color = RGB(r, g, b);
|
|
|
|
ttf.format.size = BitmapFont.NATIVE_SIZE * sc;
|
|
|
|
ttf.text = t;
|
|
|
|
|
|
|
|
if (flipmode) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(1, -1);
|
|
|
|
tposition.translate(x, y + (8 * sc));
|
|
|
|
backbuffer.draw(ttf, tposition);
|
|
|
|
}else {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(x, y);
|
|
|
|
backbuffer.draw(ttf, tposition);
|
|
|
|
}
|
|
|
|
|
|
|
|
ttf.format.size = BitmapFont.NATIVE_SIZE;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function len(t:String):int {
|
2022-12-02 18:19:58 +01:00
|
|
|
//For VVVVVV, we're using a fixed width font, so...
|
|
|
|
return t.length * 8;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function flashlight():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
drawfillrect(0, 0, 320, 240, 187, 187, 187);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function screenshake():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
screenmenubuffer.draw(smallscreen);
|
|
|
|
|
|
|
|
if (flipmode) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(1, -1);
|
|
|
|
tposition.translate(int((Math.random() * 7) - 4), screenheight + int((Math.random() * 7) - 4));
|
|
|
|
drawfillrect(0, 0, screenwidth, screenheight, 0, 0, 0);
|
|
|
|
backbuffer.draw(screenmenubuffer_image, tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else{
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(int((Math.random() * 7) - 4), int((Math.random() * 7) - 4));
|
|
|
|
|
|
|
|
backbuffer.draw(screenmenubuffer_image, tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function render():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
if (flipmode) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(1, -1);
|
|
|
|
tposition.translate(0, screenheight);
|
|
|
|
|
|
|
|
screenmenubuffer.drawBundled(function():void {
|
|
|
|
screenmenubuffer.draw(smallscreen);
|
|
|
|
});
|
|
|
|
|
|
|
|
backbuffer.draw(screenmenubuffer_image, tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
2022-12-02 18:19:58 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function clear_menubuffer():void {
|
|
|
|
tquad.x = 0; tquad.y = 0;
|
|
|
|
tquad.width = screenwidth;
|
|
|
|
tquad.height = screenheight;
|
|
|
|
tquad.color = RGB(0, 0, 0);
|
2020-01-01 21:29:24 +01:00
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
menubuffer.drawBundled(function():void {
|
|
|
|
menubuffer.draw(tquad);
|
|
|
|
});
|
|
|
|
screenmenubuffer.drawBundled(function():void {
|
|
|
|
screenmenubuffer.draw(tquad);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setup_menubuffer():void {
|
|
|
|
menubuffer.draw(smallscreen);
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function menuoffrender():void {
|
2022-12-02 18:19:58 +01:00
|
|
|
//The backbuffer currently contains the menu, so we save this...
|
|
|
|
screenmenubuffer.draw(smallscreen);
|
|
|
|
|
|
|
|
//Then we draw the old in-game screen instead
|
|
|
|
backbuffer.draw(menubuffer_image);
|
|
|
|
|
|
|
|
//Finally, we draw the menu back on top of this, offset.
|
|
|
|
if (flipmode) {
|
|
|
|
tposition.identity();
|
|
|
|
tposition.scale(1, -1);
|
|
|
|
tposition.translate(0, screenheight + menuoffset);
|
|
|
|
backbuffer.draw(screenmenubuffer_image, tposition);
|
2020-01-01 21:29:24 +01:00
|
|
|
}else {
|
2022-12-02 18:19:58 +01:00
|
|
|
tposition.identity();
|
|
|
|
tposition.translate(0, menuoffset);
|
|
|
|
backbuffer.draw(screenmenubuffer_image, tposition);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public var tquad:Quad;
|
|
|
|
public var ttf:TextField;
|
|
|
|
public var tposition:Matrix;
|
|
|
|
public var starlingassets:AssetManager;
|
|
|
|
public var starstage:Stage
|
|
|
|
|
|
|
|
public var backgrounds:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var images:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var playerlevelimages:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var mobileimages:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var tele:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var tiles:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var tiles2:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var tiles3:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var sprites:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var flipsprites:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var sprites_bitmap:Vector.<BitmapData> = new Vector.<BitmapData>;
|
|
|
|
public var flipsprites_bitmap:Vector.<BitmapData> = new Vector.<BitmapData>;
|
|
|
|
public var entcolours:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var customminimap:RenderTexture;
|
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
public var cur:int;
|
|
|
|
public var ct:ColorTransform;
|
|
|
|
public var tiles_rect:Rectangle;
|
|
|
|
public var sprites_rect:Rectangle;
|
|
|
|
public var bfont_rect:Rectangle;
|
|
|
|
public var bfontmask_rect:Rectangle;
|
|
|
|
public var images_rect:Rectangle;
|
|
|
|
public var tl:Point; //The point at (0,0)
|
|
|
|
public var bg_rect:Rectangle, prect:Rectangle;
|
|
|
|
public var line_rect:Rectangle;
|
|
|
|
|
|
|
|
public var temp:int;
|
|
|
|
public var temp2:int;
|
|
|
|
public var temp3:int;
|
|
|
|
public var tempstring:String;
|
|
|
|
public var alphamult:uint;
|
|
|
|
public var stemp:String;
|
|
|
|
public var i:int, j:int, k:int, m:int;
|
|
|
|
public var tpoint:Point, trect:Rectangle;
|
|
|
|
public var madrect:Rectangle, madpoint:Point;
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public var temptile:RenderTexture;
|
|
|
|
public var tempsprite:RenderTexture;
|
2020-01-01 21:29:24 +01:00
|
|
|
public var footerrect:Rectangle;
|
2022-12-02 18:19:58 +01:00
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
//Actual backgrounds
|
2022-12-02 18:19:58 +01:00
|
|
|
public var backbuffer:RenderTexture;
|
|
|
|
public var frontbuffer_meshbatch:MeshBatch;
|
|
|
|
public var menubuffer:RenderTexture;
|
|
|
|
public var menubuffer_image:Image;
|
|
|
|
public var screenmenubuffer:RenderTexture;
|
|
|
|
public var screenmenubuffer_image:Image;
|
|
|
|
public var towerbufferforeground_meshbatch:MeshBatch;
|
|
|
|
public var towerbufferbackground_meshbatch:MeshBatch;
|
|
|
|
public var towerbufferstatic_meshbatch:MeshBatch;
|
|
|
|
public var warpzonehorizontal_meshbatch:MeshBatch;
|
|
|
|
public var warpzonevertical_meshbatch:MeshBatch;
|
|
|
|
public var screen:Image;
|
|
|
|
public var smallscreen:Image;
|
2020-01-01 21:29:24 +01:00
|
|
|
public var updatebackground:Boolean;
|
2022-12-02 18:19:58 +01:00
|
|
|
|
2020-01-01 21:29:24 +01:00
|
|
|
//Textbox Stuff
|
|
|
|
public var ntextbox:int;
|
|
|
|
public var textbox:Vector.<textboxclass> = new Vector.<textboxclass>;
|
|
|
|
//Cutscene bars
|
|
|
|
public var showcutscenebars:Boolean;
|
|
|
|
public var cutscenebarspos:int;
|
|
|
|
//Background Stuff
|
|
|
|
public var stars:Vector.<Rectangle> = new Vector.<Rectangle>;
|
|
|
|
public var starsspeed:Vector.<int> = new Vector.<int>;
|
|
|
|
|
|
|
|
//special for weird lab rooms
|
|
|
|
public var spcol:int, spcoldel:int;
|
|
|
|
//Menu stuff
|
|
|
|
public var crewframe:int, crewframedelay:int;
|
|
|
|
public var menuoffset:int, resumegamemode:Boolean;
|
|
|
|
//More Background Stuff
|
|
|
|
public var backboxes:Vector.<Rectangle> = new Vector.<Rectangle>;
|
|
|
|
public var backboxvx:Vector.<int> = new Vector.<int>;
|
|
|
|
public var backboxvy:Vector.<int> = new Vector.<int>;
|
|
|
|
public var backboxint:Vector.<Number> = new Vector.<Number>;
|
|
|
|
public var bcol:int, bcol2:int, rcol:int;
|
|
|
|
public var backboxrect:Rectangle;
|
|
|
|
public var linestate:int, linedelay:int;
|
|
|
|
public var backoffset:int, backgrounddrawn:Boolean;
|
|
|
|
public var foregrounddrawn:Boolean;
|
|
|
|
|
|
|
|
public var warpskip:int;
|
|
|
|
public var warpfcol:int, warpbcol:int;
|
|
|
|
public var warprect:Rectangle;
|
|
|
|
//Fade effect
|
|
|
|
public var fademode:int;
|
|
|
|
public var fadeamount:int;
|
|
|
|
public var fadebars:Vector.<int> = new Vector.<int>;
|
|
|
|
//Single trinket colour
|
|
|
|
public var trinketcolset:Boolean, trinketr:int, trinketg:int, trinketb:int;
|
|
|
|
//Flipmode Stuff
|
|
|
|
public var flipmode:Boolean, setflipmode:Boolean;
|
|
|
|
public var flipmatrix:Matrix = new Matrix();
|
|
|
|
public var flipfontmatrix:Matrix = new Matrix();
|
|
|
|
public var flipfontmatrix2:Matrix = new Matrix();
|
|
|
|
|
|
|
|
//Mobile stuff
|
|
|
|
public var screensizemultiplier:Number;
|
|
|
|
|
|
|
|
public var screenoffx:int, screenoffy:int;
|
|
|
|
|
2022-12-02 18:19:58 +01:00
|
|
|
public var buttonsready:Boolean = false;
|
|
|
|
public var button_texture:Vector.<RenderTexture> = new Vector.<RenderTexture>;
|
|
|
|
public var button_image:Vector.<Image> = new Vector.<Image>;
|
|
|
|
public var button_image_width:Vector.<int> = new Vector.<int>;
|
|
|
|
public var button_image_height:Vector.<int> = new Vector.<int>;
|
2020-01-01 21:29:24 +01:00
|
|
|
public var buttonactive:Vector.<Boolean> = new Vector.<Boolean>;
|
|
|
|
public var buttonhighlight:Vector.<int> = new Vector.<int>;
|
|
|
|
|
|
|
|
public var buttonpos:Vector.<Point> = new Vector.<Point>;
|
|
|
|
public var currentbuttontype:Vector.<int> = new Vector.<int>;
|
|
|
|
public var newbuttontype:Vector.<int> = new Vector.<int>;
|
|
|
|
public var buttonstate:Vector.<int> = new Vector.<int>;
|
|
|
|
public var buttonlerp:Vector.<int> = new Vector.<int>;
|
|
|
|
public var buttonframe:Vector.<int> = new Vector.<int>;
|
|
|
|
public var buttonsize:int, buttonyspacing:int, buttonxspacing:int, buttonydiff:int;
|
|
|
|
|
|
|
|
public var b_gap:int = 40, b_size:int = 26;
|
|
|
|
public var devicex:int, devicey:int;
|
2022-12-02 18:19:58 +01:00
|
|
|
|
|
|
|
[Embed(source = "../data/bitmapsprites.png")]
|
|
|
|
public static const img_bitmapsprites:Class;
|
|
|
|
|
|
|
|
[Embed(source = "../data/bitmapflipsprites.png")]
|
|
|
|
public static const img_bitmapflipsprites:Class;
|
2020-01-01 21:29:24 +01:00
|
|
|
}
|
|
|
|
}
|