{"action":"created","comment":{"url":"https://api.github.com/repos/stepmania/stepmania/pulls/comments/22404150","id":22404150,"diff_hunk":"@@ -495,42 +786,165 @@ void NoteDisplay::DrawHoldPart( vector<Sprite*> &vpSpr, int iCol, int fYStep, fl\n \t\t\tbLast = true;\n \t\t}\n \n-\t\tconst float fYOffset\t\t= ArrowEffects::GetYOffsetFromYPos( m_pPlayerState, iCol, fY, m_fYReverseOffsetPixels );\n-\t\tconst float fZ\t\t\t= ArrowEffects::GetZPos( m_pPlayerState, iCol, fYOffset );\n+\t\tconst float fYOffset\t\t= ArrowEffects::GetYOffsetFromYPos( m_pPlayerState, column_args.column, fY, m_fYReverseOffsetPixels );\n+\n+\t\tfloat cur_beat= top_beat;\n+\t\tif(top_beat != bottom_beat)\n+\t\t{\n+\t\t\tcur_beat= SCALE(fY, fYTop, fYBottom, top_beat, bottom_beat);\n+\t\t}\n+\n+\t\t// Fun times ahead with vector math.  If the notes are being moved by the\n+\t\t// position spline, the vectors used to position the edges of the strip\n+\t\t// need to be adjusted or the hold will vanish when the notes move\n+\t\t// horizontally.\n+\t\t// To accomplish this, we use the derivative at the current point from\n+\t\t// AE and the position spline.  That gives us the forward vector for the\n+\t\t// strip, pointing to where the next center vert will be. (step 1)\n+\t\t// The vectors pointing left and right to the edges of the strip are\n+\t\t// obtained from the cross product of the forward vector and pos_z_vec.\n+\t\t// (unless the forward vec is too close to pos_z_vec or -pos_z_vec, in\n+\t\t// which case pos_y_vec is used)  The result of a cross product is a\n+\t\t// vector perpendicular to both, so forward crossed with pos_z_vec gives\n+\t\t// us the left vector.  Right is of course -left. (step 2)\n+\t\t// After that step, the left and right vectors need to be rotated around\n+\t\t// the forward vector axis by the y rotation value, to allow the hold to\n+\t\t// twist. (step 3)\n+\t\t// Steps will be labeled where they occur below. -Kyz\n+\t\t// TODO:  Figure out whether it's worth the time investment to figure out\n+\t\t// a way to skip the complex vector handling if the spline is disabled.\n+\n+\t\tvector<float> sp_pos;\n+\t\tvector<float> sp_pos_forward;\n+\t\tvector<float> sp_rot;\n+\t\tvector<float> sp_zoom;\n+\t\tvector<float> ae_pos(3, 0.0f);\n+\t\tvector<float> ae_rot(3, 0.0f);\n+\n+\t\t// (step 1 of vector handling, part 1)\n+\t\t// ArrowEffects only contributes to the Y component of the vector to\n+\t\t// maintain the old behavior of how holds are drawn when they wave back\n+\t\t// and forth. -Kyz\n+\t\tRageVector3 render_forward(0.0f, 1.0f, 0.0f);\n+\t\tcolumn_args.spae_pos_for_beat(m_pPlayerState, cur_beat,\n+\t\t\tfYOffset, m_fYReverseOffsetPixels, sp_pos, ae_pos);\n+\t\t// fX and fZ are sp_pos[0] + ae_pos[0] and sp_pos[2] + ae_pos[2]. -Kyz\n+\t\t// fY is the actual y position that should be used, not whatever spae\n+\t\t// fetched from ArrowEffects. -Kyz\n+\t\tswitch(column_args.pos_handler->m_spline_mode)\n+\t\t{\n+\t\t\tcase NCSM_Disabled:\n+\t\t\t\tae_pos[1]= fY;\n+\t\t\t\tsp_pos_forward.resize(3);\n+\t\t\t\tsp_pos_forward[0]= sp_pos_forward[1]= sp_pos_forward[2]= 0.0f;\n+\t\t\t\tbreak;\n+\t\t\tcase NCSM_Offset:\n+\t\t\t\tae_pos[1]= fY;\n+\t\t\t\tcolumn_args.pos_handler->EvalDerivForBeat(column_args.song_beat, cur_beat, sp_pos_forward);\n+\t\t\t\tVectorFloatNormalize(sp_pos_forward);\n+\t\t\t\tbreak;\n+\t\t\tcase NCSM_Position:\n+\t\t\t\tae_pos[1]= 0.0f;\n+\t\t\t\trender_forward.y= 0.0f;\n+\t\t\t\tcolumn_args.pos_handler->EvalDerivForBeat(column_args.song_beat, cur_beat, sp_pos_forward);\n+\t\t\t\tVectorFloatNormalize(sp_pos_forward);\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\trender_forward.x+= sp_pos_forward[0];\n+\t\trender_forward.y+= sp_pos_forward[1];\n+\t\trender_forward.z+= sp_pos_forward[2];\n+\t\t// Normalize the vector so it'll be easy to test when determining whether\n+\t\t// to use pos_z_vec or pos_y_vec for the cross product in step 2.\n+\t\tRageVec3Normalize(&render_forward, &render_forward);\n+\n+\t\t// Holds are only affected by the x axis of the zoom spline because they\n+\t\t// are flat sprites. -Kyz\n+\t\tfloat render_width= fFrameWidth;\n+\t\tswitch(column_args.zoom_handler->m_spline_mode)\n+\t\t{\n+\t\t\tcase NCSM_Disabled:\n+\t\t\t\trender_width= fFrameWidth * ae_zoom;\n+\t\t\t\tbreak;\n+\t\t\tcase NCSM_Offset:\n+\t\t\t\tcolumn_args.zoom_handler->EvalForBeat(column_args.song_beat, cur_beat, sp_zoom);\n+\t\t\t\trender_width= fFrameWidth * (ae_zoom + sp_zoom[0]);\n+\t\t\t\tbreak;\n+\t\t\tcase NCSM_Position:\n+\t\t\t\tcolumn_args.zoom_handler->EvalForBeat(column_args.song_beat, cur_beat, sp_zoom);\n+\t\t\t\trender_width= fFrameWidth * sp_zoom[0];\n+\t\t\t\tbreak;\n+\t\t}\n+\n \t\tconst float fFrameWidthScale\t= ArrowEffects::GetFrameWidthScale( m_pPlayerState, fYOffset, fOverlappedTime );\n-\t\tconst float fScaledFrameWidth\t= fFrameWidth * fFrameWidthScale;\n+\t\tconst float fScaledFrameWidth\t= render_width * fFrameWidthScale;\n \n-\t\tfloat fX\t\t\t= ArrowEffects::GetXPos( m_pPlayerState, iCol, fYOffset );\n+\t\t// Can't use the same code as for taps because hold bodies can only rotate\n+\t\t// around the y axis. -Kyz\n+\t\tswitch(column_args.rot_handler->m_spline_mode)\n+\t\t{\n+\t\t\tcase NCSM_Disabled:\n+\t\t\t\t// XXX: Actor rotations use degrees, Math uses radians. Convert here.\n+\t\t\t\tae_rot[1]= ArrowEffects::GetRotationY(m_pPlayerState, fYOffset) * PI_180;\n+\t\t\t\tsp_rot.resize(3);\n+\t\t\t\tsp_rot[0]= sp_rot[1]= sp_rot[2]= 0.0f;\n+\t\t\t\tbreak;\n+\t\t\tcase NCSM_Offset:\n+\t\t\t\tae_rot[1]= ArrowEffects::GetRotationY(m_pPlayerState, fYOffset) * PI_180;\n+\t\t\t\tcolumn_args.rot_handler->EvalForBeat(column_args.song_beat, cur_beat, sp_rot);\n+\t\t\t\tbreak;\n+\t\t\tcase NCSM_Position:\n+\t\t\t\tcolumn_args.rot_handler->EvalForBeat(column_args.song_beat, cur_beat, sp_rot);\n+\t\t\t\tbreak;\n+\t\t}\n \n-\t\t// XXX: Actor rotations use degrees, RageFastCos/Sin use radians. Convert here.\n-\t\tconst float fRotationY\t\t= ArrowEffects::GetRotationY( m_pPlayerState, fYOffset ) * PI/180;\n+\t\tRageVector3 center_vert(sp_pos[0] + ae_pos[0],\n+\t\t\tsp_pos[1] + ae_pos[1], sp_pos[2] + ae_pos[2]);\n \n-\t\t// if we're rotating, we need to modify the X and Z coords for the outer edges.\n-\t\tconst float fRotOffsetX\t\t= (fScaledFrameWidth/2) * RageFastCos(fRotationY);\n-\t\tconst float fRotOffsetZ\t\t= (fScaledFrameWidth/2) * RageFastSin(fRotationY);\n+\t\t// Special case for hold caps, which have the same top and bottom beat.\n+\t\tif(top_beat == bottom_beat && fY != fYStartPos)\n+\t\t{\n+\t\t\tcenter_vert.x+= render_forward.x;\n+\t\t\tcenter_vert.y+= render_forward.y;\n+\t\t\tcenter_vert.z+= render_forward.z;\n+\t\t}\n \n-\t\t//const float fXLeft\t\t\t= fX - (fScaledFrameWidth/2);\n-\t\tconst float fXLeft\t\t\t= fX - fRotOffsetX;\n-\t\tconst float fXCenter\t\t= fX;\n-\t\t//const float fXRight\t\t= fX + (fScaledFrameWidth/2);\n-\t\tconst float fXRight\t\t= fX + fRotOffsetX;\n-\t\tconst float fZLeft\t\t\t= fZ - fRotOffsetZ;\n-\t\tconst float fZCenter\t= fZ;\n-\t\tconst float fZRight\t\t= fZ + fRotOffsetZ;\n+\t\tconst float render_roty= (sp_rot[1] + ae_rot[1]);\n+\n+\t\t// (step 2 of vector handling)\n+\t\tRageVector3 render_left;\n+\t\tif(abs(render_forward.z) > 0.9f) // 0.9 arbitrariliy picked.\n+\t\t{\n+\t\t\tRageVec3Cross(&render_left, &render_forward, &pos_y_vec);\n+\t\t}\n+\t\telse\n+\t\t{\n+\t\t\tRageVec3Cross(&render_left, &render_forward, &pos_z_vec);\n+\t\t}\n+\t\tRageAARotate(&render_left, &render_forward, render_roty);\n+\t\tconst float half_width= fScaledFrameWidth * .5f;\n+\t\trender_left.x*= half_width;\n+\t\trender_left.y*= half_width;\n+\t\trender_left.z*= half_width;\n+\n+\t\tRageVector3 const left_vert(center_vert.x + render_left.x,","path":"src/NoteDisplay.cpp","position":543,"original_position":543,"commit_id":"f9ba1cc4159618a53ac1b5f62d4525329b40f033","original_commit_id":"f9ba1cc4159618a53ac1b5f62d4525329b40f033","user":{"login":"wolfman2000","id":148345,"avatar_url":"https://avatars.githubusercontent.com/u/148345?v=3","gravatar_id":"","url":"https://api.github.com/users/wolfman2000","html_url":"https://github.com/wolfman2000","followers_url":"https://api.github.com/users/wolfman2000/followers","following_url":"https://api.github.com/users/wolfman2000/following{/other_user}","gists_url":"https://api.github.com/users/wolfman2000/gists{/gist_id}","starred_url":"https://api.github.com/users/wolfman2000/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wolfman2000/subscriptions","organizations_url":"https://api.github.com/users/wolfman2000/orgs","repos_url":"https://api.github.com/users/wolfman2000/repos","events_url":"https://api.github.com/users/wolfman2000/events{/privacy}","received_events_url":"https://api.github.com/users/wolfman2000/received_events","type":"User","site_admin":false},"body":"I personally think `const` is in the right location here. However, it's inconsistent with where `const` is placed just a few lines above.","created_at":"2015-01-02T04:02:20Z","updated_at":"2015-01-02T04:02:20Z","html_url":"https://github.com/stepmania/stepmania/pull/422#discussion_r22404150","pull_request_url":"https://api.github.com/repos/stepmania/stepmania/pulls/422","_links":{"self":{"href":"https://api.github.com/repos/stepmania/stepmania/pulls/comments/22404150"},"html":{"href":"https://github.com/stepmania/stepmania/pull/422#discussion_r22404150"},"pull_request":{"href":"https://api.github.com/repos/stepmania/stepmania/pulls/422"}}},"pull_request":{"url":"https://api.github.com/repos/stepmania/stepmania/pulls/422","id":26747517,"html_url":"https://github.com/stepmania/stepmania/pull/422","diff_url":"https://github.com/stepmania/stepmania/pull/422.diff","patch_url":"https://github.com/stepmania/stepmania/pull/422.patch","issue_url":"https://api.github.com/repos/stepmania/stepmania/issues/422","number":422,"state":"open","locked":false,"title":"Note column actors and splines","user":{"login":"kyzentun","id":6657507,"avatar_url":"https://avatars.githubusercontent.com/u/6657507?v=3","gravatar_id":"","url":"https://api.github.com/users/kyzentun","html_url":"https://github.com/kyzentun","followers_url":"https://api.github.com/users/kyzentun/followers","following_url":"https://api.github.com/users/kyzentun/following{/other_user}","gists_url":"https://api.github.com/users/kyzentun/gists{/gist_id}","starred_url":"https://api.github.com/users/kyzentun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kyzentun/subscriptions","organizations_url":"https://api.github.com/users/kyzentun/orgs","repos_url":"https://api.github.com/users/kyzentun/repos","events_url":"https://api.github.com/users/kyzentun/events{/privacy}","received_events_url":"https://api.github.com/users/kyzentun/received_events","type":"User","site_admin":false},"body":"This turns the note columns into full fledged Actors that theme code and fetch and manipulate.\r\nIt also adds support for notes to be controlled by splines (position, rotation, and zoom).\r\nSplines have 3 modes:  Disabled (notes controlled entirely by ArrowEffects), Offset (notes controlled by ArrowEffects + Spline), Position (notes controlled entirely by Spline).\r\nStill need to write documentation for all the new functions and settle how to handle tweening, but it's mostly ready.\r\nDemo videos:  \r\nhttps://www.youtube.com/watch?v=qfwZAh63B4Q  https://www.youtube.com/watch?v=rq5IGDinYUI\r\nhttps://www.youtube.com/watch?v=aE2Dm1VekK8  https://www.youtube.com/watch?v=PZDzZAEXkR4\r\n\r\n\r\nSide note:  Apparently the renovation that notefield rendering received during this actually sped up rendering.\r\nMy test settings:  Springtime with m25 speed mod and 1.5 distant in Consensual, with Jousway's Shadow3D noteskin.  Fast Note Rendering is set to true.\r\nMainline:  105-130 fps.  Most commonly around 120 fps, dropping to 105 fps in the thick stream and rising to 130 fps during the beginning.\r\nSpline branch: (with rotation splines active)  120-130 fps.  Most commonly around 130 fps, dropping to 120 during the thick stream.\r\nAnybody else comparing frame rates would be helpful, since speed of note rendering is important.","created_at":"2015-01-01T23:22:51Z","updated_at":"2015-01-02T04:02:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"df8a4630825610f1ab47c88108efb8eb3af859b3","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/stepmania/stepmania/pulls/422/commits","review_comments_url":"https://api.github.com/repos/stepmania/stepmania/pulls/422/comments","review_comment_url":"https://api.github.com/repos/stepmania/stepmania/pulls/comments/{number}","comments_url":"https://api.github.com/repos/stepmania/stepmania/issues/422/comments","statuses_url":"https://api.github.com/repos/stepmania/stepmania/statuses/f9ba1cc4159618a53ac1b5f62d4525329b40f033","head":{"label":"kyzentun:NoteColumnActors","ref":"NoteColumnActors","sha":"f9ba1cc4159618a53ac1b5f62d4525329b40f033","user":{"login":"kyzentun","id":6657507,"avatar_url":"https://avatars.githubusercontent.com/u/6657507?v=3","gravatar_id":"","url":"https://api.github.com/users/kyzentun","html_url":"https://github.com/kyzentun","followers_url":"https://api.github.com/users/kyzentun/followers","following_url":"https://api.github.com/users/kyzentun/following{/other_user}","gists_url":"https://api.github.com/users/kyzentun/gists{/gist_id}","starred_url":"https://api.github.com/users/kyzentun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kyzentun/subscriptions","organizations_url":"https://api.github.com/users/kyzentun/orgs","repos_url":"https://api.github.com/users/kyzentun/repos","events_url":"https://api.github.com/users/kyzentun/events{/privacy}","received_events_url":"https://api.github.com/users/kyzentun/received_events","type":"User","site_admin":false},"repo":{"id":16755813,"name":"stepmania","full_name":"kyzentun/stepmania","owner":{"login":"kyzentun","id":6657507,"avatar_url":"https://avatars.githubusercontent.com/u/6657507?v=3","gravatar_id":"","url":"https://api.github.com/users/kyzentun","html_url":"https://github.com/kyzentun","followers_url":"https://api.github.com/users/kyzentun/followers","following_url":"https://api.github.com/users/kyzentun/following{/other_user}","gists_url":"https://api.github.com/users/kyzentun/gists{/gist_id}","starred_url":"https://api.github.com/users/kyzentun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kyzentun/subscriptions","organizations_url":"https://api.github.com/users/kyzentun/orgs","repos_url":"https://api.github.com/users/kyzentun/repos","events_url":"https://api.github.com/users/kyzentun/events{/privacy}","received_events_url":"https://api.github.com/users/kyzentun/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kyzentun/stepmania","description":"Advanced rhythm game for Windows, Linux and OS X. Designed for both home and arcade use.","fork":true,"url":"https://api.github.com/repos/kyzentun/stepmania","forks_url":"https://api.github.com/repos/kyzentun/stepmania/forks","keys_url":"https://api.github.com/repos/kyzentun/stepmania/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kyzentun/stepmania/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kyzentun/stepmania/teams","hooks_url":"https://api.github.com/repos/kyzentun/stepmania/hooks","issue_events_url":"https://api.github.com/repos/kyzentun/stepmania/issues/events{/number}","events_url":"https://api.github.com/repos/kyzentun/stepmania/events","assignees_url":"https://api.github.com/repos/kyzentun/stepmania/assignees{/user}","branches_url":"https://api.github.com/repos/kyzentun/stepmania/branches{/branch}","tags_url":"https://api.github.com/repos/kyzentun/stepmania/tags","blobs_url":"https://api.github.com/repos/kyzentun/stepmania/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kyzentun/stepmania/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kyzentun/stepmania/git/refs{/sha}","trees_url":"https://api.github.com/repos/kyzentun/stepmania/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kyzentun/stepmania/statuses/{sha}","languages_url":"https://api.github.com/repos/kyzentun/stepmania/languages","stargazers_url":"https://api.github.com/repos/kyzentun/stepmania/stargazers","contributors_url":"https://api.github.com/repos/kyzentun/stepmania/contributors","subscribers_url":"https://api.github.com/repos/kyzentun/stepmania/subscribers","subscription_url":"https://api.github.com/repos/kyzentun/stepmania/subscription","commits_url":"https://api.github.com/repos/kyzentun/stepmania/commits{/sha}","git_commits_url":"https://api.github.com/repos/kyzentun/stepmania/git/commits{/sha}","comments_url":"https://api.github.com/repos/kyzentun/stepmania/comments{/number}","issue_comment_url":"https://api.github.com/repos/kyzentun/stepmania/issues/comments/{number}","contents_url":"https://api.github.com/repos/kyzentun/stepmania/contents/{+path}","compare_url":"https://api.github.com/repos/kyzentun/stepmania/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kyzentun/stepmania/merges","archive_url":"https://api.github.com/repos/kyzentun/stepmania/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kyzentun/stepmania/downloads","issues_url":"https://api.github.com/repos/kyzentun/stepmania/issues{/number}","pulls_url":"https://api.github.com/repos/kyzentun/stepmania/pulls{/number}","milestones_url":"https://api.github.com/repos/kyzentun/stepmania/milestones{/number}","notifications_url":"https://api.github.com/repos/kyzentun/stepmania/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kyzentun/stepmania/labels{/name}","releases_url":"https://api.github.com/repos/kyzentun/stepmania/releases{/id}","created_at":"2014-02-12T04:21:50Z","updated_at":"2014-06-23T19:53:24Z","pushed_at":"2015-01-01T23:09:04Z","git_url":"git://github.com/kyzentun/stepmania.git","ssh_url":"git@github.com:kyzentun/stepmania.git","clone_url":"https://github.com/kyzentun/stepmania.git","svn_url":"https://github.com/kyzentun/stepmania","homepage":"http://www.stepmania.com/","size":475337,"stargazers_count":1,"watchers_count":1,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"stepmania:master","ref":"master","sha":"5d7f6b7b521852289a46a155cb682394f804e62f","user":{"login":"stepmania","id":4809468,"avatar_url":"https://avatars.githubusercontent.com/u/4809468?v=3","gravatar_id":"","url":"https://api.github.com/users/stepmania","html_url":"https://github.com/stepmania","followers_url":"https://api.github.com/users/stepmania/followers","following_url":"https://api.github.com/users/stepmania/following{/other_user}","gists_url":"https://api.github.com/users/stepmania/gists{/gist_id}","starred_url":"https://api.github.com/users/stepmania/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stepmania/subscriptions","organizations_url":"https://api.github.com/users/stepmania/orgs","repos_url":"https://api.github.com/users/stepmania/repos","events_url":"https://api.github.com/users/stepmania/events{/privacy}","received_events_url":"https://api.github.com/users/stepmania/received_events","type":"Organization","site_admin":false},"repo":{"id":10923187,"name":"stepmania","full_name":"stepmania/stepmania","owner":{"login":"stepmania","id":4809468,"avatar_url":"https://avatars.githubusercontent.com/u/4809468?v=3","gravatar_id":"","url":"https://api.github.com/users/stepmania","html_url":"https://github.com/stepmania","followers_url":"https://api.github.com/users/stepmania/followers","following_url":"https://api.github.com/users/stepmania/following{/other_user}","gists_url":"https://api.github.com/users/stepmania/gists{/gist_id}","starred_url":"https://api.github.com/users/stepmania/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stepmania/subscriptions","organizations_url":"https://api.github.com/users/stepmania/orgs","repos_url":"https://api.github.com/users/stepmania/repos","events_url":"https://api.github.com/users/stepmania/events{/privacy}","received_events_url":"https://api.github.com/users/stepmania/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/stepmania/stepmania","description":"Advanced rhythm game for Windows, Linux and OS X. Designed for both home and arcade use.","fork":false,"url":"https://api.github.com/repos/stepmania/stepmania","forks_url":"https://api.github.com/repos/stepmania/stepmania/forks","keys_url":"https://api.github.com/repos/stepmania/stepmania/keys{/key_id}","collaborators_url":"https://api.github.com/repos/stepmania/stepmania/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/stepmania/stepmania/teams","hooks_url":"https://api.github.com/repos/stepmania/stepmania/hooks","issue_events_url":"https://api.github.com/repos/stepmania/stepmania/issues/events{/number}","events_url":"https://api.github.com/repos/stepmania/stepmania/events","assignees_url":"https://api.github.com/repos/stepmania/stepmania/assignees{/user}","branches_url":"https://api.github.com/repos/stepmania/stepmania/branches{/branch}","tags_url":"https://api.github.com/repos/stepmania/stepmania/tags","blobs_url":"https://api.github.com/repos/stepmania/stepmania/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/stepmania/stepmania/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/stepmania/stepmania/git/refs{/sha}","trees_url":"https://api.github.com/repos/stepmania/stepmania/git/trees{/sha}","statuses_url":"https://api.github.com/repos/stepmania/stepmania/statuses/{sha}","languages_url":"https://api.github.com/repos/stepmania/stepmania/languages","stargazers_url":"https://api.github.com/repos/stepmania/stepmania/stargazers","contributors_url":"https://api.github.com/repos/stepmania/stepmania/contributors","subscribers_url":"https://api.github.com/repos/stepmania/stepmania/subscribers","subscription_url":"https://api.github.com/repos/stepmania/stepmania/subscription","commits_url":"https://api.github.com/repos/stepmania/stepmania/commits{/sha}","git_commits_url":"https://api.github.com/repos/stepmania/stepmania/git/commits{/sha}","comments_url":"https://api.github.com/repos/stepmania/stepmania/comments{/number}","issue_comment_url":"https://api.github.com/repos/stepmania/stepmania/issues/comments/{number}","contents_url":"https://api.github.com/repos/stepmania/stepmania/contents/{+path}","compare_url":"https://api.github.com/repos/stepmania/stepmania/compare/{base}...{head}","merges_url":"https://api.github.com/repos/stepmania/stepmania/merges","archive_url":"https://api.github.com/repos/stepmania/stepmania/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/stepmania/stepmania/downloads","issues_url":"https://api.github.com/repos/stepmania/stepmania/issues{/number}","pulls_url":"https://api.github.com/repos/stepmania/stepmania/pulls{/number}","milestones_url":"https://api.github.com/repos/stepmania/stepmania/milestones{/number}","notifications_url":"https://api.github.com/repos/stepmania/stepmania/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/stepmania/stepmania/labels{/name}","releases_url":"https://api.github.com/repos/stepmania/stepmania/releases{/id}","created_at":"2013-06-24T23:40:10Z","updated_at":"2014-12-28T12:40:46Z","pushed_at":"2014-12-27T12:44:09Z","git_url":"git://github.com/stepmania/stepmania.git","ssh_url":"git@github.com:stepmania/stepmania.git","clone_url":"https://github.com/stepmania/stepmania.git","svn_url":"https://github.com/stepmania/stepmania","homepage":"http://www.stepmania.com/","size":520568,"stargazers_count":139,"watchers_count":139,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":61,"mirror_url":null,"open_issues_count":123,"forks":61,"open_issues":123,"watchers":139,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/stepmania/stepmania/pulls/422"},"html":{"href":"https://github.com/stepmania/stepmania/pull/422"},"issue":{"href":"https://api.github.com/repos/stepmania/stepmania/issues/422"},"comments":{"href":"https://api.github.com/repos/stepmania/stepmania/issues/422/comments"},"review_comments":{"href":"https://api.github.com/repos/stepmania/stepmania/pulls/422/comments"},"review_comment":{"href":"https://api.github.com/repos/stepmania/stepmania/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/stepmania/stepmania/pulls/422/commits"},"statuses":{"href":"https://api.github.com/repos/stepmania/stepmania/statuses/f9ba1cc4159618a53ac1b5f62d4525329b40f033"}}}}