mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-23 10:09:43 +01:00
72d018ea04
The android version just got a much needed update to fix some resolution issues on devices with cutouts. It turns out the mobile source was actually pretty out of date, like 3 versions out of date! This commit brings it up to date. All the changes have just been about keeping the game running on modern devices, though. The biggest change was adding the Starling library to the project, which made the game GPU powered and sped the whole thing up.
4019 lines
No EOL
140 KiB
ActionScript
4019 lines
No EOL
140 KiB
ActionScript
package {
|
|
import bigroom.input.KeyPoll;
|
|
import flash.geom.*;
|
|
|
|
public class entityclass {
|
|
static public var BLOCK:Number = 0;
|
|
static public var TRIGGER:Number = 1;
|
|
static public var DAMAGE:Number = 2;
|
|
static public var DIRECTIONAL:Number = 3;
|
|
static public var SAFE:Number = 4;
|
|
static public var ACTIVITY:Number = 5;
|
|
|
|
public var opt_useblock:Boolean;
|
|
public var opt_usetrigger:Boolean;
|
|
public var opt_usedamage:Boolean;
|
|
public var opt_usedirectional:Boolean;
|
|
public var opt_usesafe:Boolean;
|
|
public var opt_useactivity:Boolean;
|
|
|
|
public function init():void {
|
|
nentity = 0;
|
|
nblocks = 0;
|
|
temprect = new Rectangle();
|
|
temprect2 = new Rectangle();
|
|
colpoint1 = new Point; colpoint2 = new Point;
|
|
|
|
skipdirblocks = false;
|
|
customplatformtile=0;
|
|
platformtile = 0; vertplatforms = false; horplatforms = false;
|
|
|
|
nearelephant = false;
|
|
upsetmode = false; upset = 0;
|
|
|
|
trophytext = 0 ; trophytype = 0;
|
|
altstates = 0;
|
|
|
|
for (var i:int = 0; i < 6; i++) {
|
|
customcrewmoods.push(1);
|
|
}
|
|
|
|
for (i = 0; i < 100; i++) {
|
|
var t:int = 0; flags.push(t);
|
|
}
|
|
|
|
for (i = 0; i < 500; i++) {
|
|
var block:blockclass = new blockclass;
|
|
blocks.push(block);
|
|
}
|
|
|
|
for (var z:Number = 0; z < 200; z++) {
|
|
var entity:entclass = new entclass;
|
|
entities.push(entity);
|
|
}
|
|
|
|
for (i = 0; i < 20; i++) {
|
|
var lcross:entclass = new entclass;
|
|
linecrosskludge.push(lcross);
|
|
collect.push(new int);
|
|
customcollect.push(new int(0));
|
|
}
|
|
nlinecrosskludge = 0;
|
|
}
|
|
|
|
public function resetallflags():void {
|
|
for (var i:Number = 0; i < 100; i++) {
|
|
flags[i] = 0;
|
|
}
|
|
}
|
|
|
|
public function resetflags():void {
|
|
for (var i:Number = 0; i < 100; i++) {
|
|
if (flags[i] == 2) flags[i] = 0;
|
|
}
|
|
}
|
|
|
|
public function confirmflags():void {
|
|
for (var i:Number = 0; i < 100; i++) {
|
|
if (flags[i] == 2) flags[i] = 1;
|
|
}
|
|
}
|
|
|
|
public function changecollect(t:int, s:int):void {
|
|
collect[t] = s;
|
|
}
|
|
|
|
public function changecustomcollect(t:int, s:int):void {
|
|
customcollect[t] = s;
|
|
}
|
|
|
|
public function changeflag(t:int, s:int):void {
|
|
flags[t] = s;
|
|
}
|
|
|
|
public function fatal_top():void { createblock(DAMAGE, -8, -8, 384, 16); }
|
|
public function fatal_bottom():void { createblock(DAMAGE, -8, 224, 384, 16); }
|
|
public function fatal_left():void { createblock(DAMAGE, -8, -8, 16, 260); }
|
|
public function fatal_right():void { createblock(DAMAGE, 312, -8, 16, 260); }
|
|
|
|
public function setblockcolour(t:int, col:String):void {
|
|
if (col == "cyan") { blocks[t].r = 164; blocks[t].g = 164; blocks[t].b = 255;
|
|
}else if (col == "red") { blocks[t].r = 255; blocks[t].g = 60; blocks[t].b = 60;
|
|
}else if (col == "green") { blocks[t].r = 144; blocks[t].g = 255; blocks[t].b = 144;
|
|
}else if (col == "yellow") { blocks[t].r = 255; blocks[t].g = 255; blocks[t].b = 134;
|
|
}else if (col == "blue") { blocks[t].r = 95; blocks[t].g = 95; blocks[t].b = 255;
|
|
}else if (col == "purple") { blocks[t].r = 255; blocks[t].g = 134; blocks[t].b = 255;
|
|
}else if (col == "white") { blocks[t].r = 244; blocks[t].g = 244; blocks[t].b = 244;
|
|
}else if (col == "gray") { blocks[t].r = 174; blocks[t].g = 174; blocks[t].b = 174;
|
|
}else if (col == "orange") { blocks[t].r = 255; blocks[t].g = 130; blocks[t].b = 20;
|
|
}else {
|
|
//use a gray
|
|
blocks[t].r = 174; blocks[t].g = 174; blocks[t].b = 174;
|
|
}
|
|
}
|
|
|
|
public function swncolour(t:int):int {
|
|
//given colour t, return colour in setcol
|
|
if (t == 0) return 11;
|
|
if (t == 1) return 6;
|
|
if (t == 2) return 8;
|
|
if (t == 3) return 12;
|
|
if (t == 4) return 9;
|
|
if (t == 5) return 7;
|
|
return 0;
|
|
}
|
|
|
|
public function swnenemiescol(t:int):void {
|
|
//change the colour of all SWN enemies to the current one
|
|
for (i = 0; i < nentity; i++) {
|
|
if (entities[i].active) {
|
|
if (entities[i].type == 23) {
|
|
entities[i].colour = swncolour(t);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function gravcreate(game:gameclass, ypos:int, dir:int, xoff:int = 0, yoff:int = 0):void {
|
|
if (dir == 0) {
|
|
createentity(game, -150 - xoff, 58 + (ypos * 20)+yoff, 23, 0, 0);
|
|
}else{
|
|
createentity(game, 320+150 + xoff, 58 + (ypos * 20)+yoff, 23, 1, 0);
|
|
}
|
|
}
|
|
|
|
public function generateswnwave(game:gameclass, help:helpclass, t:int):void {
|
|
//generate a wave for the SWN game
|
|
if(game.swndelay<=0){
|
|
if (t == 0) { //game 0, survive for 30 seconds
|
|
switch(game.swnstate) {
|
|
case 0:
|
|
//Decide on a wave here
|
|
//default case
|
|
game.swnstate = 1; game.swndelay = 5;
|
|
|
|
if (game.swntimer <= 150) { //less than 5 seconds
|
|
game.swnstate = 9; game.swndelay = 8;
|
|
}else if (game.swntimer <= 300) { //less than 10 seconds
|
|
game.swnstate = 6; game.swndelay = 12;
|
|
}else if (game.swntimer <= 360) { //less than 12 seconds
|
|
game.swnstate = 5+game.swnstate2; game.swndelay = 15;
|
|
}else if (game.swntimer <= 420) { //less than 14 seconds
|
|
game.swnstate = 7+game.swnstate2; game.swndelay = 15;
|
|
}else if (game.swntimer <= 480) { //less than 16 seconds
|
|
game.swnstate = 5+game.swnstate2; game.swndelay = 15;
|
|
}else if (game.swntimer <= 540) { //less than 18 seconds
|
|
game.swnstate = 7+game.swnstate2; game.swndelay = 15;
|
|
}else if (game.swntimer <= 600) { //less than 20 seconds
|
|
game.swnstate = 5+game.swnstate2; game.swndelay = 15;
|
|
}else if (game.swntimer <= 900) { //less than 30 seconds
|
|
game.swnstate = 4; game.swndelay = 20;
|
|
}else if (game.swntimer <= 1050) { //less than 35 seconds
|
|
game.swnstate = 3; game.swndelay = 10;
|
|
}else if (game.swntimer <= 1200) { //less than 40 seconds
|
|
game.swnstate = 3; game.swndelay = 20;
|
|
}else if (game.swntimer <= 1500) { //less than 50 seconds
|
|
game.swnstate = 2; game.swndelay = 10;
|
|
}else if (game.swntimer <= 1650) { //less than 55 seconds
|
|
game.swnstate = 1; game.swndelay = 15;
|
|
}else if (game.swntimer <= 1800) { //less than 60 seconds
|
|
game.swnstate = 1; game.swndelay = 25;
|
|
}
|
|
|
|
if (game.deathcounts - game.swndeaths > 7) game.swndelay += 2;
|
|
if (game.deathcounts - game.swndeaths > 15) game.swndelay += 2;
|
|
if (game.deathcounts - game.swndeaths > 25) game.swndelay += 4;
|
|
break;
|
|
case 1:
|
|
createentity(game, -150, 58 + (int(Math.random() * 6) * 20), 23, 0, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
break;
|
|
case 2:
|
|
if(game.swnstate3==0){
|
|
game.swnstate2++;
|
|
if (game.swnstate2 >= 6) {
|
|
game.swnstate3 = 1;
|
|
game.swnstate2--;
|
|
}
|
|
}else {
|
|
game.swnstate2--;
|
|
if (game.swnstate2 < 0) {
|
|
game.swnstate3 = 0;
|
|
game.swnstate2++;
|
|
}
|
|
}
|
|
createentity(game, -150, 58 + (int(game.swnstate2) * 20), 23, 0, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
break;
|
|
case 3:
|
|
createentity(game, 320+150, 58 + (int(Math.random() * 6) * 20), 23, 1, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
break;
|
|
case 4:
|
|
//left and right compliments
|
|
game.swnstate2 = int(Math.random() * 6);
|
|
createentity(game, -150, 58 + (game.swnstate2 * 20), 23, 0, 0);
|
|
createentity(game, 320+150, 58 + ((5-game.swnstate2) * 20), 23, 1, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 5:
|
|
//Top and bottom
|
|
createentity(game, -150, 58, 23, 0, 0);
|
|
createentity(game, -150, 58 + (5 * 20), 23, 0, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
game.swnstate2 = 1;
|
|
break;
|
|
case 6:
|
|
//Middle
|
|
createentity(game, -150, 58 + (2 * 20), 23, 0, 0);
|
|
createentity(game, -150, 58 + (3 * 20), 23, 0, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 7:
|
|
//Top and bottom
|
|
createentity(game, 320+150, 58, 23, 1, 0);
|
|
createentity(game, 320+150, 58 + (5 * 20), 23, 1, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
game.swnstate2 = 1;
|
|
break;
|
|
case 8:
|
|
//Middle
|
|
createentity(game, 320+150, 58 + (2 * 20), 23, 1, 0);
|
|
createentity(game, 320+150, 58 + (3 * 20), 23, 1, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 9:
|
|
if(game.swnstate3==0){
|
|
game.swnstate2++;
|
|
if (game.swnstate2 >= 6) {
|
|
game.swnstate3 = 1;
|
|
game.swnstate2--;
|
|
}
|
|
}else {
|
|
game.swnstate2--;
|
|
if (game.swnstate2 < 0) {
|
|
game.swnstate3 = 0;
|
|
game.swnstate2++;
|
|
}
|
|
}
|
|
createentity(game, 320 + 150, 58 + (int(game.swnstate2) * 20), 23, 1, 0);
|
|
game.swnstate = 0; game.swndelay = 0; //return to decision state
|
|
break;
|
|
}
|
|
}else if (t == 1) {
|
|
//Game 2, super gravitron
|
|
switch(game.swnstate) {
|
|
case 0:
|
|
//Choose either simple or filler
|
|
game.swnstate2 = 0; game.swnstate3 = 0; game.swnstate4 = 0;
|
|
|
|
game.swnstate2 = int(Math.random() * 100);
|
|
if (game.swnstate2 < 25) {
|
|
//simple
|
|
game.swnstate = 2; game.swndelay = 0;
|
|
}else {
|
|
//filler
|
|
game.swnstate = 4; game.swndelay = 0;
|
|
}
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 1:
|
|
//complex chain
|
|
game.swnstate2 = int(Math.random() * 8);
|
|
if (game.swnstate2 == 0) { game.swnstate = 10; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 1) { game.swnstate = 12; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 2) { game.swnstate = 14; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 3) { game.swnstate = 20; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 4) { game.swnstate = 21; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 5) { game.swnstate = 22; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 6) { game.swnstate = 22; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 7) { game.swnstate = 14; game.swndelay = 0;
|
|
}
|
|
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 2:
|
|
//simple chain
|
|
game.swnstate2 = int(Math.random() * 6);
|
|
if (game.swnstate2 == 0) { game.swnstate = 23; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 1) { game.swnstate = 24; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 2) { game.swnstate = 25; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 3) { game.swnstate = 26; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 4) { game.swnstate = 27; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 5) { game.swnstate = 14; game.swndelay = 0;
|
|
}
|
|
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 3:
|
|
//Choose a major action
|
|
game.swnstate2 = int(Math.random() * 100);
|
|
if (game.swnstate2 < 25) {
|
|
//complex
|
|
game.swnstate = 1; game.swndelay = 0;
|
|
}else {
|
|
//simple
|
|
game.swnstate = 2; game.swndelay = 0;
|
|
}
|
|
break;
|
|
case 4:
|
|
//filler chain
|
|
game.swnstate2 = int(Math.random() * 6);
|
|
if (game.swnstate2 == 0) { game.swnstate = 28; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 1) { game.swnstate = 29; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 2) { game.swnstate = 28; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 3) { game.swnstate = 29; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 4) { game.swnstate = 30; game.swndelay = 0;
|
|
}else if (game.swnstate2 == 5) { game.swnstate = 31; game.swndelay = 0;
|
|
}
|
|
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 10:
|
|
gravcreate(game, 0, 0);
|
|
gravcreate(game, 1, 0);
|
|
gravcreate(game, 2, 0);
|
|
game.swnstate++; game.swndelay = 10; //return to decision state
|
|
break;
|
|
case 11:
|
|
gravcreate(game, 3, 0);
|
|
gravcreate(game, 4, 0);
|
|
gravcreate(game, 5, 0);
|
|
game.swnstate2++;
|
|
if(game.swnstate2==3){
|
|
game.swnstate = 0; game.swndelay = 30; //return to decision state
|
|
}else {
|
|
game.swnstate--; game.swndelay = 10; //return to decision state
|
|
}
|
|
break;
|
|
case 12:
|
|
gravcreate(game, 0, 1);
|
|
gravcreate(game, 1, 1);
|
|
gravcreate(game, 2, 1);
|
|
game.swnstate++; game.swndelay = 10; //return to decision state
|
|
break;
|
|
case 13:
|
|
gravcreate(game, 3, 1);
|
|
gravcreate(game, 4, 1);
|
|
gravcreate(game, 5, 1);
|
|
game.swnstate2++;
|
|
if(game.swnstate2==3){
|
|
game.swnstate = 0; game.swndelay = 30; //return to decision state
|
|
}else {
|
|
game.swnstate--; game.swndelay = 10; //return to decision state
|
|
}
|
|
break;
|
|
case 14:
|
|
gravcreate(game, 0, 0, 0);
|
|
gravcreate(game, 5, 1, 0);
|
|
|
|
game.swnstate++; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 15:
|
|
gravcreate(game, 1, 0);
|
|
gravcreate(game, 4, 1);
|
|
|
|
game.swnstate++; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 16:
|
|
gravcreate(game, 2, 0);
|
|
gravcreate(game, 3, 1);
|
|
|
|
game.swnstate++; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 17:
|
|
gravcreate(game, 3, 0);
|
|
gravcreate(game, 2, 1);
|
|
|
|
game.swnstate++; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 18:
|
|
gravcreate(game, 4, 0);
|
|
gravcreate(game, 1, 1);
|
|
|
|
game.swnstate++; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 19:
|
|
gravcreate(game, 5, 0);
|
|
gravcreate(game, 0, 1);
|
|
|
|
game.swnstate=0; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 20:
|
|
game.swnstate4++;
|
|
if(game.swnstate3==0){
|
|
game.swnstate2++;
|
|
if (game.swnstate2 >= 6) {
|
|
game.swnstate3 = 1;
|
|
game.swnstate2--;
|
|
}
|
|
}else {
|
|
game.swnstate2--;
|
|
if (game.swnstate2 < 0) {
|
|
game.swnstate3 = 0;
|
|
game.swnstate2++;
|
|
}
|
|
}
|
|
createentity(game, -150, 58 + (int(game.swnstate2) * 20), 23, 0, 0);
|
|
if(game.swnstate4<=6){
|
|
game.swnstate = 20; game.swndelay = 10; //return to decision state
|
|
}else {
|
|
game.swnstate = 0; game.swndelay = 10; //return to decision state
|
|
}
|
|
break;
|
|
case 21:
|
|
game.swnstate4++;
|
|
if(game.swnstate3==0){
|
|
game.swnstate2++;
|
|
if (game.swnstate2 >= 6) {
|
|
game.swnstate3 = 1;
|
|
game.swnstate2--;
|
|
}
|
|
}else {
|
|
game.swnstate2--;
|
|
if (game.swnstate2 < 0) {
|
|
game.swnstate3 = 0;
|
|
game.swnstate2++;
|
|
}
|
|
}
|
|
createentity(game, 320+150, 58 + (int(game.swnstate2) * 20), 23, 1, 0);
|
|
if(game.swnstate4<=6){
|
|
game.swnstate = 21; game.swndelay = 10; //return to decision state
|
|
}else {
|
|
game.swnstate = 0; game.swndelay = 10; //return to decision state
|
|
}
|
|
break;
|
|
case 22:
|
|
game.swnstate4++;
|
|
//left and right compliments
|
|
game.swnstate2 = int(Math.random() * 6);
|
|
createentity(game, -150, 58 + (game.swnstate2 * 20), 23, 0, 0);
|
|
createentity(game, 320 + 150, 58 + ((5 - game.swnstate2) * 20), 23, 1, 0);
|
|
if(game.swnstate4<=12){
|
|
game.swnstate = 22; game.swndelay = 18; //return to decision state
|
|
}else {
|
|
game.swnstate = 0; game.swndelay = 18; //return to decision state
|
|
}
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 23:
|
|
gravcreate(game, 1, 0);
|
|
gravcreate(game, 2, 0, 15);
|
|
gravcreate(game, 2, 0, -15);
|
|
gravcreate(game, 3, 0, 15);
|
|
gravcreate(game, 3, 0, -15);
|
|
gravcreate(game, 4, 0);
|
|
game.swnstate = 0; game.swndelay = 15; //return to decision state
|
|
break;
|
|
case 24:
|
|
gravcreate(game, 1, 1);
|
|
gravcreate(game, 2, 1, 15);
|
|
gravcreate(game, 2, 1, -15);
|
|
gravcreate(game, 3, 1, 15);
|
|
gravcreate(game, 3, 1, -15);
|
|
gravcreate(game, 4, 1);
|
|
game.swnstate = 0; game.swndelay = 15; //return to decision state
|
|
break;
|
|
case 25:
|
|
gravcreate(game, 0, 0);
|
|
gravcreate(game, 1, 1,0,10);
|
|
gravcreate(game, 4, 1,0,-10);
|
|
gravcreate(game, 5, 0);
|
|
game.swnstate = 0; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 26:
|
|
gravcreate(game, 0, 1, 0);
|
|
gravcreate(game, 1, 1, 10);
|
|
gravcreate(game, 4, 1, 40);
|
|
gravcreate(game, 5, 1, 50);
|
|
game.swnstate = 0; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 27:
|
|
gravcreate(game, 0, 0, 0);
|
|
gravcreate(game, 1, 0, 10);
|
|
gravcreate(game, 4, 0, 40);
|
|
gravcreate(game, 5, 0, 50);
|
|
game.swnstate = 0; game.swndelay = 20; //return to decision state
|
|
break;
|
|
case 28:
|
|
game.swnstate4++;
|
|
game.swnstate2 = int(Math.random() * 6);
|
|
createentity(game, -150, 58 + (game.swnstate2 * 20), 23, 0, 0);
|
|
if(game.swnstate4<=6){
|
|
game.swnstate = 28; game.swndelay = 8; //return to decision state
|
|
}else {
|
|
game.swnstate = 3; game.swndelay = 15; //return to decision state
|
|
}
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 29:
|
|
game.swnstate4++;
|
|
game.swnstate2 = int(Math.random() * 6);
|
|
gravcreate(game, game.swnstate2, 1);
|
|
if(game.swnstate4<=6){
|
|
game.swnstate = 29; game.swndelay = 8; //return to decision state
|
|
}else {
|
|
game.swnstate = 3; game.swndelay = 15; //return to decision state
|
|
}
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 30:
|
|
game.swnstate4++;
|
|
game.swnstate2 = int(Math.random() * 3);
|
|
gravcreate(game, game.swnstate2, 0);
|
|
gravcreate(game, 5-game.swnstate2, 0);
|
|
if(game.swnstate4<=2){
|
|
game.swnstate = 30; game.swndelay = 14; //return to decision state
|
|
}else {
|
|
game.swnstate = 3; game.swndelay = 15; //return to decision state
|
|
}
|
|
game.swnstate2 = 0;
|
|
break;
|
|
case 31:
|
|
game.swnstate4++;
|
|
game.swnstate2 = int(Math.random() * 3);
|
|
gravcreate(game, game.swnstate2, 1);
|
|
gravcreate(game, 5-game.swnstate2, 1);
|
|
if(game.swnstate4<=2){
|
|
game.swnstate = 31; game.swndelay = 14; //return to decision state
|
|
}else {
|
|
game.swnstate = 3; game.swndelay = 15; //return to decision state
|
|
}
|
|
game.swnstate2 = 0;
|
|
break;
|
|
}
|
|
}
|
|
}else {
|
|
game.swndelay--;
|
|
}
|
|
}
|
|
|
|
public function createblock(t:int, xp:int=0, yp:int=0, w:int=0, h:int=0, trig:int=0):void{
|
|
if(nblocks == 0) {
|
|
//If there are no active blocks, Z=0;
|
|
k = 0; nblocks++;
|
|
}else {
|
|
i = 0; k = -1;
|
|
while (i < nblocks) {
|
|
if (!blocks[i].active) {
|
|
k = i; i = nblocks;
|
|
}
|
|
i++;
|
|
}
|
|
if (k == -1) {
|
|
k = nblocks;
|
|
nblocks++;
|
|
}
|
|
}
|
|
|
|
blocks[k].clear();
|
|
blocks[k].active = true;
|
|
switch(t) {
|
|
case BLOCK: //Block
|
|
blocks[k].type = BLOCK;
|
|
blocks[k].xp = xp;
|
|
blocks[k].yp = yp;
|
|
blocks[k].wp = w;
|
|
blocks[k].hp = h;
|
|
blocks[k].rectset(xp, yp, w, h);
|
|
|
|
opt_useblock = true;
|
|
break;
|
|
case TRIGGER: //Trigger
|
|
blocks[k].type = TRIGGER;
|
|
blocks[k].xp = xp;
|
|
blocks[k].yp = yp;
|
|
blocks[k].wp = w;
|
|
blocks[k].hp = h;
|
|
blocks[k].rectset(xp, yp, w, h);
|
|
blocks[k].trigger = trig;
|
|
|
|
opt_usetrigger = true;
|
|
break;
|
|
case DAMAGE: //Damage
|
|
blocks[k].type = DAMAGE;
|
|
blocks[k].xp = xp;
|
|
blocks[k].yp = yp;
|
|
blocks[k].wp = w;
|
|
blocks[k].hp = h;
|
|
blocks[k].rectset(xp, yp, w, h);
|
|
|
|
opt_usedamage = true;
|
|
break;
|
|
case DIRECTIONAL: //Directional
|
|
blocks[k].type = DIRECTIONAL;
|
|
blocks[k].xp = xp;
|
|
blocks[k].yp = yp;
|
|
blocks[k].wp = w;
|
|
blocks[k].hp = h;
|
|
blocks[k].rectset(xp, yp, w, h);
|
|
blocks[k].trigger = trig;
|
|
|
|
opt_usedirectional = true;
|
|
break;
|
|
case SAFE: //Safe block
|
|
blocks[k].type = SAFE;
|
|
blocks[k].xp = xp;
|
|
blocks[k].yp = yp;
|
|
blocks[k].wp = w;
|
|
blocks[k].hp = h;
|
|
blocks[k].rectset(xp, yp, w, h);
|
|
|
|
opt_usesafe = true;
|
|
break;
|
|
case ACTIVITY: //Activity Zone
|
|
blocks[k].type = ACTIVITY;
|
|
blocks[k].xp = xp;
|
|
blocks[k].yp = yp;
|
|
blocks[k].wp = w;
|
|
blocks[k].hp = h;
|
|
blocks[k].rectset(xp, yp, w, h);
|
|
|
|
opt_useactivity = true;
|
|
|
|
//Ok, each and every activity zone in the game is initilised here. "Trig" in this case is a variable that
|
|
//assigns all the details.
|
|
switch(trig) {
|
|
case 0: //testing zone
|
|
blocks[k].prompt = "Press ENTER to explode";
|
|
if(mobilemenus) blocks[k].prompt = "Explode";
|
|
blocks[k].script = "intro";
|
|
setblockcolour(k, "orange");
|
|
trig=1;
|
|
break;
|
|
case 1:
|
|
blocks[k].prompt = "Press ENTER to talk to Violet";
|
|
if(mobilemenus) blocks[k].prompt = "Talk to Violet";
|
|
blocks[k].script = "talkpurple";
|
|
setblockcolour(k, "purple");
|
|
trig=0;
|
|
break;
|
|
case 2:
|
|
blocks[k].prompt = "Press ENTER to talk to Vitellary";
|
|
if(mobilemenus) blocks[k].prompt = "Talk to Vitellary";
|
|
blocks[k].script = "talkyellow";
|
|
setblockcolour(k, "yellow");
|
|
trig=0;
|
|
break;
|
|
case 3:
|
|
blocks[k].prompt = "Press ENTER to talk to Vermilion";
|
|
if(mobilemenus) blocks[k].prompt = "Talk to Vermilion";
|
|
blocks[k].script = "talkred";
|
|
setblockcolour(k, "red");
|
|
trig=0;
|
|
break;
|
|
case 4:
|
|
blocks[k].prompt = "Press ENTER to talk to Verdigris";
|
|
if(mobilemenus) blocks[k].prompt = "Talk to Verdigris";
|
|
blocks[k].script = "talkgreen";
|
|
setblockcolour(k, "green");
|
|
trig=0;
|
|
break;
|
|
case 5:
|
|
blocks[k].prompt = "Press ENTER to talk to Victoria";
|
|
if(mobilemenus) blocks[k].prompt = "Talk to Victoria";
|
|
blocks[k].script = "talkblue";
|
|
setblockcolour(k, "blue");
|
|
trig=0;
|
|
break;
|
|
case 6:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_station_1";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 7:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_outside_1";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 8:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_outside_2";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 9:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_outside_3";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 10:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_outside_4";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 11:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_outside_5";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 12:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_outside_6";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 13:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_finallevel";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 14:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_station_2";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 15:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_station_3";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 16:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_station_4";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 17:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_warp_1";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 18:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_warp_2";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 19:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_lab_1";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 20:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_lab_2";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 21:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_secretlab";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 22:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_shipcomputer";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 23:
|
|
blocks[k].prompt = "Press ENTER to activate terminals";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminals";
|
|
blocks[k].script = "terminal_radio";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 24:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "terminal_jukebox";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 25:
|
|
blocks[k].prompt = "Passion for exploring";
|
|
blocks[k].script = "terminal_juke1";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 26:
|
|
blocks[k].prompt = "Pushing onwards";
|
|
blocks[k].script = "terminal_juke2";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 27:
|
|
blocks[k].prompt = "Positive force";
|
|
blocks[k].script = "terminal_juke3";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 28:
|
|
blocks[k].prompt = "Presenting VVVVVV";
|
|
blocks[k].script = "terminal_juke4";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 29:
|
|
blocks[k].prompt = "Potential for anything";
|
|
blocks[k].script = "terminal_juke5";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 30:
|
|
blocks[k].prompt = "Predestined fate";
|
|
blocks[k].script = "terminal_juke6";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 31:
|
|
blocks[k].prompt = "Pipe Dream";
|
|
blocks[k].script = "terminal_juke7";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 32:
|
|
blocks[k].prompt = "Popular Potpourri";
|
|
blocks[k].script = "terminal_juke8";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 33:
|
|
blocks[k].prompt = "Pressure Cooker";
|
|
blocks[k].script = "terminal_juke9";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 34:
|
|
blocks[k].prompt = "ecrof evitisoP";
|
|
blocks[k].script = "terminal_juke10";
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
case 35:
|
|
blocks[k].prompt = "Press ENTER to activate terminal";
|
|
if(mobilemenus) blocks[k].prompt = "Activate terminal";
|
|
blocks[k].script = "custom_"+customscript;
|
|
setblockcolour(k, "orange");
|
|
trig=0;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public function removeallblocks():void{
|
|
for(i=0; i<nblocks; i++) blocks[i].clear();
|
|
nblocks=0;
|
|
}
|
|
|
|
public function removeblock(t:int):void {
|
|
blocks[t].clear();
|
|
}
|
|
|
|
public function removeblockat(x:int, y:int):void{
|
|
for (i = 0; i < nblocks; i++) {
|
|
if(blocks[i].xp == int(x) && blocks[i].yp == int(y)) removeblock(i);
|
|
}
|
|
}
|
|
|
|
public function removetrigger(t:int):void{
|
|
for(i=0; i<nblocks; i++){
|
|
if(blocks[i].type == TRIGGER) {
|
|
if (blocks[i].trigger == t) {
|
|
blocks[i].active = false;
|
|
removeblock(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function copylinecross(t:int):void {
|
|
//Copy entity t into the first free linecrosskludge entity
|
|
linecrosskludge[nlinecrosskludge].clear();
|
|
linecrosskludge[nlinecrosskludge].xp = entities[t].xp;
|
|
linecrosskludge[nlinecrosskludge].yp = entities[t].yp;
|
|
linecrosskludge[nlinecrosskludge].w = entities[t].w;
|
|
linecrosskludge[nlinecrosskludge].onentity = entities[t].onentity;
|
|
linecrosskludge[nlinecrosskludge].state = entities[t].state;
|
|
linecrosskludge[nlinecrosskludge].life = entities[t].life;
|
|
nlinecrosskludge++;
|
|
}
|
|
|
|
public function revertlinecross(t:int, s:int):void {
|
|
//Restore entity t info from linecrossing s
|
|
entities[t].onentity = linecrosskludge[s].onentity;
|
|
entities[t].state = linecrosskludge[s].state;
|
|
entities[t].life = linecrosskludge[s].life;
|
|
}
|
|
|
|
public function gridmatch(p1:int, p2:int, p3:int, p4:int, p11:int, p21:int, p31:int, p41:int):Boolean {
|
|
if (p1 == p11 && p2 == p21 && p3 == p31 && p4 == p41) return true;
|
|
return false;
|
|
}
|
|
|
|
public function crewcolour(t:int):int {
|
|
//Return the colour of the indexed crewmate
|
|
switch(t) {
|
|
case 0: return 0; break;
|
|
case 1: return 20; break;
|
|
case 2: return 14; break;
|
|
case 3: return 15; break;
|
|
case 4: return 13; break;
|
|
case 5: return 16; break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
public function setenemyroom(t:int, rx:int, ry:int):void {
|
|
//Simple function to initilise simple enemies
|
|
rx -= 100; ry -= 100;
|
|
switch(rn(rx, ry)) {
|
|
//Space Station 1
|
|
case rn(12, 3): //Security Drone
|
|
entities[t].tile = 36; entities[t].colour = 8; entities[t].animate = 1;
|
|
break;
|
|
case rn(13, 3): //Wavelengths
|
|
entities[t].tile = 32; entities[t].colour = 7; entities[t].animate = 1;
|
|
entities[t].w = 32;
|
|
break;
|
|
case rn(15, 3): //Traffic
|
|
entities[t].tile = 28; entities[t].colour = 6; entities[t].animate = 1;
|
|
entities[t].w = 22; entities[t].h = 32;
|
|
break;
|
|
case rn(12, 5): //The Yes Men
|
|
entities[t].tile = 40; entities[t].colour = 9; entities[t].animate = 1;
|
|
entities[t].w = 20; entities[t].h = 20;
|
|
break;
|
|
case rn(13, 6): //Hunchbacked Guards
|
|
entities[t].tile = 44; entities[t].colour = 8; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 20;
|
|
break;
|
|
case rn(13, 4): //Communication Station
|
|
entities[t].harmful = false;
|
|
if (entities[t].xp == 256) {
|
|
//transmittor
|
|
entities[t].tile = 104; entities[t].colour = 4; entities[t].animate = 7;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
entities[t].xp -= 24; entities[t].yp -= 16;
|
|
}else {
|
|
//radar dish
|
|
entities[t].tile =124; entities[t].colour = 4; entities[t].animate = 6;
|
|
entities[t].w = 32; entities[t].h = 32; entities[t].cx = 4; entities[t].size = 9;
|
|
entities[t].xp -= 4; entities[t].yp -= 32;
|
|
}
|
|
|
|
break;
|
|
//The Lab
|
|
case rn(4, 0):
|
|
entities[t].tile = 78; entities[t].colour = 7; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(2, 0):
|
|
entities[t].tile = 88; entities[t].colour = 11; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
//Space Station 2
|
|
case rn(14, 11): entities[t].colour = 17; break; //Lies
|
|
case rn(16, 11): entities[t].colour = 8; break; //Lies
|
|
case rn(13, 10): entities[t].colour = 11; break; //Factory
|
|
case rn(13, 9): entities[t].colour = 9; break; //Factory
|
|
case rn(13, 8): entities[t].colour = 8; break; //Factory
|
|
case rn(11, 13): //Truth
|
|
entities[t].tile = 64; entities[t].colour = 7; entities[t].animate = 100;
|
|
entities[t].w = 44; entities[t].h = 10; entities[t].size = 10;
|
|
break;
|
|
case rn(17, 7): //Brass sent us under the top
|
|
entities[t].tile =82; entities[t].colour = 8; entities[t].animate = 5;
|
|
entities[t].w = 28; entities[t].h = 32; entities[t].cx = 4;
|
|
break;
|
|
case rn(10, 7): // (deception)
|
|
entities[t].tile = 92; entities[t].colour = 6; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(14, 13): // (chose poorly)
|
|
entities[t].tile = 56; entities[t].colour = 6; entities[t].animate = 1;
|
|
entities[t].w = 15; entities[t].h = 24;
|
|
break;
|
|
case rn(13, 12): // (backsliders)
|
|
entities[t].tile = 164; entities[t].colour = 7; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(14, 8): // (wheel of fortune room)
|
|
entities[t].tile = 116; entities[t].colour = 12; entities[t].animate = 1;
|
|
entities[t].w = 32; entities[t].h = 32;
|
|
break;
|
|
case rn(16, 9): // (seeing dollar signs)
|
|
entities[t].tile = 68; entities[t].colour = 7; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(16, 7): // (tomb of mad carew)
|
|
entities[t].tile = 106; entities[t].colour = 7; entities[t].animate = 2;
|
|
entities[t].w = 24; entities[t].h = 25;
|
|
break;
|
|
//Warp Zone
|
|
case rn(15, 2): // (numbers)
|
|
entities[t].tile = 100; entities[t].colour = 6; entities[t].animate = 1;
|
|
entities[t].w = 32; entities[t].h = 14; entities[t].yp += 1;
|
|
break;
|
|
case rn(16, 2): // (Manequins)
|
|
entities[t].tile = 52; entities[t].colour = 7; entities[t].animate = 5;
|
|
entities[t].w = 16; entities[t].h = 25; entities[t].yp -= 4;
|
|
break;
|
|
case rn(18, 0): // (Obey)
|
|
entities[t].tile = 51; entities[t].colour = 11; entities[t].animate = 100;
|
|
entities[t].w = 30; entities[t].h = 14;
|
|
break;
|
|
case rn(19, 1): // Ascending and Descending
|
|
entities[t].tile = 48; entities[t].colour = 9; entities[t].animate = 5;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(19, 2): // Shockwave Rider
|
|
entities[t].tile = 176; entities[t].colour = 6; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(18, 3): // Mind the gap
|
|
entities[t].tile = 168; entities[t].colour = 7; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(17, 3): // Edge Games
|
|
if (entities[t].yp ==96) {
|
|
entities[t].tile = 160; entities[t].colour = 8; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
}else {
|
|
entities[t].tile = 156; entities[t].colour = 8; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
}
|
|
break;
|
|
case rn(16, 0): // I love you
|
|
entities[t].tile = 112; entities[t].colour = 8; entities[t].animate = 5;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(14, 2): // That's why I have to kill you
|
|
entities[t].tile = 114; entities[t].colour = 6; entities[t].animate = 5;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(18, 2): // Thinking with Portals
|
|
//depends on direction
|
|
if (entities[t].xp ==88) {
|
|
entities[t].tile = 54+12; entities[t].colour = 12; entities[t].animate = 100;
|
|
entities[t].w = 60; entities[t].h = 16; entities[t].size = 10;
|
|
}else{
|
|
entities[t].tile = 54; entities[t].colour = 12; entities[t].animate = 100;
|
|
entities[t].w = 60; entities[t].h = 16; entities[t].size = 10;
|
|
}
|
|
break;
|
|
//Final level
|
|
case rn(50-100, 53-100): //The Yes Men
|
|
entities[t].tile = 40; entities[t].colour = 9; entities[t].animate = 1;
|
|
entities[t].w = 20; entities[t].h = 20;
|
|
break;
|
|
case rn(48-100, 51-100): //Wavelengths
|
|
entities[t].tile = 32; entities[t].colour = 7; entities[t].animate = 1;
|
|
entities[t].w = 32;
|
|
break;
|
|
case rn(43-100,52-100): // Ascending and Descending
|
|
entities[t].tile = 48; entities[t].colour = 9; entities[t].animate = 5;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(46-100,51-100): //kids his age
|
|
entities[t].tile = 88; entities[t].colour = 11; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(43-100,51-100): // Mind the gap
|
|
entities[t].tile = 168; entities[t].colour = 7; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(44-100,51-100): // vertigo?
|
|
entities[t].tile = 172; entities[t].colour = 7; entities[t].animate = 100;
|
|
entities[t].w = 32; entities[t].h = 32;
|
|
break;
|
|
case rn(44-100,52-100): // (backsliders)
|
|
entities[t].tile = 164; entities[t].colour = 7; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(43-100, 56-100): //Intermission 1
|
|
entities[t].tile = 88; entities[t].colour = 21; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
case rn(45-100, 56-100): //Intermission 1
|
|
entities[t].tile = 88; entities[t].colour = 21; entities[t].animate = 1;
|
|
entities[t].w = 16; entities[t].h = 16;
|
|
break;
|
|
//The elephant
|
|
case rn(11, 9): case rn(12, 9): case rn(11, 8): case rn(12, 8):
|
|
entities[t].tile = 0; entities[t].colour = 102; entities[t].animate = 0;
|
|
entities[t].w = 464; entities[t].h = 320; entities[t].size = 11;
|
|
entities[t].harmful = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public function setenemy(t:int, r:int):void {
|
|
switch(t) {
|
|
case 0:
|
|
//lies emitter
|
|
if(entities[r].para==0){
|
|
entities[r].tile = 60; entities[r].animate = 2;
|
|
entities[r].colour = 6; entities[r].behave = 10;
|
|
entities[r].w = 32; entities[r].h = 32;
|
|
entities[r].x1 = -200;
|
|
}else if (entities[r].para == 1) {
|
|
entities[r].yp += 10;
|
|
entities[r].tile = 63; entities[r].animate = 100; //LIES
|
|
entities[r].colour = 6;
|
|
entities[r].behave = 11; entities[r].para = 9; //destroyed when outside
|
|
entities[r].x1 = -200; entities[r].x2 = 400;
|
|
entities[r].w = 26; entities[r].h = 10;
|
|
entities[r].cx = 1; entities[r].cy = 1;
|
|
}else if (entities[r].para == 2) {
|
|
entities[r].tile = 62; entities[r].animate = 100;
|
|
entities[r].colour = 6; entities[r].behave = -1;
|
|
entities[r].w = 32; entities[r].h = 32;
|
|
}
|
|
break;
|
|
case 1:
|
|
//FACTORY emitter
|
|
if(entities[r].para==0){
|
|
entities[r].tile = 72; entities[r].animate = 3; entities[r].size = 9;
|
|
entities[r].colour = 6; entities[r].behave = 12;
|
|
entities[r].w = 64; entities[r].h = 40;
|
|
entities[r].cx = 0; entities[r].cy = 24;
|
|
}else if (entities[r].para == 1) {
|
|
entities[r].xp += 4; entities[r].yp -= 4;
|
|
entities[r].tile = 76; entities[r].animate = 100; // Clouds
|
|
entities[r].colour = 6;
|
|
entities[r].behave = 13; entities[r].para = -6; //destroyed when outside
|
|
entities[r].x2 = 400;
|
|
entities[r].w = 32; entities[r].h = 12;
|
|
entities[r].cx = 0; entities[r].cy = 6;
|
|
}else if (entities[r].para == 2) {
|
|
entities[r].tile = 77; entities[r].animate = 100;
|
|
entities[r].colour = 6; entities[r].behave = -1;
|
|
entities[r].w = 32; entities[r].h = 16;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
public function rn(rx:int, ry:int):int {
|
|
return rx + (ry * 100);
|
|
}
|
|
|
|
public function settreadmillcolour(t:int, rx:int, ry:int):void {
|
|
rx -= 100; ry -= 100;
|
|
rx += 50 - 12; ry += 50 - 14; //Space Station
|
|
|
|
entities[t].tile = 20; //default as blue
|
|
switch(rn(rx, ry)) {
|
|
case rn(52, 48): entities[t].tile = 791; break; //Cyan
|
|
|
|
case rn(49, 47): entities[t].tile = 24; break; //Yellow
|
|
case rn(56, 44): entities[t].tile = 24; break; //Yellow
|
|
case rn(54, 49): entities[t].tile = 24; break; //Yellow
|
|
|
|
case rn(49, 49): entities[t].tile = 36; break; //Green
|
|
case rn(55, 44): entities[t].tile = 36; break; //Green
|
|
case rn(54, 43): entities[t].tile = 36; break; //Green
|
|
case rn(53, 49): entities[t].tile = 36; break; //Green
|
|
case rn(54, 45): entities[t].tile = 711; break; //Green (special)
|
|
case rn(51, 48): entities[t].tile = 711; break; //Green (special)
|
|
|
|
case rn(50, 49): entities[t].tile = 28; break; //Purple
|
|
case rn(54, 44): entities[t].tile = 28; break; //Purple
|
|
case rn(49, 42): entities[t].tile = 28; break; //Purple
|
|
case rn(55, 43): entities[t].tile = 28; break; //Purple
|
|
case rn(54, 47): entities[t].tile = 28; break; //Purple
|
|
case rn(53, 48): entities[t].tile = 28; break; //Purple
|
|
|
|
case rn(51, 47): entities[t].tile = 32; break; //Red
|
|
case rn(52, 49): entities[t].tile = 32; break; //Red
|
|
case rn(48, 43): entities[t].tile = 32; break; //Red
|
|
case rn(55, 47): entities[t].tile = 32; break; //Red
|
|
case rn(54, 48): entities[t].tile = 32; break; //Red
|
|
}
|
|
}
|
|
|
|
public function createentity(game:gameclass, xp:Number, yp:Number, t:int, vx:Number = 0, vy:Number = 0,
|
|
p1:int = 0, p2:int = 0, p3:int = 320, p4:int = 240 ):void {
|
|
//Find the first inactive case z that we can use to index the new entity
|
|
if (nentity == 0) {
|
|
//If there are no active entities, Z=0;
|
|
k = 0; nentity++;
|
|
}else {
|
|
i = 0; k = -1;
|
|
while (i < nentity) {
|
|
if (!entities[i].active) {
|
|
k = i; i = nentity;
|
|
}
|
|
i++;
|
|
}
|
|
if (k == -1) {
|
|
k = nentity;
|
|
nentity++;
|
|
}
|
|
}
|
|
|
|
//Size 0 is a sprite
|
|
//Size 1 is a tile
|
|
//Beyond that are special cases (to do)
|
|
//Size 2 is a moving platform of width 4 (32)
|
|
//Size 3 is apparently a "bug chunky pixel"
|
|
//Size 4 is a coin/small pickup
|
|
//Size 5 is a horizontal line, 6 is vertical
|
|
|
|
//Rule 0 is the playable character
|
|
//Rule 1 is anything harmful
|
|
//Rule 2 is anything decorative (no collisions)
|
|
//Rule 3 is anything that results in an entity to entity collision and state change
|
|
//Rule 4 is a horizontal line, 5 is vertical
|
|
//Rule 6 is a crew member
|
|
|
|
//trace("creating entity type ", t, xp, yp);
|
|
|
|
entities[k].clear();
|
|
entities[k].active = true;
|
|
entities[k].type = t;
|
|
switch(t) {
|
|
case 0: //Player
|
|
entities[k].rule = 0; //Playable character
|
|
entities[k].tile = 0; entities[k].colour = 0;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cx = 6; entities[k].cy = 2;
|
|
entities[k].w = 12; entities[k].h = 21;
|
|
entities[k].dir = 1;
|
|
|
|
if(vx==1) entities[k].invis = true;
|
|
|
|
entities[k].gravity = true;
|
|
break;
|
|
case 1:
|
|
entities[k].rule = 1;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].behave = vx; entities[k].para = vy;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].cx = 0; entities[k].cy = 0;
|
|
|
|
entities[k].x1 = p1; entities[k].y1 = p2;
|
|
entities[k].x2 = p3; entities[k].y2 = p4;
|
|
|
|
entities[k].harmful = true;
|
|
//Exact appearance depends entirely on location, assigned here:
|
|
/*
|
|
}else if (game.roomx == 50 && game.roomy == 52) {
|
|
entities[k].tile = 48; entities[k].colour = 6;
|
|
entities[k].w = 32; entities[k].h = 27;
|
|
entities[k].animate = 1;
|
|
//ok, for space station 2
|
|
*/
|
|
entities[k].tile = 24;
|
|
entities[k].animate = 0;
|
|
entities[k].colour = 8;
|
|
|
|
|
|
if (game.roomy == 111 && (game.roomx >= 113 && game.roomx <= 117)) {
|
|
setenemy(0, k);
|
|
setenemyroom(k, game.roomx, game.roomy); //For colour
|
|
}else if (game.roomx == 113 && (game.roomy <= 110 && game.roomy >= 108)) {
|
|
setenemy(1, k);
|
|
setenemyroom(k, game.roomx, game.roomy); //For colour
|
|
}else if (game.roomx == 113 && game.roomy == 107) {
|
|
//MAVVERRRICK
|
|
entities[k].tile = 96; entities[k].colour = 6; entities[k].size = 9;
|
|
entities[k].w = 64; entities[k].h = 44;
|
|
entities[k].animate = 4;
|
|
}else {
|
|
setenemyroom(k, game.roomx, game.roomy);
|
|
}
|
|
|
|
|
|
//}else{*/
|
|
/*
|
|
entities[k].tile = 24;
|
|
entities[k].animate = 0;
|
|
entities[k].colour = 8;
|
|
//for warpzone:
|
|
if (game.roomx == 51 && game.roomy == 51) entities[k].colour = 6;
|
|
if (game.roomx == 52 && game.roomy == 51) entities[k].colour = 7;
|
|
if (game.roomx == 54 && game.roomy == 49) entities[k].colour = 11;
|
|
if (game.roomx == 55 && game.roomy == 50) entities[k].colour = 9;
|
|
if (game.roomx == 55 && game.roomy == 51) entities[k].colour = 6;
|
|
if (game.roomx == 54 && game.roomy == 51) entities[k].colour = 12;
|
|
if (game.roomx == 54 && game.roomy == 52) entities[k].colour = 7;
|
|
if (game.roomx == 53 && game.roomy == 52) entities[k].colour = 8;
|
|
if (game.roomx == 51 && game.roomy == 52) entities[k].colour = 6;
|
|
if (game.roomx == 52 && game.roomy == 49) entities[k].colour = 8;
|
|
//}
|
|
*/
|
|
break;
|
|
case 2: //A moving platform
|
|
entities[k].rule = 2; entities[k].type = 1;
|
|
entities[k].size = 2; entities[k].tile = 1;
|
|
|
|
if (customplatformtile > 0){
|
|
entities[k].tile = customplatformtile;
|
|
}else if (platformtile > 0) {
|
|
entities[k].tile = platformtile;
|
|
}else{
|
|
//appearance again depends on location
|
|
if (gridmatch(p1, p2, p3, p4, 100, 70, 320, 160)) entities[k].tile = 616;
|
|
if (gridmatch(p1, p2, p3, p4, 72, 0, 248, 240)) entities[k].tile = 610;
|
|
if (gridmatch(p1, p2, p3, p4, -20, 0, 320, 240)) entities[k].tile = 413;
|
|
|
|
if (gridmatch(p1, p2, p3, p4, -96, -72, 400, 312)) entities[k].tile = 26;
|
|
if (gridmatch(p1, p2, p3, p4, -32, -40, 352, 264)) entities[k].tile = 27;
|
|
}
|
|
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 32; entities[k].h = 8;
|
|
|
|
if (vx <= 1) vertplatforms = true;
|
|
if (vx >= 2 && vx <= 5) horplatforms = true;
|
|
if (vx == 14 || vx == 15) horplatforms = true; //special case for last part of Space Station
|
|
if (vx >= 6 && vx <= 7) vertplatforms = true;
|
|
|
|
if (vx >= 10 && vx <= 11) {
|
|
//Double sized threadmills
|
|
entities[k].w = 64; entities[k].h = 8;
|
|
vx -= 2; entities[k].size = 8;
|
|
}
|
|
|
|
entities[k].behave = vx; entities[k].para = vy;
|
|
|
|
if (vx >= 8 && vx <= 9) {
|
|
horplatforms = true; //threadmill!
|
|
entities[k].animate = 10;
|
|
if(customplatformtile>0){
|
|
entities[k].tile = customplatformtile+4;
|
|
if (vx == 8) entities[k].tile += 4;
|
|
if (vx == 9) entities[k].animate = 11;
|
|
}else{
|
|
settreadmillcolour(k, game.roomx, game.roomy);
|
|
if (vx == 8) entities[k].tile += 40;
|
|
if (vx == 9) entities[k].animate = 11;
|
|
}
|
|
|
|
}else {
|
|
entities[k].animate = 100;
|
|
}
|
|
|
|
entities[k].x1 = p1; entities[k].y1 = p2;
|
|
entities[k].x2 = p3; entities[k].y2 = p4;
|
|
|
|
entities[k].isplatform = true;
|
|
|
|
createblock(0, xp, yp, 32, 8);
|
|
break;
|
|
case 3: //Disappearing platforms
|
|
entities[k].rule = 3; entities[k].type = 2;
|
|
entities[k].size = 2;
|
|
entities[k].tile = 2;
|
|
//appearance again depends on location
|
|
if(customplatformtile>0){
|
|
entities[k].tile=customplatformtile;
|
|
}else if (vx > 0) {
|
|
entities[k].tile = int(vx);
|
|
}else{
|
|
if(game.roomx==49 && game.roomy==52) entities[k].tile = 18;
|
|
if (game.roomx == 50 && game.roomy == 52) entities[k].tile = 22;
|
|
}
|
|
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cy = -1;
|
|
entities[k].w = 32; entities[k].h = 10;
|
|
entities[k].behave = vx; entities[k].para = vy;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
|
|
createblock(0, xp, yp, 32, 8);
|
|
break;
|
|
case 4: //Breakable blocks
|
|
entities[k].rule = 6; entities[k].type = 3;
|
|
entities[k].size = 1;
|
|
entities[k].tile = 10;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cy = -1;
|
|
entities[k].w = 8; entities[k].h = 10;
|
|
entities[k].behave = vx; entities[k].para = vy;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
|
|
createblock(0, xp, yp, 8, 8);
|
|
break;
|
|
case 5: //Gravity Tokens
|
|
entities[k].rule = 3; entities[k].type = 4;
|
|
entities[k].size = 0; entities[k].tile = 11;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].behave = vx; entities[k].para = vy;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
break;
|
|
case 6: //Decorative particles
|
|
entities[k].rule = 2; entities[k].type = 5; //Particles
|
|
entities[k].colour = 1; entities[k].size = 3;
|
|
entities[k].xp = xp;
|
|
entities[k].yp = yp;
|
|
entities[k].vx = vx;
|
|
entities[k].vy = vy;
|
|
|
|
entities[k].life = 12;
|
|
break;
|
|
case 7: //Decorative particles
|
|
entities[k].rule = 2; entities[k].type = 5; //Particles
|
|
entities[k].colour = 2; entities[k].size = 3;
|
|
entities[k].xp = xp;
|
|
entities[k].yp = yp;
|
|
entities[k].vx = vx;
|
|
entities[k].vy = vy;
|
|
|
|
entities[k].life = 12;
|
|
break;
|
|
case 8: //Small collectibles
|
|
entities[k].rule = 3; entities[k].type = 6;
|
|
entities[k].size = 4; entities[k].tile = 48;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 8; entities[k].h = 8;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
|
|
//Check if it's already been collected
|
|
entities[k].para = vx;
|
|
if (collect[vx] == 1) entities[k].active = false;
|
|
break;
|
|
case 9: //Something Shiny
|
|
entities[k].rule = 3; entities[k].type = 7;
|
|
entities[k].size = 0; entities[k].tile = 22;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].colour = 3;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
|
|
//Check if it's already been collected
|
|
entities[k].para = vx;
|
|
if (collect[vx] == 1) entities[k].active = false;
|
|
break;
|
|
case 10: //Savepoint
|
|
entities[k].rule = 3; entities[k].type = 8;
|
|
entities[k].size = 0; entities[k].tile = 20 + vx;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].colour = 4;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
entities[k].para = vy;
|
|
|
|
if (game.savepoint == vy) {
|
|
entities[k].colour = 5;
|
|
entities[k].onentity = 0;
|
|
}
|
|
|
|
if (game.nodeathmode) {
|
|
entities[k].active = false;
|
|
}
|
|
break;
|
|
case 11: //Horizontal Gravity Line
|
|
entities[k].rule = 4; entities[k].type = 9;
|
|
entities[k].size = 5; entities[k].life = 0;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = vx; entities[k].h = 1;
|
|
entities[k].onentity = 1;
|
|
break;
|
|
case 12: //Vertical Gravity Line
|
|
entities[k].rule = 5; entities[k].type = 10;
|
|
entities[k].size = 6; entities[k].life = 0;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 1; entities[k].h = vx;
|
|
//entities[k].colour = 0;
|
|
entities[k].onentity = 1;
|
|
break;
|
|
case 13: //Warp token
|
|
entities[k].rule = 3; entities[k].type = 11;
|
|
entities[k].size = 0; entities[k].tile = 18;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].colour = 10;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 2;
|
|
|
|
//Added in port, hope it doesn't break anything
|
|
entities[k].behave = vx;
|
|
entities[k].para = vy;
|
|
break;
|
|
case 14: // Teleporter
|
|
entities[k].rule = 3; entities[k].type = 100;
|
|
entities[k].size = 7; entities[k].tile = 1; //inactive
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 96; entities[k].h = 96;
|
|
entities[k].colour = 100;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
entities[k].para = vy;
|
|
|
|
//we'll init it's activeness here later
|
|
/*if (game.savepoint == vy) {
|
|
entities[k].colour = 5;
|
|
entities[k].onentity = 0;
|
|
}*/
|
|
break;
|
|
case 15: // Crew Member (warp zone)
|
|
entities[k].rule = 6; entities[k].type = 12; //A special case!
|
|
entities[k].tile = 144; entities[k].colour = 13; //144 for sad :(
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cx = 6; entities[k].cy = 2;
|
|
entities[k].w = 12; entities[k].h = 21;
|
|
entities[k].dir = 0;
|
|
|
|
entities[k].state = vx;
|
|
|
|
entities[k].gravity = true;
|
|
break;
|
|
case 16: // Crew Member, upside down (space station)
|
|
entities[k].rule = 7; entities[k].type = 12; //A special case!
|
|
entities[k].tile = 144+6; entities[k].colour = 14; //144 for sad (upside down+12):(
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cx = 6; entities[k].cy = 2;
|
|
entities[k].w = 12; entities[k].h = 21;
|
|
entities[k].dir = 1;
|
|
|
|
entities[k].state = vx;
|
|
|
|
entities[k].gravity = true;
|
|
break;
|
|
case 17: // Crew Member (Lab)
|
|
entities[k].rule = 6; entities[k].type = 12; //A special case!
|
|
entities[k].tile = 144; entities[k].colour = 16; //144 for sad :(
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cx = 6; entities[k].cy = 2;
|
|
entities[k].w = 12; entities[k].h = 21;
|
|
entities[k].dir = 1;
|
|
|
|
entities[k].state = vx;
|
|
|
|
entities[k].gravity = true;
|
|
break;
|
|
case 18: // Crew Member (Ship)
|
|
//This is the scriping crewmember
|
|
entities[k].rule = 6; entities[k].type = 12; //A special case!
|
|
entities[k].colour = vx;
|
|
if (vy == 0) {
|
|
entities[k].tile = 0;
|
|
}else {
|
|
entities[k].tile = 144;
|
|
}
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cx = 6; entities[k].cy = 2;
|
|
entities[k].w = 12; entities[k].h = 21;
|
|
entities[k].dir = 0;
|
|
|
|
entities[k].state = p1;
|
|
entities[k].para = p2;
|
|
|
|
if (p1 == 17) {
|
|
entities[k].dir = p2;
|
|
}
|
|
|
|
entities[k].gravity = true;
|
|
break;
|
|
case 19: // Crew Member (Ship) More tests!
|
|
entities[k].rule = 6; entities[k].type = 12; //A special case!
|
|
entities[k].tile = 0; entities[k].colour = 6; //54 for sad :(
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cx = 6; entities[k].cy = 2;
|
|
entities[k].w = 12; entities[k].h = 21;
|
|
entities[k].dir = 1;
|
|
|
|
entities[k].state = vx;
|
|
|
|
entities[k].gravity = true;
|
|
break;
|
|
case 20: //Terminal
|
|
entities[k].rule = 3; entities[k].type = 13;
|
|
entities[k].size = 0; entities[k].tile = 16 + vx;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].colour = 4;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
entities[k].para = vy;
|
|
|
|
/*if (game.savepoint == vy) {
|
|
entities[k].colour = 5;
|
|
entities[k].onentity = 0;
|
|
}*/
|
|
break;
|
|
case 21: //as above, except doesn't highlight
|
|
entities[k].rule = 3; entities[k].type = 13;
|
|
entities[k].size = 0; entities[k].tile = 16 + vx;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].colour = 4;
|
|
entities[k].onentity = 0;
|
|
entities[k].animate = 100;
|
|
entities[k].para = vy;
|
|
|
|
/*if (game.savepoint == vy) {
|
|
entities[k].colour = 5;
|
|
entities[k].onentity = 0;
|
|
}*/
|
|
break;
|
|
case 22: //Fake trinkets, only appear if you've collected them
|
|
entities[k].rule = 3; entities[k].type = 7;
|
|
entities[k].size = 0; entities[k].tile = 22;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].colour = 3;
|
|
entities[k].onentity = 0;
|
|
entities[k].animate = 100;
|
|
|
|
//Check if it's already been collected
|
|
entities[k].para = vx;
|
|
if (collect[vx] == 0) entities[k].active = false;
|
|
break;
|
|
case 23: //SWN Enemies
|
|
//Given a different behavior, these enemies are especially for SWN mode and disappear outside the screen.
|
|
entities[k].rule = 1; entities[k].type = 23;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].behave = vx; entities[k].para = vy;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].cx = 0; entities[k].cy = 0;
|
|
|
|
entities[k].x1 = -2000; entities[k].y1 = -100;
|
|
entities[k].x2 = 5200; entities[k].y2 = 340;
|
|
|
|
entities[k].harmful = true;
|
|
|
|
//initilise tiles here based on behavior
|
|
entities[k].size = 12; //don't wrap around
|
|
entities[k].colour = 21;
|
|
entities[k].tile = 78; //default case
|
|
entities[k].animate = 1;
|
|
if (game.swngame == 1) {
|
|
//set colour based on current state
|
|
entities[k].colour = swncolour(game.swncolstate);
|
|
}
|
|
break;
|
|
case 24: // Super Crew Member
|
|
//This special crewmember is way more advanced than the usual kind, and can interact with game objects
|
|
entities[k].rule = 6; entities[k].type = 14; //A special case!
|
|
entities[k].colour = vx;
|
|
if(vx==16){
|
|
//victoria is sad!
|
|
if (vy == 2) vy = 1;
|
|
}else {
|
|
if (vy == 2) vy = 0;
|
|
}
|
|
if (vy == 0) {
|
|
entities[k].tile = 0;
|
|
}else {
|
|
entities[k].tile = 144;
|
|
}
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].cx = 6; entities[k].cy = 2;
|
|
entities[k].w = 12; entities[k].h = 21;
|
|
entities[k].dir = 1;
|
|
|
|
entities[k].x1 = -2000; entities[k].y1 = -100;
|
|
entities[k].x2 = 5200; entities[k].y2 = 340;
|
|
|
|
entities[k].state = p1;
|
|
entities[k].para = p2;
|
|
|
|
if (p1 == 17) {
|
|
entities[k].dir = p2;
|
|
}
|
|
|
|
entities[k].gravity = true;
|
|
break;
|
|
case 25: //Trophies
|
|
entities[k].rule = 3; entities[k].type = 15;
|
|
entities[k].size = 0;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].colour = 4;
|
|
entities[k].onentity = 1;
|
|
entities[k].animate = 100;
|
|
entities[k].para = vy;
|
|
|
|
//Decide tile here based on given achievement: both whether you have them and what they are
|
|
//default is just a trophy base:
|
|
entities[k].tile = 180 + vx;
|
|
switch(vy) {
|
|
case 1: if(game.bestrank[0]>=3) { entities[k].tile = 184 + vx; entities[k].colour = 31;} break;
|
|
case 2: if(game.bestrank[1]>=3) { entities[k].tile = 186 + vx; entities[k].colour = 35;} break;
|
|
case 3: if(game.bestrank[2]>=3) { entities[k].tile = 184 + vx; entities[k].colour = 33;} break;
|
|
case 4: if(game.bestrank[3]>=3) { entities[k].tile = 184 + vx; entities[k].colour = 32;} break;
|
|
case 5: if(game.bestrank[4]>=3) { entities[k].tile = 184 + vx; entities[k].colour = 34;} break;
|
|
case 6: if(game.bestrank[5]>=3) { entities[k].tile = 184 + vx; entities[k].colour = 30;} break;
|
|
|
|
case 7:
|
|
if(game.unlock[5]){
|
|
entities[k].tile = 188 + vx;
|
|
entities[k].colour = 37;
|
|
entities[k].h += 3;
|
|
}
|
|
break;
|
|
case 8:
|
|
if(game.unlock[19]){
|
|
entities[k].tile = 188 + vx;
|
|
entities[k].colour = 37;
|
|
entities[k].h += 3;
|
|
}
|
|
break;
|
|
|
|
case 9:
|
|
if (game.bestgamedeaths > -1) {
|
|
if (game.bestgamedeaths <= 50) {
|
|
entities[k].tile = 182 + vx; entities[k].colour = 40;
|
|
}
|
|
}
|
|
break;
|
|
case 10:
|
|
if (game.bestgamedeaths > -1) {
|
|
if (game.bestgamedeaths <= 100) {
|
|
entities[k].tile = 182 + vx; entities[k].colour = 36;
|
|
}
|
|
}
|
|
break;
|
|
case 11:
|
|
if (game.bestgamedeaths > -1) {
|
|
if (game.bestgamedeaths <= 250) {
|
|
entities[k].tile = 182 + vx; entities[k].colour = 38;
|
|
}
|
|
}
|
|
break;
|
|
case 12:
|
|
if (game.bestgamedeaths > -1) {
|
|
if (game.bestgamedeaths <= 500) {
|
|
entities[k].tile = 182 + vx; entities[k].colour = 39;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 13: if(game.swnbestrank>=1) { entities[k].tile = 182 + vx; entities[k].colour = 39;} break;
|
|
case 14: if(game.swnbestrank>=2) { entities[k].tile = 182 + vx; entities[k].colour = 39;} break;
|
|
case 15: if(game.swnbestrank>=3) { entities[k].tile = 182 + vx; entities[k].colour = 39;} break;
|
|
case 16: if(game.swnbestrank>=4) { entities[k].tile = 182 + vx; entities[k].colour = 38;} break;
|
|
case 17: if(game.swnbestrank>=5) { entities[k].tile = 182 + vx; entities[k].colour = 36;} break;
|
|
case 18: if(game.swnbestrank>=6) { entities[k].tile = 182 + vx; entities[k].colour = 40;} break;
|
|
|
|
case 19:
|
|
if(game.unlock[20]){
|
|
entities[k].tile = 3; entities[k].colour = 102;
|
|
entities[k].size = 13;
|
|
entities[k].xp -= 64; entities[k].yp -= 128;
|
|
}
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
case 26: //Epilogue super warp token
|
|
entities[k].rule = 3; entities[k].type = 11;
|
|
entities[k].size = 0; entities[k].tile = 18;
|
|
entities[k].xp = xp; entities[k].yp = yp;
|
|
entities[k].w = 16; entities[k].h = 16;
|
|
entities[k].colour = 3;
|
|
entities[k].onentity = 0;
|
|
entities[k].animate = 100;
|
|
entities[k].para = vy;
|
|
entities[k].size = 13;
|
|
break;
|
|
case 51: //Vertical Warp Line
|
|
entities[k].rule = 5;
|
|
entities[k].type = 51;
|
|
entities[k].size = 6;
|
|
entities[k].life = 0;
|
|
entities[k].xp = xp;
|
|
entities[k].yp = yp;
|
|
entities[k].w = 1;
|
|
entities[k].h = vx;
|
|
//entities[k].colour = 0;
|
|
entities[k].onentity = 1;
|
|
entities[k].invis=true;
|
|
break;
|
|
case 52: //Vertical Warp Line
|
|
entities[k].rule = 5;
|
|
entities[k].type = 52;
|
|
entities[k].size = 6;
|
|
entities[k].life = 0;
|
|
entities[k].xp = xp;
|
|
entities[k].yp = yp;
|
|
entities[k].w = 1;
|
|
entities[k].h = vx;
|
|
//entities[k].colour = 0;
|
|
entities[k].onentity = 1;
|
|
entities[k].invis=true;
|
|
break;
|
|
case 53: //Horizontal Warp Line
|
|
entities[k].rule = 7;
|
|
entities[k].type = 53;
|
|
entities[k].size = 5;
|
|
entities[k].life = 0;
|
|
entities[k].xp = xp;
|
|
entities[k].yp = yp;
|
|
entities[k].w = vx;
|
|
entities[k].h = 1;
|
|
entities[k].onentity = 1;
|
|
entities[k].invis=true;
|
|
break;
|
|
case 54: //Horizontal Warp Line
|
|
entities[k].rule = 7;
|
|
entities[k].type = 54;
|
|
entities[k].size = 5;
|
|
entities[k].life = 0;
|
|
entities[k].xp = xp;
|
|
entities[k].yp = yp;
|
|
entities[k].w = vx;
|
|
entities[k].h = 1;
|
|
entities[k].onentity = 1;
|
|
entities[k].invis=true;
|
|
break;
|
|
case 55: // Crew Member (custom, collectable)
|
|
//1 - position in array
|
|
//2 - colour
|
|
entities[k].rule = 3;
|
|
entities[k].type = 55;
|
|
if(customcrewmoods[int(vy)]==1){
|
|
entities[k].tile = 144;
|
|
}else{
|
|
entities[k].tile = 0;
|
|
}
|
|
entities[k].colour = crewcolour(int(vy));
|
|
entities[k].xp = xp;
|
|
entities[k].yp = yp;
|
|
entities[k].cx = 6;
|
|
entities[k].cy = 2;
|
|
entities[k].w = 12;
|
|
entities[k].h = 21;
|
|
entities[k].dir = 0;
|
|
|
|
entities[k].state = 0;
|
|
entities[k].onentity = 1;
|
|
//entities[k].state = vx;
|
|
|
|
entities[k].gravity = true;
|
|
|
|
//Check if it's already been collected
|
|
entities[k].para = vx;
|
|
if (customcollect[vx] == 1) entities[k].active = false;
|
|
break;
|
|
case 56: //Custom enemy
|
|
entities[k].rule = 1;
|
|
entities[k].type = 1;
|
|
entities[k].xp = xp;
|
|
entities[k].yp = yp;
|
|
entities[k].behave = vx;
|
|
entities[k].para = vy;
|
|
entities[k].w = 16;
|
|
entities[k].h = 16;
|
|
entities[k].cx = 0;
|
|
entities[k].cy = 0;
|
|
|
|
entities[k].x1 = p1;
|
|
entities[k].y1 = p2;
|
|
entities[k].x2 = p3;
|
|
entities[k].y2 = p4;
|
|
|
|
entities[k].harmful = true;
|
|
|
|
switch(customenemy){
|
|
case 0: setenemyroom(k, 4+100, 0+100); break;
|
|
case 1: setenemyroom(k, 2+100, 0+100); break;
|
|
case 2: setenemyroom(k, 12+100, 3+100); break;
|
|
case 3: setenemyroom(k, 13+100, 12+100); break;
|
|
case 4: setenemyroom(k, 16+100, 9+100); break;
|
|
case 5: setenemyroom(k, 19+100, 1+100); break;
|
|
case 6: setenemyroom(k, 19+100, 2+100); break;
|
|
case 7: setenemyroom(k, 18+100, 3+100); break;
|
|
case 8: setenemyroom(k, 16+100, 0+100); break;
|
|
case 9: setenemyroom(k, 14+100, 2+100); break;
|
|
default: setenemyroom(k, 4+100, 0+100); break;
|
|
}
|
|
|
|
//Set colour based on room tile
|
|
//Set custom colours
|
|
if(customplatformtile>0){
|
|
var entcol:int = (customplatformtile / 12);
|
|
switch(entcol){
|
|
//RED
|
|
case 3: case 7: case 12: case 23: case 28:
|
|
case 34: case 42: case 48: case 58:
|
|
entities[k].colour = 6; break;
|
|
//GREEN
|
|
case 5: case 9: case 22: case 25: case 29:
|
|
case 31: case 38: case 46: case 52: case 53:
|
|
entities[k].colour = 7; break;
|
|
//BLUE
|
|
case 1: case 6: case 14: case 27: case 33:
|
|
case 44: case 50: case 57:
|
|
entities[k].colour = 12; break;
|
|
//YELLOW
|
|
case 4: case 17: case 24: case 30: case 37:
|
|
case 45: case 51: case 55:
|
|
entities[k].colour = 9; break;
|
|
//PURPLE
|
|
case 2: case 11: case 15: case 19: case 32:
|
|
case 36: case 49:
|
|
entities[k].colour = 20; break;
|
|
//CYAN
|
|
case 8: case 10: case 13: case 18: case 26:
|
|
case 35: case 41: case 47: case 54:
|
|
entities[k].colour = 11; break;
|
|
//PINK
|
|
case 16: case 20: case 39: case 43: case 56:
|
|
entities[k].colour = 8; break;
|
|
//ORANGE
|
|
case 21: case 40:
|
|
entities[k].colour = 17; break;
|
|
default:
|
|
entities[k].colour = 6;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
public function updateentities(i:int, help:helpclass, game:gameclass, music:musicclass):Boolean {
|
|
if(entities[i].active){
|
|
if(entities[i].statedelay<=0){
|
|
switch(entities[i].type) {
|
|
case 0: //Player
|
|
if (entities[i].state == 0) {
|
|
}
|
|
break;
|
|
case 1: //Movement behaviors
|
|
//Enemies can have a number of different behaviors:
|
|
switch(entities[i].behave) {
|
|
case 0: //Bounce, Start moving down
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].state = 3; updateentities(i, help, game, music);
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].outside()) entities[i].state = entities[i].onwall;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vy = -entities[i].para; entities[i].onwall = 3; entities[i].state = 1;
|
|
}else if (entities[i].state == 3) {
|
|
entities[i].vy = entities[i].para; entities[i].onwall = 2; entities[i].state = 1; }
|
|
break;
|
|
case 1: //Bounce, Start moving up
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].state = 2; updateentities(i, help, game, music);
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].outside()) entities[i].state = entities[i].onwall;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vy = -entities[i].para; entities[i].onwall = 3; entities[i].state = 1;
|
|
}else if (entities[i].state == 3) {
|
|
entities[i].vy = entities[i].para; entities[i].onwall = 2; entities[i].state = 1; }
|
|
break;
|
|
case 2: //Bounce, Start moving left
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].state = 3; updateentities(i, help, game, music);
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].outside()) entities[i].state = entities[i].onwall;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vx = entities[i].para; entities[i].onwall = 3; entities[i].state = 1;
|
|
}else if (entities[i].state == 3) {
|
|
entities[i].vx = -entities[i].para; entities[i].onwall = 2; entities[i].state = 1; }
|
|
break;
|
|
case 3: //Bounce, Start moving right
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].state = 3; updateentities(i, help, game, music);
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].outside()) entities[i].state = entities[i].onwall;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vx = -entities[i].para; entities[i].onwall = 3; entities[i].state = 1;
|
|
}else if (entities[i].state == 3) {
|
|
entities[i].vx = entities[i].para; entities[i].onwall = 2; entities[i].state = 1; }
|
|
break;
|
|
case 4: //Always move left
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vx = entities[i].para;
|
|
}
|
|
break;
|
|
case 5: //Always move right
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vx = entities[i].para;
|
|
entities[i].state = 1
|
|
entities[i].onwall = 2;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vx = 0; entities[i].onwall = 0;
|
|
entities[i].xp -= entities[i].para;
|
|
entities[i].statedelay=8; entities[i].state=0;
|
|
}
|
|
break;
|
|
case 6: //Always move up
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vy = entities[i].para;
|
|
entities[i].state = 1;
|
|
entities[i].onwall = 2;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vy = -entities[i].para; entities[i].onwall = 0;
|
|
entities[i].yp -= entities[i].para;
|
|
entities[i].statedelay=8; entities[i].state=0;
|
|
}
|
|
break;
|
|
case 7: //Always move down
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vx = entities[i].para;
|
|
}
|
|
break;
|
|
case 8: case 9:
|
|
//Threadmill: don't move, just impart velocity
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vx = 0;
|
|
entities[i].state = 1;
|
|
entities[i].onwall = 0;
|
|
}
|
|
break;
|
|
case 10:
|
|
//Emitter: shoot an enemy every so often
|
|
if (entities[i].state == 0) {
|
|
createentity(game, entities[i].xp+28, entities[i].yp, 1, 10, 1);
|
|
entities[i].state = 1; entities[i].statedelay = 12;
|
|
}else if (entities[i].state == 1) {
|
|
entities[i].state = 0;
|
|
}
|
|
break;
|
|
case 11: //Always move right, destroy when outside screen
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vx = entities[i].para;
|
|
entities[i].state = 1
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].xp >= 335) entities[i].active = false;
|
|
if (game.roomx == 117) {
|
|
if (entities[i].xp >= (33*8)-32) entities[i].active = false;
|
|
//collector for LIES
|
|
}
|
|
}
|
|
break;
|
|
case 12:
|
|
//Emitter: shoot an enemy every so often (up)
|
|
if (entities[i].state == 0) {
|
|
createentity(game, entities[i].xp, entities[i].yp, 1, 12, 1);
|
|
entities[i].state = 1; entities[i].statedelay = 16;
|
|
}else if (entities[i].state == 1) {
|
|
entities[i].state = 0;
|
|
}
|
|
break;
|
|
case 13: //Always move up, destroy when outside screen
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vy = entities[i].para;
|
|
entities[i].state = 1
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].yp <= -60) entities[i].active = false;
|
|
if (game.roomy == 108) {
|
|
if (entities[i].yp <= 60) entities[i].active = false;
|
|
//collector for factory
|
|
}
|
|
}
|
|
break;
|
|
case 14: //Very special hack: as two, but doesn't move in specific circumstances
|
|
if (entities[i].state == 0) { //Init
|
|
for (j = 0; j < nentity; j++) {
|
|
if (entities[j].type == 2 && entities[j].state==3 && entities[j].xp==entities[i].xp-32) {
|
|
entities[i].state = 3; updateentities(i, help, game, music);
|
|
}
|
|
}
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].outside()) entities[i].state = entities[i].onwall;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vx = entities[i].para; entities[i].onwall = 3; entities[i].state = 1;
|
|
}else if (entities[i].state == 3) {
|
|
entities[i].vx = -entities[i].para; entities[i].onwall = 2; entities[i].state = 1; }
|
|
break;
|
|
case 15: //As above, but for 3!
|
|
if (entities[i].state == 0) { //Init
|
|
for (j = 0; j < nentity; j++) {
|
|
if (entities[j].type == 2 && entities[j].state==3 && entities[j].xp==entities[i].xp+32) {
|
|
entities[i].state = 3; updateentities(i, help, game, music);
|
|
}
|
|
}
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].outside()) entities[i].state = entities[i].onwall;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vx = -entities[i].para; entities[i].onwall = 3; entities[i].state = 1;
|
|
}else if (entities[i].state == 3) {
|
|
entities[i].vx = entities[i].para; entities[i].onwall = 2; entities[i].state = 1; }
|
|
break;
|
|
case 16: //MAVERICK BUS FOLLOWS HIS OWN RULES
|
|
if (entities[i].state == 0) { //Init
|
|
//first, y position
|
|
if (entities[getplayer()].yp > 14 * 8) {
|
|
entities[i].tile = 120;
|
|
entities[i].yp = (28*8)-62;
|
|
}else {
|
|
entities[i].tile = 96;
|
|
entities[i].yp = 24;
|
|
}
|
|
//now, x position
|
|
if (entities[getplayer()].xp > 20 * 8) {
|
|
//approach from the left
|
|
entities[i].xp = -64;
|
|
entities[i].state = 2; updateentities(i, help, game, music); //right
|
|
}else {
|
|
//approach from the left
|
|
entities[i].xp = 320;
|
|
entities[i].state = 3; updateentities(i, help, game, music); //left
|
|
}
|
|
|
|
}else if (entities[i].state == 1) {
|
|
if (entities[i].outside()) entities[i].state = entities[i].onwall;
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].vx = entities[i].para; entities[i].onwall = 3; entities[i].state = 1;
|
|
}else if (entities[i].state == 3) {
|
|
entities[i].vx = -entities[i].para; entities[i].onwall = 2; entities[i].state = 1; }
|
|
break;
|
|
case 17: //Special for ASCII Snake (left)
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].statedelay = 6; entities[i].xp -= entities[i].para;
|
|
}
|
|
break;
|
|
case 18: //Special for ASCII Snake (right)
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].statedelay = 6; entities[i].xp += entities[i].para;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 2: //Disappearing platforms
|
|
//wait for collision
|
|
if (entities[i].state == 1) {
|
|
entities[i].life = 12;
|
|
entities[i].state = 2; entities[i].onentity = 0;
|
|
|
|
music.playef(7,10);
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].life--;
|
|
if (entities[i].life % 3 == 0) entities[i].tile++;
|
|
if (entities[i].life <= 0) {
|
|
removeblockat(entities[i].xp, entities[i].yp);
|
|
entities[i].state = 3;// = false;
|
|
entities[i].invis = true;
|
|
}
|
|
}else if (entities[i].state == 3) {
|
|
//wait until recharged!
|
|
}else if (entities[i].state == 4) {
|
|
//restart!
|
|
createblock(0, entities[i].xp, entities[i].yp, 32, 8);
|
|
entities[i].state = 4;
|
|
entities[i].invis = false;
|
|
entities[i].tile--;
|
|
entities[i].state++; entities[i].onentity = 1;
|
|
}else if (entities[i].state == 5) {
|
|
entities[i].life+=3;
|
|
if (entities[i].life % 3 == 0) entities[i].tile--;
|
|
if (entities[i].life >= 12) {
|
|
entities[i].life = 12;
|
|
entities[i].state = 0;
|
|
entities[i].tile++;
|
|
}
|
|
}
|
|
break;
|
|
case 3: //Breakable blocks
|
|
//Only counts if vy of player entity is non zero
|
|
if (entities[i].state == 1) {
|
|
j = getplayer();
|
|
//if (entities[j].vy > 0.5 && (entities[j].yp+entities[j].h<=entities[i].yp+6)) {
|
|
entities[i].life = 4;
|
|
entities[i].state = 2; entities[i].onentity = 0;
|
|
music.playef(6,10);
|
|
/*}else if (entities[j].vy <= -0.5 && (entities[j].yp>=entities[i].yp+2)) {
|
|
entities[i].life = 4;
|
|
entities[i].state = 2; entities[i].onentity = 0;
|
|
}else {
|
|
entities[i].state = 0;
|
|
}*/
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].life--;
|
|
entities[i].tile++;
|
|
if (entities[i].life <= 0) {
|
|
removeblockat(entities[i].xp, entities[i].yp);
|
|
entities[i].active = false;
|
|
}
|
|
}
|
|
break;
|
|
case 4: //Gravity token
|
|
//wait for collision
|
|
if (entities[i].state == 1) {
|
|
entities[i].active = false;
|
|
game.gravitycontrol = (game.gravitycontrol + 1) % 2;
|
|
|
|
}
|
|
break;
|
|
case 5: //Particle sprays
|
|
if (entities[i].state == 0) {
|
|
entities[i].life--;
|
|
if (entities[i].life < 0) entities[i].active = false;
|
|
}
|
|
break;
|
|
case 6: //Small pickup
|
|
//wait for collision
|
|
if (entities[i].state == 1) {
|
|
game.coins++;
|
|
music.playef(4,10);
|
|
collect[entities[i].para] = 1;
|
|
|
|
entities[i].active = false;
|
|
}
|
|
break;
|
|
case 7: //Found a trinket
|
|
//wait for collision
|
|
if (entities[i].state == 1) {
|
|
game.trinkets++;
|
|
if (game.intimetrial) {
|
|
collect[entities[i].para] = 1;
|
|
music.playef(25,10);
|
|
}else{
|
|
game.state = 1000;
|
|
//music.haltdasmusik();
|
|
music.silencedasmusik();
|
|
music.playef(3,10);
|
|
collect[entities[i].para] = 1;
|
|
if (game.trinkets > game.stat_trinkets) {
|
|
game.stat_trinkets = game.trinkets;
|
|
}
|
|
}
|
|
|
|
entities[i].active = false;
|
|
}
|
|
break;
|
|
case 8: //Savepoints
|
|
//wait for collision
|
|
if (entities[i].state == 1) {
|
|
//First, deactivate all other savepoints
|
|
for (j = 0; j < nentity; j++) {
|
|
if (entities[j].type == 8 && entities[j].active) {
|
|
entities[j].colour = 4; entities[j].onentity = 1;
|
|
}
|
|
}
|
|
entities[i].colour = 5;
|
|
entities[i].onentity = 0;
|
|
game.savepoint = entities[i].para;
|
|
music.playef(5,10);
|
|
|
|
game.savex = entities[i].xp - 4;
|
|
|
|
if (entities[i].tile == 20) {
|
|
game.savey = entities[i].yp - 1;
|
|
game.savegc = 1;
|
|
}else if (entities[i].tile == 21) {
|
|
game.savey = entities[i].yp-8;
|
|
game.savegc = 0;
|
|
}
|
|
|
|
game.saverx = game.roomx; game.savery = game.roomy;
|
|
game.savedir = entities[getplayer()].dir;
|
|
entities[i].state = 0;
|
|
|
|
if(!game.mobilequicksave_thisroom){
|
|
game.autoquicksave = true;
|
|
game.mobilequicksave_thisroom = true;
|
|
}
|
|
}
|
|
break;
|
|
case 9: //Gravity Lines
|
|
if (entities[i].state == 1) {
|
|
entities[i].life--;
|
|
entities[i].onentity = 0;
|
|
|
|
if (entities[i].life <= 0) {
|
|
entities[i].state = 0;
|
|
entities[i].onentity = 1;
|
|
}
|
|
}
|
|
break;
|
|
case 10: //Vertical gravity Lines
|
|
if (entities[i].state == 1) {
|
|
entities[i].onentity = 3;
|
|
entities[i].state = 2;
|
|
|
|
|
|
music.playef(8,10);
|
|
game.gravitycontrol = (game.gravitycontrol + 1) % 2;
|
|
game.totalflips++;
|
|
temp = getplayer();
|
|
if (game.gravitycontrol == 0) {
|
|
if (entities[temp].vy < 3) entities[temp].vy = 3;
|
|
}else {
|
|
if (entities[temp].vy > -3) entities[temp].vy = -3;
|
|
}
|
|
}else if (entities[i].state == 2) {
|
|
entities[i].life--;
|
|
if (entities[i].life <= 0) {
|
|
entities[i].state = 0;
|
|
entities[i].onentity = 1;
|
|
}
|
|
}else if (entities[i].state == 3) {
|
|
entities[i].state = 2; entities[i].life = 4;
|
|
entities[i].onentity = 3;
|
|
}else if (entities[i].state == 4) {
|
|
//Special case for room initilisations: As state one, except without the reversal
|
|
entities[i].onentity = 3;
|
|
entities[i].state = 2;
|
|
}
|
|
break;
|
|
case 11: //Warp point
|
|
//wait for collision
|
|
if (entities[i].state == 1) {
|
|
//Depending on the room the warp point is in, teleport to a new location!
|
|
entities[i].onentity = 0;
|
|
//play a sound or somefink
|
|
music.playef(10);
|
|
game.teleport = true;
|
|
|
|
game.edteleportent = i;
|
|
//for the multiple room:
|
|
if (int(entities[i].xp) == 12*8) game.teleportxpos = 1;
|
|
if (int(entities[i].xp) == 5*8) game.teleportxpos = 2;
|
|
if (int(entities[i].xp) == 28*8) game.teleportxpos = 3;
|
|
if (int(entities[i].xp) == 21*8) game.teleportxpos = 4;
|
|
}
|
|
break;
|
|
case 12: //Crew member
|
|
//Somewhat complex AI: exactly what they do depends on room, location, state etc
|
|
//At state 0, do nothing at all.
|
|
if (entities[i].state == 1) {
|
|
//happy!
|
|
if (entities[k].rule == 6) entities[k].tile = 0;
|
|
if (entities[k].rule == 7) entities[k].tile = 6;
|
|
//Stay close to the hero!
|
|
j = getplayer();
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
|
|
//Special rules:
|
|
if (game.roomx == 110 && game.roomy == 105) {
|
|
if (entities[i].xp < 155) { if (entities[i].ax < 0) entities[i].ax = 0; }
|
|
}
|
|
}else if (entities[i].state == 2) {
|
|
//Basic rules, don't change expression
|
|
j = getplayer();
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
}else if (entities[i].state == 10) {
|
|
//Everything from 10 on is for cutscenes
|
|
//Basic rules, don't change expression
|
|
j = getplayer();
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
}else if (entities[i].state == 11) {
|
|
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
|
j=getcrewman(1); //purple
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
}else if (entities[i].state == 12) {
|
|
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
|
j=getcrewman(2); //yellow
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
}else if (entities[i].state == 13) {
|
|
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
|
j=getcrewman(3); //red
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
}else if (entities[i].state == 14) {
|
|
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
|
j=getcrewman(4); //green
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
}else if (entities[i].state == 15) {
|
|
//11-15 means to follow a specific character, in crew order (cyan, purple, yellow, red, green, blue)
|
|
j=getcrewman(5); //blue
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
}else if (entities[i].state == 16) {
|
|
//Follow a position: given an x coordinate, seek it out.
|
|
if (entities[i].para > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[i].para < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[i].para > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[i].para < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
}else if (entities[i].state == 17) {
|
|
//stand still
|
|
}else if (entities[i].state == 18) {
|
|
//Stand still and face the player
|
|
j = getplayer();
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
}else if (entities[i].state == 19) {
|
|
//Walk right off the screen after time t
|
|
if (entities[i].para <= 0) {
|
|
entities[i].dir = 1;
|
|
entities[i].ax = 3;
|
|
}else {
|
|
entities[i].para--;
|
|
}
|
|
}else if (entities[i].state == 20) {
|
|
//Panic! For briefing script
|
|
if (entities[i].life == 0) {
|
|
//walk left for a bit
|
|
entities[i].ax = 0;
|
|
if (40 > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (40 < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (40 > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (40 < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
if (entities[i].ax == 0) { entities[i].life = 1; entities[i].para = 30;}
|
|
}else if (entities[i].life == 1) {
|
|
//Stand around for a bit
|
|
entities[i].para--;
|
|
if (entities[i].para <= 0) {
|
|
entities[i].life++;
|
|
}
|
|
}else if (entities[i].life == 2) {
|
|
//walk right for a bit
|
|
entities[i].ax = 0;
|
|
if (280 > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (280 < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (280 > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (280 < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
if (entities[i].ax == 0) { entities[i].life = 3; entities[i].para = 30;}
|
|
}else if (entities[i].life == 3) {
|
|
//Stand around for a bit
|
|
entities[i].para--;
|
|
if (entities[i].para <= 0) {
|
|
entities[i].life=0;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 13: //Terminals (very similar to savepoints)
|
|
//wait for collision
|
|
if (entities[i].state == 1) {
|
|
entities[i].colour = 5;
|
|
entities[i].onentity = 0;
|
|
music.playef(17,10);
|
|
|
|
entities[i].state = 0;
|
|
}
|
|
break;
|
|
case 14: //Super Crew member
|
|
//Actually needs less complex AI than the scripting crewmember
|
|
if (entities[i].state == 0) {
|
|
//follow player, but only if he's on the floor!
|
|
j = getplayer();
|
|
if(entities[j].onground>0){
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp>15 && entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
if (entities[j].xp > entities[i].xp + 45) { entities[i].ax = 3;
|
|
}else if (entities[j].xp < entities[i].xp - 45) { entities[i].ax = -3; }
|
|
if (entities[i].ax < 0 && entities[i].xp < 60) {
|
|
entities[i].ax = 0;
|
|
}
|
|
}else {
|
|
if (entities[j].xp > entities[i].xp + 5) { entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) { entities[i].dir = 0; }
|
|
|
|
entities[i].ax = 0;
|
|
}
|
|
|
|
if (entities[i].xp > 240) {
|
|
entities[i].ax = 3; entities[i].dir = 1;
|
|
}
|
|
if (entities[i].xp >= 310) {
|
|
game.scmprogress++;
|
|
entities[i].active = false;
|
|
}
|
|
}
|
|
break;
|
|
case 15: //Trophy
|
|
//wait for collision
|
|
if (entities[i].state == 1) {
|
|
trophytext+=2; if (trophytext > 30) trophytext = 30;
|
|
trophytype = entities[i].para;
|
|
|
|
entities[i].state = 0;
|
|
}
|
|
break;
|
|
case 23:
|
|
//swn game!
|
|
switch(entities[i].behave) {
|
|
case 0:
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vx = 7;
|
|
if (entities[i].xp > 320) entities[i].active = false;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (entities[i].state == 0) { //Init
|
|
entities[i].vx = -7;
|
|
if (entities[i].xp <-20) entities[i].active = false;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 51: //Vertical warp line
|
|
if (entities[i].state == 2){
|
|
var j:int = getplayer();
|
|
if(entities[j].xp<=307){
|
|
customwarpmodevon=false;
|
|
entities[i].state = 0;
|
|
}
|
|
}else if (entities[i].state == 1){
|
|
entities[i].state = 2;
|
|
entities[i].statedelay = 2;
|
|
entities[i].onentity = 1;
|
|
customwarpmodevon=true;
|
|
}
|
|
break;
|
|
case 52: //Vertical warp line
|
|
if (entities[i].state == 2){
|
|
j = getplayer();
|
|
if(entities[j].xp<=307){
|
|
customwarpmodevon=false;
|
|
entities[i].state = 0;
|
|
}
|
|
}else if (entities[i].state == 1){
|
|
entities[i].state = 2;
|
|
entities[i].statedelay = 2;
|
|
entities[i].onentity = 1;
|
|
customwarpmodevon=true;
|
|
}
|
|
break;
|
|
case 53: //Warp lines Horizonal
|
|
if (entities[i].state == 2){
|
|
customwarpmodehon=false;
|
|
entities[i].state = 0;
|
|
}else if (entities[i].state == 1){
|
|
entities[i].state = 2;
|
|
entities[i].statedelay = 2;
|
|
entities[i].onentity = 1;
|
|
customwarpmodehon=true;
|
|
}
|
|
break;
|
|
case 54: //Warp lines Horizonal
|
|
////if (entities[i].state != 0) {
|
|
//trace("entity 54 is still here! ", i, ": state = ", entities[i].state, String(int(Math.random()*100)), entities[i].active);
|
|
////}
|
|
if (entities[i].state == 2){
|
|
customwarpmodehon=false;
|
|
entities[i].state = 0;
|
|
}else if (entities[i].state == 1){
|
|
entities[i].state = 2;
|
|
entities[i].statedelay = 2;
|
|
entities[i].onentity = 1;
|
|
customwarpmodehon=true;
|
|
}
|
|
break;
|
|
case 55: //Collectable crewmate
|
|
//wait for collision
|
|
if (entities[i].state == 0){
|
|
//Basic rules, don't change expression
|
|
j = getplayer();
|
|
if (entities[j].xp > entities[i].xp + 5){
|
|
entities[i].dir = 1;
|
|
}else if (entities[j].xp < entities[i].xp - 5) {
|
|
entities[i].dir = 0;
|
|
}
|
|
}else if (entities[i].state == 1){
|
|
game.crewmates++;
|
|
if (game.intimetrial){
|
|
customcollect[entities[i].para] = 1;
|
|
music.playef(27,10);
|
|
}else{
|
|
game.state = 1010;
|
|
//music.haltdasmusik();
|
|
if(music.currentsong!=-1) music.silencedasmusik();
|
|
music.playef(27,10);
|
|
customcollect[entities[i].para] = 1;
|
|
}
|
|
|
|
entities[i].active = false;
|
|
}
|
|
break;
|
|
case 100: //The teleporter
|
|
if (entities[i].state == 1) {
|
|
//if inactive, activate!
|
|
if (entities[i].tile == 1) {
|
|
music.playef(18, 10);
|
|
entities[i].onentity = 0;
|
|
entities[i].tile = 2;
|
|
entities[i].colour = 101;
|
|
if(!game.intimetrial && !game.nodeathmode){
|
|
game.state = 2000; game.statedelay = 0;
|
|
}
|
|
|
|
game.activetele = true;
|
|
game.teleblock.x = entities[i].xp - 32; game.teleblock.y = entities[i].yp - 32;
|
|
game.teleblock.width = 160; game.teleblock.height = 160;
|
|
|
|
|
|
//Alright, let's set this as our savepoint too
|
|
//First, deactivate all other savepoints
|
|
for (j = 0; j < nentity; j++) {
|
|
if (entities[j].type == 8 && entities[j].active) {
|
|
entities[j].colour = 4; entities[j].onentity = 1;
|
|
}
|
|
}
|
|
game.savepoint = entities[i].para;
|
|
game.savex = entities[i].xp + 44;
|
|
game.savey = entities[i].yp + 44;
|
|
game.savegc = 0;
|
|
|
|
game.saverx = game.roomx; game.savery = game.roomy;
|
|
game.savedir = entities[getplayer()].dir;
|
|
entities[i].state = 0;
|
|
|
|
if(!game.mobilequicksave_thisroom){
|
|
game.autoquicksave = true;
|
|
game.mobilequicksave_thisroom = true;
|
|
}
|
|
}
|
|
|
|
entities[i].state = 0;
|
|
}else if (entities[i].state == 2) {
|
|
//Initilise the teleporter without changing the game state or playing sound
|
|
entities[i].onentity = 0;
|
|
entities[i].tile = 6;
|
|
entities[i].colour = 102;
|
|
|
|
game.activetele = true;
|
|
game.teleblock.x = entities[i].xp - 32; game.teleblock.y = entities[i].yp - 32;
|
|
game.teleblock.width = 160; game.teleblock.height = 160;
|
|
|
|
entities[i].state = 0;
|
|
}
|
|
break;
|
|
}
|
|
}else {
|
|
entities[i].statedelay--;
|
|
if (entities[i].statedelay < 0) entities[i].statedelay = 0;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function animateentities(i:int, game:gameclass, help:helpclass):void {
|
|
if(entities[i].active){
|
|
if(entities[i].statedelay<=0){
|
|
switch(entities[i].type) {
|
|
case 0:
|
|
entities[i].framedelay--;
|
|
if(entities[i].dir==1){
|
|
entities[i].drawframe=entities[i].tile;
|
|
}else{
|
|
entities[i].drawframe=entities[i].tile+3;
|
|
}
|
|
|
|
if(entities[i].onground>0 || entities[i].onroof>0){
|
|
if(int(entities[i].vx)!=0){
|
|
//Walking
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay=4;
|
|
entities[i].walkingframe++;
|
|
}
|
|
if (entities[i].walkingframe >=2) entities[i].walkingframe=0;
|
|
entities[i].drawframe += entities[i].walkingframe + 1;
|
|
}
|
|
|
|
if (entities[i].onroof > 0) entities[i].drawframe += 6;
|
|
}else {
|
|
entities[i].drawframe ++;
|
|
if (game.gravitycontrol == 1) {
|
|
entities[i].drawframe += 6;
|
|
}
|
|
}
|
|
|
|
if (game.deathseq > -1) {
|
|
entities[i].drawframe=13;
|
|
if (entities[i].dir == 1) entities[i].drawframe = 12;
|
|
if (game.gravitycontrol == 1) entities[i].drawframe += 2;
|
|
}
|
|
break;
|
|
case 1: case 23:
|
|
//Variable animation
|
|
switch(entities[i].animate) {
|
|
case 0:
|
|
//Simple oscilation
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 8;
|
|
if(entities[i].actionframe==0){
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 4) {
|
|
entities[i].walkingframe = 2;
|
|
entities[i].actionframe = 1;
|
|
}
|
|
}else {
|
|
entities[i].walkingframe--;
|
|
if (entities[i].walkingframe == -1) {
|
|
entities[i].walkingframe = 1;
|
|
entities[i].actionframe = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
break;
|
|
case 1:
|
|
//Simple Loop
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 8;
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 4) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
break;
|
|
case 2:
|
|
//Simpler Loop (just two frames)
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 2;
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 2) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
break;
|
|
case 3:
|
|
//Simpler Loop (just two frames, but double sized)
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 2;
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 2) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += (entities[i].walkingframe*2);
|
|
break;
|
|
case 4:
|
|
//Simpler Loop (just two frames, but double sized) (as above but slower)
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 6;
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 2) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += (entities[i].walkingframe*2);
|
|
break;
|
|
case 5:
|
|
//Simpler Loop (just two frames) (slower)
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 6;
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 2) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
break;
|
|
case 6:
|
|
//Normal Loop (four frames, double sized)
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 4;
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 4) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += (entities[i].walkingframe*2);
|
|
break;
|
|
case 7:
|
|
//Simpler Loop (just two frames) (slower) (with directions!)
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 6;
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 2) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
|
|
if (entities[i].vx > 0) entities[i].drawframe += 2;
|
|
break;
|
|
case 10:
|
|
//Threadmill left
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 3;//(6-entities[i].para);
|
|
entities[i].walkingframe--;
|
|
if (entities[i].walkingframe == -1) {
|
|
entities[i].walkingframe = 3;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
break;
|
|
case 11:
|
|
//Threadmill right
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 3;//(6-entities[i].para);
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 4) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
break;
|
|
case 100:
|
|
//Simple case for no animation (platforms, etc)
|
|
entities[i].drawframe = entities[i].tile;
|
|
break;
|
|
default:
|
|
entities[i].drawframe = entities[i].tile;
|
|
break;
|
|
}
|
|
break;
|
|
case 11:
|
|
entities[i].drawframe = entities[i].tile;
|
|
if(entities[i].animate==2) {
|
|
//Simpler Loop (just two frames)
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 10;
|
|
entities[i].walkingframe++;
|
|
if (entities[i].walkingframe == 2) {
|
|
entities[i].walkingframe = 0;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
}
|
|
break;
|
|
case 12: case 55: case 14: //Crew member! Very similar to hero
|
|
entities[i].framedelay--;
|
|
if(entities[i].dir==1){
|
|
entities[i].drawframe=entities[i].tile;
|
|
}else{
|
|
entities[i].drawframe=entities[i].tile+3;
|
|
}
|
|
|
|
if(entities[i].onground>0 || entities[i].onroof>0){
|
|
if(entities[i].vx!=0){
|
|
//Walking
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay=4;
|
|
entities[i].walkingframe++;
|
|
}
|
|
if (entities[i].walkingframe >=2) entities[i].walkingframe=0;
|
|
entities[i].drawframe += entities[i].walkingframe + 1;
|
|
}
|
|
|
|
//if (entities[i].onroof > 0) entities[i].drawframe += 6;
|
|
}else {
|
|
entities[i].drawframe ++;
|
|
//if (game.gravitycontrol == 1) {
|
|
// entities[i].drawframe += 6;
|
|
//}
|
|
}
|
|
|
|
if (game.deathseq > -1) {
|
|
entities[i].drawframe=13;
|
|
if (entities[i].dir == 1) entities[i].drawframe = 12;
|
|
if (entities[i].rule == 7) entities[i].drawframe += 2;
|
|
//if (game.gravitycontrol == 1) entities[i].drawframe += 2;
|
|
}
|
|
break;
|
|
case 100: //the teleporter!
|
|
if (entities[i].tile == 1) {
|
|
//it's inactive
|
|
entities[i].drawframe = entities[i].tile;
|
|
}else if (entities[i].tile == 2){
|
|
entities[i].drawframe = entities[i].tile;
|
|
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 1;
|
|
entities[i].walkingframe = int(Math.random() * 6);
|
|
if (entities[i].walkingframe >= 4) {
|
|
entities[i].walkingframe = -1;
|
|
entities[i].framedelay = 4;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
}else if (entities[i].tile == 6) {
|
|
//faster!
|
|
entities[i].drawframe = entities[i].tile;
|
|
|
|
entities[i].framedelay--;
|
|
if(entities[i].framedelay<=0){
|
|
entities[i].framedelay = 2;
|
|
entities[i].walkingframe = int(Math.random() * 6);
|
|
if (entities[i].walkingframe >= 4) {
|
|
entities[i].walkingframe = -5;
|
|
entities[i].framedelay = 4;
|
|
}
|
|
}
|
|
|
|
entities[i].drawframe = entities[i].tile;
|
|
entities[i].drawframe += entities[i].walkingframe;
|
|
}
|
|
break;
|
|
default:
|
|
entities[i].drawframe = entities[i].tile;
|
|
break;
|
|
}
|
|
}else {
|
|
//entities[i].statedelay--;
|
|
if (entities[i].statedelay < 0) entities[i].statedelay = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function gettype(t:int):Boolean {
|
|
//Returns true is there is an entity of type t onscreen
|
|
for (var i:int = 0; i < nentity; i++) {
|
|
if(entities[i].type==t){
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function getcompanion(t:int):int {
|
|
//Returns the index of the companion with rule t
|
|
for (var i:int = 0; i < nentity; i++) {
|
|
if(entities[i].rule==6 || entities[i].rule==7){
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
public function getplayer():int {
|
|
//Returns the index of the first player entity
|
|
for (var i:int = 0; i < nentity; i++) {
|
|
if (entities[i].type == 0) {
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
public function getscm():int {
|
|
//Returns the supercrewmate
|
|
for (var i:int = 0; i < nentity; i++) {
|
|
if(entities[i].type==14){
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public function getlineat(t:int):int {
|
|
//Get the entity which is a horizontal line at height t (for SWN game)
|
|
for (var i:int = 0; i < nentity; i++) {
|
|
if (entities[i].size == 5) {
|
|
if (entities[i].yp == t) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public function getcrewman(t:int):int {
|
|
//Returns the index of the crewman with colour index given by t
|
|
if (t == 0) t = 0;
|
|
if (t == 1) t = 20;
|
|
if (t == 2) t = 14;
|
|
if (t == 3) t = 15;
|
|
if (t == 4) t = 13;
|
|
if (t == 5) t = 16;
|
|
|
|
for (var i:int = 0; i < nentity; i++) {
|
|
if (entities[i].rule == 6 || entities[i].rule == 7) {
|
|
if(entities[i].colour==t){
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public function getcustomcrewman(t:int):int {
|
|
//Returns the index of the crewman with colour index given by t
|
|
if (t == 0) t = 0;
|
|
if (t == 1) t = 20;
|
|
if (t == 2) t = 14;
|
|
if (t == 3) t = 15;
|
|
if (t == 4) t = 13;
|
|
if (t == 5) t = 16;
|
|
|
|
for (var i:int = 0; i < nentity; i++){
|
|
if (entities[i].type == 55){
|
|
if(entities[i].colour==t){
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public function getteleporter():int {
|
|
for (var i:int = 0; i < nentity; i++) {
|
|
if(entities[i].type==100 && entities[i].active){
|
|
return i;
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
public function rectset(xi:int, yi:int, wi:int, hi:int):void {
|
|
temprect.x = xi; temprect.y = yi; temprect.width = wi; temprect.height = hi;
|
|
}
|
|
|
|
public function rect2set(xi:int, yi:int, wi:int, hi:int):void {
|
|
temprect2.x = xi; temprect2.y = yi; temprect2.width = wi; temprect2.height = hi;
|
|
}
|
|
|
|
public function entitycollide(a:int, b:int):Boolean {
|
|
//Do entities a and b collide?
|
|
tempx = entities[a].xp + entities[a].cx; tempy = entities[a].yp + entities[a].cy;
|
|
tempw = entities[a].w; temph = entities[a].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
tempx = entities[b].xp + entities[b].cx; tempy = entities[b].yp + entities[b].cy;
|
|
tempw = entities[b].w; temph = entities[b].h;
|
|
rect2set(tempx, tempy, tempw, temph);
|
|
|
|
if (temprect.intersects(temprect2)) return true;
|
|
return false;
|
|
}
|
|
|
|
public function checkdirectional(t:int):Boolean{
|
|
//Returns true if player entity (rule 0) moving in dir t through directional block
|
|
if(opt_usedirectional){
|
|
i = getplayer();
|
|
if (i > -1) {
|
|
if(entities[i].rule==0){
|
|
tempx = entities[i].xp + entities[i].cx; tempy = entities[i].yp + entities[i].cy;
|
|
tempw = entities[i].w; temph = entities[i].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
for (j = 0; j < nblocks; j++) {
|
|
if (blocks[j].type == DIRECTIONAL && blocks[j].active){
|
|
if(blocks[j].rect.intersects(temprect)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function checkdamage():Boolean{
|
|
//Returns true if player entity (rule 0) collides with a damagepoint
|
|
if(opt_usedamage){
|
|
i = getplayer();
|
|
if (i > -1) {
|
|
if(entities[i].rule==0){
|
|
tempx = entities[i].xp + entities[i].cx; tempy = entities[i].yp + entities[i].cy;
|
|
tempw = entities[i].w; temph = entities[i].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
for (j=0; j<nblocks; j++){
|
|
if (blocks[j].type == DAMAGE && blocks[j].active){
|
|
if(blocks[j].rect.intersects(temprect)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function scmcheckdamage():Boolean{
|
|
//Returns true if supercrewmate collides with a damagepoint
|
|
for(i = 0; i < nentity; i++) {
|
|
if(entities[i].type==14){
|
|
tempx = entities[i].xp + entities[i].cx; tempy = entities[i].yp + entities[i].cy;
|
|
tempw = entities[i].w; temph = entities[i].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
for (j=0; j<nblocks; j++){
|
|
if (blocks[j].type == DAMAGE && blocks[j].active){
|
|
if(blocks[j].rect.intersects(temprect)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function settemprect(t:int):void {
|
|
//setup entity t in temprect
|
|
tempx = entities[t].xp + entities[t].cx; tempy = entities[t].yp + entities[t].cy;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
}
|
|
|
|
public function checktrigger():int{
|
|
//Returns an int player entity (rule 0) collides with a trigger
|
|
if (opt_usetrigger) {
|
|
i = getplayer();
|
|
if (i > -1) {
|
|
if(entities[i].rule==0){
|
|
tempx = entities[i].xp + entities[i].cx; tempy = entities[i].yp + entities[i].cy;
|
|
tempw = entities[i].w; temph = entities[i].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
for (j=0; j<nblocks; j++){
|
|
if (blocks[j].type == TRIGGER && blocks[j].active){
|
|
if (blocks[j].rect.intersects(temprect)) {
|
|
activetrigger = blocks[j].trigger;
|
|
return blocks[j].trigger;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public function checkactivity():int{
|
|
//Returns an int player entity (rule 0) collides with an activity
|
|
if(opt_useactivity){
|
|
i = getplayer();
|
|
if(i>-1){
|
|
if(entities[i].rule==0){
|
|
tempx = entities[i].xp + entities[i].cx; tempy = entities[i].yp + entities[i].cy;
|
|
tempw = entities[i].w; temph = entities[i].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
for (j=0; j<nblocks; j++){
|
|
if (blocks[j].type == ACTIVITY && blocks[j].active){
|
|
if (blocks[j].rect.intersects(temprect)) {
|
|
return j;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public function getgridpoint(t:int):int {
|
|
t = (t - (t % 8)) / 8;
|
|
return t;
|
|
}
|
|
|
|
public function cblocks(t:int):Boolean {
|
|
tempx = entities[t].xp + entities[t].cx; tempy = entities[t].yp + entities[t].cy;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
return checkblocks();
|
|
}
|
|
|
|
public function checkplatform():Boolean {
|
|
//Return true if rectset intersects a moving platform, setups px & py to the platform x & y
|
|
for (i = 0; i < nblocks; i++) {
|
|
if (blocks[i].active) {
|
|
if (blocks[i].type == BLOCK){
|
|
if (blocks[i].rect.intersects(temprect)) {
|
|
px = blocks[i].xp; py = blocks[i].yp;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function checkblocks():Boolean {
|
|
for (i = 0; i < nblocks; i++) {
|
|
if (blocks[i].active) {
|
|
if (!skipdirblocks) {
|
|
if (blocks[i].type == DIRECTIONAL) {
|
|
if (dy > 0 && blocks[i].trigger == 0) if (blocks[i].rect.intersects(temprect)) return true;
|
|
if (dy <= 0 && blocks[i].trigger == 1) if (blocks[i].rect.intersects(temprect)) return true;
|
|
if (dx > 0 && blocks[i].trigger == 2) if (blocks[i].rect.intersects(temprect)) return true;
|
|
if (dx <= 0 && blocks[i].trigger == 3) if (blocks[i].rect.intersects(temprect)) return true;
|
|
}
|
|
}
|
|
if (blocks[i].type == BLOCK){
|
|
if (blocks[i].rect.intersects(temprect)) {
|
|
return true;
|
|
}
|
|
}
|
|
if (blocks[i].type == SAFE) {
|
|
if(dr==1){
|
|
if (blocks[i].rect.intersects(temprect)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function checktowerspikes(t:int, map:mapclass):Boolean {
|
|
tempx = entities[t].xp + entities[t].cx; tempy = entities[t].yp + entities[t].cy;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
tempx = getgridpoint(temprect.x); tempy = getgridpoint(temprect.y);
|
|
tempw = getgridpoint(temprect.x + temprect.width - 1); temph = getgridpoint(temprect.y + temprect.height - 1);
|
|
if (map.spikecollide(tempx, tempy)) return true;
|
|
if (map.spikecollide(tempw, tempy)) return true;
|
|
if (map.spikecollide(tempx, temph)) return true;
|
|
if (map.spikecollide(tempw, temph)) return true;
|
|
if (temprect.height >= 12) {
|
|
tpy1 = getgridpoint(temprect.y + 6);
|
|
if (map.spikecollide(tempx, tpy1)) return true;
|
|
if (map.spikecollide(tempw, tpy1)) return true;
|
|
if (temprect.height >= 18) {
|
|
tpy1 = getgridpoint(temprect.y + 12);
|
|
if (map.spikecollide(tempx, tpy1)) return true;
|
|
if (map.spikecollide(tempw, tpy1)) return true;
|
|
if (temprect.height >= 24) {
|
|
tpy1 = getgridpoint(temprect.y + 18);
|
|
if (map.spikecollide(tempx, tpy1)) return true;
|
|
if (map.spikecollide(tempw, tpy1)) return true;
|
|
}
|
|
}
|
|
}
|
|
if (temprect.width >= 12) {
|
|
tpx1 = getgridpoint(temprect.x + 6);
|
|
if (map.collide(tpx1, tempy)) return true;
|
|
if (map.collide(tpx1, temph)) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function checkwall(map:mapclass):Boolean{
|
|
//Returns true if entity setup in temprect collides with a wall
|
|
//used for proper collision functions; you can't just, like, call it
|
|
//whenever you feel like it and expect a response
|
|
//
|
|
//that won't work at all
|
|
if(skipblocks){
|
|
if (checkblocks()) return true;
|
|
}
|
|
|
|
tempx = getgridpoint(temprect.x); tempy = getgridpoint(temprect.y);
|
|
tempw = getgridpoint(temprect.x + temprect.width - 1); temph = getgridpoint(temprect.y + temprect.height - 1);
|
|
if (map.collide(tempx, tempy)) return true;
|
|
if (map.collide(tempw, tempy)) return true;
|
|
if (map.collide(tempx, temph)) return true;
|
|
if (map.collide(tempw, temph)) return true;
|
|
if (temprect.height >= 12) {
|
|
tpy1 = getgridpoint(temprect.y + 6);
|
|
if (map.collide(tempx, tpy1)) return true;
|
|
if (map.collide(tempw, tpy1)) return true;
|
|
if (temprect.height >= 18) {
|
|
tpy1 = getgridpoint(temprect.y + 12);
|
|
if (map.collide(tempx, tpy1)) return true;
|
|
if (map.collide(tempw, tpy1)) return true;
|
|
if (temprect.height >= 24) {
|
|
tpy1 = getgridpoint(temprect.y + 18);
|
|
if (map.collide(tempx, tpy1)) return true;
|
|
if (map.collide(tempw, tpy1)) return true;
|
|
}
|
|
}
|
|
}
|
|
if (temprect.width >= 12) {
|
|
tpx1 = getgridpoint(temprect.x + 6);
|
|
if (map.collide(tpx1, tempy)) return true;
|
|
if (map.collide(tpx1, temph)) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function hplatformat():Number {
|
|
//Returns first entity of horizontal platform at (px, py), -1000 otherwise.
|
|
for (i = 0; i < nentity; i++) {
|
|
if (entities[i].active) {
|
|
if (entities[i].rule == 2) {
|
|
if (entities[i].behave >= 2) {
|
|
if (entities[i].xp == px && entities[i].yp == py) {
|
|
if (entities[i].behave == 8) { //threadmill!
|
|
return entities[i].para;
|
|
}else if(entities[i].behave == 9) { //threadmill!
|
|
return -entities[i].para;
|
|
}else{
|
|
return entities[i].vx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -1000;
|
|
}
|
|
|
|
public function yline(a:int, b:int):int {
|
|
if (a < b) return -1;
|
|
return 1;
|
|
}
|
|
|
|
public function entityhlinecollide(t:int, l:int):Boolean {
|
|
//Returns true is entity t collided with the horizontal line l.
|
|
if(entities[t].xp + entities[t].cx+entities[t].w>=entities[l].xp){
|
|
if(entities[t].xp + entities[t].cx<=entities[l].xp+entities[l].w){
|
|
linetemp = 0;
|
|
|
|
linetemp += yline(entities[t].yp, entities[l].yp);
|
|
linetemp += yline(entities[t].yp + entities[t].h, entities[l].yp);
|
|
linetemp += yline(entities[t].oldyp, entities[l].yp);
|
|
linetemp += yline(entities[t].oldyp + entities[t].h, entities[l].yp);
|
|
|
|
if (linetemp > -4 && linetemp < 4) return true;
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function entityvlinecollide(t:int, l:int):Boolean {
|
|
//Returns true is entity t collided with the vertical line l.
|
|
if(entities[t].yp + entities[t].cy+entities[t].h>=entities[l].yp){
|
|
if(entities[t].yp + entities[t].cy<=entities[l].yp+entities[l].h){
|
|
linetemp = 0;
|
|
|
|
linetemp += yline(entities[t].xp + entities[t].cx+1, entities[l].xp);
|
|
linetemp += yline(entities[t].xp + entities[t].cx+1 + entities[t].w, entities[l].xp);
|
|
linetemp += yline(entities[t].oldxp + entities[t].cx+1, entities[l].xp);
|
|
linetemp += yline(entities[t].oldxp + entities[t].cx+1 + entities[t].w, entities[l].xp);
|
|
|
|
if (linetemp > -4 && linetemp < 4) return true;
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function entitywarphlinecollide(t:int, l:int):Boolean {
|
|
//Returns true is entity t collided with the horizontal line l.
|
|
if(entities[t].xp + entities[t].cx+entities[t].w>=entities[l].xp){
|
|
if(entities[t].xp + entities[t].cx<=entities[l].xp+entities[l].w){
|
|
linetemp = 0;
|
|
if (entities[l].yp < 120) {
|
|
//Top line
|
|
if (entities[t].vy < 0) {
|
|
if (entities[t].yp < entities[l].yp + 10) linetemp++;
|
|
if (entities[t].yp + entities[t].h < entities[l].yp + 10) linetemp++;
|
|
if (entities[t].oldyp < entities[l].yp + 10) linetemp++;
|
|
if (entities[t].oldyp + entities[t].h < entities[l].yp + 10) linetemp++;
|
|
}
|
|
|
|
if (linetemp > 0) return true;
|
|
return false;
|
|
}else {
|
|
//Bottom line
|
|
if (entities[t].vy > 0) {
|
|
if (entities[t].yp > entities[l].yp - 10) linetemp++;
|
|
if (entities[t].yp + entities[t].h > entities[l].yp - 10) linetemp++;
|
|
if (entities[t].oldyp > entities[l].yp - 10) linetemp++;
|
|
if (entities[t].oldyp + entities[t].h > entities[l].yp - 10) linetemp++;
|
|
}
|
|
|
|
if (linetemp > 0) return true;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function entitywarpvlinecollide(t:int, l:int):Boolean {
|
|
//Returns true is entity t collided with the vertical warp line l.
|
|
if(entities[t].yp + entities[t].cy+entities[t].h>=entities[l].yp){
|
|
if (entities[t].yp + entities[t].cy <= entities[l].yp + entities[l].h) {
|
|
linetemp = 0;
|
|
if (entities[l].xp < 160) {
|
|
//Left hand line
|
|
if (entities[t].xp + entities[t].cx + 1 < entities[l].xp + 10) linetemp++;
|
|
if (entities[t].xp + entities[t].cx+1 + entities[t].w < entities[l].xp + 10) linetemp++;
|
|
if (entities[t].oldxp + entities[t].cx + 1 < entities[l].xp + 10) linetemp++;
|
|
if (entities[t].oldxp + entities[t].cx + 1 + entities[t].w < entities[l].xp + 10) linetemp++;
|
|
|
|
if (linetemp > 0) return true;
|
|
return false;
|
|
}else {
|
|
//Right hand line
|
|
if (entities[t].xp + entities[t].cx + 1 > entities[l].xp - 10) linetemp++;
|
|
if (entities[t].xp + entities[t].cx+1 + entities[t].w > entities[l].xp - 10) linetemp++;
|
|
if (entities[t].oldxp + entities[t].cx + 1 > entities[l].xp - 10) linetemp++;
|
|
if (entities[t].oldxp + entities[t].cx + 1 + entities[t].w > entities[l].xp - 10) linetemp++;
|
|
|
|
if (linetemp > 0) return true;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function entitycollideplatformroof(map:mapclass, t:int):Number{
|
|
tempx = entities[t].xp + entities[t].cx; tempy = entities[t].yp + entities[t].cy -1;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
if (checkplatform()) {
|
|
//px and py now contain an x y coordinate for a platform, find it
|
|
return hplatformat();
|
|
}
|
|
return -1000;
|
|
}
|
|
|
|
public function entitycollideplatformfloor(map:mapclass, t:int):Number{
|
|
tempx = entities[t].xp + entities[t].cx; tempy = entities[t].yp + entities[t].cy + 1;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
if (checkplatform()) {
|
|
//px and py now contain an x y coordinate for a platform, find it
|
|
return hplatformat();
|
|
}
|
|
return -1000;
|
|
}
|
|
|
|
public function entitycollidefloor(map:mapclass, t:int):Boolean{
|
|
//see? like here, for example!
|
|
tempx = entities[t].xp + entities[t].cx; tempy = entities[t].yp + entities[t].cy + 1;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
if (checkwall(map)) return true;
|
|
return false;
|
|
}
|
|
|
|
public function entitycollideroof(map:mapclass, t:int):Boolean{
|
|
//and here!
|
|
tempx = entities[t].xp + entities[t].cx; tempy = entities[t].yp + entities[t].cy - 1;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
if (checkwall(map)) return true;
|
|
return false;
|
|
}
|
|
|
|
public function testwallsx(t:int, map:mapclass, tx:int, ty:int):Boolean{
|
|
tempx = tx + entities[t].cx; tempy = ty + entities[t].cy;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
if (entities[t].rule < 2) { skipblocks = true; } else { skipblocks = false; }
|
|
if (entities[t].type == 14) skipblocks = true;
|
|
dx = 0; dy = 0; if (entities[t].rule == 0) dx = entities[t].vx;
|
|
dr = entities[t].rule;
|
|
|
|
//Ok, now we check walls
|
|
if (checkwall(map)) {
|
|
if (entities[t].vx > 1) {
|
|
entities[t].vx--;
|
|
entities[t].newxp = int(entities[t].xp + entities[t].vx);
|
|
return testwallsx(t, map, entities[t].newxp, entities[t].yp);
|
|
}else if (entities[t].vx < -1) {
|
|
entities[t].vx++;
|
|
entities[t].newxp = int(entities[t].xp + entities[t].vx);
|
|
return testwallsx(t, map, entities[t].newxp, entities[t].yp);
|
|
}else {
|
|
entities[t].vx=0;
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function testwallsy(t:int, map:mapclass, tx:int, ty:int):Boolean {
|
|
tempx = tx + entities[t].cx; tempy = ty + entities[t].cy;
|
|
tempw = entities[t].w; temph = entities[t].h;
|
|
rectset(tempx, tempy, tempw, temph);
|
|
|
|
if (entities[t].rule < 2) { skipblocks = true; } else { skipblocks = false; }
|
|
if (entities[t].type == 14) skipblocks = true;
|
|
|
|
dx = 0; dy = 0; if (entities[t].rule == 0) dy = entities[t].vy;
|
|
dr = entities[t].rule;
|
|
|
|
//Ok, now we check walls
|
|
if (checkwall(map)) {
|
|
if (entities[t].vy > 1) {
|
|
entities[t].vy--;
|
|
entities[t].newyp = int(entities[t].yp + entities[t].vy);
|
|
return testwallsy(t, map, entities[t].xp, entities[t].newyp);
|
|
}else if (entities[t].vy < -1) {
|
|
entities[t].vy++;
|
|
entities[t].newyp = int(entities[t].yp + entities[t].vy);
|
|
return testwallsy(t, map, entities[t].xp, entities[t].newyp);
|
|
}else {
|
|
entities[t].vy=0;
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function fixfriction(t:int, xfix:Number, xrate:Number, yrate:Number):void{
|
|
if (entities[t].vx > xfix) entities[t].vx -= xrate;
|
|
if (entities[t].vx < xfix) entities[t].vx += xrate;
|
|
if (entities[t].vy > 0) entities[t].vy -= yrate;
|
|
if (entities[t].vy < 0) entities[t].vy += yrate;
|
|
if (entities[t].vy > 10) entities[t].vy = 10;
|
|
if (entities[t].vy < -10) entities[t].vy = -10;
|
|
if (entities[t].vx > 6) entities[t].vx = 6;
|
|
if (entities[t].vx < -6) entities[t].vx = -6;
|
|
|
|
if (Math.abs(entities[t].vx-xfix) <= xrate) entities[t].vx = xfix;
|
|
if (Math.abs(entities[t].vy) <= yrate) entities[t].vy = 0;
|
|
}
|
|
|
|
public function applyfriction(t:int, xrate:Number, yrate:Number):void{
|
|
if (entities[t].vx > 0) entities[t].vx -= xrate;
|
|
if (entities[t].vx < 0) entities[t].vx += xrate;
|
|
if (entities[t].vy > 0) entities[t].vy -= yrate;
|
|
if (entities[t].vy < 0) entities[t].vy += yrate;
|
|
if (entities[t].vy > 10) entities[t].vy = 10;
|
|
if (entities[t].vy < -10) entities[t].vy = -10;
|
|
if (entities[t].vx > 6) entities[t].vx = 6;
|
|
if (entities[t].vx < -6) entities[t].vx = -6;
|
|
|
|
if (Math.abs(entities[t].vx) <= xrate) entities[t].vx = 0;
|
|
if (Math.abs(entities[t].vy) <= yrate) entities[t].vy = 0;
|
|
}
|
|
|
|
public function cleanup():void {
|
|
i = nentity - 1; while (i >= 0 && !entities[i].active) { nentity--; i--; }
|
|
i = nblocks - 1; while (i >= 0 && !blocks[i].active) { nblocks--; i--; }
|
|
}
|
|
|
|
public function updateentitylogic(t:int, game:gameclass):void {
|
|
entities[t].oldxp = entities[t].xp; entities[t].oldyp = entities[t].yp;
|
|
|
|
entities[t].vx = entities[t].vx + entities[t].ax;
|
|
entities[t].vy = entities[t].vy + entities[t].ay;
|
|
entities[t].ax = 0;
|
|
|
|
if (entities[t].gravity) {
|
|
if (entities[t].rule == 0) {
|
|
if(game.gravitycontrol==0){
|
|
entities[t].ay = 3;
|
|
}else {
|
|
entities[t].ay = -3;
|
|
}
|
|
}else if (entities[t].rule == 7) {
|
|
entities[t].ay = -3;
|
|
}else {
|
|
entities[t].ay = 3;
|
|
}
|
|
applyfriction(t, game.inertia, 0.25);
|
|
}
|
|
|
|
entities[t].newxp = entities[t].xp + entities[t].vx;
|
|
entities[t].newyp = entities[t].yp + entities[t].vy;
|
|
}
|
|
|
|
|
|
public function entitymapcollision(t:int, map:mapclass):void {
|
|
if (testwallsx(t, map, entities[t].newxp, entities[t].yp)) {
|
|
entities[t].xp = entities[t].newxp;
|
|
}else {
|
|
if (entities[t].onwall > 0) entities[t].state = entities[t].onwall;
|
|
if (entities[t].onxwall > 0) entities[t].state = entities[t].onxwall;
|
|
}
|
|
if (testwallsy(t, map, entities[t].xp, entities[t].newyp)) {
|
|
entities[t].yp = entities[t].newyp;
|
|
}else {
|
|
if (entities[t].onwall > 0) entities[t].state = entities[t].onwall;
|
|
if (entities[t].onywall > 0) entities[t].state = entities[t].onywall;
|
|
entities[t].jumpframe = 0;
|
|
}
|
|
}
|
|
|
|
public function movingplatformfix(t:int, map:mapclass):void{
|
|
//If this intersects the player, then we move the player along it
|
|
j = getplayer();
|
|
if (entitycollide(t, j)) {
|
|
//ok, bollox, let's make sure
|
|
entities[j].yp = entities[j].yp + entities[j].vy;
|
|
if (entitycollide(t, j)) {
|
|
entities[j].yp = entities[j].yp - entities[j].vy;
|
|
entities[j].vy = entities[t].vy;
|
|
entities[j].newyp = entities[j].yp + entities[j].vy;
|
|
if (testwallsy(j, map, entities[j].xp, entities[j].newyp)) {
|
|
if (entities[t].vy > 0) {
|
|
entities[j].yp = entities[t].yp + entities[t].h;
|
|
entities[j].vy = 0;
|
|
entities[j].onroof = 1;
|
|
}else {
|
|
entities[j].yp = entities[t].yp - entities[j].h-entities[j].cy;
|
|
entities[j].vy = 0;
|
|
entities[j].onground = 1;
|
|
}
|
|
}else {
|
|
entities[t].state = entities[t].onwall;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function scmmovingplatformfix(t:int, map:mapclass):void{
|
|
//If this intersects the SuperCrewMate, then we move them along it
|
|
j = getscm();
|
|
if (entitycollide(t, j)) {
|
|
//ok, bollox, let's make sure
|
|
entities[j].yp = entities[j].yp + entities[j].vy;
|
|
if (entitycollide(t, j)) {
|
|
entities[j].yp = entities[j].yp - entities[j].vy;
|
|
entities[j].vy = entities[t].vy;
|
|
entities[j].newyp = entities[j].yp + entities[j].vy;
|
|
if (testwallsy(j, map, entities[j].xp, entities[j].newyp)) {
|
|
if (entities[t].vy > 0) {
|
|
entities[j].yp = entities[t].yp + entities[t].h;
|
|
entities[j].vy = 0;
|
|
//entities[j].onroof = true;
|
|
}else {
|
|
entities[j].yp = entities[t].yp - entities[j].h-entities[j].cy;
|
|
entities[j].vy = 0;
|
|
//entities[j].onground = true;
|
|
}
|
|
}else {
|
|
entities[t].state = entities[t].onwall;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function hormovingplatformfix(t:int, map:mapclass):void{
|
|
//If this intersects the player, then we move the player along it
|
|
//for horizontal platforms, this is simplier
|
|
createblock(0, entities[t].xp, entities[t].yp, entities[t].w, entities[t].h);
|
|
/*j = getplayer();
|
|
if (entitycollide(t, j)) {
|
|
//ok, bollox, let's make sure
|
|
entities[j].yp = entities[j].yp + entities[j].vy;
|
|
if (entitycollide(t, j)) {
|
|
//entities[t].state = entities[t].onwall;
|
|
}
|
|
}*/
|
|
}
|
|
|
|
public function customwarplinecheck(i:int):void {
|
|
//Turns on obj.customwarpmodevon and obj.customwarpmodehon if player collides
|
|
//with warp lines
|
|
|
|
if (entities[i].active) {
|
|
//We test entity to entity
|
|
for (j = 0; j < nentity; j++) {
|
|
if (entities[j].active && i != j) {//Active
|
|
if (entities[i].rule == 0 && entities[j].rule == 5) { //Player vs vertical line!
|
|
if (entities[j].type == 51 || entities[j].type == 52) {
|
|
if (entitywarpvlinecollide(i, j)) {
|
|
customwarpmodevon = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (entities[i].rule == 0 && entities[j].rule == 7){ //Player vs horizontal WARP line
|
|
if (entities[j].type == 53 || entities[j].type == 54) {
|
|
if (entitywarphlinecollide(i, j)) {
|
|
customwarpmodehon = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function entitycollisioncheck(dwgfx:dwgraphicsclass, game:gameclass, map:mapclass, music:musicclass):void {
|
|
i = getplayer();
|
|
if (entities[i].active) {
|
|
//We test entity to entity
|
|
for (j = 0; j < nentity; j++) {
|
|
if (entities[j].active && i != j) {//Active
|
|
if (entities[i].rule == 0 && entities[j].rule == 1 && entities[j].harmful) {
|
|
//player i hits enemy or enemy bullet j
|
|
if (entitycollide(i, j) && !map.invincibility) {
|
|
if (entities[i].size == 0 && (entities[j].size == 0 || entities[j].size == 12)) {
|
|
//They're both sprites, so do a per pixel collision
|
|
colpoint1.x = entities[i].xp; colpoint1.y = entities[i].yp;
|
|
colpoint2.x = entities[j].xp; colpoint2.y = entities[j].yp;
|
|
if (dwgfx.flipmode) {
|
|
if (dwgfx.flipsprites_bitmap[entities[i].drawframe].hitTest(
|
|
colpoint1, 1, dwgfx.flipsprites_bitmap[entities[j].drawframe], colpoint2, 1)) {
|
|
//Do the collision stuff
|
|
game.deathseq = 30;
|
|
}
|
|
}else {
|
|
if (dwgfx.sprites_bitmap[entities[i].drawframe].hitTest(
|
|
colpoint1, 1, dwgfx.sprites_bitmap[entities[j].drawframe], colpoint2, 1)) {
|
|
//Do the collision stuff
|
|
game.deathseq = 30;
|
|
}
|
|
}
|
|
}else {
|
|
//Ok, then we just assume a normal bounding box collision
|
|
game.deathseq = 30;
|
|
}
|
|
}
|
|
}
|
|
if (entities[i].rule == 0 && entities[j].rule == 2) { //Moving platforms
|
|
if (entitycollide(i, j)) removeblockat(entities[j].xp, entities[j].yp);
|
|
}
|
|
if (entities[i].rule == 0 && entities[j].rule == 3) { //Entity to entity
|
|
if(entities[j].onentity>0){
|
|
if (entitycollide(i, j)) entities[j].state = entities[j].onentity;
|
|
}
|
|
}
|
|
if (entities[i].rule == 0 && entities[j].rule == 4) { //Player vs horizontal line!
|
|
if(game.deathseq==-1){
|
|
//Here we compare the player's old position versus his new one versus the line.
|
|
//All points either be above or below it. Otherwise, there was a collision this frame.
|
|
if (entities[j].onentity > 0) {
|
|
if (entityhlinecollide(i, j)) {
|
|
music.playef(8,10);
|
|
game.gravitycontrol = (game.gravitycontrol + 1) % 2;
|
|
game.totalflips++;
|
|
if (game.gravitycontrol == 0) {
|
|
if (entities[i].vy < 1) entities[i].vy = 1;
|
|
}else {
|
|
if (entities[i].vy > -1) entities[i].vy = -1;
|
|
}
|
|
|
|
entities[j].state = entities[j].onentity;
|
|
entities[j].life = 6;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (entities[i].rule == 0 && entities[j].rule == 5) { //Player vs vertical line!
|
|
if(game.deathseq==-1){
|
|
if(entities[j].onentity>0){
|
|
if (entityvlinecollide(i, j)) {
|
|
entities[j].state = entities[j].onentity;
|
|
entities[j].life = 4;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (entities[i].rule == 0 && entities[j].rule == 6) { //Player versus crumbly blocks! Special case
|
|
if (entities[j].onentity > 0) {
|
|
//ok; only check the actual collision if they're in a close proximity
|
|
temp = entities[i].yp - entities[j].yp;
|
|
if (temp < 30 || temp > -30) {
|
|
temp = entities[i].xp - entities[j].xp;
|
|
if (temp < 30 || temp > -30) {
|
|
if (entitycollide(i, j)) entities[j].state = entities[j].onentity;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/*
|
|
if (entities[i].rule == 0 && entities[j].rule == 7){ //Player vs horizontal WARP line
|
|
if (game.deathseq == -1) {
|
|
if (entities[j].onentity > 0) {
|
|
if (entityhlinecollide(i, j)) {
|
|
entities[j].state = entities[j].onentity;
|
|
entities[j].life = 4;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
}
|
|
}
|
|
|
|
if (game.supercrewmate) {
|
|
//some extra collisions
|
|
for (i = 0; i < nentity; i++) {
|
|
if (entities[i].active) {
|
|
for (j = 0; j < nentity; j++) {
|
|
if (entities[j].active && i != j) {//Active
|
|
if (entities[i].type == 14) { //i is the supercrewmate
|
|
if (entities[j].rule == 1 && entities[j].harmful) {//j is a harmful enemy
|
|
//player i hits enemy or enemy bullet j
|
|
if (entitycollide(i, j) && !map.invincibility) {
|
|
if (entities[i].size == 0 && entities[j].size == 0) {
|
|
//They're both sprites, so do a per pixel collision
|
|
colpoint1.x = entities[i].xp; colpoint1.y = entities[i].yp;
|
|
colpoint2.x = entities[j].xp; colpoint2.y = entities[j].yp;
|
|
if (dwgfx.flipmode) {
|
|
if (dwgfx.flipsprites_bitmap[entities[i].drawframe].hitTest(
|
|
colpoint1, 1, dwgfx.flipsprites_bitmap[entities[j].drawframe], colpoint2, 1)) {
|
|
//Do the collision stuff
|
|
game.deathseq = 30; game.scmhurt = true;
|
|
}
|
|
}else {
|
|
if (dwgfx.sprites_bitmap[entities[i].drawframe].hitTest(
|
|
colpoint1, 1, dwgfx.sprites_bitmap[entities[j].drawframe], colpoint2, 1)) {
|
|
//Do the collision stuff
|
|
game.deathseq = 30; game.scmhurt = true;
|
|
}
|
|
}
|
|
}else {
|
|
//Ok, then we just assume a normal bounding box collision
|
|
game.deathseq = 30; game.scmhurt = true;
|
|
}
|
|
}
|
|
}
|
|
if (entities[j].rule == 2) { //Moving platforms
|
|
if (entitycollide(i, j)) removeblockat(entities[j].xp, entities[j].yp);
|
|
}
|
|
if (entities[j].type == 8 && entities[j].rule == 3) { //Entity to entity (well, checkpoints anyway!)
|
|
if(entities[j].onentity>0){
|
|
if (entitycollide(i, j)) entities[j].state = entities[j].onentity;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//can't have the player being stuck...
|
|
j = getplayer();
|
|
skipdirblocks = true;
|
|
if (!testwallsx(j, map, entities[j].xp, entities[j].yp)) {
|
|
//Let's try to get out...
|
|
if (entities[j].rule == 0) {
|
|
if(game.gravitycontrol==0){
|
|
entities[j].yp -= 3;
|
|
}else {
|
|
entities[j].yp += 3;
|
|
}
|
|
}
|
|
}
|
|
skipdirblocks = false;
|
|
|
|
//Can't have the supercrewmate getting stuck either!
|
|
if (game.supercrewmate) {
|
|
j = getscm();
|
|
skipdirblocks = true;
|
|
if (!testwallsx(j, map, entities[j].xp, entities[j].yp)) {
|
|
//Let's try to get out...
|
|
if(game.gravitycontrol==0){
|
|
entities[j].yp -= 3;
|
|
}else {
|
|
entities[j].yp += 3;
|
|
}
|
|
}
|
|
skipdirblocks = false;
|
|
}
|
|
|
|
//Is the player colliding with any damageblocks?
|
|
if (checkdamage() && !map.invincibility) {
|
|
//usual player dead stuff
|
|
game.deathseq = 30;
|
|
}
|
|
|
|
//how about the supercrewmate?
|
|
if (game.supercrewmate) {
|
|
if (scmcheckdamage() && !map.invincibility) {
|
|
//usual player dead stuff
|
|
game.scmhurt = true;
|
|
game.deathseq = 30;
|
|
}
|
|
}
|
|
|
|
activetrigger = -1;
|
|
if (checktrigger() > -1) {
|
|
game.state = activetrigger;
|
|
game.statedelay = 0;
|
|
}
|
|
}
|
|
|
|
public var nentity:int;
|
|
public var entities:Vector.<entclass> = new Vector.<entclass>;
|
|
|
|
public var linecrosskludge:Vector.<entclass> = new Vector.<entclass>;
|
|
public var nlinecrosskludge:int;
|
|
public var colpoint1:Point, colpoint2:Point;
|
|
|
|
public var tempx:int, tempy:int, tempw:int, temph:int, temp:int, temp2:int;
|
|
public var tpx1:int, tpy1:int, tpx2:int, tpy2:int;
|
|
public var temprect:Rectangle, temprect2:Rectangle;
|
|
public var i:int, j:int, k:int;// z:int;
|
|
public var dx:int, dy:int, dr:int;
|
|
public var px:int, py:int, linetemp:int;
|
|
public var activetrigger:int;
|
|
|
|
public var blocks:Vector.<blockclass> = new Vector.<blockclass>;
|
|
public var flags:Array = new Array;
|
|
public var collect:Array = new Array;
|
|
public var customcollect:Array = new Array;
|
|
public var nblocks:int;
|
|
public var skipblocks:Boolean, skipdirblocks:Boolean;
|
|
|
|
public var platformtile:int;
|
|
public var vertplatforms:Boolean, horplatforms:Boolean;
|
|
|
|
// :(
|
|
public var nearelephant:Boolean;
|
|
public var upsetmode:Boolean, upset:int;
|
|
|
|
//Trophy Text
|
|
public var trophytext:int, trophytype:int;
|
|
|
|
//Secret lab scripts
|
|
public var altstates:int;
|
|
|
|
//Custom stuff
|
|
public var customenemy:int;
|
|
public var customplatformtile:int;
|
|
public var customwarpmode:Boolean, customwarpmodevon:Boolean, customwarpmodehon:Boolean;
|
|
public var customscript:String;
|
|
public var customcrewmoods:Array = new Array();
|
|
|
|
public var mobilemenus:Boolean = true;
|
|
}
|
|
} |