@zer0d4y I have completely missed this! Been busy with an OpenRA mod of mine, so no unfortunatelly I didnt do much at all. Barely even played (shameful)
What about you? Any new ideas? Seems like a good start!
@zer0d4y I have completely missed this! Been busy with an OpenRA mod of mine, so no unfortunatelly I didnt do much at all. Barely even played (shameful)
What about you? Any new ideas? Seems like a good start!
Everyone: Do you even reclaim, bro?
Like everyone else, I suggest looking into other mods. I have my whole mods folder set up as a git repo, so I can track my experiments and revert anything that isn't working. Try to make small changes, run the game locally and see if it works. Check the log for errors, you can bind it with a hotkey (Debug category --> "Toggles the debugging log window"). Use LOG() or WARN() functions if you want to print values/messages to the log window.
In general, I think you are better off just asking a bunch of questions here than trying to find a complete guide. Searching for specific solutions beyond the most basic things is usually futile.
When changing units you can loop through all units and make changes based on the unit blueprint, like this:
yourmodfolder/hook/lua/system/Blueprints.lua
do
local oldModBlueprints = ModBlueprints
function ModBlueprints(all_bps)
-- Run the original code of this function, so we don't override it.
-- Common practice when extending/hooking existing FAF functions
oldModBlueprints(all_bps)
for id, bp in all_bps.Unit do
if bp.Economy.StorageEnergy then
bp.Economy.StorageEnergy = bp.Economy.StorageEnergy * 2
end
if table.find(bp.Categories, "AIR") and not table.find(bp.Categories, "FACTORY") then
if bp.Intel.VisionRadius then
bp.Intel.VisionRadius = bp.Intel.VisionRadius * 1.5
end
end
-- ...ETC
end
end
end
Anything specific you're stuck with at the moment?
What kind of UI mod do you have in mind?
@mostlostnoob Nice, someday I'll look into that. I think I deleted my music files (2 if I remember), otherwise it didn't start or crashed, something like that. I guess that's the quick fix if anyone else have the same problem. Great about the flags, I guess I can stand being Danish/Norwegian a bit longer. Barely. (JK dear neighbours) Update: Besides flags it been smooth since alpha-3.
More stable than during the worst of the DDos days, but still lots of games that never connect. So it's been better at points the last year. Also, quite often now I have to restart the client after a game ends as it thinks I'm still in game. This could potentially be because I am on a mac with bootcamp and have always had to terminate the game process for it not to freeze on normal exit (someone wrote that it's about newer macs and their SSDs). But it used to work before. And also, I am no longer Swedish, it switches between Danish and Norwegian.
@nex Aaah. Yes. You are right actually. I assumed too much. In @Azath0th case he does have the MIT license on his github repo so I will include that license for any of my releases and all should be fine. For everyone else, just sue me (that's a joke!)
@azath0th Ehm you don't have a license file and you leave the copyright field empty? Or am I wrong in assuming you are 4z0t? Otherwise, yes, ofc. Even though I do not understand at all why anyone would copyright a mod. Very lame
@nex Haven't looked at that code in detail but I have thought about those previews. I'll check it out when I get there. Implementing it into core is more than I ever imagined but I can see it working. So much to do though, would prefer some help with that to get it right. I'll think about opening up a suggestion on github when I'm done with the proof of concept version and see who's interested. Thanks!
@azath0th Yeah I hear you, it's a good idea. I'll see what I can do. PS: big fan, I stole a lot of your code
Feeling limited in creating your ultimate hotkey layout? Look no further.
TBA/work in progress mod that will allow you to customize your hotkeys programatically. You will need to write code to change it, but it has a fairly easy to understand structure to it. Example:
E =
The time you have to register a subhotkey is taken from the double-click decay time that you can set in the original settings. I think the default is 500ms. Then it is reset. If you use another key that is not in the subhotkeys (or if you don't have any subhotkeys registered) it will ofc register whatever you pressed even within those 500ms. You can technically nest an infinate amount of more subhotkeys inside subhotkeys as well to really go wild with your combos.
More examples:
Q =
I have the Y button set for all my commander enhancements:
And so on, only your imagination sets the limits.
The obvious advantage here is that you can use the same key for different things depending on the context. Kind of like build mode but automatic.
I have migrated almost all my hotkeys in there and use it on a daily basis, but you can mix with your ordinary hotkeys if you only want to customize a few.
Right now it overwrites every hotkey that you put in there, so you put the E hotkey in there it replaces (and deletes forever) your old E hotkey. Hence I am not publishing an alpha release for everyone yet because I don't want to ruin someones hotkeys. I forked it from the MoreHotkeyLayouts mod that has a neat function that saves your old hotkeys the first time you run the mod, but I still need to make sure that is working and stable.
Future idea
Anyone else obsessed with hotkeys? Feel free to share your thoughts.
As long as you understand that you need to take a backup of your Game.prefs file I'll gladly give you access.
Always open to collaborate if you want to hep out
More mods to come.
// FreadyFish
@sladow-noob Haters gonna hate! Juust kidding, I appreciate the honest feedback. It started like that, most important ones. But then I just felt everything is important. Many times I've been chasing down T1 artillery only to realize they were Seraphim and can retreat over water. Now I know exactly what to expect. But hey, I salute anyone who can keep track of all those details with the traditional icons. The idle overlay will probably get two versions in the end, blinking and some simple flag much like the idle enginers mod, and ofc an option to chose either or none. The blinking is rather slow and syncronized so not super annoying, but a work in progress still.
I'm working on a color coded strategic icons mod. Similar exists, but only uses the color coding for some structures basically.
The general idea:
I also integrated overlays to show the count of silos, idle engineers etc. Idle engineers / factories blink when idle. It's a bit annoying perhaps. Ideas welcome.
Thought I'd share to see if anyone is interested, have ideas and maybe someone even want to help me finish it because I ran out of steam a bit with quite little left now.
TODO:
It is working if you want to try it. I use it for all my games, but units use the Redux icons when selected/hovered and the hover/seabed units become invisible when selected.. as of right now.
https://github.com/FreadyFishFAF/ColorCodedStrategicIcons
If you don't know what git/github is: Just click the green "<> Code" button, download as zip, and unzip it in your mods folder like: C:\Users\YOURUSERNAME\Documents\My Games\Gas Powered Games\Supreme Commander Forged Alliance\mods\ColorCodedStrategicIcons\ (subfolders/files in here)
Let me know if you have any issues, have ideas or want to help out. If you havent worked making icons before I can help you get started, its basically like working in paint (but you use GIMP). Although, ask me, really, and show the workflow and some limitations that you need to know about
As a teaser I'll also let you know I have 36 mods running most of which I have customized (a lot) to add new functionality and to make them work seamlessly together. Eventually I hope to release them all as a complete package. More about that later, but, if any cool modders (I know there are a lot of you out there) want to collaborate on something like "the official FAF mega mod package" (name can be discussed lol), then let's talk.
// FreadyFish
Problem connecting to games. It gets stuck on the "Setting up automatch" and crashes, with "You caused a problem" and the ensuing timeout.
Any ideas?
See file for full log advanced-ice-adapter.log
First and last part of advanced-ice-adapter.log:
18:42:37.187 [main] INFO c.f.i.d.TelemetryDebugger - Open the telemetry ui via https://ice-telemetry.faforever.com/app.html?gameId=21064496&playerId=487490
Eki 26, 2023 6:42:37 �S com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @548a102f'
18:42:38.100 [main] INFO c.f.i.u.TrayIcon - Created tray icon
18:42:38.101 [main] INFO c.f.i.IceAdapter - Version: SNAPSHOT
18:42:38.102 [main] INFO c.f.i.g.GPGNetServer - Using GPGNET_PORT: 51544
18:42:38.108 [main] INFO c.f.i.g.GPGNetServer - Generated LOBBY_PORT: 48442
18:42:38.109 [main] INFO c.f.i.g.GPGNetServer - GPGNetServer started
18:42:38.110 [main] INFO c.f.i.r.RPCService - Creating RPC server on port 51543
18:42:38.112 [main] INFO c.n.j.TcpServer - TCP Server started.
18:42:38.113 [main] INFO c.f.i.d.TelemetryDebugger - RPC started
18:42:38.335 [Thread-5] INFO c.n.j.SocketListener - New client connected on port 51556
18:42:38.337 [Thread-5] INFO c.f.i.d.TelemetryDebugger - RPC connected
18:42:38.338 [JJsonPeer] INFO c.n.j.JJsonPeer - JJSON Peer listening
18:42:38.341 [JavaFX Application Thread] INFO c.f.i.d.DebugWindow - Created debug window.
18:42:38.353 [JJsonPeer] DEBUG c.f.i.r.RPCHandler - LobbyInitMode set to auto
18:42:38.354 [JJsonPeer] INFO c.n.j.JJsonPeer - Sending Response:{"result":null,"id":0,"jsonrpc":"2.0"}
18:42:38.427 [WebSocketConnectReadThread-35] INFO c.f.i.d.TelemetryDebugger - Telemetry websocket opened
18:42:38.689 [JJsonPeer] INFO c.f.i.i.GameSession - Ice Servers set, total addresses: 3
18:42:38.690 [JJsonPeer] INFO c.n.j.JJsonPeer - Sending Response:{"result":null,"id":1,"jsonrpc":"2.0"}
18:42:39.385 [JavaFX Application Thread] INFO c.f.i.d.InfoWindow - Created info window.
18:42:41.689 [Thread-4] INFO c.n.j.JJsonPeer - Sending Notification:{"method":"onConnectionStateChanged","params":["Connected"],"jsonrpc":"2.0"}
18:42:41.689 [Thread-4] INFO c.f.i.g.GPGNetServer - GPGNetClient has connected
18:42:41.713 [Thread-11] DEBUG c.f.i.g.GPGNetServer - Listening for GPG messages
18:42:41.729 [Thread-11] DEBUG c.f.i.g.GPGNetServer - New GameState: Idle
18:42:41.730 [Thread-11] INFO c.f.i.g.GPGNetServer - Sent GPGNet message: CreateLobby 1 48442 commanderbambi 487490 1
18:42:41.734 [Thread-11] INFO c.f.i.g.GPGNetServer - Received GPGNet message: GameState Idle
18:42:41.735 [Thread-11] INFO c.n.j.JJsonPeer - Sending Notification:{"method":"onGpgNetMessageReceived","params":["GameState",["Idle"]],"jsonrpc":"2.0"}
18:42:41.952 [Thread-11] DEBUG c.f.i.g.GPGNetServer - New GameState: Lobby
18:42:41.953 [Thread-11] INFO c.f.i.g.GPGNetServer - Received GPGNet message: GameState Lobby
18:42:41.953 [Thread-11] INFO c.n.j.JJsonPeer - Sending Notification:{"method":"onGpgNetMessageReceived","params":["GameState",["Lobby"]],"jsonrpc":"2.0"}
18:42:42.034 [JJsonPeer] INFO c.f.i.IceAdapter - onHostGame
18:42:42.035 [JJsonPeer] INFO c.f.i.g.GPGNetServer - Sent GPGNet message: HostGame neroxis_map_generator_1.9.0_vte3ulqcewrvm_bafa
18:42:42.036 [JJsonPeer] INFO c.n.j.JJsonPeer - Sending Response:{"result":null,"id":2,"jsonrpc":"2.0"}
18:42:42.831 [ForkJoinPool.commonPool-worker-1] WARN c.f.i.u.PingWrapper - Failed to ping coturn1.faforever.com
18:42:48.548 [JJsonPeer] INFO c.f.i.IceAdapter - onConnectToPeer 28275 Guy, offer: true
18:42:48.552 [JJsonPeer] DEBUG c.f.i.i.Peer - Peer created: 28275, Guy, localOffer: true
18:42:48.554 [JJsonPeer] DEBUG c.f.i.i.Peer - Now forwarding data to peer Guy(28275)
18:42:48.556 [Thread-13] INFO c.n.j.JJsonPeer - Sending Notification:{"method":"onIceConnectionStateChanged","params":[487490,28275,"gathering"],"jsonrpc":"2.0"}
18:42:48.564 [JJsonPeer] INFO c.f.i.g.GPGNetServer - Sent GPGNet message: ConnectToPeer 127.0.0.1:49478 Guy 28275
18:42:48.565 [JJsonPeer] INFO c.n.j.JJsonPeer - Sending Response:{"result":null,"id":3,"jsonrpc":"2.0"}
18:42:48.574 [Thread-13] INFO c.f.i.i.PeerIceModule - ICE Guy(28275): Initiating ICE for peer
18:42:48.575 [Thread-11] INFO c.f.i.g.GPGNetServer - Received GPGNet message: Disconnected 28275
18:42:48.575 [Thread-11] INFO c.n.j.JJsonPeer - Sending Notification:{"method":"onGpgNetMessageReceived","params":["Disconnected",["28275"]],"jsonrpc":"2.0"}
Eki 26, 2023 6:42:49 �S org.ice4j.ice.harvest.MappingCandidateHarvesters initialize
INFO: Initialized mapping harvesters (delay=504ms). stunDiscoveryFailed=false
18:42:49.108 [Thread-13] INFO c.f.i.i.PeerIceModule - ICE Guy(28275): Gathering ice candidates
18:42:49.111 [Thread-13] INFO c.f.i.i.PeerIceModule - Using official ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp, 94.130.225.99:3478/udp]
Eki 26, 2023 6:42:49 �S org.ice4j.util.Logger log
INFO: Gathering candidates for component faData.RTP. Local ufrag 13dsr1hdmae2ok
18:42:49.435 [JJsonPeer] INFO c.f.i.IceAdapter - onConnectToPeer 413575 Alcaloz, offer: true
18:42:49.435 [JJsonPeer] DEBUG c.f.i.i.Peer - Peer created: 413575, Alcaloz, localOffer: true
18:42:49.435 [JJsonPeer] DEBUG c.f.i.i.Peer - Now forwarding data to peer Alcaloz(413575)
18:42:49.437 [JJsonPeer] INFO c.f.i.g.GPGNetServer - Sent GPGNet message: ConnectToPeer 127.0.0.1:49480 Alcaloz 413575
18:42:49.438 [Thread-19] INFO c.n.j.JJsonPeer - Sending Notification:{"method":"onIceConnectionStateChanged","params":[487490,413575,"gathering"],"jsonrpc":"2.0"}
18:42:49.438 [JJsonPeer] INFO c.n.j.JJsonPeer - Sending Response:{"result":null,"id":4,"jsonrpc":"2.0"}
18:42:49.440 [Thread-19] INFO c.f.i.i.PeerIceModule - ICE Alcaloz(413575): Initiating ICE for peer
18:42:49.441 [Thread-19] INFO c.f.i.i.PeerIceModule - ICE Alcaloz(413575): Gathering ice candidates
18:42:49.442 [Thread-19] INFO c.f.i.i.PeerIceModule - Using official ice servers: [94.130.225.99:3478/tcp, 94.130.225.99:3478/udp, 94.130.225.99:3478/udp]
Eki 26, 2023 6:42:49 �S org.ice4j.util.Logger log
INFO: Gathering candidates for component faData.RTP. Local ufrag btnle1hdmae3j1
18:42:49.501 [Thread-11] INFO c.f.i.g.GPGNetServer - Received GPGNet message: Disconnected 413575
18:42:49.501 [Thread-11] INFO c.n.j.JJsonPeer - Sending Notification:{"method":"onGpgNetMessageReceived","params":["Disconnected",["413575"]],"jsonrpc":"2.0"}
18:42:51.455 [Thread-13] DEBUG c.f.i.i.PeerIceModule - ICE Guy(28275): Sending own candidates to 28275, offered candidates: host(udp)
18:42:51.455 [Thread-13] INFO c.n.j.JJsonPeer - Sending Notification:{"method":"onIceConnectionStateChanged","params":[487490,28275,"awaitingCandidates"],"jsonrpc":"2.0"}
***A LOT CUT OUT, TOO LONG OTHERWISE. SEE ATTACHED FILE FOR COMPLETE LOG ***
INFO: Closing.
at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:700)
at com.faforever.iceadapter.ice.Peer.faListener(Peer.java:81)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.nio.channels.AsynchronousCloseException: null
at java.base/sun.nio.ch.DatagramChannelImpl.endRead(DatagramChannelImpl.java:523)
at java.base/sun.nio.ch.DatagramChannelImpl.trustedBlockingReceive(DatagramChannelImpl.java:677)
at java.base/sun.nio.ch.DatagramChannelImpl.blockingReceive(DatagramChannelImpl.java:635)
at java.base/sun.nio.ch.DatagramSocketAdaptor.receive(DatagramSocketAdaptor.java:240)
... 3 common frames omitted
19:24:45.512 [Thread-74] DEBUG c.f.i.i.Peer - Error while reading from local FA as peer (probably disconnecting from peer) dipollwody(348482)
java.net.SocketException: Socket closed
at java.base/sun.nio.ch.DatagramSocketAdaptor.receive(DatagramSocketAdaptor.java:252)
at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:700)
at com.faforever.iceadapter.ice.Peer.faListener(Peer.java:81)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.nio.channels.AsynchronousCloseException: null
at java.base/sun.nio.ch.DatagramChannelImpl.endRead(DatagramChannelImpl.java:523)
at java.base/sun.nio.ch.DatagramChannelImpl.trustedBlockingReceive(DatagramChannelImpl.java:677)
at java.base/sun.nio.ch.DatagramChannelImpl.blockingReceive(DatagramChannelImpl.java:635)
at java.base/sun.nio.ch.DatagramSocketAdaptor.receive(DatagramSocketAdaptor.java:240)
... 3 common frames omitted
19:24:45.513 [Thread-12] DEBUG c.f.i.i.Peer - Error while reading from local FA as peer (probably disconnecting from peer) omega22(403305)
java.net.SocketException: Socket closed
at java.base/sun.nio.ch.DatagramSocketAdaptor.receive(DatagramSocketAdaptor.java:252)
at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:700)
at com.faforever.iceadapter.ice.Peer.faListener(Peer.java:81)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.nio.channels.AsynchronousCloseException: null
at java.base/sun.nio.ch.DatagramChannelImpl.endRead(DatagramChannelImpl.java:523)
at java.base/sun.nio.ch.DatagramChannelImpl.trustedBlockingReceive(DatagramChannelImpl.java:677)
at java.base/sun.nio.ch.DatagramChannelImpl.blockingReceive(DatagramChannelImpl.java:635)
at java.base/sun.nio.ch.DatagramSocketAdaptor.receive(DatagramSocketAdaptor.java:240)
... 3 common frames omitted
19:24:45.514 [JJsonPeer] WARN c.f.i.r.RPCHandler - Close requested, stopping...
19:24:45.514 [JJsonPeer] INFO c.f.i.IceAdapter - close() - stopping the adapter
19:24:45.515 [JJsonPeer] INFO c.f.i.g.GPGNetServer - GPGNetServer stopped
19:24:45.515 [Thread-11] DEBUG c.f.i.g.GPGNetServer - No longer listening for GPGPNET from FA
java.net.SocketException: Socket closed
at java.base/sun.nio.ch.NioSocketImpl.endAccept(NioSocketImpl.java:689)
at java.base/sun.nio.ch.NioSocketImpl.accept(NioSocketImpl.java:762)
at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:675)
at java.base/java.net.ServerSocket.platformImplAccept(ServerSocket.java:641)
at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:617)
at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:574)
at java.base/java.net.ServerSocket.accept(ServerSocket.java:532)
at com.nbarraille.jjsonrpc.SocketListener.run(SocketListener.java:36)
Eki 26, 2023 7:24:45 �S org.ice4j.util.Logger log
INFO: Failed to receive: java.net.SocketException: Socket closed
Eki 26, 2023 7:24:45 �S org.ice4j.util.Logger log
INFO: Failed to receive: java.net.SocketException: Socket closed