]> gitweb.ps.run Git - npengine/blobdiff - src/main.cpp
pre change to SendMessage
[npengine] / src / main.cpp
index 4c7d99d4598e467d228d779e7f64e416b0df93ec..6c48dd91d35388000799fdd8c0a9d7867c9d964e 100644 (file)
 #pragma comment(lib, "dinput8.lib")\r
 #pragma comment(lib, "dxguid.lib")\r
 \r
+#define CONSOLE\r
+\r
+#ifdef CONSOLE\r
+#pragma comment(linker, "/subsystem:console")\r
+#else\r
+#pragma comment(linker, "/subsystem:windows")\r
+#endif\r
+\r
 HWND hwnd = NULL;\r
 \r
 STARTUPINFOA si;\r
@@ -88,7 +96,6 @@ void key_up(char c) {
   ip.ki.time = 0;\r
   ip.ki.dwExtraInfo = 0;\r
 \r
-  // Release key\r
   ip.ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;\r
   SendInput(1, &ip, sizeof(INPUT));\r
 }\r
@@ -262,7 +269,7 @@ void update_play(bool can_jump = true, int x_min = 0, int x_max = WIDTH - 1) {
     move(0, +1);\r
 \r
   char b = get_block(x, y);\r
-  if (b == '/' || b == '\\' || b == '-')\r
+  if (b == '/' || b == '\\' || b == '<' || b == '>')\r
     move_to(spawn_x, spawn_y);\r
 }\r
 \r
@@ -334,6 +341,15 @@ void load_level(int l, bool terminate = true) {
   sprintf(title, "%d.txt - Editor", lvl);\r
   hwnd = FindWindowA(NULL, title);\r
 \r
+  SetWindowPos(hwnd, HWND_TOP, 100, 100, 965, 905, SWP_SHOWWINDOW);\r
+  SetFocus(hwnd);\r
+\r
+  for (int i = 0; i < 10; i++) {\r
+    press_down(VK_CONTROL);\r
+    press(VK_OEM_PLUS);\r
+    press_up(VK_CONTROL);\r
+  }\r
+\r
   setup();\r
 }\r
 \r
@@ -347,7 +363,7 @@ void intro() {
     break;\r
   case 1:\r
     update_play(false);\r
-    if (x == 5) {\r
+    if (x == 17) {\r
       print_text(4, 4, "Jump with up.", text_speed);\r
       print_text(4, 6, "Stand on x.", text_speed);\r
       progress++;\r
@@ -355,13 +371,13 @@ void intro() {
     break;\r
   case 2:\r
     update_play();\r
-    if (x == 8) {\r
+    if (x == 22) {\r
       print_text(4, 8, "Collect ? for ???.", text_speed);\r
       progress++;\r
     }\r
     break;\r
   case 3:\r
-    update_play(true, 0, 22);\r
+    update_play(true, 0, 33);\r
     if (get_block(x, y) == '?') {\r
       print_text(4, 10, "Avoid /\\.", text_speed);\r
       progress++;\r
@@ -383,7 +399,18 @@ void intro() {
   }\r
 }\r
 \r
-void lvl1() { update_play(); }\r
+void lvl1() {\r
+  static int progress = 0;\r
+  switch (progress) {\r
+  case 0:\r
+    print_text(4, 2, "Also avoid > and <.", text_speed);\r
+    progress++;\r
+    break;\r
+  case 1:\r
+    update_play();\r
+    break;\r
+  }\r
+}\r
 \r
 void update_game() {\r
   switch (lvl) {\r
@@ -396,14 +423,75 @@ void update_game() {
   }\r
 }\r
 \r
+void enter_keys(std::string input, int delay) {\r
+  for (int i = 0; i < input.size(); i++) {\r
+    if (input[i] == 't') {\r
+      press(VK_TAB);\r
+      Sleep(delay);\r
+    }\r
+    else if (input[i] == 's') {\r
+      press(VK_SPACE);\r
+      Sleep(delay);\r
+    }\r
+    else if (input[i] == '~') {\r
+      press_down(VK_LSHIFT);\r
+      enter_keys(input.substr(i+1, 1), delay);\r
+      press_up(VK_LSHIFT);\r
+      i++;\r
+    }\r
+    else {\r
+      int n = 0;\r
+      int len = 0;\r
+      while (input[i+len] >= '0' && input[i+len] <= '9') {\r
+        n *= 10;\r
+        n += input[i+len] - '0';\r
+        len++;\r
+      }\r
+      for (int j = 0; j < n; j++) {\r
+        if (input[i+len] == '~') {\r
+          enter_keys(input.substr(i+len, 2), delay);\r
+        }\r
+        else {\r
+          enter_keys(input.substr(i+len, 1), delay);\r
+        }          \r
+      }\r
+      if (input[i+len] == '~')\r
+        i++;\r
+      i += len;\r
+    }\r
+  }\r
+}\r
+\r
+void toggle_key_repeat() {\r
+  WinExec("c:\\windows\\system32\\control.exe /name Microsoft.EaseOfAccessCenter /page pageKeyboardEasierToUse", SW_NORMAL);\r
+  Sleep(500);\r
+\r
+  enter_keys("6ts9ts7~ts13ts5~tss6ts", 10);\r
+\r
+  Sleep(100);\r
+\r
+  press_down(VK_CONTROL);\r
+  press('W');\r
+  press_up(VK_CONTROL);\r
+\r
+  Sleep(1000);\r
+}\r
+\r
 /*\r
   Todo:\r
   - Msg Box Intro\r
   - Multi Jump\r
   - more blocks/lvls\r
   - Set Accessibility \r
+  - Lua?\r
+  - Scrolling?\r
 */\r
+#ifdef CONSOLE\r
 int main(int argc, char **argv) {\r
+#else\r
+int WinMain(HINSTANCE a0, HINSTANCE a1, LPSTR a2, int a3) {\r
+#endif\r
+  toggle_key_repeat();\r
   // Dies zu programmieren mit der reduzierten Inputrate.\r
   // Ist nicht angenehm. Ich werde es ändern.......\r
 \r
@@ -452,10 +540,10 @@ int main(int argc, char **argv) {
     keys_old[3] = keys[3];\r
 \r
     WaitForSingleObject(pi.hProcess, wait_time);\r
-\r
-    SetWindowPos(hwnd, HWND_TOPMOST, 100, 100, 500, 500, SWP_SHOWWINDOW);\r
   }\r
 \r
+  toggle_key_repeat();\r
+\r
   destroydikeyboard();\r
 \r
   // Close process and thread handles.\r