Frame 2
stop();
Instance of Symbol 20 MovieClip "screen" in Frame 3
onClipEvent (enterFrame) {
_root.main();
}
Frame 4
function preCalc() {
fov_div_rays = fovAngle / numOfRays;
h_fov = fovAngle / 2;
lineWidth = imageWidth / numOfRays;
var _local1 = 0;
while (_local1 < numOfRays) {
dist[_local1] = imageHeight / Math.cos((Math.PI * ((_local1 * fov_div_rays) - h_fov)) / 180);
var _local2 = (viewAngle - h_fov) + (_local1 * fov_div_rays);
if (_local2 >= 360) {
_local2 = _local2 - 360;
} else if (_local2 < 0) {
_local2 = _local2 + 360;
}
if ((_local2 > 270) || (_local2 < 90)) {
right[_local1] = true;
} else {
right[_local1] = false;
}
if ((_local2 > 0) && (_local2 < 180)) {
down[_local1] = true;
} else {
down[_local1] = false;
}
tAng1[_local1] = Math.tan(Math.PI * (_local2 / 180));
tAng2[_local1] = Math.tan(Math.PI * ((90 - _local2) / 180));
tAng3[_local1] = Math.tan(Math.PI * ((270 - _local2) / 180));
screen.attachMovie("wall", "w" + _local1, _local1 + 1);
screen["w" + _local1]._x = Math.round(_local1 * lineWidth);
screen["w" + _local1]._xscale = 100 * (Math.ceil(lineWidth) / 1);
_local1++;
}
var _local3 = numOfRays;
while (screen["w" + _local3] != undefined) {
screen["w" + _local3].removeMovieClip();
_local3++;
}
if (interlace) {
step = 2;
} else {
step = 1;
}
strt = 0;
frames = 0;
fpsTime = 0;
}
function rayCasting() {
if (interlace) {
strt = 1 - strt;
}
var _local1 = strt;
while (_local1 < numOfRays) {
if (right[_local1]) {
var _local5 = xViewMap + 1;
var _local7 = tAng1[_local1];
var _local2 = yView + (_local7 * (_local5 - xView));
while (((m[_local5][Math.floor(_local2)] == null) && (_local5 < mapWidth)) && (_local2 < mapHeight)) {
_local5++;
_local2 = _local2 + _local7;
}
} else {
var _local5 = xViewMap - 0.01;
var _local7 = tAng1[_local1];
var _local2 = yView + (_local7 * (_local5 - xView));
while (((m[Math.floor(_local5)][Math.floor(_local2)] == null) && (_local5 > 0)) && (_local2 > 0)) {
_local5--;
_local2 = _local2 - _local7;
}
}
if (down[_local1]) {
var _local4 = yViewMap + 1;
var _local7 = tAng2[_local1];
var _local3 = xView + (_local7 * (_local4 - yView));
while (((m[Math.floor(_local3)][_local4] == null) && (_local3 < mapWidth)) && (_local4 < mapHeight)) {
_local4++;
_local3 = _local3 + _local7;
}
} else {
var _local4 = yViewMap - 0.01;
var _local7 = tAng3[_local1];
var _local3 = xView + (_local7 * (_local4 - yView));
while (((m[Math.floor(_local3)][Math.floor(_local4)] == null) && (_local3 > 0)) && (_local4 > 0)) {
_local4--;
_local3 = _local3 - _local7;
}
}
var _local11 = xView - _local5;
var _local10 = yView - _local2;
var _local9 = Math.sqrt((_local11 * _local11) + (_local10 * _local10));
_local11 = xView - _local3;
_local10 = yView - _local4;
var _local8 = Math.sqrt((_local11 * _local11) + (_local10 * _local10));
if (_local9 < _local8) {
var _local6 = screen["w" + _local1];
_local6._height = dist[_local1] / _local9;
_local6.gotoAndStop(1 + Math.round((_local2 - Math.floor(_local2)) * 100));
_local6.s.gotoAndStop(1 + Math.round(_local9 * 10), 79);
_local6.s.t.gotoAndStop(m[Math.floor(_local5)][Math.floor(_local2)]);
} else {
var _local6 = screen["w" + _local1];
_local6._height = dist[_local1] / _local8;
_local6.gotoAndStop(1 + Math.round((_local3 - Math.floor(_local3)) * 100));
_local6.s.gotoAndStop(1 + Math.round(_local8 * 10), 79);
_local6.s.t.gotoAndStop(m[Math.floor(_local3)][Math.floor(_local4)]);
}
_local1 = _local1 + step;
}
}
function update2DMap() {
screen.viewPos._x = xView * 8;
screen.viewPos._y = (yView * 8) - 120;
screen.viewPos._rotation = viewAngle;
}
function main() {
if (Key.isDown(38)) {
move = 0.12;
strafe = 0;
} else if (Key.isDown(40)) {
move = -0.12;
strafe = 0;
} else {
move = 0;
}
if (Key.isDown(37)) {
if (Key.isDown(16)) {
move = 0.12;
strafe = -90;
} else {
rotate = -6;
}
} else if (Key.isDown(39)) {
if (Key.isDown(16)) {
move = 0.12;
strafe = 90;
} else {
rotate = 6;
}
} else {
rotate = 0;
}
if (move) {
newXPos = xView + (Math.cos(Math.PI * ((viewAngle + strafe) / 180)) * move);
newYPos = yView + (Math.sin(Math.PI * ((viewAngle + strafe) / 180)) * move);
if (m[Math.floor(newXPos)][Math.floor(newYPos)] == null) {
xView = newXPos;
yView = newYPos;
xViewMap = Math.floor(xView);
yViewMap = Math.floor(yView);
} else if (m[Math.floor(newXPos)][Math.floor(yView)] == null) {
xView = newXPos;
xViewMap = Math.floor(xView);
} else if (m[Math.floor(xView)][Math.floor(newYPos)] == null) {
yView = newYPos;
yViewMap = Math.floor(yView);
}
}
if (rotate) {
viewAngle = viewAngle + rotate;
if (viewAngle < 0) {
viewAngle = viewAngle + 360;
} else if (viewAngle >= 360) {
viewAngle = viewAngle - 360;
}
var _local1 = 0;
while (_local1 < numOfRays) {
ang = (viewAngle - h_fov) + (_local1 * fov_div_rays);
if (ang >= 360) {
ang = ang - 360;
} else if (ang < 0) {
ang = ang + 360;
}
if ((ang > 270) || (ang < 90)) {
right[_local1] = true;
} else {
right[_local1] = false;
}
if ((ang > 0) && (ang < 180)) {
down[_local1] = true;
} else {
down[_local1] = false;
}
tAng1[_local1] = Math.tan(Math.PI * (ang / 180));
tAng2[_local1] = Math.tan(Math.PI * ((90 - ang) / 180));
tAng3[_local1] = Math.tan(Math.PI * ((270 - ang) / 180));
_local1++;
}
}
rayCasting();
if (fpsTime < getTimer()) {
if (frames == 0) {
fps = "fps: -";
} else {
fps = "fps: " + (frames / 5);
frames = 1;
}
fpsTime = getTimer() + 5000;
} else {
frames++;
}
}
function checkBoxChanged(instance) {
if (instance == interlaceCheckBox) {
interlace = interlaceCheckBox.getValue();
preCalc();
}
}
function sliderChanged(instance) {
if (instance == fovSlider) {
fovAngle = fovSlider.getValue();
preCalc();
} else if (instance == numOfRaysSlider) {
numOfRays = numOfRaysSlider.getValue();
preCalc();
}
}
_quality = "LOW";
_focusrect = false;
dist = new Array();
down = new Array();
fovAngle = 75;
fpsTime = 0;
frames = 0;
imageHeight = 240;
imageWidth = 320;
interlace = false;
m = new Array();
mapWidth = 30;
mapHeight = 30;
move = 0;
numOfRays = 120;
right = new Array();
rotate = 0;
step = 1;
strt = 0;
tAng1 = new Array();
tAng2 = new Array();
tAng3 = new Array();
xView = 2;
yView = 2.8;
xViewMap = Math.floor(xView);
yViewMap = Math.floor(yView);
viewAngle = 30;
var x = 0;
while (x < mapWidth) {
m[x] = new Array();
x++;
}
m[0][0] = 1;
m[1][0] = 5;
m[2][0] = 1;
m[3][0] = 1;
m[4][0] = 1;
m[5][0] = 1;
m[6][0] = 5;
m[7][0] = 1;
m[0][1] = 6;
m[3][7] = 6;
m[8][1] = 1;
m[0][2] = 1;
m[5][2] = 3;
m[8][2] = 3;
m[9][2] = 4;
m[10][2] = 5;
m[11][2] = 6;
m[12][2] = 1;
m[13][2] = 1;
m[0][3] = 6;
m[13][3] = 4;
m[0][4] = 2;
m[8][4] = 5;
m[9][4] = 3;
m[10][4] = 1;
m[11][4] = 1;
m[13][4] = 1;
m[0][5] = 3;
m[5][5] = 6;
m[13][5] = 4;
m[0][6] = 5;
m[7][6] = 4;
m[9][6] = 2;
m[11][6] = 5;
m[13][6] = 1;
m[0][7] = 1;
m[2][7] = 3;
m[3][7] = 5;
m[5][7] = 5;
m[6][7] = 1;
m[7][7] = 6;
m[13][7] = 1;
m[0][8] = 3;
m[2][8] = 5;
m[5][8] = 2;
m[10][8] = 6;
m[13][8] = 6;
m[0][9] = 2;
m[2][9] = 6;
m[3][9] = 3;
m[5][9] = 1;
m[13][9] = 1;
m[0][10] = 4;
m[2][10] = 3;
m[3][10] = 4;
m[5][10] = 1;
m[7][10] = 2;
m[9][10] = 2;
m[11][10] = 2;
m[13][10] = 1;
m[0][11] = 5;
m[1][11] = 2;
m[2][11] = 2;
m[3][11] = 1;
m[5][11] = 6;
m[13][11] = 1;
m[3][12] = 1;
m[13][12] = 5;
m[3][13] = 2;
m[5][13] = 4;
m[6][13] = 6;
m[7][13] = 1;
m[8][13] = 1;
m[13][13] = 5;
m[4][15] = 4;
m[5][15] = 2;
m[6][15] = 1;
m[7][15] = 5;
m[8][15] = 2;
m[9][15] = 4;
m[10][15] = 3;
m[11][15] = 2;
m[12][15] = 5;
m[13][15] = 1;
m[30][30] = 4;
numOfRaysSlider.setValue(numOfRays);
fovSlider.setValue(fovAngle);
interlaceCheckBox.setValue(interlace);
preCalc();
_root.attachMovie("startScreen", "startScreen", 1);
startScreen._x = 160;
startScreen._y = 20;
Frame 5
stop();
Instance of Symbol 20 MovieClip in Symbol 21 MovieClip [startScreen] Frame 1
onClipEvent (mouseDown) {
_parent.removeMovieClip();
}
onClipEvent (keyDown) {
_parent.removeMovieClip();
}
Symbol 32 Button
on (release) {
getURL ("http://www.newgrounds.com", "_blank");
}
Symbol 33 Button
on (release) {
getURL ("http://z13.invisionfree.com/homer_hoarde", "_blank");
}
Symbol 42 Button
on (release) {
_root.play();
}
Symbol 43 MovieClip Frame 1
function timerHandler() {
if (!loadingComplete) {
var _local2 = _root.getBytesLoaded() / _root.getBytesTotal();
bar._xscale = 100 * _local2;
if (_local2 == 1) {
loadingComplete = true;
if (AUTO_PLAY) {
startMovie();
} else {
gotoAndStop ("loaded");
}
return(undefined);
}
}
}
function startMovie() {
_root.play();
}
_root.stop();
stop();
var AUTO_PLAY = false;
var loadingComplete = false;
timerHandler();
Instance of Symbol 29 MovieClip in Symbol 43 MovieClip Frame 1
onClipEvent (enterFrame) {
_parent.timerHandler();
}
Symbol 43 MovieClip Frame 2
stop();
Symbol 53 MovieClip Frame 380
stopAllSounds();
Symbol 53 MovieClip Frame 381
_root.play();