It is currently 25 Apr 2024, 15:20
   
Text Size

Choose a Creature Type Function

Moderator: CCGHQ Admins

Choose a Creature Type Function

Postby Xander9009 » 17 Sep 2014, 16:37

Original post
Response section

This is a continuation of the discussion in the Formal Response Thread. Basically, Neo started developing a method of typing in a creature type so any type can be chosen. I decided to look into expanding upon that idea by allowing it to determine the number of possible types for the current string and operate based on the number of possibilities.

>5: Continue as normal
<=5: Show button for each type

The result is that for Juggernaught, the player can click "Next", "J", "Juggernaught" and be done rather than click "Next" until you find and click every letter, which would take 46 clicks as opposed to 3.

Neo's code can be found in the original post linked above. Mine is attached here, with a snippet below. However, I have some issues because I don't know much about Lua or Lua's interaction with DotP. Basically, if you look at the code, you can see that it's pretty simple. You call the function {GetStringPossibleTypes("SomeString")} and it returns the number of possibilities. That much is mostly done and should nearly work (there are no returns yet). The problem is obtaining the actual string results. There are 5 possible results, oResults1, oResults2, ...

How can I pass multiple return values? I was thinking of setting global variables, which would work just as well, but that would still require returning up to 6 variables to the calling function or card. The only potential solution I can think of would be to use data chests. Unfortunately, I don't know how to do that from Lua.

Code snippet: | Open
Code: Select all
GetStringPossibleTypes = Function(oVal)      
   local oResults = 0   
   local oResult1 = ""   
   local oResult2 = ""   
   local oResult3 = ""   
   local oResult4 = ""   
   local oResult5 = ""   
   oLen = s:len(oVal)   
   If oLen = 1 then   
      oResults = GetStringPossibleTypes1(oVal)
   ElseIf oLen = 2 then   
      oResults = GetStringPossibleTypes2(oVal)
   ElseIf oLen = 3 then   
      oResults = GetStringPossibleTypes3(oVal)
   ElseIf oLen = 4 then   
      oResults = GetStringPossibleTypes4(oVal)
   ElseIf oLen = 5 then   
      oResults = GetStringPossibleTypes5(oVal)
   ElseIf oLen = 6 then   
      oResults = GetStringPossibleTypes6(oVal)
   ElseIf oLen = 7 then   
      oResults = GetStringPossibleTypes7(oVal)
   ElseIf oLen = 8 then   
      oResults = GetStringPossibleTypes8(oVal)
   ElseIf oLen = 9 then   
      oResults = GetStringPossibleTypes9(oVal)
   ElseIf oLen = 10 then   
      oResults = GetStringPossibleTypes10(oVal)
   ElseIf oLen = 11 then   
      oResults = GetStringPossibleTypes11(oVal)
   ElseIf oLen = 12 then   
      oResults = GetStringPossibleTypes12(oVal)
   ElseIf oLen = 13 then   
      oResults = GetStringPossibleTypes13(oVal)
   ElseIf oLen = 14 then   
      oResults = GetStringPossibleTypes14(oVal)
   ElseIf oLen = 15 then   
      oResults = GetStringPossibleTypes15(oVal)
   ElseIf oLen = 16 then   
      oResults = GetStringPossibleTypes16(oVal)
   ElseIf oLen = 17 then   
      oResults = GetStringPossibleTypes17(oVal)
   ElseIf oLen = 18 then   
      oResults = GetStringPossibleTypes18(oVal)
   ElseIf oLen = 19 then   
      oResults = GetStringPossibleTypes19(oVal)
   ElseIf oLen = 20 then   
      oResults = GetStringPossibleTypes20(oVal)
   Else   
      oResults = 0
   End   
End      
      
GetStringPossibleTypes1 = function(oVal)      
   local oResults = 0   
   local oResult1 = ""   
   local oResult2 = ""   
   local oResult3 = ""   
   local oResult4 = ""   
   local oResult5 = ""   
   If oVal == "A" then   
      oResults - 65
   ElseIf oVal == "B" then   
      oResults - 47
   ElseIf oVal == "C" then   
      oResults - 83
   ElseIf oVal == "D" then   
      oResults - 52
   ElseIf oVal == "E" then   
      oResults - 51
   ElseIf oVal == "F" then   
      oResults - 30
   ElseIf oVal == "G" then   
      oResults - 46
   ElseIf oVal == "H" then   
      oResults - 44
   ElseIf oVal == "I" then   
      oResults - 20
   ElseIf oVal == "J" then   
      oResults - 3
      oResult1 = "JABALI"
      oResult2 = "JELLYFISH"
      oResult3 = "JUGGERNAUT"
   ElseIf oVal == "K" then   
      oResults - 21
   ElseIf oVal == "L" then   
      oResults - 30
   ElseIf oVal == "M" then   
      oResults - 63
   ElseIf oVal == "N" then   
      oResults - 23
   ElseIf oVal == "O" then   
      oResults - 36
   ElseIf oVal == "P" then   
      oResults - 55
   ElseIf oVal == "Q" then   
      oResults - 3
      oResult1 = "QUALLE"
      oResult2 = "QUEEN"
      oResult3 = "QUIMERA"
   ElseIf oVal == "R" then   
      oResults - 31
   ElseIf oVal == "S" then   
      oResults - 126
   ElseIf oVal == "T" then   
      oResults - 32
   ElseIf oVal == "U" then   
      oResults - 9
   ElseIf oVal == "V" then   
      oResults - 19
   ElseIf oVal == "W" then   
      oResults - 16
   ElseIf oVal == "Y" then   
      oResults - 2
      oResult1 = "YERBAMALA"
      oResult2 = "YETI"
   ElseIf oVal == "Z" then   
      oResults - 14
   Else   
      oResults = 0
   End   
End      
      
GetStringPossibleTypes2 = function(oVal)      
   local oResults = 0   
   local oResult1 = ""   
   local oResult2 = ""   
   local oResult3 = ""   
   local oResult4 = ""   
   local oResult5 = ""   
   ElseIf oVal == "AB" then   
      oResults - 1
      oResult1 = "ABANDERADO"
   ElseIf oVal == "AC" then   
      oResults - 1
      oResult1 = "ACORAZADO"
   ElseIf oVal == "AD" then   
      oResults - 4
      oResult1 = "ADALID"
      oResult2 = "ADDETTO AL MONTAGGIO"
      oResult3 = "ADLER"
      oResult4 = "ADVISOR"
   ElseIf oVal == "AG" then   
      oResults - 1
      oResult1 = "AGUILA"
   ElseIf oVal == "AI" then   
      oResults - 1
      oResult1 = "AIGLE"
   ElseIf oVal == "AL" then   
      oResults - 7
...
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
User avatar
Xander9009
Programmer
 
Posts: 2905
Joined: 29 Jun 2013, 07:44
Location: Indiana, United States
Has thanked: 121 times
Been thanked: 445 times

Re: Choose a Creature Type Function

Postby RiiakShiNal » 17 Sep 2014, 22:37

You can use a table. For example set the table up so that index 0 is the number of results and the next X indices are used for the results.
Code: Select all
local oResultTable
oResultTable[0] = nResults
oResultTable[1] = oResults1
oResultTable[2] = oResults2
...
return oResultTable
A data chest is not really appropriate for passing strings (as you can't set or retrieve them natively) and should be avoided unless you have to persist the strings across actions (which you may have to do).

If you must persist the strings in a data chest then you should write some helper functions to do it because the basic concept is this:
To Store a String:
  • Get String to Store and the Chest register to store it in.
  • Create a chest in that register. (This creates a sub-chest to store the string.)
  • Start an index variable and initialize at 0.
  • Loop through all letters in the string (I believe string indices start at 1 so it would be your index variable + 1).
    • Extract the letter at index + 1.
    • Convert the letter to a number.
    • Store the number in register index.
    • Increment index.

To retrieve it would be a similar process, but in reverse:
  • Get chest and register to read from.
  • Get the sub-chest in the register.
  • Create an empty string to start with.
  • Create an index variable and initialize at 0.
  • While the number in register index does not equal 0.
    • Read number from register index.
    • Convert number to letter.
    • Add the letter to the end of the string variable.
    • Increment index.
  • Return string variable.
RiiakShiNal
Programmer
 
Posts: 2185
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 497 times

Re: Choose a Creature Type Function

Postby Xander9009 » 17 Sep 2014, 23:23

Like this (generally)?
Code: Select all
--On the card
Local SomeVar
SomeVar = GetStringPossibleTypes(CurrentUserInput) --returns the result table from the code snippet you posted
If SomeVar[0] &gt; 0 then
    If SomeVar[0] &lt; 6 then
        FirstResult = SomeVar[1]
        If SomeVar[0] &gt; 1 then
            SecondResult = SomeVar[2]
        End
        If SomeVar[0] &gt; 2 then
            SecondResult = SomeVar[3]
        End
        ...
    Else
        -- Error - too many results
    End
Else
    --Error - no results at all
End
The code Neo used appeared to do everything within a single action, so I don't think encoding the string as numbers will be necessary, but I understand what you mean (I think) regarding how to do so if necessary. I'd already considered the potential necessity of it, but I didn't put as much thought into it as you did. I decided to take it one step at a time :) Anyway, if I have that right and that's how that table would work from the card's perspective, then I'll make the code match (which should be almost trivially easy if I understand correctly).
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
User avatar
Xander9009
Programmer
 
Posts: 2905
Joined: 29 Jun 2013, 07:44
Location: Indiana, United States
Has thanked: 121 times
Been thanked: 445 times

Re: Choose a Creature Type Function

Postby RiiakShiNal » 18 Sep 2014, 00:49

That's about right, generally, though for index 3 you would probably want to assign to ThirdResult instead of SecondResult. Also you can combine a couple of lines like this:
Code: Select all
local SomeVar = GetStringPossibleTypes(CurrentUserInput)
and this:
Code: Select all
if (SomeVar[0] &gt; 0) and (SomeVar[0] &lt; 6) then
Though it should be noted that it is impossible to ask multiple questions in a single action as any question that is asked of the user ends the action.

Edit: It looks like at some point I created a couple of functions for storing/retrieving strings from a data chest. Though I don't know how well tested they are.
String Functions | Open
Code: Select all
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Riiak Shi Nal's Magic The Gathering - String Functions ----------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

-- /////////////////////////////////////////////////////////////////////////////
-- Public Functions ////////////////////////////////////////////////////////////
RSN_SetString = function( oDC, nIndex, sString )
   -- We default to no success in case we encounter a problem (oDC is nil).
   local bSuccess = false

   if (oDC ~= nil) then
      -- Make a sub-chest to store our string in.
      local oStringChest = oDC:Make_Chest( nIndex )

      -- Store our string length to make things somewhat easier later.
      local nLen = sString:len()
      oStringChest:Int_Set( 0, nLen )

      -- We support storing 0 length strings, but you can't iterate
      --  through a zero length string so we simply skip this part.
      if (nLen > 0) then
         -- Iterate through the length of the string writing each
         --  character to the data chest.
         local i
         for i = 1, nLen do
            oStringChest:Int_Set( i, sString:byte( i ) )
         end
      end

      -- Set that we stored the string successfully.
      bSuccess = true
   end

   -- Return whether we succeeded or not (should unless we were given a
   --  bad data chest).
   return bSuccess
end

RSN_GetString = function( oDC, nIndex )
   -- Set our default return value in case of problems.
   local sReturn = nil

   if (oDC ~= nil) then
      local oStringChest = oDC:Get_Chest( nIndex )
      if (oStringChest ~= nil) then
         -- Get our string length.
         local nLen = oStringChest:Int_Get( 0 )

         -- We got this far so we should go ahead and account
         --  for storing of an empty string.
         sReturn = ""

         if (nLen > 0) then
            -- We have more than one character so we need
            --  to iterate through and restore the string.
            local i
            for i = 1, nLen do
               sReturn = sReturn .. string.char( oStringChest:Int_Get( i ) )
            end
         end
      end
   end

   -- Return the string we ended up with or the default if we encountered
   --  a problem.
   return sReturn
end
RiiakShiNal
Programmer
 
Posts: 2185
Joined: 16 May 2011, 21:37
Has thanked: 75 times
Been thanked: 497 times

Re: Choose a Creature Type Function

Postby Xander9009 » 18 Sep 2014, 01:22

Alright, awesome. And I originally had those two lines together from your second example. I separated them to handle "no results" meaning stop and go back and "too many results" meaning it wasn't narrowed enough so keep going without having to query it three times.

As for the string functions, that's great! The coding Neo did used a repeating action. At a glance, I didn't pay attention to the fact that it would probably lose local variables across iterations. However, it appears there's already a working system for that issue. It appears to be doing exactly what you suggested, but I'll compare it to yours and see if I notice any important differences.

Thanks for the advice. I'll work on this tomorrow or sometime soon and post back any progress. The really difficult part is going to be incorporating this into his working code without messing it up. What I've already done is just some Excel&Notepad++ magic. Nothing requiring too much thought (well, a couple of the formulas in Excel were... complicated, but that's a complexity I'm well acquainted with haha).
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
User avatar
Xander9009
Programmer
 
Posts: 2905
Joined: 29 Jun 2013, 07:44
Location: Indiana, United States
Has thanked: 121 times
Been thanked: 445 times

Re: Choose a Creature Type Function

Postby NeoAnderson » 26 Oct 2014, 01:31

Finally i coded what you asked to me, here there is a sample of the functions i used to do it.

Neo_TypeCreature() is the main function to iterate the typing.
Neo_TypeCreature | Open
Code: Select all
Neo_TypeCreature = function(player)
  local n = MTG():GetActionRepCount()
  local oString = ""
  local oEnding = "OK"
  local oType = ""
  local difference = 0
  if n == 0 then
     EffectDC():Set_Int(10, 1)
     EffectDC():Set_Int(20, 0)
     EffectDC():Set_Int(4445, 0)
  end
  local parity = n % 2
  local startIndex = EffectDC():Get_Int(10)
  local val = 0
  for i=1, EffectDC():Get_Int(20) do
     val = i + 20
     oType = NumbersToString(EffectDC():Get_Int(val))
     oString = oString..oType
  end
    if parity == 0  then
      if oString ~= "" then
         local Tchest = Neo_FindSubString(oString)
         if Tchest ~= nil and Tchest ~= -1 then
            player:BeginNewMultipleChoice()
            local testindex = Tchest:Get_Int(0)
            for k=1, testindex do
                local TypetoDisplay = Tchest:Get_Int(k)
                      TypetoDisplay = TypetoDisplay - 1000
                      player:AddMultipleChoiceAnswer( "CARD_QUERY_CREATURE_TYPE_"..TypetoDisplay )
            end
            player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_CREATURE_TYPE" )
            EffectDC():Set_Int(4444, 1)
         else
            player:BeginNewMultipleChoice()
            player:AddMultipleChoiceAnswer( "UI_PROMOTIONAL_PREV" )
            player:AddMultipleChoiceAnswer(  NumbersToString( startIndex ) )
            player:AddMultipleChoiceAnswer(  NumbersToString( startIndex+1 ) )
            player:AddMultipleChoiceAnswer(  NumbersToString( startIndex+2 ) )
            player:AddMultipleChoiceAnswer(  NumbersToString( startIndex+3 ) )
            player:AddMultipleChoiceAnswer( "UI_PROMOTIONAL_NEXT" )
            player:AddMultipleChoiceAnswer( oString.."  -  "..oEnding )
            player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_CREATURE_TYPE" )
        end
      else
            player:BeginNewMultipleChoice()
            player:AddMultipleChoiceAnswer( "UI_PROMOTIONAL_PREV" )
            player:AddMultipleChoiceAnswer(  NumbersToString( startIndex ) )
            player:AddMultipleChoiceAnswer(  NumbersToString( startIndex+1 ) )
            player:AddMultipleChoiceAnswer(  NumbersToString( startIndex+2 ) )
            player:AddMultipleChoiceAnswer(  NumbersToString( startIndex+3 ) )
            player:AddMultipleChoiceAnswer( "UI_PROMOTIONAL_NEXT" )
            player:AddMultipleChoiceAnswer( oString.."  -  "..oEnding )
            player:AskMultipleChoiceQuestion( "CARD_QUERY_MC_CHOOSE_CREATURE_TYPE" )
      end
    elseif parity == 1  then
        local result = player:GetMultipleChoiceResult()
     if EffectDC():Get_Int(4444) == 1 then
        local Tchest = Neo_FindSubString(oString)
        if Tchest ~= nil and Tchest ~= -1 then
            local TypetoDisplay = Tchest:Get_Int(result+1)
            EffectDC():Set_Int(4445, TypetoDisplay )
            EffectDC():Set_Int(0,1)
            return false
        end
     else
      if result == 0  then
             if startIndex == 1 then
                startIndex = 25
             else
                startIndex = startIndex - 4
             end
       EffectDC():Set_Int(10, startIndex)
      elseif result == 5 then
             if startIndex == 25 then
                startIndex = 1
             else
                startIndex = startIndex + 4
             end
       EffectDC():Set_Int(10, startIndex)
      elseif result > 0 and result < 5 then
       difference = result + (startIndex - 1)
       EffectDC():Int_Inc(20)
       local pos = EffectDC():Get_Int(20)
       pos = pos + 20 
       EffectDC():Set_Int(pos, difference)
      elseif result == 6 then
      local oTypeToAdd = StringToCreatureIndex(oString)
            if oTypeToAdd ~= 0 then
               EffectDC():Set_Int(0,1)
               return false
            else
            EffectDC():Set_Int(10, 1)
            EffectDC():Set_Int(20, 0)
       startIndex = 1
       oString = ""
            end
      end
    end
   end
 return true
end
Neo_FindSubString() is used to compare the actual typed letters(substring) with all the creatures types including each 5 translations. It will return a Chest with the Types if there are less than 8 results, otherwise it returns -1.
Neo_FindSubString | Open
Code: Select all
Neo_FindSubString = function( oString )
local TypeChest = EffectDC():Make_Chest(100)
local lenght = string.len(oString)
TypeChest:Set_Int(0,0)
local index = TypeChest:Get_Int(0)
for i=1, 1083 do
    local TempString = Neo_ReturnCreatureType(i)
    local TempSubString = string.sub(TempString, 1, lenght)
    if oString == TempSubString then
       local NumericType = StringToCreatureIndex(TempString)
       if NumericType > 999 then
          local FindType = 0
          for j=1, index do
              local ActualChestType = TypeChest:Get_Int(j)
              if ActualChestType == NumericType then
                 FindType = 1
              end 
          end
          if FindType == 0 then
             TypeChest:Int_Inc(0)
             index = TypeChest:Get_Int(0)
             TypeChest:Set_Int(index, NumericType)
          end
       end
    end
end
local testindex = TypeChest:Get_Int(0)
if testindex > 0  and testindex < 8 then
   return TypeChest
end
   return -1
end
Neo_ChooseCreatureType() is the main function called from the card, into repeating resolution block. It make different thing based on the kind of player(Human or AI), and also considering the TypeEffect passed. (positive effects 1,2,3 will consider player cards, negative effects -1,-2,-3 will consider opponent's cards).
Neo_ChooseCreatureType | Open
Code: Select all
Neo_ChooseCreatureType = function(player, TypeEffect)
local choose = -1
local Ctype = EffectDC():Make_Chest(NEO_COMPARTMENT_ID_CREATURE_TYPE)
if player:IsAI() then
   if TypeEffect == 1 then
      choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_BATTLEFIELD)
      if choose == -1 then
         choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_HAND)
         if choose == -1 then
            choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_LIBRARY)
            if choose == -1 then
               choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_GRAVEYARD)
            end
         end
      end
      return false
  elseif TypeEffect == 2 then
      choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_HAND)
      if choose == -1 then
         choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_LIBRARY)
         if choose == -1 then
            choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_BATTLEFIELD)
            if choose == -1 then
               choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_GRAVEYARD)
            end
         end
      end
      return false
  elseif TypeEffect == 3 then
      choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_GRAVEYARD)
      if choose == -1 then
         choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_EXILE)
         if choose == -1 then
            choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_BATTLEFIELD)
            if choose == -1 then
               choose = Neo_MaxCreatureTypesInZonePlayer(player, ZONE_LIBRARY)
            end
         end
      end
      return false
  elseif TypeEffect == -1 then
      choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_BATTLEFIELD)
      if choose == -1 then
         choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_GRAVEYARD)
         if choose == -1 then
            choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_EXILE)
            if choose == -1 then
               choose = Neo_RandomTypeChoose()
            end
         end
      end
      return false
  elseif TypeEffect == -2 then
      choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_GRAVEYARD)
      if choose == -1 then
         choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_EXILE)
         if choose == -1 then
            choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_BATTLEFIELD)
            if choose == -1 then
               choose = Neo_RandomTypeChoose()
            end
         end
      end
      return false
  elseif TypeEffect == -3 then
      choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_EXILE)
      if choose == -1 then
         choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_GRAVEYARD)
         if choose == -1 then
            choose = Neo_MaxCreatureTypesOpponentsInZone(player, ZONE_BATTLEFIELD)
            if choose == -1 then
               choose = Neo_RandomTypeChoose()
            end
         end
      end
      return false
  end
else
   if Neo_TypeCreature(player) == false then
       
      if EffectDC():Get_Int(0) == 1 then
       if  EffectDC():Get_Int(4445) ~= 0 then
           local oTypeToAdd = EffectDC():Get_Int(4445)
           Ctype:Set_Int(NEO_CHOSEN_CREATURE_TYPE, oTypeToAdd)
           return false
       else
         local oSString = ""
         local oType = ""
         local val = 0
         for i=1, EffectDC():Get_Int(20) do
             val = i + 20
             oType = NumbersToString(EffectDC():Get_Int(val))
             oSString = oSString..oType
         end
         local oTypeToAdd = StringToCreatureIndex(oSString)
         if oTypeToAdd ~= 0 then
            Ctype:Set_Int(NEO_CHOSEN_CREATURE_TYPE, oTypeToAdd)
         end
         return false
       end
      end
   else
      return true
   end
end
end
Neo_ChosenCType() this function simply retrieve the stored chosen type from the assigned chest.
Neo_ChosenCType | Open
Code: Select all
Neo_ChosenCType = function()
local Ctype = EffectDC():Get_Chest(NEO_COMPARTMENT_ID_CREATURE_TYPE)
local ChoosenType = 0
if Ctype ~= nil then
   ChoosenType = Ctype:Get_Int(NEO_CHOSEN_CREATURE_TYPE)
end
   return ChoosenType
end

....There some other functions but are too long to copy into a single post, anyway are just type lists functions nothing of special.
If you want to take a look to the complete list of function you can download the Convoke Pack - Ver 1.3
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times

Re: Choose a Creature Type Function

Postby Xander9009 » 28 Oct 2014, 12:46

Alright, just got around to testing them. I haven't looked at the functions themselves, but yes, this is exactly what I was hoping for! Thopter, for instance, would take 6 letters (a total of 24 buttons). This way it only takes 10. It might not be a huge boost, but it cuts it in half. And of course, longer ones like saproling, dreadnaught, or assembly-worker (which, by the way, is missing) are reduced SO much. Thank you for taking the time to do this. It's perfect :)
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
User avatar
Xander9009
Programmer
 
Posts: 2905
Joined: 29 Jun 2013, 07:44
Location: Indiana, United States
Has thanked: 121 times
Been thanked: 445 times

Re: Choose a Creature Type Function

Postby NeoAnderson » 28 Oct 2014, 12:52

Xander9009 wrote:Alright, just got around to testing them. I haven't looked at the functions themselves, but yes, this is exactly what I was hoping for! Thopter, for instance, would take 6 letters (a total of 24 buttons). This way it only takes 10. It might not be a huge boost, but it cuts it in half. And of course, longer ones like saproling, dreadnaught, or assembly-worker (which, by the way, is missing) are reduced SO much. Thank you for taking the time to do this. It's perfect :)
I am glad you like it, your suggestions always inspire me. :wink:
NeoAnderson
 
Posts: 914
Joined: 10 Sep 2013, 07:49
Has thanked: 18 times
Been thanked: 139 times


Return to Programming Talk

Who is online

Users browsing this forum: No registered users and 19 guests


Who is online

In total there are 19 users online :: 0 registered, 0 hidden and 19 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 19 guests

Login Form