All Activity

This stream auto-updates   

  1. Yesterday
  2. Don't remember myself, I may just renamed them or took some upgraded version of them (if there is one) from the net. I recall I saw the issue on other mods (include TW's mods) but they didn't get it in the same frequency as mine (when you save after you train or just saw moded unit/structure (especially if it use new models) the game will 100% crash when you will load that save file, however if you just save at the start of the game before you train anything it will load successfully... Edit, I sort of recalled why I added the KW's shaders, when I imported few units (especially GDI's from either TW or TT) they all looked different with each shader so I tested them out.
  3. Why do you even add the KW shader? You have a KW mod, these shader are there by default >_> Got the same load savegame bug in TWA and doubt it has anything to do with shader effects.
  4. so I found out it was the decal fxo that was causing the issue, I also highly suspect that one of the many shaders i uses is also responsible for the famous crash I get when I try to load saves file that was saved in the mod, Can someone help me out pin point shaders that are known to be buggy? I sure that at least raven, stygs, and megumi can detect one from their modding experince. Here the shaders I uses: you can exclude the decal and cnc4 burrowing shader which I deleted (it forgot the c&c4 one there after I finished messing with it) I don't even recall why I added most of these shadders, I know I highly needed the TW and KW shaders, and that I added few that were required for the wall mod, and also one or two from max cause I needed glass effect for the cinematic orca and few imported c&c4 objects, but I don't recall I added or used the rest of them o.o
  5. Thanks for finding out, that a bit of a issue as I don't even remember what shaders I need and I assume I didn't add them all for show....
  6. Delete some of your new add on shader .fxo, and it will work. Some shaders may influence the decal displaying.
  7. Last week
  8. This is a bumping of this old issue. I feel that there is a lot more that has been done with LUA over the past year and a half, so I figured that it might worth getting some fresh input on this. Please check the opening post of this thread for some background information. Getting AI infantry squads to enter a transport if it is close (if possible being able to exclude certain infantry from entering transports), and finally getting the AI transport to eject passengers when its health reaches 'REALLYDAMAGED'. This is so the AI can make use of transports that allow passengers to fire their weapon, it is not about getting the AI to pick up, and drop off passengers intelligently.
  9. hey, guys, i need some help with W3X VIEWER error. it says exception unknown error. I heard if i delete the registry it will resolve. But which registry ? Please help me. ================================================================================ EXCEPTION_UNKNOWN: Unknown exception code 0xc015000f Exception occured at 775045c1 ntdll.dll+0x845c1, RtlUlonglongByteSwap+0x71d1. Version: release EAX:0x0018fa90 EBX:0x17790008 ECX:0x00000001 EDX:0x00000000 ESI:0x006f54b8 EDI:0x006f5518 EIP:0x775045c1 ESP:0x0018fa84 EBP:0x0018fae0 Flags:%00000000000000000000001000000110 CS:0x0023 DS:0x002b SS:0x002b ES:0x002b FS:0x0053 GS:0x002b CW:%0000001001111111 SW:%0100000000100000 TW:%1111111111111111 ErrOfs: 0x00000000 ErrSel: 0x00000000 DataOfs: 0x00000000 DataSel: 0x00000000 Cr0NpxState: 0x0d0b1b60 ST(0) 00000000000000000000 0.000000 ST(1) 00000000000000000000 0.000000 ST(2) 00000000000000000000 0.000000 ST(3) 00000000000000000000 0.000000 ST(4) 00000000000000000000 0.000000 ST(5) 00000000000000000000 0.000000 ST(6) 00000000000000800340 16.000000 ST(7) 0000000000000080fb3f 0.062500 12 addresses: (unknown)(0): ntdll.dll+542145 RtlUlonglongByteSwap+29137 (unknown)(0): kernel32.dll+87172 DeactivateActCtx+40 (unknown)(0): MFC80.DLL+222977 (unknown) (unknown)(0): MFC80.DLL+203879 (unknown) (unknown)(0): MFC80.DLL+226023 (unknown) (unknown)(0): MFC80.DLL+226610 (unknown) (unknown)(0): MFC80.DLL+378999 (unknown) (unknown)(0): MFC80.DLL+379645 (unknown) (unknown)(0): MFC80.DLL+386422 (unknown) (unknown)(0): MFC80.DLL+372490 (unknown) (unknown)(0): MFC80.DLL+372954 (unknown) (unknown)(0): MFC80.DLL+434339 (unknown) Bytes around EIP: 775045a1 b8 c7 45 c0 03 00 00 00 89 4d c4 89 75 c8 89 7d ¸ÇEÀ....‰Mĉuȉ} 775045b1 cc c7 45 b0 0f 00 15 c0 89 55 b4 e8 a7 28 fc ff ÌÇE°...À‰U´è§(üÿ 775045c1 8b 36 e9 a6 05 fe ff ff 77 04 e8 73 75 fb ff e9 ‹6é¦.þÿÿw.èsuûÿé 775045d1 a5 05 fe ff 8b 4d fc 83 65 b4 00 89 45 c4 89 45 ¥.þÿ‹Müƒe´.‰EĉE 775045e1 c8 c7 45 bc 04 00 00 00 89 4d c0 8b 40 08 89 45 ÈÇE¼....‰MÀ‹@.‰E
  10. I use targeted special powers via script on many occasions in meta mod, maybe have a look and find out the difference. The NodObelisk_RELOADING function is responsible for avoiding such cases. The towers search for theri "mother" tower and test if it is still attacking, if not they should get the "NAMED_STOP" command. Do some live lua script testing, as such things most of the time get resolved by rapid prototyping/ try and error. That means that a support tower that is already firing tertiary should't get another attack command. You can add a test before they get the attack command in the cascade forwarding function, to find out if they already attack ( test model comditions preattack, firing, reloading and such). Would't make a big difference with my full lua script way, because the main logic won't differ. Only the attack distribution of support tower will get much easier. But for simple RA3 style forwardings you can also take a non lua way into consideration (see Lauren's solution, which is not bad either).
  11. Meta Mod Tiberium Wars Version now released on MODDB. Some more bugfixes made, but still with limitations.
  12. Oh well. The script does not like to fire object specific targeted special powers, and the 'NAME_ATTACK_NAMED' method still has the issue with it using the 'PRIMARY', then 'TERTIARY' weapons alternately. It also still has occasions were the support beam will continue to fire when the main Obelisk has no target (in this case it will only use the 'TERTIARY' weapon!). I am wondering if there would be as many issues with a RA3 style support (Main Obelisk gets target, Obelisk within range fire support beam at it to boost weapon, no supporting of support Obelisk).
  13. This is supposed to be in the Prime timeline not the Alternate timeline... but tv shows and their tv execs and canon rarely go together. Just excited this is on netflix, so I can watch it in a reasonable time.
  14. Hay, I was going to say... @PurpleGaga27 I think you're missing the point in this thread. That this was going to be PW's music choices, but it sounds like you may have PM'd and sorted it out? PG feel free to post your eclectic choices in the other music thread... and let PW reveal his playlist. I'm curious, I had not heard the blur song...
  15. So far the only games that I has unplayability problem with are Simcity 4(it makes me quit Simcity)
  16. For whatever reason, the Special power method is doing nothing. I tried 'NAMED_USE_COMMANDBUTTON_ABILITY_ON_NAMED', and also tried a test with a ' WeaponFireSpecialAbilityUpdate', using both 'NAMED_FIRE_SPECIAL_POWER_AT_NAMED' and 'NAMED_USE_COMMANDBUTTON_ABILITY_ON_NAMED' methods. I used a power that I was sure worked (Orca targeted sensor pod), tested the button to make sure it worked, and after all that the Lua script did nothing with it. I am going back to the attack method.
  17. Just a sidenote observation: You can trigger an untargeted special power in 4 ways, it's crazy: ExecuteAction("NAMED_FIRE_SPECIAL_POWER",...) ExecuteAction("NAMED_FIRE_METAGAME_OP_INSTANT",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ABILITY",...) ObjectDoSpecialPower(object,specialpowername) And a lame single forwarded prism forwarding could be achieved with ExecuteAction("NAMED_USE_COMMANDBUTTON_ON_NEAREST_OBJECTTYPE",...) Plus some testings of course.
  18. In general your options for special powers/commandbuttons/abilities/attacking are: ExecuteAction("NAMED_FIRE_SPECIAL_POWER",...) ExecuteAction("NAMED_FIRE_SPECIAL_POWER_AT_NAMED",...) ExecuteAction("NAMED_FIRE_SPECIAL_POWER_AT_WAYPOINT",...) ExecuteAction("NAMED_FIRE_WEAPON_FOLLOWING_WAYPOINT_PATH",...) ExecuteAction("NAMED_FIRE_METAGAME_OP_INSTANT",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ABILITY",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ABILITY_AT_WAYPOINT",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ABILITY_ON_NAMED",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ON_NEAREST_ENEMY_BUILDING",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ON_NEAREST_ENEMY_BUILDING_CLASS",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ON_NEAREST_ENEMY_UNIT",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ON_NEAREST_GARRISONED_BUILDING",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ON_NEAREST_KINDOF",...) ExecuteAction("NAMED_USE_COMMANDBUTTON_ON_NEAREST_OBJECTTYPE",...) ExecuteAction("NAMED_ATTACK_NAMED",...) ObjectDoSpecialPower(object,specialpowername) Try to figure out a way to use your sp with these commands, else WeaponFireSpecialAbilityUpdate could be mandatory/easier to use ? ExecuteAction("NAMED_USE_COMMANDBUTTON_ABILITY_ON_NAMED",...) looks promising. No the code will work with a special power too, but uncomment "--MainTowerSupporterList[tostring(self)]=nil" in NodObelisk_RELOADING function then.
  19. For whatever reason, I cannot get a 'Weaponfireabilityupdate' to work. I manually tested a modified 'Beamabilityupdate' and it worked: <SpecialPower id="ModuleTag_PrismForwardingSpecialPower" SpecialPowerTemplate="SpecialPower_PrismForwarding" UpdateModuleStartsAttack="true"></SpecialPower> <BeamSpecialAbilityUpdate id="ModuleTag_ChargeDefensesSPUpdate" SpecialPowerTemplate="SpecialPower_PrismForwarding" JoinWithOtherBeams="false" UnpackTime="2s" UnpackSound="NOD_Obelisk_LaserChargeUp" PrepSoundLoop="NOD_Obelisk_LaserFireMS" PackTime="1s" PreparationTime="0.5s" StartAbilityRange="375.0" TargetSamePlayerOnly="true" Options="CHECK_SPECIALPOWER_REQUIREMENTS_DURING_UPDATE" PreferredTargetBone="FXBONE01" DamagePerSecond="0.0"> <!--TargetAttributeModifierAdd="AttributeModifier_ChargeDefenses"--> </BeamSpecialAbilityUpdate> However, when I attempt to use it with the LUA script, nothing happens! (no errors, just no support beam). Script: GetObj={} function GetObj.String(object) if type(object) == "string" then return object else local _, count = gsub(ObjectDescription(object),"%(","") if count>1 then return strsub(ObjectDescription(object), strfind(ObjectDescription(object),"(",1,true)+1,strfind(ObjectDescription(object),")",1,true)-1) else local StrRef = "object" .. RandomString(5) ExecuteAction("SET_UNIT_REFERENCE", StrRef, object) return StrRef end end end function GetObj.Table(object) if type(object) == "table" then return object else for k,v in globals() do if strfind(k,"ObjID") ~= nil and strfind(ObjectDescription(v),object) then return rawget(globals(),k) end end return object end end function GetObj.Hash(object) return tostring(tonumber(strsub(ObjectTemplateName(GetObj.Table(object)), 6, 13), 16)) end CompareTable = { LT=0, LE=1, EQ=2, GE=3, GT=4, NE=5, ["<"]=0, ["<="]=1, ["=="]=2, [">="]=3, [">"]=4, ["~="]=5 } function GetObjectDistance(object1 ,object2, start_distance) if object1==nil or object2==nil or not EvaluateCondition("NAMED_NOT_DESTROYED",object1) or not EvaluateCondition("NAMED_NOT_DESTROYED",object2) then return 0 end object1=GetObj.String(object1) object2=GetObj.String(object2) local v = {} v.GetDistance = function(lowerlimit,upperlimit) local mid=(upperlimit+lowerlimit)/2 if upperlimit-lowerlimit<=1 then return lowerlimit elseif EvaluateCondition("DISTANCE_BETWEEN_OBJ", %object1, %object2, CompareTable["<"], mid) then return %v.GetDistance(lowerlimit,mid) else return round(%v.GetDistance(mid,upperlimit)) end end if start_distance then return v.GetDistance(0,tonumber(start_distance)) else return v.GetDistance(0,12870) end --maxdiagsize=ceil(sqrt(2*(7500+2*800)^2))) end function random(...) --overwritting lua native function for multiplayer compatibility local RandomNumber = function(a,b) return floor(a+((b-a)*GetRandomNumber())+0.5) end if getn(arg) == 0 then return floor(GetRandomNumber()+0.5) elseif getn(arg) == 1 then return RandomNumber(1,arg[1]) elseif getn(arg) == 2 then return RandomNumber(arg[1],arg[2]) else return arg[RandomNumber(1,getn(arg))] end end function RandomString(l) if l < 1 then l=5 end local s = "" local ascii_zone = {} for i=1,l,1 do ascii_zone[1] = random(97, 122) ascii_zone[2] = random(65, 90) ascii_zone[3] = random(48, 57) s = s .. strchar(ascii_zone[random(3)]) end return ("_" .. s) end function GetMyMainTower(object) for q,p in MainTowerSupporterList do if q~=tostring(object) then for i=1,getn(p),1 do if p[i]==object then return p[1] end end end end end function IsTowerStillAttacking(MainTower) if ObjectTestModelCondition(MainTower,"ATTACKING") or ObjectTestModelCondition(MainTower,"PREATTACK_A") or ObjectTestModelCondition(MainTower,"RELOADING_A") or ObjectTestModelCondition(MainTower,"FIRING_A") then return true else return false end end function NodObelisk_RELOADING(self) local TowerAttackRange = 375 if MainTowerSupporterList[tostring(self)]~=nil then --and ObjectCountNearbyEnemies(self,TowerAttackRange)==0 then for i=2,getn(MainTowerSupporterList[tostring(self)]),1 do ExecuteAction("NAMED_STOP",MainTowerSupporterList[tostring(self)][i]) end --MainTowerSupporterList[tostring(self)]=nil else if ObjectCountNearbyEnemies(self,TowerAttackRange)==0 then ExecuteAction("NAMED_STOP",self) end local MainTower = GetMyMainTower(self) if not IsTowerStillAttacking(MainTower) then MainTowerSupporterList[tostring(MainTower)]=nil else ExecuteAction("NAMED_STOP",self) ExecuteAction("NAMED_ATTACK_NAMED",self,MainTowerSupportConnectionList[tostring(MainTower)][tostring(self)]) end end end function getn2(table) local size = 0 for k,v in table do size=size+1 end return size end function round(number) return floor(number+0.5) end MainTowerSupporterList= {} MainTowerSupportConnectionList= {} function CascadeForwarding(self) --made for "Madin" (cncnz forums) self=GetObj.Table(self) local IsObjectInSupporterList = function(object) for q,p in MainTowerSupporterList do --to test if a tower already supports another tower if q~=tostring(%self) then for i=1,getn(p),1 do if p[i]==object then return true end end end end return false end local MaximumSupportDistance = 13000 local TowerAttackRange = 375 --here attack range of nod obelisk if ObjectCountNearbyEnemies(self,TowerAttackRange)==0 and IsObjectInSupporterList(self) then return end local ObjectList = {} local DistanceTable = {} local SupportConnection={} --create object list of all support towers for k,v in globals() do if strfind(k,"ObjID") and GetObj.Hash(self)==GetObj.Hash(v) and self~=v and ObjectTeamName(self)==ObjectTeamName(v) then if ObjectCountNearbyEnemies(v,TowerAttackRange)==0 and EvaluateCondition("DISTANCE_BETWEEN_OBJ", GetObj.String(self),GetObj.String(v), CompareTable["<="], MaximumSupportDistance) then if not IsObjectInSupporterList(v) then tinsert(ObjectList,v) end end end end tinsert(ObjectList,self) if getn(ObjectList)<2 then return end --create 2d matrix with distances for i=1,getn(ObjectList),1 do DistanceTable[tostring(ObjectList[i])]={} end for i=1,getn(ObjectList),1 do for j=i,getn(ObjectList),1 do if i==j then DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])]=0 else if DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] == nil then DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])]=GetObjectDistance(GetObj.String(ObjectList[i]),GetObj.String(ObjectList[j])) DistanceTable[tostring(ObjectList[j])][tostring(ObjectList[i])]=DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] end end end end --sort object list by distance to main tower local SortHelper=function(Object1,Object2) if %DistanceTable[tostring(%self)][tostring(Object1)] < %DistanceTable[tostring(%self)][tostring(Object2)] then return true end end sort(ObjectList,SortHelper) --main part: distribute one tower for each tower to support local MainNodeTable = {} tinsert(MainNodeTable,self) local i = 2 local ObjectListSize for i=2,getn(ObjectList),1 do local MainNodeCriteria = true local NextMainNode, NextMainNodeAlternative --closest main node local NextMainNodeDistance = 13000 for k=1,getn(MainNodeTable),1 do if NextMainNodeDistance > DistanceTable[tostring(MainNodeTable[k])][tostring(ObjectList[i])] then NextMainNodeDistance = DistanceTable[tostring(MainNodeTable[k])][tostring(ObjectList[i])] NextMainNode = MainNodeTable[k] end end local ShortestLinkToNextMainNodeDistance = 13000 for j=3,getn(ObjectList),1 do if not i==j and ObjectList[j]~=nil then local iNodeTojNodeDistance = DistanceTable[tostring(ObjectList[i])][tostring(ObjectList[j])] local iNodeToNextMainNodeDistance = DistanceTable[tostring(NextMainNode)][tostring(ObjectList[i])] local jNodeToNextMainNodeDistance = DistanceTable[tostring(NextMainNode)][tostring(ObjectList[j])] if jNodeToNextMainNodeDistance < iNodeToNextMainNodeDistance then if iNodeTojNodeDistance < iNodeToNextMainNodeDistance then MainNodeCriteria = false local LinkToNextMainNodeDistance = iNodeTojNodeDistance + jNodeToNextMainNodeDistance if ShortestLinkToNextMainNodeDistance > LinkToNextMainNodeDistance then NextMainNodeAlternative=ObjectList[j] ShortestLinkToNextMainNodeDistance = LinkToNextMainNodeDistance end end end end end if MainNodeCriteria == true then if TowerAttackRange > DistanceTable[tostring(NextMainNode)][tostring(ObjectList[i])] then tinsert(MainNodeTable,ObjectList[i]) SupportConnection[tostring(ObjectList[i])]=NextMainNode else ObjectList[i]=nil end else if TowerAttackRange > ShortestLinkToNextMainNodeDistance then SupportConnection[tostring(ObjectList[i])]=NextMainNodeAlternative else ObjectList[i]=nil end end end --remove all unneccasary towers local CleanedObjectList = {} for i=1,getn(ObjectList),1 do if not ObjectList[i]==nil then tinsert(CleanedObjectList,ObjectList[i]) end end ObjectList=CleanedObjectList MainTowerSupporterList[tostring(self)] = CleanedObjectList MainTowerSupportConnectionList[tostring(self)]=SupportConnection --fire cumulative attribute modifier weapon on main tower (self) for i=2,getn(ObjectList),1 do ObjectCreateAndFireTempWeapon(self,"PrismTowerSupportWeapon") end --fire special power to display visual support beams for i=2,getn(ObjectList),1 do ExecuteAction("NAMED_FIRE_SPECIAL_POWER_AT_NAMED",ObjectList[i],"SpecialPower_PrismForwarding",SupportConnection[tostring(ObjectList[i])]) -- ExecuteAction("NAMED_STOP",ObjectList[i]) -- ExecuteAction("NAMED_ATTACK_NAMED",ObjectList[i],SupportConnection[tostring(ObjectList[i])]) end end function _ALERT(message) ExecuteAction("SHOW_MILITARY_CAPTION", "\n\n\n\n" .. tostring(message) .. "\n", 20) local file = "" local filehandle = openfile("ErrorLog",'a') if filehandle ~= nil then write(filehandle,"\n" .. "ErrorLogToFile(" .. date() .. "): " .. message) else local filehandle = writeto(file) write(filehandle,"\n" .. "ErrorLogToFile(" .. date() .. "): " .. message) end flush(filehandle) closefile(filehandle) end Am I doing something wrong? (maybe it has to be a 'WeaponFireSpecialAbilityUpdate' to work?) or does it have to be done using 'NAME_ATTACK_NAMED'?
  20. I made a very very early meta mod port for tiberium wars. Many things still do not work correctly, but for modders it's still usefull at this point, as the whole meta mod io does work and also many other elements, like the meta command text menu and meta control tab menu (for the most part). Among the many issues that need to get resolved are the following: meta tech faction broken diplomacy alliance changes broken multiplayer compatibility not finished yet lua object tables still with kane's wrath objects The source code will probably become universally compileable for kane's wrath as well as tiberium wars in the future. Download comes with source code of course Note: The lua work folder gets created on first start up and can be found in the tw userdata folder, named "MetaModIO". For modders/scripters run the game in windowed mode and push the lua script button in the meta control tab menu to create the LUA_INPUT.lua. Then open that file and have fun, running your scripts live. You can overwrite any existing function from the scripts.lua within the LUA_INPUT.lua. DOWNLOAD
  21. After a short break for a family trip last week, it's time to return to the Command & Conquer: Mod Spotlights. This week's feature will be the entire USA Faction of Generals: Contra. Join me tomorrow, May 28th 2017 at 18:00 GMT / 20:00 CET on my channel on Twitch as I will be showcasing what the developers have done to the existing Generals, as well as look into what this new "Cybernetics" Generals has to offer. (or Robotics). Hope to see you all at the end of this countdown!
  22. Apparently the answer is that it will cause code issues! The Obelisk get stuck in a support loop eventually. They start off targeting enemy units. But once a the enemy units stop coming, the Obelisk start firing on each other. I am going to have another attempt at the special power, I do not even understand why it is not working.
  23. That was my idea too, just try it. Should't interfere with the script. Or use the special power
  24. OK thanks! Same happening for me! for i=2,getn(ObjectList),1 do --ExecuteAction("NAMED_FIRE_SPECIAL_POWER_AT_NAMED",ObjectList[i],"SpecialPower_PrismForwarding",SupportConnection[tostring(ObjectList[i])]) ExecuteAction("NAMED_STOP",ObjectList[i]) ExecuteAction("NAMED_ATTACK_NAMED",ObjectList[i],SupportConnection[tostring(ObjectList[i])]) ExecuteAction("NAMED_ATTACK_NAMED",ObjectList[i],SupportConnection[tostring(ObjectList[i])]) end ? If the main 'PRIMARY' weapon cannot damage Obelisk from the same team, will it cause code issues?
  25. Ok you also need to include all functions from previous posts. And be aware to always take the most recent functions I've posted. It can't find the GetObj table in which we stored the functions like GetObj.String and more. See above, we declared GetObj = {}.
  1. Load more activity