예제 #1
0
 public float CurrentArcadeTime()
 {
     //ArcadeTimer.s_self.m_time
     return(arcadeTimer.Read <float>(Program, 0x0, 0x74));
 }
예제 #2
0
        public int[] Collectibles()
        {
            int[] stats = new int[3] {
                0, 0, 0
            };
            if (saveHandler.GetPointer(Program) != IntPtr.Zero && preloadLevel.GetPointer(Program) != IntPtr.Zero)
            {
                //PreloadLevel.s_levelIndex
                int lvlIndex = preloadLevel.Read <int>(Program);

                //SaveHandler.s_mainLevels.m_levelDatas
                IntPtr mainLevels = saveHandler.Read <IntPtr>(Program, -0x14, 0x10);
                int    size       = Program.Read <int>(mainLevels, 0xc);
                int    totalCount = 0;

                if (lvlIndex == 5)
                {
                    //CheckPointSystem.currentAreas
                    IntPtr areas    = checkPointSystem.Read <IntPtr>(Program);
                    int    areaSize = Program.Read <int>(areas, 0xc);
                    if (areaSize > 0)
                    {
                        //CheckPointSystem.currentAreas[areaSize-1].cps.Count
                        areaSize = Program.Read <int>(areas, 0x8, 0x10 + (areaSize - 1) * 4, 0x10, 0xc);
                        if (areaSize == 9)
                        {
                            lvlIndex = 6;
                        }
                    }
                }

                if (lvlIndex >= 0)
                {
                    //LevelHandler.m_mainLevels[lvlIndex].m_collectablesAmount
                    stats[0] = levelHandler.Read <int>(Program, 0x0, 0x10, 0x8, 0x10 + (4 * lvlIndex), 0x1c);
                }

                for (int i = 0; i < size; i++)
                {
                    //SaveHandler.s_mainLevels.m_levelDatas[i]
                    IntPtr level = Program.Read <IntPtr>(mainLevels, 0x10 + (i * 4));
                    //SaveHandler.s_mainLevels.m_levelDatas[i].m_collectables.length
                    int length = Program.Read <int>(level, 0x8, 0xc);
                    int count  = 0;
                    for (int j = 0; j < length; j++)
                    {
                        //SaveHandler.s_mainLevels.m_levelDatas[i].m_collectables[j]
                        if (Program.Read <bool>(level, 0x8, 0x10 + j))
                        {
                            count++;
                            totalCount++;
                        }
                    }
                    if (i == lvlIndex)
                    {
                        stats[1] = count;
                    }
                }
                stats[2] = totalCount;
            }
            return(stats);
        }