From 883b7a9d181dbc9a49abf0c2584bef23f3938f38 Mon Sep 17 00:00:00 2001
From: echicken <>
Date: Thu, 20 Oct 2011 17:47:32 +0000
Subject: [PATCH] All side-checks now use checkOverlap, platforms can now be
 walls or boxes.

---
 xtrn/chickendelivery/game.js | 81 ++++++++++++++++++++++++------------
 1 file changed, 55 insertions(+), 26 deletions(-)

diff --git a/xtrn/chickendelivery/game.js b/xtrn/chickendelivery/game.js
index f56c926325..553831da59 100644
--- a/xtrn/chickendelivery/game.js
+++ b/xtrn/chickendelivery/game.js
@@ -122,6 +122,7 @@ while(!js.terminated) {
 	}
 
 	frame.cycle();
+	fall(player, frame);
 
 	do {
 		userInput = ascii(console.inkey(K_NOSPIN|K_NOECHO|K_NOCRLF));
@@ -249,22 +250,24 @@ function left(player, frame, steps, nofall, nocycle) {
 }
 
 function jump(player, frame, steps) {
-	var timeOut = 10;
+//	var timeOut = 10;
 	for(var y = 1; y <= steps; y++) {
 		if(checkTop(player)) break;
 		player.move(0, -1);
 		doCycle(frame);
-		if(y == steps) timeOut = 200;
-		userInput = ascii(console.inkey(K_NOSPIN|K_NOECHO|K_NOCRLF, timeOut));
-		if(userInput == 6) right(player, frame, 5, true);
-		if(userInput == 29) left(player, frame, 5, true);
-		if(userInput == 32 && y == steps) {
-			var hoverStart = system.timer;
-			while(system.timer - hoverStart <= 1) {
-				userInput = ascii(console.inkey(K_NOSPIN|K_NOECHO|K_NOCRLF, 10));
-				if(userInput == 6) right(player, frame, 1, true, false);
-				if(userInput == 29) left(player, frame, 1, true, false);
-				doCycle(frame);
+		if(y == steps) {
+			userInput = ascii(console.inkey(K_NOSPIN|K_NOECHO|K_NOCRLF, 250));
+			if(userInput == 6) right(player, frame, 5, true);
+			if(userInput == 29) left(player, frame, 5, true);
+			if(userInput == 32 && y == steps) {
+				var hoverStart = system.timer;
+				while(system.timer - hoverStart <= 1) {
+					userInput = ascii(console.inkey(K_NOSPIN|K_NOECHO|K_NOCRLF, 10));
+					if(userInput == 6) right(player, frame, 1, true, false);
+					if(userInput == 29) left(player, frame, 1, true, false);
+					if(userInput == 32) break;
+					doCycle(frame);
+				}
 			}
 		}
 	}
@@ -284,34 +287,60 @@ function fall(player, frame) {
 	return;
 }
 
-function checkBottom(player) {
+function checkBottom(sprite) {
+	var retVal = false;
+	sprite.move(0, 1);
+	if(sprite.y + sprite.height > 24) retVal = true;
 	for(var p in platforms) {
-		for(var x = player.x; x < (player.x + player.width); x++) if((x >= platforms[p].x && x < (platforms[p].x + platforms[p].width)) && platforms[p].y == player.y + player.height) return true;
+		if(checkOverlap(sprite, platforms[p]) || retVal) {
+			retVal = true;
+			break;
+		}
 	}
-	if(player.y + player.height > 24) return true;
-	return false;
+	sprite.move(0, -1);
+	return retVal;
 }
 
-function checkTop(player) {
+function checkTop(sprite) {
+	var retVal = false;
+	sprite.move(0, -1);
+	if(sprite.y < 1) retVal = true;
 	for(var p in platforms) {
-		for(var x = player.x; x < (player.x + player.width); x++) if((x >= platforms[p].x && x < (platforms[p].x + platforms[p].width)) && platforms[p].y == player.y - 1) return true;
+		if(checkOverlap(sprite, platforms[p]) || retVal) {
+			retVal = true;
+			break;
+		}
 	}
-	if(player.y - 1 < 1) return true;
-	return false;
+	sprite.move(0, 1);
+	return retVal;
 }
 
-function checkRight(player) {
+function checkRight(sprite) {
+	var retVal = false;
+	sprite.move(1, 0);
+	if(sprite.x + sprite.width > 81) retVal = true;
 	for(var p in platforms) {
-		for(var y = player.y; y < (player.y + player.height); y++) if(y == platforms[p].y && player.x + player.width == platforms[p].x) return true;
+		if(checkOverlap(sprite, platforms[p]) || retVal) {
+			retVal = true;
+			break;
+		}
 	}
-	return false;
+	sprite.move(-1, 0);
+	return retVal;
 }
 
-function checkLeft(player) {
+function checkLeft(sprite) {
+	var retVal = false;
+	sprite.move(-1,0);
+	if(sprite.x < 1) retVal = true;
 	for(var p in platforms) {
-		for(var y = player.y; y < (player.y + player.height); y++) if(y == platforms[p].y && player.x == platforms[p].x + platforms[p].width) return true;
+		if(checkOverlap(sprite, platforms[p]) || retVal) {
+			retVal = true;
+			break;
+		}
 	}
-	return false;
+	sprite.move(1, 0);
+	return retVal;
 }
 
 function checkOverlap(sprite1, sprite2) {
-- 
GitLab