{"type": "func", "start": 6442531200, "end": 6442531804, "name": "cocos2d::extension::CCScrollView::ccTouchBegan", "pseudocode": "// \n// cocos2d::extension::CCScrollView::ccTouchBegan from 0x180013980 to 0x180013bdc (604 bytes)\n// \n// 5 xrefs:\n// > cocos2d::extension::CCTableView::ccTouchBegan @ 0x1800164a7\n// > <???> @ 0x1800282d8\n// > <???> @ 0x18002fdf8\n// > <???> @ 0x18004a56c\n// > <???> @ 0x18004a578\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\nchar __fastcall cocos2d::extension::CCScrollView::ccTouchBegan(\n        cocos2d::extension::CCScrollView *this,\n        struct cocos2d::CCTouch *a2,\n        struct cocos2d::CCEvent *a3)\n{\n  char *v3; // rsi\n  __int64 v6; // rax\n  const struct cocos2d::CCPoint *v7; // rax\n  __int64 v8; // rax\n  __int64 v9; // rax\n  struct cocos2d::CCObject *v11; // rax\n  __int64 v12; // rbx\n  struct cocos2d::CCObject *v13; // rax\n  __int64 v14; // rax\n  __int64 v15; // rax\n  struct cocos2d::CCObject *v16; // rax\n  const struct cocos2d::CCPoint *v17; // rbx\n  struct cocos2d::CCObject *v18; // rax\n  cocos2d *v19; // rax\n  const struct cocos2d::CCPoint *v20; // r8\n  _BYTE v21[8]; // [rsp+20h] [rbp-28h] BYREF\n  _BYTE v22[8]; // [rsp+28h] [rbp-20h] BYREF\n  _BYTE v23[24]; // [rsp+30h] [rbp-18h] BYREF\n  char v24; // [rsp+50h] [rbp+8h] BYREF\n  char v25; // [rsp+68h] [rbp+20h] BYREF\n\n  v3 = (char *)this - 320;\n  if ( !(*(unsigned __int8 (__fastcall **)(char *, struct cocos2d::CCTouch *, struct cocos2d::CCEvent *))(*((_QWORD *)this - 40) + 328LL))(\n          (char *)this - 320,\n          a2,\n          a3) )\n    return 0;\n  cocos2d::extension::CCScrollView::getViewRect(v3, v23);\n  if ( cocos2d::CCArray::count(*((cocos2d::CCArray **)this + 23)) > 2 )\n    return 0;\n  if ( *((_BYTE *)this + 136) )\n    return 0;\n  v6 = cocos2d::CCNode::convertTouchToNodeSpace(*((_QWORD *)this + 16), &v24, a2);\n  v7 = (const struct cocos2d::CCPoint *)cocos2d::CCNode::convertToWorldSpace(*((_QWORD *)this + 16), &v25, v6);\n  if ( !cocos2d::CCRect::containsPoint((cocos2d::CCRect *)v23, v7) )\n    return 0;\n  if ( !cocos2d::CCArray::containsObject(*((cocos2d::CCArray **)this + 23), a2) )\n    cocos2d::CCArray::addObject(*((cocos2d::CCArray **)this + 23), a2);\n  if ( cocos2d::CCArray::count(*((cocos2d::CCArray **)this + 23)) == 1 )\n  {\n    v8 = cocos2d::CCNode::convertTouchToNodeSpace(v3, &v24, a2);\n    cocos2d::CCPoint::operator=((char *)this + 168, v8);\n    *((_BYTE *)this + 136) = 0;\n    *((_BYTE *)this + 116) = 1;\n    cocos2d::CCPoint::CCPoint((cocos2d::CCPoint *)&v24, 0.0, 0.0);\n    cocos2d::CCPoint::operator=((char *)this + 160, v9);\n    *((_DWORD *)this + 44) = 0;\n    return 1;\n  }\n  else\n  {\n    if ( cocos2d::CCArray::count(*((cocos2d::CCArray **)this + 23)) == 2 )\n    {\n      v11 = cocos2d::CCArray::objectAtIndex(*((cocos2d::CCArray **)this + 23), 1u);\n      v12 = cocos2d::CCNode::convertTouchToNodeSpace(v3, &v25, v11);\n      v13 = cocos2d::CCArray::objectAtIndex(*((cocos2d::CCArray **)this + 23), 0);\n      v14 = cocos2d::CCNode::convertTouchToNodeSpace(v3, v21, v13);\n      v15 = cocos2d::CCPoint::operator+(v14, v22, v12);\n      cocos2d::CCPoint::operator/(v15, &v24);\n      cocos2d::CCPoint::operator=((char *)this + 168, &v24);\n      v16 = cocos2d::CCArray::objectAtIndex(*((cocos2d::CCArray **)this + 23), 1u);\n      v17 = (const struct cocos2d::CCPoint *)cocos2d::CCNode::convertTouchToNodeSpace(*((_QWORD *)this + 16), &v24, v16);\n      v18 = cocos2d::CCArray::objectAtIndex(*((cocos2d::CCArray **)this + 23), 0);\n      v19 = (cocos2d *)cocos2d::CCNode::convertTouchToNodeSpace(*((_QWORD *)this + 16), &v25, v18);\n      *((float *)this + 44) = cocos2d::ccpDistance(v19, v17, v20);\n      *((_BYTE *)this + 116) = 0;\n    }\n    return 1;\n  }\n}", "assembly": "; \n; cocos2d::extension::CCScrollView::ccTouchBegan from 0x180013980 to 0x180013bdc (604 bytes)\n; \n; 5 xrefs:\n; > cocos2d::extension::CCTableView::ccTouchBegan @ 0x1800164a7\n; > <???> @ 0x1800282d8\n; > <???> @ 0x18002fdf8\n; > <???> @ 0x18004a56c\n; > <???> @ 0x18004a578\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nmov     [rsp+arg_8], rbx                                               ; +0x0, 0x180013980\nmov     [rsp+arg_10], rsi                                              ; +0x5, 0x180013985\npush    rdi                                                            ; +0xa, 0x18001398a\nsub     rsp, 40h                                                       ; +0xb, 0x18001398b\nlea     rsi, [rcx-140h]                                                ; +0xf, 0x18001398f\nmov     rdi, rcx                                                       ; +0x16, 0x180013996\nmov     rax, [rsi]                                                     ; +0x19, 0x180013999\nmov     rcx, rsi                                                       ; +0x1c, 0x18001399c\nmov     rbx, rdx                                                       ; +0x1f, 0x18001399f\ncall    qword ptr [rax+148h]                                           ; +0x22, 0x1800139a2\ntest    al, al                                                         ; +0x28, 0x1800139a8\njz      loc_180013BCA                                                  ; +0x2a, 0x1800139aa\nlea     rdx, [rsp+48h+var_18]                                          ; +0x30, 0x1800139b0\nmov     rcx, rsi                                                       ; +0x35, 0x1800139b5\ncall    ?getViewRect@CCScrollView@extension@cocos2d@@IEAA?AVCCRect@3@XZ; cocos2d::extension::CCScrollView::getViewRect(void) ; +0x38, 0x1800139b8\nmov     rcx, [rdi+0B8h]                                                ; +0x3d, 0x1800139bd\ncall    cs:?count@CCArray@cocos2d@@QEBAIXZ; cocos2d::CCArray::count(void) ; +0x44, 0x1800139c4\ncmp     eax, 2                                                         ; +0x4a, 0x1800139ca\nja      loc_180013BCA                                                  ; +0x4d, 0x1800139cd\ncmp     byte ptr [rdi+88h], 0                                          ; +0x53, 0x1800139d3\njnz     loc_180013BCA                                                  ; +0x5a, 0x1800139da\nmov     rcx, [rdi+80h]                                                 ; +0x60, 0x1800139e0\nlea     rdx, [rsp+48h+arg_0]                                           ; +0x67, 0x1800139e7\nmov     r8, rbx                                                        ; +0x6c, 0x1800139ec\ncall    cs:?convertTouchToNodeSpace@CCNode@cocos2d@@QEAA?AVCCPoint@2@PEAVCCTouch@2@@Z; cocos2d::CCNode::convertTouchToNodeSpace(cocos2d::CCTouch *) ; +0x6f, 0x1800139ef\nmov     rcx, [rdi+80h]                                                 ; +0x75, 0x1800139f5\nlea     rdx, [rsp+48h+arg_18]                                          ; +0x7c, 0x1800139fc\nmov     r8, rax                                                        ; +0x81, 0x180013a01\ncall    cs:?convertToWorldSpace@CCNode@cocos2d@@QEAA?AVCCPoint@2@AEBV32@@Z; cocos2d::CCNode::convertToWorldSpace(cocos2d::CCPoint const &) ; +0x84, 0x180013a04\nmov     rdx, rax                                                       ; +0x8a, 0x180013a0a\nlea     rcx, [rsp+48h+var_18]                                          ; +0x8d, 0x180013a0d\ncall    cs:?containsPoint@CCRect@cocos2d@@QEBA_NAEBVCCPoint@2@@Z; cocos2d::CCRect::containsPoint(cocos2d::CCPoint const &) ; +0x92, 0x180013a12\ntest    al, al                                                         ; +0x98, 0x180013a18\njz      loc_180013BCA                                                  ; +0x9a, 0x180013a1a\nmov     rcx, [rdi+0B8h]                                                ; +0xa0, 0x180013a20\nmov     rdx, rbx                                                       ; +0xa7, 0x180013a27\ncall    cs:?containsObject@CCArray@cocos2d@@QEBA_NPEAVCCObject@2@@Z; cocos2d::CCArray::containsObject(cocos2d::CCObject *) ; +0xaa, 0x180013a2a\ntest    al, al                                                         ; +0xb0, 0x180013a30\njnz     short loc_180013A44                                            ; +0xb2, 0x180013a32\nmov     rcx, [rdi+0B8h]                                                ; +0xb4, 0x180013a34\nmov     rdx, rbx                                                       ; +0xbb, 0x180013a3b\ncall    cs:?addObject@CCArray@cocos2d@@QEAAXPEAVCCObject@2@@Z; cocos2d::CCArray::addObject(cocos2d::CCObject *) ; +0xbe, 0x180013a3e\nmov     rcx, [rdi+0B8h]                                                ; +0xc4, 0x180013a44\ncall    cs:?count@CCArray@cocos2d@@QEBAIXZ; cocos2d::CCArray::count(void) ; +0xcb, 0x180013a4b\ncmp     eax, 1                                                         ; +0xd1, 0x180013a51\njnz     short loc_180013ABF                                            ; +0xd4, 0x180013a54\nmov     r8, rbx                                                        ; +0xd6, 0x180013a56\nlea     rdx, [rsp+48h+arg_0]                                           ; +0xd9, 0x180013a59\nmov     rcx, rsi                                                       ; +0xde, 0x180013a5e\ncall    cs:?convertTouchToNodeSpace@CCNode@cocos2d@@QEAA?AVCCPoint@2@PEAVCCTouch@2@@Z; cocos2d::CCNode::convertTouchToNodeSpace(cocos2d::CCTouch *) ; +0xe1, 0x180013a61\nmov     rdx, rax                                                       ; +0xe7, 0x180013a67\nlea     rcx, [rdi+0A8h]                                                ; +0xea, 0x180013a6a\ncall    cs:??4CCPoint@cocos2d@@QEAAAEAV01@AEBV01@@Z; cocos2d::CCPoint::operator=(cocos2d::CCPoint const &) ; +0xf1, 0x180013a71\nxorps   xmm2, xmm2                                                     ; +0xf7, 0x180013a77\nmov     byte ptr [rdi+88h], 0                                          ; +0xfa, 0x180013a7a\nxorps   xmm1, xmm1                                                     ; +0x101, 0x180013a81\nmov     byte ptr [rdi+74h], 1                                          ; +0x104, 0x180013a84\nlea     rcx, [rsp+48h+arg_0]                                           ; +0x108, 0x180013a88\ncall    cs:??0CCPoint@cocos2d@@QEAA@MM@Z; cocos2d::CCPoint::CCPoint(float,float) ; +0x10d, 0x180013a8d\nmov     rdx, rax                                                       ; +0x113, 0x180013a93\nlea     rcx, [rdi+0A0h]                                                ; +0x116, 0x180013a96\ncall    cs:??4CCPoint@cocos2d@@QEAAAEAV01@AEBV01@@Z; cocos2d::CCPoint::operator=(cocos2d::CCPoint const &) ; +0x11d, 0x180013a9d\nmov     al, 1                                                          ; +0x123, 0x180013aa3\nmov     dword ptr [rdi+0B0h], 0                                        ; +0x125, 0x180013aa5\nmov     rbx, [rsp+48h+arg_8]                                           ; +0x12f, 0x180013aaf\nmov     rsi, [rsp+48h+arg_10]                                          ; +0x134, 0x180013ab4\nadd     rsp, 40h                                                       ; +0x139, 0x180013ab9\npop     rdi                                                            ; +0x13d, 0x180013abd\nretn                                                                   ; +0x13e, 0x180013abe\nmov     rcx, [rdi+0B8h]                                                ; +0x13f, 0x180013abf\ncall    cs:?count@CCArray@cocos2d@@QEBAIXZ; cocos2d::CCArray::count(void) ; +0x146, 0x180013ac6\ncmp     eax, 2                                                         ; +0x14c, 0x180013acc\njnz     loc_180013BB8                                                  ; +0x14f, 0x180013acf\nmov     rcx, [rdi+0B8h]                                                ; +0x155, 0x180013ad5\nlea     edx, [rax-1]                                                   ; +0x15c, 0x180013adc\ncall    cs:?objectAtIndex@CCArray@cocos2d@@QEAAPEAVCCObject@2@I@Z; cocos2d::CCArray::objectAtIndex(uint) ; +0x15f, 0x180013adf\nlea     rdx, [rsp+48h+arg_18]                                          ; +0x165, 0x180013ae5\nmov     rcx, rsi                                                       ; +0x16a, 0x180013aea\nmov     r8, rax                                                        ; +0x16d, 0x180013aed\ncall    cs:?convertTouchToNodeSpace@CCNode@cocos2d@@QEAA?AVCCPoint@2@PEAVCCTouch@2@@Z; cocos2d::CCNode::convertTouchToNodeSpace(cocos2d::CCTouch *) ; +0x170, 0x180013af0\nmov     rcx, [rdi+0B8h]                                                ; +0x176, 0x180013af6\nxor     edx, edx                                                       ; +0x17d, 0x180013afd\nmov     rbx, rax                                                       ; +0x17f, 0x180013aff\ncall    cs:?objectAtIndex@CCArray@cocos2d@@QEAAPEAVCCObject@2@I@Z; cocos2d::CCArray::objectAtIndex(uint) ; +0x182, 0x180013b02\nlea     rdx, [rsp+48h+var_28]                                          ; +0x188, 0x180013b08\nmov     rcx, rsi                                                       ; +0x18d, 0x180013b0d\nmov     r8, rax                                                        ; +0x190, 0x180013b10\ncall    cs:?convertTouchToNodeSpace@CCNode@cocos2d@@QEAA?AVCCPoint@2@PEAVCCTouch@2@@Z; cocos2d::CCNode::convertTouchToNodeSpace(cocos2d::CCTouch *) ; +0x193, 0x180013b13\nmov     r8, rbx                                                        ; +0x199, 0x180013b19\nlea     rdx, [rsp+48h+var_20]                                          ; +0x19c, 0x180013b1c\nmov     rcx, rax                                                       ; +0x1a1, 0x180013b21\ncall    cs:??HCCPoint@cocos2d@@QEBA?AV01@AEBV01@@Z; cocos2d::CCPoint::operator+(cocos2d::CCPoint const &) ; +0x1a4, 0x180013b24\nmovss   xmm2, cs:Y                                                     ; +0x1aa, 0x180013b2a\nlea     rdx, [rsp+48h+arg_0]                                           ; +0x1b2, 0x180013b32\nmov     rcx, rax                                                       ; +0x1b7, 0x180013b37\ncall    cs:??KCCPoint@cocos2d@@QEBA?AV01@M@Z; cocos2d::CCPoint::operator/(float) ; +0x1ba, 0x180013b3a\nlea     rcx, [rdi+0A8h]                                                ; +0x1c0, 0x180013b40\nlea     rdx, [rsp+48h+arg_0]                                           ; +0x1c7, 0x180013b47\ncall    cs:??4CCPoint@cocos2d@@QEAAAEAV01@AEBV01@@Z; cocos2d::CCPoint::operator=(cocos2d::CCPoint const &) ; +0x1cc, 0x180013b4c\nmov     rcx, [rdi+0B8h]                                                ; +0x1d2, 0x180013b52\nmov     edx, 1                                                         ; +0x1d9, 0x180013b59\ncall    cs:?objectAtIndex@CCArray@cocos2d@@QEAAPEAVCCObject@2@I@Z; cocos2d::CCArray::objectAtIndex(uint) ; +0x1de, 0x180013b5e\nmov     rcx, [rdi+80h]                                                 ; +0x1e4, 0x180013b64\nlea     rdx, [rsp+48h+arg_0]                                           ; +0x1eb, 0x180013b6b\nmov     r8, rax                                                        ; +0x1f0, 0x180013b70\ncall    cs:?convertTouchToNodeSpace@CCNode@cocos2d@@QEAA?AVCCPoint@2@PEAVCCTouch@2@@Z; cocos2d::CCNode::convertTouchToNodeSpace(cocos2d::CCTouch *) ; +0x1f3, 0x180013b73\nmov     rcx, [rdi+0B8h]                                                ; +0x1f9, 0x180013b79\nxor     edx, edx                                                       ; +0x200, 0x180013b80\nmov     rbx, rax                                                       ; +0x202, 0x180013b82\ncall    cs:?objectAtIndex@CCArray@cocos2d@@QEAAPEAVCCObject@2@I@Z; cocos2d::CCArray::objectAtIndex(uint) ; +0x205, 0x180013b85\nmov     rcx, [rdi+80h]                                                 ; +0x20b, 0x180013b8b\nlea     rdx, [rsp+48h+arg_18]                                          ; +0x212, 0x180013b92\nmov     r8, rax                                                        ; +0x217, 0x180013b97\ncall    cs:?convertTouchToNodeSpace@CCNode@cocos2d@@QEAA?AVCCPoint@2@PEAVCCTouch@2@@Z; cocos2d::CCNode::convertTouchToNodeSpace(cocos2d::CCTouch *) ; +0x21a, 0x180013b9a\nmov     rcx, rax                                                       ; +0x220, 0x180013ba0\nmov     rdx, rbx                                                       ; +0x223, 0x180013ba3\ncall    cs:?ccpDistance@cocos2d@@YAMAEBVCCPoint@1@0@Z; cocos2d::ccpDistance(cocos2d::CCPoint const &,cocos2d::CCPoint const &) ; +0x226, 0x180013ba6\nmovss   dword ptr [rdi+0B0h], xmm0                                     ; +0x22c, 0x180013bac\nmov     byte ptr [rdi+74h], 0                                          ; +0x234, 0x180013bb4\nmov     al, 1                                                          ; +0x238, 0x180013bb8\nmov     rbx, [rsp+48h+arg_8]                                           ; +0x23a, 0x180013bba\nmov     rsi, [rsp+48h+arg_10]                                          ; +0x23f, 0x180013bbf\nadd     rsp, 40h                                                       ; +0x244, 0x180013bc4\npop     rdi                                                            ; +0x248, 0x180013bc8\nretn                                                                   ; +0x249, 0x180013bc9\nmov     rbx, [rsp+48h+arg_8]                                           ; +0x24a, 0x180013bca\nxor     al, al                                                         ; +0x24f, 0x180013bcf\nmov     rsi, [rsp+48h+arg_10]                                          ; +0x251, 0x180013bd1\nadd     rsp, 40h                                                       ; +0x256, 0x180013bd6\npop     rdi                                                            ; +0x25a, 0x180013bda\nretn                                                                   ; +0x25b, 0x180013bdb", "xrefs": ["cocos2d::extension::CCTableView::ccTouchBegan @ 0x1800164a7", "<???> @ 0x1800282d8", "<???> @ 0x18002fdf8", "<???> @ 0x18004a56c", "<???> @ 0x18004a578"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}