{"action":"created","comment":{"url":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/comments/180242607","pull_request_review_id":110630545,"id":180242607,"diff_hunk":"@@ -1,23 +1,559 @@\n+#include \"argswrapper.hpp\"\n #include \"stringmgr.h\"\n+#include \"../config.h\"\n #include \"../interop/interop.hpp\"\n+#include \"../townmgr.h\"\n+\n+#include <cassert>\n+#include <cstring>\n+#include <cstdio>\n+#include <stdexcept>\n \n using namespace openloco::interop;\n \n namespace openloco::stringmgr\n {\n+    const uint16_t NUM_USER_STRINGS   = 2048;\n+    const uint8_t  USER_STRING_SIZE   = 32;\n+    const uint16_t USER_STRINGS_START = 0x8000;\n+    const uint16_t USER_STRINGS_END   = USER_STRINGS_START + NUM_USER_STRINGS;\n+\n+    const uint16_t NUM_TOWN_NAMES     = 345;\n+    const uint16_t TOWN_NAMES_START   = 0x9EE7;\n+    const uint16_t TOWN_NAMES_END     = TOWN_NAMES_START + NUM_TOWN_NAMES;\n+\n     static loco_global<char * [0xFFFF], 0x005183FC> _strings;\n+    static loco_global<char [NUM_USER_STRINGS][USER_STRING_SIZE], 0x0095885C> _userStrings;\n \n     const char* get_string(string_id id)\n     {\n-        return _strings[id];\n+        printf(\"Fetching string %d\\n\", id);\n+        char* str = _strings[id];\n+        printf(\"Found at %p\\n\", str);\n+\n+        return str;\n+    }\n+\n+    // TODO: decltype(value)\n+    static char* format_comma(uint32_t value, char* buffer)\n+    {\n+        registers regs;\n+        regs.eax = value;\n+        regs.edi = (uint32_t) buffer;\n+\n+        call(0x00495F35, regs);\n+        return (char*) regs.edi;\n+    }\n+\n+    // TODO: decltype(value)\n+    static char* format_int(uint32_t value, char* buffer)\n+    {\n+        registers regs;\n+        regs.eax = value;\n+        regs.edi = (uint32_t) buffer;\n+\n+        call(0x495E2A, regs);\n+        return (char*) regs.edi;\n+    }\n+\n+    // TODO: decltype(value)\n+    static char* formatNumeric_4(uint16_t value, char* buffer)\n+    {\n+        registers regs;\n+        regs.eax = (uint32_t) value;\n+        regs.edi = (uint32_t) buffer;\n+\n+        call(0x4963FC, regs);\n+        return (char*) regs.edi;\n+    }\n+\n+    // TODO: decltype(value)\n+    static char* format_comma2dp32(uint32_t value, char* buffer)\n+    {\n+        registers regs;\n+        regs.eax = value;\n+        regs.edi = (uint32_t) buffer;\n+\n+        call(0x4962F1, regs);\n+        return (char*) regs.edi;\n+    }\n+\n+    static char* formatDayMonthYearFull(uint32_t value, char* buffer)\n+    {\n+        registers regs;\n+        regs.eax = (uint32_t) value;\n+        regs.edi = (uint32_t) buffer;\n+\n+        call(0x495CB5, regs);\n+        return (char*) regs.edi;\n+    }\n+\n+    static char* formatMonthYearFull(uint32_t value, char* buffer)\n+    {\n+        registers regs;\n+        regs.eax = (uint32_t) value;\n+        regs.edi = (uint32_t) buffer;\n+\n+        call(0x495D77, regs);\n+        return (char*) regs.edi;\n     }\n \n-    void format_string(char* buffer, string_id id, void* args)\n+    static char* formatMonthYearAbbrev_0(uint32_t value, char* buffer)\n     {\n         registers regs;\n-        regs.eax = id;\n-        regs.edi = (uint32_t)buffer;\n-        regs.ecx = (uint32_t)args;\n-        call(0x004958C6, regs);\n+        regs.eax = (uint32_t) value;\n+        regs.edi = (uint32_t) buffer;\n+\n+        call(0x495DC7, regs);\n+        return (char*) regs.edi;\n+    }\n+\n+    static char* format_string(char* buffer, string_id id, argswrapper &args);\n+\n+    static char* format_string_part(char* buffer ,const char* sourceStr, argswrapper &args)\n+    {\n+        while (true)\n+        {\n+            uint8_t ch = *sourceStr;\n+            sourceStr++;\n+            if (ch == 0)\n+            {\n+                *buffer = '\\0';\n+                return buffer;\n+            }\n+            else if (ch <= 4)\n+            {\n+                *buffer = ch;\n+                buffer++;\n+\n+                ch = *sourceStr;\n+                sourceStr++;\n+\n+                *buffer = ch;\n+                buffer++;\n+            }\n+            else if (ch <= 16)\n+            {\n+                *buffer = ch;\n+                buffer++;\n+            }\n+            else if (ch <= 0x1F)\n+            {\n+                if (ch > 22)\n+                {\n+                    *buffer = ch;\n+                    buffer++;\n+\n+                    ch = *sourceStr;\n+                    sourceStr++;\n+\n+                    *buffer = ch;\n+                    buffer++;\n+\n+                    ch = *sourceStr;\n+                    sourceStr++;\n+\n+                    *buffer = ch;\n+                    buffer++;\n+                }\n+\n+                ch = *sourceStr;\n+                sourceStr++;\n+\n+                *buffer = ch;\n+                buffer++;\n+\n+                ch = *sourceStr;\n+                sourceStr++;\n+\n+                *buffer = ch;\n+                buffer++;\n+            }\n+            else if (ch < '}') // 0x7B\n+            {\n+                *buffer = ch;\n+                buffer++;\n+            }\n+            else if (ch < 0x90)\n+            {\n+                switch (ch)\n+                {\n+                    case 123 + 0:\n+                    {\n+                        uint32_t value = args.pop32();\n+                        buffer = format_comma(value, buffer);\n+                        break;\n+                    }\n+\n+                    case 123 + 1:\n+                    {\n+                        uint32_t value = args.pop32();\n+                        buffer = format_int(value, buffer);\n+                        break;\n+                    }\n+\n+                    case 123 + 2:\n+                    {\n+                        uint16_t value = args.pop16();\n+                        buffer = formatNumeric_4(value, buffer);\n+                        break;\n+                    }\n+\n+                    case 123 + 3:\n+                    {\n+                        uint32_t value = args.pop32();\n+                        buffer = format_comma2dp32(value, buffer);\n+                        break;\n+                    }\n+\n+                    case 123 + 4:\n+                    {\n+                        uint16_t value = args.pop16();\n+                        buffer = format_comma(value, buffer);\n+                        break;\n+                    }\n+\n+                    case 123 + 5:\n+                    {\n+                        uint16_t value = args.pop16();\n+                        buffer = format_int((uint32_t) value, buffer);\n+                        break;\n+                    }\n+\n+                    case 123 + 6:\n+                    {\n+                        args.pop32();\n+                        // !!! TODO: implement and call sub_495B66\n+                        printf(\"Unimplemented format string: 6\\n\");\n+                        break;\n+                    }\n+\n+                    case 123 + 7:\n+                    {\n+                        args.pop32();\n+                        args.pop16();\n+                        // !!! TODO: implement and call sub_495B5B\n+                        printf(\"Unimplemented format string: 7\\n\");","path":"src/openloco/localisation/stringmgr.cpp","position":242,"original_position":242,"commit_id":"418ac791c7fb92a90842a0df3e2d3c3138e27a12","original_commit_id":"418ac791c7fb92a90842a0df3e2d3c3138e27a12","user":{"login":"marijnvdwerf","id":737603,"avatar_url":"https://avatars0.githubusercontent.com/u/737603?v=4","gravatar_id":"","url":"https://api.github.com/users/marijnvdwerf","html_url":"https://github.com/marijnvdwerf","followers_url":"https://api.github.com/users/marijnvdwerf/followers","following_url":"https://api.github.com/users/marijnvdwerf/following{/other_user}","gists_url":"https://api.github.com/users/marijnvdwerf/gists{/gist_id}","starred_url":"https://api.github.com/users/marijnvdwerf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/marijnvdwerf/subscriptions","organizations_url":"https://api.github.com/users/marijnvdwerf/orgs","repos_url":"https://api.github.com/users/marijnvdwerf/repos","events_url":"https://api.github.com/users/marijnvdwerf/events{/privacy}","received_events_url":"https://api.github.com/users/marijnvdwerf/received_events","type":"User","site_admin":false},"body":"`console::error`","created_at":"2018-04-09T21:53:42Z","updated_at":"2018-04-09T21:54:10Z","html_url":"https://github.com/OpenRCT2/OpenLoco/pull/154#discussion_r180242607","pull_request_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/154","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/comments/180242607"},"html":{"href":"https://github.com/OpenRCT2/OpenLoco/pull/154#discussion_r180242607"},"pull_request":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/154"}}},"pull_request":{"url":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/154","id":177182635,"html_url":"https://github.com/OpenRCT2/OpenLoco/pull/154","diff_url":"https://github.com/OpenRCT2/OpenLoco/pull/154.diff","patch_url":"https://github.com/OpenRCT2/OpenLoco/pull/154.patch","issue_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/issues/154","number":154,"state":"open","locked":false,"title":"Implement string formatting","user":{"login":"AaronVanGeffen","id":604665,"avatar_url":"https://avatars1.githubusercontent.com/u/604665?v=4","gravatar_id":"","url":"https://api.github.com/users/AaronVanGeffen","html_url":"https://github.com/AaronVanGeffen","followers_url":"https://api.github.com/users/AaronVanGeffen/followers","following_url":"https://api.github.com/users/AaronVanGeffen/following{/other_user}","gists_url":"https://api.github.com/users/AaronVanGeffen/gists{/gist_id}","starred_url":"https://api.github.com/users/AaronVanGeffen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AaronVanGeffen/subscriptions","organizations_url":"https://api.github.com/users/AaronVanGeffen/orgs","repos_url":"https://api.github.com/users/AaronVanGeffen/repos","events_url":"https://api.github.com/users/AaronVanGeffen/events{/privacy}","received_events_url":"https://api.github.com/users/AaronVanGeffen/received_events","type":"User","site_admin":false},"body":"This PR is to keep track of my progress implementing the string formatting functions. It's a bit of a mess still, but we'll clean up as we go along. Feedback welcome.","created_at":"2018-03-23T20:58:15Z","updated_at":"2018-04-09T21:54:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c649862685afac6bb91762d8c2b2c7a978aea378","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":811064551,"url":"https://api.github.com/repos/OpenRCT2/OpenLoco/labels/work%20in%20progress","name":"work in progress","color":"FFEB3B","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/154/commits","review_comments_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/154/comments","review_comment_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/issues/154/comments","statuses_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/statuses/418ac791c7fb92a90842a0df3e2d3c3138e27a12","head":{"label":"AaronVanGeffen:format_string","ref":"format_string","sha":"418ac791c7fb92a90842a0df3e2d3c3138e27a12","user":{"login":"AaronVanGeffen","id":604665,"avatar_url":"https://avatars1.githubusercontent.com/u/604665?v=4","gravatar_id":"","url":"https://api.github.com/users/AaronVanGeffen","html_url":"https://github.com/AaronVanGeffen","followers_url":"https://api.github.com/users/AaronVanGeffen/followers","following_url":"https://api.github.com/users/AaronVanGeffen/following{/other_user}","gists_url":"https://api.github.com/users/AaronVanGeffen/gists{/gist_id}","starred_url":"https://api.github.com/users/AaronVanGeffen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AaronVanGeffen/subscriptions","organizations_url":"https://api.github.com/users/AaronVanGeffen/orgs","repos_url":"https://api.github.com/users/AaronVanGeffen/repos","events_url":"https://api.github.com/users/AaronVanGeffen/events{/privacy}","received_events_url":"https://api.github.com/users/AaronVanGeffen/received_events","type":"User","site_admin":false},"repo":{"id":118156789,"name":"OpenLoco","full_name":"AaronVanGeffen/OpenLoco","owner":{"login":"AaronVanGeffen","id":604665,"avatar_url":"https://avatars1.githubusercontent.com/u/604665?v=4","gravatar_id":"","url":"https://api.github.com/users/AaronVanGeffen","html_url":"https://github.com/AaronVanGeffen","followers_url":"https://api.github.com/users/AaronVanGeffen/followers","following_url":"https://api.github.com/users/AaronVanGeffen/following{/other_user}","gists_url":"https://api.github.com/users/AaronVanGeffen/gists{/gist_id}","starred_url":"https://api.github.com/users/AaronVanGeffen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AaronVanGeffen/subscriptions","organizations_url":"https://api.github.com/users/AaronVanGeffen/orgs","repos_url":"https://api.github.com/users/AaronVanGeffen/repos","events_url":"https://api.github.com/users/AaronVanGeffen/events{/privacy}","received_events_url":"https://api.github.com/users/AaronVanGeffen/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/AaronVanGeffen/OpenLoco","description":"An open source re-implementation of Chris Sawyer's Locomotion","fork":true,"url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco","forks_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/forks","keys_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/teams","hooks_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/hooks","issue_events_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/issues/events{/number}","events_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/events","assignees_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/assignees{/user}","branches_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/branches{/branch}","tags_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/tags","blobs_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/git/refs{/sha}","trees_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/statuses/{sha}","languages_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/languages","stargazers_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/stargazers","contributors_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/contributors","subscribers_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/subscribers","subscription_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/subscription","commits_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/commits{/sha}","git_commits_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/git/commits{/sha}","comments_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/comments{/number}","issue_comment_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/issues/comments{/number}","contents_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/contents/{+path}","compare_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/merges","archive_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/downloads","issues_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/issues{/number}","pulls_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/pulls{/number}","milestones_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/milestones{/number}","notifications_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/labels{/name}","releases_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/releases{/id}","deployments_url":"https://api.github.com/repos/AaronVanGeffen/OpenLoco/deployments","created_at":"2018-01-19T17:32:57Z","updated_at":"2018-01-19T17:32:59Z","pushed_at":"2018-04-09T13:19:09Z","git_url":"git://github.com/AaronVanGeffen/OpenLoco.git","ssh_url":"git@github.com:AaronVanGeffen/OpenLoco.git","clone_url":"https://github.com/AaronVanGeffen/OpenLoco.git","svn_url":"https://github.com/AaronVanGeffen/OpenLoco","homepage":null,"size":2183,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"OpenRCT2:master","ref":"master","sha":"937da8a3765d76d0f1f169c401c0610b4a2bae0b","user":{"login":"OpenRCT2","id":8473908,"avatar_url":"https://avatars0.githubusercontent.com/u/8473908?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenRCT2","html_url":"https://github.com/OpenRCT2","followers_url":"https://api.github.com/users/OpenRCT2/followers","following_url":"https://api.github.com/users/OpenRCT2/following{/other_user}","gists_url":"https://api.github.com/users/OpenRCT2/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenRCT2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenRCT2/subscriptions","organizations_url":"https://api.github.com/users/OpenRCT2/orgs","repos_url":"https://api.github.com/users/OpenRCT2/repos","events_url":"https://api.github.com/users/OpenRCT2/events{/privacy}","received_events_url":"https://api.github.com/users/OpenRCT2/received_events","type":"Organization","site_admin":false},"repo":{"id":116523281,"name":"OpenLoco","full_name":"OpenRCT2/OpenLoco","owner":{"login":"OpenRCT2","id":8473908,"avatar_url":"https://avatars0.githubusercontent.com/u/8473908?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenRCT2","html_url":"https://github.com/OpenRCT2","followers_url":"https://api.github.com/users/OpenRCT2/followers","following_url":"https://api.github.com/users/OpenRCT2/following{/other_user}","gists_url":"https://api.github.com/users/OpenRCT2/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenRCT2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenRCT2/subscriptions","organizations_url":"https://api.github.com/users/OpenRCT2/orgs","repos_url":"https://api.github.com/users/OpenRCT2/repos","events_url":"https://api.github.com/users/OpenRCT2/events{/privacy}","received_events_url":"https://api.github.com/users/OpenRCT2/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenRCT2/OpenLoco","description":"An open source re-implementation of Chris Sawyer's Locomotion","fork":false,"url":"https://api.github.com/repos/OpenRCT2/OpenLoco","forks_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/forks","keys_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/teams","hooks_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/hooks","issue_events_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/issues/events{/number}","events_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/events","assignees_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/assignees{/user}","branches_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/branches{/branch}","tags_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/tags","blobs_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/languages","stargazers_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/stargazers","contributors_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/contributors","subscribers_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/subscribers","subscription_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/subscription","commits_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/contents/{+path}","compare_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/merges","archive_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/downloads","issues_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/issues{/number}","pulls_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/labels{/name}","releases_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/releases{/id}","deployments_url":"https://api.github.com/repos/OpenRCT2/OpenLoco/deployments","created_at":"2018-01-06T23:35:23Z","updated_at":"2018-04-06T12:07:55Z","pushed_at":"2018-04-09T13:19:10Z","git_url":"git://github.com/OpenRCT2/OpenLoco.git","ssh_url":"git@github.com:OpenRCT2/OpenLoco.git","clone_url":"https://github.com/OpenRCT2/OpenLoco.git","svn_url":"https://github.com/OpenRCT2/OpenLoco","homepage":null,"size":2150,"stargazers_count":92,"watchers_count":92,"language":"C++","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":25,"mirror_url":null,"archived":false,"open_issues_count":75,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":25,"open_issues":75,"watchers":92,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/154"},"html":{"href":"https://github.com/OpenRCT2/OpenLoco/pull/154"},"issue":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/issues/154"},"comments":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/issues/154/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/154/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/pulls/154/commits"},"statuses":{"href":"https://api.github.com/repos/OpenRCT2/OpenLoco/statuses/418ac791c7fb92a90842a0df3e2d3c3138e27a12"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"marijnvdwerf"}}