diff --git a/59 Lunar LEM Rocket/javascript/lem.html b/59 Lunar LEM Rocket/javascript/lem.html
new file mode 100644
index 00000000..717ae005
--- /dev/null
+++ b/59 Lunar LEM Rocket/javascript/lem.html
@@ -0,0 +1,9 @@
+
+
+LEM
+
+
+
+
+
+
diff --git a/59 Lunar LEM Rocket/javascript/lem.js b/59 Lunar LEM Rocket/javascript/lem.js
new file mode 100644
index 00000000..4f5ffd30
--- /dev/null
+++ b/59 Lunar LEM Rocket/javascript/lem.js
@@ -0,0 +1,326 @@
+// LEM
+//
+// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
+//
+
+function print(str)
+{
+ document.getElementById("output").appendChild(document.createTextNode(str));
+}
+
+function input()
+{
+ var input_element;
+ var input_str;
+
+ return new Promise(function (resolve) {
+ input_element = document.createElement("INPUT");
+
+ print("? ");
+ input_element.setAttribute("type", "text");
+ input_element.setAttribute("length", "50");
+ document.getElementById("output").appendChild(input_element);
+ input_element.focus();
+ input_str = undefined;
+ input_element.addEventListener("keydown", function (event) {
+ if (event.keyCode == 13) {
+ input_str = input_element.value;
+ document.getElementById("output").removeChild(input_element);
+ print(input_str);
+ print("\n");
+ resolve(input_str);
+ }
+ });
+ });
+}
+
+function tab(space)
+{
+ var str = "";
+ while (space-- > 0)
+ str += " ";
+ return str;
+}
+
+// Main program
+async function main()
+{
+ print(tab(34) + "LEM\n");
+ print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
+ // ROCKT2 is an interactive game that simulates a lunar
+ // landing is similar to that of the Apollo program.
+ // There is absolutely no chance involved
+ zs = "GO";
+ b1 = 1;
+ while (1) {
+ m = 17.95;
+ f1 = 5.25;
+ n = 7.5;
+ r0 = 926;
+ v0 = 1.29;
+ t = 0;
+ h0 = 60;
+ r = r0 + h0;
+ a = -3,425;
+ r1 = 0;
+ a1 = 8.84361e-4;
+ r3 = 0;
+ a3 = 0;
+ m1 = 7.45;
+ m0 = m1;
+ b = 750;
+ t1 = 0;
+ f = 0;
+ p = 0;
+ n = 1;
+ m2 = 0;
+ s = 0;
+ c = 0;
+ if (zs == "YES") {
+ print("\n");
+ print("OK, DO YOU WANT THE COMPLETE INSTRUCTIONS OR THE INPUT -\n");
+ print("OUTPUT STATEMENTS?\n");
+ while (1) {
+ print("1=COMPLETE INSTRUCTIONS\n");
+ print("2=INPUT-OUTPUT STATEMENTS\n");
+ print("3=NEITHER\n");
+ b1 = parseInt(await input());
+ qs = "NO";
+ if (b1 == 1)
+ break;
+ qs = "YES";
+ if (b1 == 2 || b1 == 3)
+ break;
+ }
+ } else {
+ print("\n");
+ print("LUNAR LANDING SIMULATION\n");
+ print("\n");
+ print("HAVE YOU FLOWN AN APOLLO/LEM MISSION BEFORE");
+ while (1) {
+ print(" (YES OR NO)");
+ qs = await input();
+ if (qs == "YES" || qs == "NO")
+ break;
+ print("JUST ANSWER THE QUESTION, PLEASE, ");
+ }
+ }
+ if (qs == "YES") {
+ print("\n");
+ print("INPUT MEASUREMENT OPTION NUMBER");
+ } else {
+ print("\n");
+ print("WHICH SYSTEM OF MEASUREMENT DO YOU PREFER?\n");
+ print(" 1=METRIC 0=ENGLISH\n");
+ print("ENTER THE APPROPIATE NUMBER");
+ }
+ while (1) {
+ k = parseInt(await input());
+ if (k == 0 || k == 1)
+ break;
+ print("ENTER THE APPROPIATE NUMBER");
+ }
+ if (k == 1) {
+ z = 1852.8;
+ ms = "METERS";
+ g3 = 3.6;
+ ns = " KILOMETERS";
+ g5 = 1000;
+ } else {
+ z = 6080;
+ ms = "FEET";
+ g3 = 0.592;
+ ns = "N.MILES";
+ g5 = z;
+ }
+ if (b1 != 3) {
+ if (qs != "YES") {
+ print("\n");
+ print(" YOU ARE ON A LUNAR LANDING MISSION. AS THE PILOT OF\n");
+ print("THE LUNAR EXCURSION MODULE, YOU WILL BE EXPECTED TO\n");
+ print("GIVE CERTAIN COMMANDS TO THE MODULE NAVIGATION SYSTEM.\n");
+ print("THE ON-BOARD COMPUTER WILL GIVE A RUNNING ACCOUNT\n");
+ print("OF INFORMATION NEEDED TO NAVIGATE THE SHIP.\n");
+ print("\n");
+ print("\n");
+ print("THE ATTITUDE ANGLE CALLED FOR IS DESCRIBED AS FOLLOWS.\n");
+ print("+ OR -180 DEGREES IS DIRECTLY AWAY FROM THE MOON\n");
+ print("-90 DEGREES IS ON A TANGENT IN THE DIRECTION OF ORBIT\n");
+ print("+90 DEGREES IS ON A TANGENT FROM THE DIRECTION OF ORBIT\n");
+ print("0 (ZERO) DEGREES IS DIRECTLY TOWARD THE MOON\n");
+ print("\n");
+ print(tab(30) + "-180|+180\n");
+ print(tab(34) + "^\n");
+ print(tab(27) + "-90 < -+- > +90\n");
+ print(tab(34) + "!\n");
+ print(tab(34) + "0\n");
+ print(tab(21) + "<<<< DIRECTION OF ORBIT <<<<\n");
+ print("\n");
+ print(tab(20) + "------ SURFACE OF MOON ------\n");
+ print("\n");
+ print("\n");
+ print("ALL ANGLES BETWEEN -180 AND +180 DEGREES ARE ACCEPTED.\n");
+ print("\n");
+ print("1 FUEL UNIT = 1 SEC. AT MAX THRUST\n");
+ print("ANY DISCREPANCIES ARE ACCOUNTED FOR IN THE USE OF FUEL\n");
+ print("FOR AN ATTITUDE CHANGE.\n");
+ print("AVAILABLE ENGINE POWER: 0 (ZERO) AND ANY VALUE BETWEEN\n");
+ print("10 AND 100 PERCENT.\n");
+ print("\n");
+ print("NEGATIVE THRUST OR TIME IS PROHIBITED.\n");
+ print("\n");
+ }
+ print("\n");
+ print("INPUT: TIME INTERVAL IN SECONDS ------ (T)\n");
+ print(" PERCENTAGE OF THRUST ---------- (P)\n");
+ print(" ATTITUDE ANGLE IN DEGREES ----- (A)\n");
+ print("\n");
+ if (qs != "YES") {
+ print("FOR EXAMPLE:\n");
+ print("T,P,A? 10,65,-60\n");
+ print("TO ABORT THE MISSION AT ANY TIME, ENTER 0,0,0\n");
+ print("\n");
+ }
+ print("OUTPUT: TOTAL TIME IN ELAPSED SECONDS\n");
+ print(" HEIGHT IN " + ms + "\n");
+ print(" DISTANCE FROM LANDING SITE IN " + ms + "\n");
+ print(" VERTICAL VELOCITY IN " + ms + "/SECOND\n");
+ print(" HORIZONTAL VELOCITY IN " + ms + "/SECOND\n");
+ print(" FUEL UNITS REMAINING\n");
+ print("\n");
+ }
+ while (1) {
+ for (i = 1; i <= n; i++) {
+ if (m1 != 0) {
+ m1 -= m2;
+ if (m1 <= 0) {
+ f = f * (1 + m1 / m2);
+ m2 = m1 + m2;
+ print("YOU ARE OUT OF FUEL.\n");
+ m1 = 0;
+ }
+ } else {
+ f = 0;
+ m2 = 0;
+ }
+ m = m - 0.5 * m2;
+ r4 = r3;
+ r3 = -0.5 * r0 * Math.pow(v0 / r, 2) + r * a1 * a1;
+ r2 = (3 * r3 - r4) / 2 + 0.00526 * f1 * f * c / m;
+ a4 = a3;
+ a3 = -2 * r1 * a1 / r;
+ a2 = (3 * a3 - a4) / 2 + 0.0056 * f1 * f * s / (m * r);
+ x = r1 * t1 + 0.5 * r2 * t1 * t1;
+ r = r + x;
+ h0 = h0 + x;
+ r1 = r1 + r2 * t1;
+ a = a + a1 * t1 + 0.5 * a2 * t1 * t1;
+ a1 = a1 + a2 * t1;
+ m = m - 0.5 * m2;
+ t = t + t1;
+ if (h0 < 3.287828e-4)
+ break;
+ }
+ h = h0 * z;
+ h1 = r1 * z;
+ d = r0 * a * z;
+ d1 = r * a1 * z;
+ t2 = m1 * b / m0;
+ print(" " + t + "\t" + h + "\t" + d + "\t" + h1 + "\t" + d1 + "\t" + t2 + "\n");
+ if (h0 < 3.287828e-4) {
+ if (r1 < -8.21957e-4 || Math.abs(r * a1) > 4.93174e-4 || h0 < -3.287828e-4) {
+ print("\n");
+ print("CRASH !!!!!!!!!!!!!!!!\n");
+ print("YOUR IMPACT CREATED A CRATER " + Math.abs(h) + " " + ms + " DEEP.\n");
+ x1 = Math.sqrt(d1 * d1 + h1 * h1) * g3;
+ print("AT CONTACT YOU WERE TRAVELING " + x1 + " " + ns + "/HR\n");
+ break;
+ }
+ if (Math.abs(d) > 10 * z) {
+ print("YOU ARE DOWN SAFELY - \n");
+ print("\n");
+ print("BUT MISSED THE LANDING SITE BY " + Math.abs(d / g5) + " " + ns + ".\n");
+ break;
+ }
+ print("\n");
+ print("TRANQUILITY BASE HERE -- THE EAGLE HAS LANDED.\n");
+ print("CONGRATULATIONS -- THERE WAS NO SPACECRAFT DAMAGE.\n");
+ print("YOU MAY NOW PROCEED WITH SURFACE EXPLORATION.\n");
+ break;
+ }
+ if (r0 * a > 164.474) {
+ print("\n");
+ print("YOU HAVE BEEN LOST IN SPACE WITH NO HOPE OF RECOVERY.\n");
+ break;
+ }
+ if (m1 > 0) {
+ while (1) {
+ print("T,P,A");
+ str = await input();
+ t1 = parseFloat(str);
+ f = parseFloat(str.substr(str.indexOf(",") + 1));
+ p = parseFloat(str.substr(str.lastIndexOf(",") + 1));
+ f = f / 100;
+ if (t1 < 0) {
+ print("\n");
+ print("THIS SPACECRAFT IS NOT ABLE TO VIOLATE THE SPACE-");
+ print("TIME CONTINUUM.\n");
+ print("\n");
+ } else if (t1 == 0) {
+ break;
+ } else if (Math.abs(f - 0.05) > 1 || Math.abs(f - 0.05) < 0.05) {
+ print("IMPOSSIBLE THRUST VALUE ");
+ if (f < 0) {
+ print("NEGATIVE\n");
+ } else if (f - 0.05 < 0.05) {
+ print("TOO SMALL\n");
+ } else {
+ print("TOO LARGE\n");
+ }
+ print("\n");
+ } else if (Math.abs(p) > 180) {
+ print("\n");
+ print("IF YOU WANT TO SPIN AROUND, GO OUTSIDE THE MODULE\n");
+ print("FOR AN E.V.A.\n");
+ print("\n");
+ } else {
+ break;
+ }
+ }
+ if (t1 == 0) {
+ print("\n");
+ print("MISSION ABENDED\n");
+ break;
+ }
+ } else {
+ t1 = 20;
+ f = 0;
+ p = 0;
+ }
+ n = 20;
+ if (t1 >= 400)
+ n = t1 / 20;
+ t1 = t1 / n;
+ p = p * 3.14159 / 180;
+ s = Math.sin(p);
+ c = Math.cos(p);
+ m2 = m0 * t1 * f / b;
+ r3 = -0.5 * r0 * Math.pow(v0 / r, 2) + r * a1 * a1;
+ a3 = -2 * r1 * a1 / r;
+ }
+ print("\n");
+ while (1) {
+ print("DO YOU WANT TO TRY IT AGAIN (YES/NO)?\n");
+ zs = await input();
+ if (zs == "YES" || zs == "NO")
+ break;
+ }
+ if (zs != "YES")
+ break;
+ }
+ print("\n");
+ print("TOO BAD, THE SPACE PROGRAM HATES TO LOSE EXPERIENCED\n");
+ print("ASTRONAUTS.\n");
+}
+
+main();
diff --git a/59 Lunar LEM Rocket/javascript/lunar.html b/59 Lunar LEM Rocket/javascript/lunar.html
new file mode 100644
index 00000000..cdcabc2d
--- /dev/null
+++ b/59 Lunar LEM Rocket/javascript/lunar.html
@@ -0,0 +1,9 @@
+
+
+LUNAR
+
+
+
+
+
+
diff --git a/59 Lunar LEM Rocket/javascript/lunar.js b/59 Lunar LEM Rocket/javascript/lunar.js
new file mode 100644
index 00000000..f95d1d16
--- /dev/null
+++ b/59 Lunar LEM Rocket/javascript/lunar.js
@@ -0,0 +1,191 @@
+// LUNAR
+//
+// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
+//
+
+function print(str)
+{
+ document.getElementById("output").appendChild(document.createTextNode(str));
+}
+
+function input()
+{
+ var input_element;
+ var input_str;
+
+ return new Promise(function (resolve) {
+ input_element = document.createElement("INPUT");
+
+ print("? ");
+ input_element.setAttribute("type", "text");
+ input_element.setAttribute("length", "50");
+ document.getElementById("output").appendChild(input_element);
+ input_element.focus();
+ input_str = undefined;
+ input_element.addEventListener("keydown", function (event) {
+ if (event.keyCode == 13) {
+ input_str = input_element.value;
+ document.getElementById("output").removeChild(input_element);
+ print(input_str);
+ print("\n");
+ resolve(input_str);
+ }
+ });
+ });
+}
+
+function tab(space)
+{
+ var str = "";
+ while (space-- > 0)
+ str += " ";
+ return str;
+}
+
+var l;
+var t;
+var m;
+var s;
+var k;
+var a;
+var v;
+var i;
+var j;
+var q;
+var g;
+var z;
+var d;
+
+function formula_set_1()
+{
+ l = l + s;
+ t = t - s;
+ m = m - s * k;
+ a = i;
+ v = j;
+}
+
+function formula_set_2()
+{
+ q = s * k / m;
+ j = v + g * s + z * (-q - q * q / 2 - Math.pow(q, 3) / 3 - Math.pow(q, 4) / 4 - Math.pow(q, 5) / 5);
+ i = a - g * s * s / 2 - v * s + z * s * (q / 2 + Math.pow(q, 2) / 6 + Math.pow(q, 3) / 12 + Math.pow(q, 4) / 20 + Math.pow(q, 5) / 30);
+}
+
+function formula_set_3()
+{
+ while (s >= 5e-3) {
+ d = v + Math.sqrt(v * v + 2 * a * (g - z * k / m));
+ s = 2 * a / d;
+ formula_set_2();
+ formula_set_1();
+ }
+}
+
+// Main program
+async function main()
+{
+ print(tab(33) + "LUNAR\n");
+ print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
+ print("\n");
+ print("\n");
+ print("\n");
+ print("THIS IS A COMPUTER SIMULATION OF AN APOLLO LUNAR\n");
+ print("LANDING CAPSULE.\n");
+ print("\n");
+ print("\n");
+ print("THE ON-BOARD COMPUTER HAS FAILED (IT WAS MADE BY\n");
+ print("XEROX) SO YOU HAVE TO LAND THE CAPSULE MANUALLY.\n");
+ while (1) {
+ print("\n");
+ print("SET BURN RATE OF RETRO ROCKETS TO ANY VALUE BETWEEN\n");
+ print("0 (FREE FALL) AND 200 (MAXIMUM BURN) POUNDS PER SECOND.\n");
+ print("SET NEW BURN RATE EVERY 10 SECONDS.\n");
+ print("\n");
+ print("CAPSULE WEIGHT 32,500 LBS; FUEL WEIGHT 16,500 LBS.\n");
+ print("\n");
+ print("\n");
+ print("\n");
+ print("GOOD LUCK\n");
+ l = 0;
+ print("\n");
+ print("SEC\tMI + FT\t\tMPH\tLB FUEL\tBURN RATE\n");
+ print("\n");
+ a = 120;
+ v = 1;
+ m = 33000;
+ n = 16500;
+ g = 1e-3;
+ z = 1.8;
+ while (1) {
+ print(l + "\t" + Math.floor(a) + " + " + Math.floor(5280 * (a - Math.floor(a))) + " \t" + Math.floor(3600 * v * 100) / 100 + "\t" + (m - n) + "\t");
+ k = parseFloat(await input());
+ t = 10;
+ should_exit = false;
+ while (1) {
+ if (m - n < 1e-3)
+ break;
+ if (t < 1e-3)
+ break;
+ s = t;
+ if (m < n + s * k)
+ s = (m - n) / k;
+ formula_set_2();
+ if (i <= 0) {
+ formula_set_3();
+ should_exit = true;
+ break;
+ }
+ if (v > 0) {
+ if (j < 0) {
+ do {
+ w = (1 - m * g / (z * k)) / 2;
+ s = m * v / (z * k * (w + Math.sqrt(w * w + v / z))) + 0.05;
+ formula_set_2();
+ if (i <= 0) {
+ formula_set_3();
+ should_exit = true;
+ break;
+ }
+ formula_set_1();
+ if (j > 0)
+ break;
+ } while (v > 0) ;
+ if (should_exit)
+ break;
+ continue;
+ }
+ }
+ formula_set_1();
+ }
+ if (should_exit)
+ break;
+ if (m - n < 1e-3) {
+ print("FUEL OUT AT " + l + " SECOND\n");
+ s = (-v * Math.sqrt(v * v + 2 * a * g)) / g;
+ v = v + g * s;
+ l = l + s;
+ break;
+ }
+ }
+ w = 3600 * v;
+ print("ON MOON AT " + l + " SECONDS - IMPACT VELOCITY " + w + " MPH\n");
+ if (w <= 1.2) {
+ print("PERFECT LANDING!\n");
+ } else if (w <= 10) {
+ print("GOOD LANDING (COULD BE BETTER)\n");
+ } else if (w <= 60) {
+ print("CRAFT DAMAGE... YOU'RE STRANDED HERE UNTIL A RESCUE\n");
+ print("PARTY ARRIVES. HOPE YOU HAVE ENOUGH OXYGEN!\n");
+ } else {
+ print("SORRY THERE WERE NO SURVIVORS. YOU BLEW IT!\n");
+ print("IN FACT, YOU BLASTED A NEW LUNAR CRATER " + (w * 0.227) + " FEET DEEP!\n");
+ }
+ print("\n");
+ print("\n");
+ print("\n");
+ print("TRY AGAIN??\n");
+ }
+}
+
+main();