Main > Software Forum

HiToText (Version 2010.11.4).

<< < (82/117) > >>

Fyrecrypts:
Next version may take a while, as I've decided to try and reduce the size of the project by combining a lot of similar code. Each driver is to be changed to use the new functionality whenever possible. I've probably spent about 3 hours converting 6 drivers so far. I may just release a version that has some drivers using the old style, and some using the new as HiToText will still work using the old method.

This will make writing new drivers take much less time. So hopefully by spending a lot of time on it now, we can save a lot of time on it later.

I've posted what the new 10yard driver looks like so you can all get a good comparison of how different it really is.

--- Code: ---using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using HiToText;

namespace HiGames
{
    // Only the Top 10 are shown during the game
    class _10yard : Hiscore
    {
        [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
        public struct HiscoreData
        {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score1;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name1;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score2;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name2;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score3;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name3;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score4;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name4;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score5;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name5;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score6;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name6;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score7;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name7;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score8;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name8;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score9;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name9;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score10;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name10;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score11;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name11;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score12;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name12;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score13;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name13;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score14;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name14;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score15;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name15;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score16;     
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name16;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score17;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name17;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score18;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name18;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score19;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name19;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score20;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name20;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score21;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name21;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score22;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name22;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Score23;       
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] Name23;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
            public byte[] TopScore;
        }

        public Formatting.Mapping mapping = new Formatting.Mapping();
        public Formatting.StringFormatFlag format =
            Formatting.StringFormatFlag.NeedsSpecialMapping |
            Formatting.StringFormatFlag.ASCIIStandard;

        public _10yard()
        {
            m_numEntries = 23;
            m_format = "RANK|SCORE|NAME";
            m_gamesSupported = "10yard,10yardj,vs10yard,vs10yarj";
            m_extensionsRequired = ".hi";

            mapping.AddMapping('.', 0x5b);
            mapping.AddMapping(' ', 0x5c);
        }

        public string ConvertName(byte[] name)
        {
            return Formatting.ByteArrayToString(name, mapping, format);
        }

        public byte[] ConvertName(string name)
        {
            return Formatting.StringToByteArray(name, mapping, format);
        }

        public byte[] ConvertScore(string score)
        {
            return HiConvert.ReverseByteArray(HiConvert.IntToByteArrayHex(Convert.ToInt32(score), 3));
        }

        public override void SetHiScore(string[] args)
        {
            //int rankGiven = Convert.ToInt32(args[0]);
            int score = System.Convert.ToInt32(args[1]);
            string name = args[2];

            HiscoreData hiscoreData = (HiscoreData)HiConvert.RawDeserialize(m_data, 0, typeof(HiscoreData));
            Regex rxScore = new Regex("^Score.*$");
            Regex rxName = new Regex("^Name.*$");

            //Determining rank.
            int rank = Formatting.DetermineRank(
                score, rxScore, hiscoreData, Formatting.DetermineScores.DetermineScoreReversed);

            //Adjusting lower scores.
            List<Regex> adjusters = new List<Regex>(new Regex[] { rxScore, rxName });
            hiscoreData = (HiscoreData)Formatting.AdjustScores(rank, hiscoreData, adjusters);

            //Replacing new scores.
            List<Formatting.Placement> placements = new List<Formatting.Placement>();
            placements.Add(new Formatting.Placement(name, rxName, ConvertName));
            placements.Add(new Formatting.Placement(score.ToString(), rxScore, ConvertScore));
            placements.Add(new Formatting.Placement(score.ToString(), new Regex("^TopScore$"), true, ConvertScore));

            hiscoreData = (HiscoreData)Formatting.ReplaceNew(rank, hiscoreData, placements);

            byte[] byteArray = HiConvert.RawSerialize(hiscoreData);

            HiConvert.ByteArrayCopy(m_data, byteArray);
        }

        //public override void ModifyName(int rank, string name)
        public void ModifyName(int rank, string name)
        {
            HiscoreData hiscoreData = (HiscoreData)HiConvert.RawDeserialize(m_data, 0, typeof(HiscoreData));

            List<Formatting.Placement> placements = new List<Formatting.Placement>();
            placements.Add(new Formatting.Placement(name, new Regex("^Name.*$"), ConvertName));

            hiscoreData = (HiscoreData)Formatting.ReplaceNew(rank - 1, hiscoreData, placements);

            byte[] byteArray = HiConvert.RawSerialize(hiscoreData);

            HiConvert.ByteArrayCopy(m_data, byteArray);
        }

        public override void EmptyScores()
        {
            HiscoreData hiscoreData = (HiscoreData)HiConvert.RawDeserialize(m_data, 0, typeof(HiscoreData));

            //We also want to get the top score and empty that.
            hiscoreData = (HiscoreData)Formatting.EmptyScores(hiscoreData, new Regex("^.*Score.*$"), ConvertScore);

            byte[] byteArray = HiConvert.RawSerialize(hiscoreData);

            HiConvert.ByteArrayCopy(m_data, byteArray);

            SaveData();
        }

        public override string HiToString()
        {
            string retString = m_format + Environment.NewLine;

            HiscoreData hiscoreData = new HiscoreData();
            hiscoreData = (HiscoreData)HiConvert.RawDeserialize(m_data, 0, typeof(HiscoreData));

            List<Formatting.DisplayData> formatting = new List<Formatting.DisplayData>();
            formatting.Add(new Formatting.DisplayData(null, Formatting.DisplayData.CannedConvert.AscendingFrom1));

            //We only want the top 10 scores, since that's all that's shown in-game.
            formatting.Add(new Formatting.DisplayData(
                new Regex("^Score[1-9]$|^Score10$"), Formatting.ConvertValuesToString.ConvertScoreReversed));

            //Only want the top 10 names too.
            formatting.Add(new Formatting.DisplayData(new Regex("^Name[1-9]$|^Name10$"), ConvertName));

            retString += Formatting.HiToString(hiscoreData, formatting);

            return retString;
        }
    }
}
--- End code ---

Fyrecrypts:
-------------------
Version 2009.9.1
-------------------
New Games:
Woodpecker, Naughty Mouse, Journey, Tapper, Timber, Domino, Mortal Kombat 2, Berzerk (Coded by Cananas)
19xx (Coded by Fyrecrypts)

Bug Fixes:
1943 was fixed to display all name characters correctly. (Fyrecrypts)
Altered Beast sets the alternate ranks correctly now. (Fyrecrypts)
10 Yard Fight only displays the top 10 scores now, as it is done in-game like this as well. (Fyrecrypts)
1941 only displays the top 5 scores now, as it is done in-game like this as well. (Fyrecrypts)

New features:
Drivers starting with # or A have been modified to use a more generic set of methods that reduces the amount of code used. This will also reduce the time it takes to add new drivers. (Fyrecrypts)
Certain drivers now inherit parent drivers that are similiar, but cannot be contained in that driver because the file is setup differently, or it is a separate game (i.e. Tapper and Timber have Journey as their parent.) (Cananas)
Drivers starting with # or A have new functionality to allow the modification of current score's names. If you mess up an initial, you can now just modify it! Use -m <romname> <rank> <name> to replace the name. NOTE: This is not implemented fully yet, only #-A will work. (Cananas, Fyrecrypts)

Cananas:
Well, more to learn... ;)

ryantheleach:
Hey I'm interested in helping out, what games are left to do?
do I need to be any good at the games to beat the default high scores?

Fyrecrypts:

--- Quote from: ryantheleach on September 02, 2009, 12:47:39 pm ---Hey I'm interested in helping out, what games are left to do?
do I need to be any good at the games to beat the default high scores?

--- End quote ---

Check this post out:

http://forum.arcadecontrols.com/index.php?topic=83614.msg963047#msg963047

Hopefully this will help you help us! Glad to see you're interested. =)

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version