Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Official 4.2 Beta Release Thread
#1
<This thread is not for discussion, so please do not post here>

This thread is intended to provide an always updated indication of the latest available unreleased (beta) version of the product, for those folks who are interested in trying out the latest and greatest or who are desparate for some feature that has been added in preparation for an uncoming release.

A link will be provided to that most recent version, plus a 'confidence factor' from 0 to 100, indicating our belief of its level of readiness for use (which of course is also based on reports from you guys who used the previous one.) And there will be a list of bugs/fixes included since the last official release.

Beta releases will be in the .900 range. So the betas for 4.2 will be in the 4.1.900 range, to distinguish them from formal 4.1.x releases (which can be 4.1.1, 4.1.2, etc...)

Latest Version: [None]
Confidence Level: N/A
Download Link:

4.2 is just released and there is no current beta version. This thread is being closed and left around for archival purposes. A new one will be started for 4.3.
Dean Roddey
Software Geek Extraordinaire
#2
Version 4.1.900 is released. Starting with these 4.2 betas, the beta releases will be in the .900 range. This leaves the lower numbered revision levels for me to go back to the 4.1.0 code base and put out any required tweaks of that code base for formal fix releases before 4.2 comes out. Hopefully this will work out well, but we'll see.

This first 4.2 beta introduces support for IP Version 6, which is the next generation internet protocol. This is not something that you should have to worry about or do anything to make happen or not happen. It should be all auto-magical, exception for some situations for device driver writers. I've tested it out here and it seems to all be working fine, but it is a pretty important change and there may be something I missed that will show up in other people's networks that are configured differently from mine.

So if you notice any suspected network wierdness, let us know so that those things can be investigated.

The changes for this release are:
  • Do all the tedious work to support IPV6, and all the backwards compatibility issues that entails.

  • Add a means to access the attributes of JSON parser nodes by index, so that you can get to attributes without knowing ahead of time the names of the values. There is now a GetAttributeAt(anchor, index, key, value) method. It will fill the key and value parameters with the info for the attributes at the given index.

  • Watch for no actual rooms being configured when an auto-generation is requested. If so, just warn that no rooms are configured and do nothing.

  • Save and restore the last auto-generation scope name in the auto-generation dialog.

  • The equality check on the room configuration data isn't correct, so it doesn't catch that versions that have different counts of rooms or templates are different. That means that if you delete some rooms, and hit Close, it doesn't catch that changes have been made and just exits without confirmation.
Dean Roddey
Software Geek Extraordinaire
#3
Vresion 4.1.901 is posted. This one includes a couple small improvements, a small fix, and support for Sonos zone players as standard CQC media renderers. Since the driver is a standard media renderer driver it will not understand any Sonos specific stuff. It just treats the box as a massive audio player device.

You should make sure that the Sonos has access to the files as they are exposed via whatever media repository you use, which will generally be a file share. If the Sonos can be made to play them via their interface, and it's seeing them via the same file share that you have the media repository reporting them within, then all should be ok.

I only have one of them, so I can't say if things will work correctly with more of them, or if some particular settings you might have set up on them might interfere. We'll see when we see and look into it.

The changes are:
  • Add some extra functionality to the UPnP framework and generic UPnP media renderer driver, in order to provide some extra flexibility needed by some devices.

  • Add a new Sonos driver based on the UPnP media renderer driver. It's a standard CQC media renderer driver, so knowledge of Sonos specific things. It treats the device as a passive audio player.

  • We could (now that we have the new extra widget colors) have an option on check box widgets to have the true state use the extra colors for text and the false state use the regular colors, so that the check box text color can change depending on the status of the check box widget.

  • We could (now that we have the new extra widget colors) have an option on boolean text widgets to have the true state use the extra colors for text and the false state use the regular colors, so that the text color can change depending on the status of the boolean widget.

  • The path to the random category selection popup (invoked from the playlist mode popup) is not being updated during auto-generation, so it's pointing to the wrong one which hasn't been appropriately updated.

Dean Roddey
Software Geek Extraordinaire
#4
Version 4.1.902 is posted. It just has one small change, to add some logging to the installer, so that we can better diagnose any wierdness related to IPV6 support that might happen during the installation.
Dean Roddey
Software Geek Extraordinaire
#5
Version 4.1.904 is posted. This one has a couple small fixes, a couple improvements to the Weather Underground driver, and primarily includes support for 'grouping' widgets in the Interface Editor, so that related widgets can be grouped and always treated as a single thing in terms of selection. See the end of this post for some info on how they grouping works.

Grouping isn't something that would ever interfere with the end user in any way. It only matters to the Intf. Editor. But if I made any mistakes the grouping might get whacked in some way, so keep an eye out for any behavior where you think it's not following the grouping rules laid out. Worst case, if you need to, just select everything and do an Ungroup to ungroup everything and you'll be back to ground zero again, but of course try to help me figure out what is going wrong first, so save away the template first so that you can send it to me for evaluation and try to remember what the circumstances were where it went awry. The problem that would occur is that somehow some non-grouped widget gets into a group, or some grouped widget gets somehow out of the group. It woudln't keep anything from working in terms of the viewer, but might cause the editor to hiccup and would cause grouping to not work as it should. It was a pretty fiddly addition that had to be taken into account in a number of places, so I could have gotten something wrong.

I might provide some action commands that work on a group, such as hide/show a whole group at a time, but that's not done currently.
  • The streaming code for IP addresses was broken in the addition of IPV6 support. The format streamed out wasn't the same as the format streamed in. This was overall irrelevant since they are almost never streamed out anyway, they are created on the client and server using host name and ip port. However the CQSL repo actually passed one from the server to the client during the upload of a ripped CD. That would fail since the repo manager wouldn't be able to stream it back in correctly.

  • Also, related to above, change the CQSL repo to just send back a host name and ip port instead of a pre-built IP end point, since this way the repo manager can make its own and get one appropriate for the protocols installed there on the machine the manager is running on, not one built on the server according to the server's available protocols.

  • Add grouping support to the Interface Designer. This is a pretty big change internally, but not that big a one to the end user, unless you were really waiting to use it. If you don't use it it won't really affect you. See below for details on how things work now with groups.

  • The Weather Underground driver is using the wrong field for last observation time. It's using the local time field, so the last observation info is incorrect.

  • Update the Weather Underground driver to support 8 days worth of forecast fields. Also add a WindGust field.

    [*}And add a new driver prompt to the Weather Underground driver to let you set the number of minutes between polls to the server. So you can go down as low as once a minute if your license allows for that. It will default to 30 minutes for driver instances already installed, which is what it was before, so it won't change anything unless you go back and do a reconfigure on the driver.

  • There's an error in the auto-generated popup that lets you select the playlist mode. If you select random category and then select the Category button to select a category, it's passing the moniker of the player driver in a query for the available categories, not the repository driver associated with the player driver. So that command fails. And also the driver monikor being passes into the selection popup as an action parameter wasn't quoted either, so that also caused an error.


How Grouping Works
  • The widget pallete will indent the members of a group. The first widget in the group will be normally displayed but the rest will be indented.
  • If you now click on any widget that's in a group, all of the widgets of that group are automatically selected. You can't select individual widgets in a group, whether done directly or via the widget palette.
  • If you double click, all of the group members will be selected, but you'll still get the attributes dialog for the one you actually double clicked on.
  • If you right click, you'll select all the group members, but any popup edit menu operations that pertain just to a single widget will operate on the one you actually clicked on (which is different from now, where it disables the items related to a single widget.)
  • In the case of the right click (pop up menu) and then selecting Delete, it will ask if you want to delete the actual widget you hit, or the group as a whole.
  • To size/move an individual widget within a group, you can hold down Ctrl, and then click on the widget's center or edges/corners and move or resize it. If you don't hold down Ctrl, it will act as it does now when multiple widgets are selected, and will (if you hit a non-grouped one) just make it the only selected one and let you resize it. If you hit a grouped one and don't hold Ctrl it will only allow movement of the group as a whole, no sizing.
  • Those operations that act on all selected widgets (such as the little utility bar commands) will only work on the group as a whole because you can't selected individual members of the group.
  • Grouping is single level, no nesting. If you have multiple groups selected and do Group, they will all be grouped together into a single group.
  • All grouped widgets are forced to be in contiguous z-order, based on the z-order of the lowest one. So the one furthest back is considered the root member of the group (the first one) and all the others are moved as necessary into contiguous slots following it (maintaining their original relative orders.)
  • Moving in the z-order, groups are treated like single widgets, i.e. if moving a widget forward and it's just before a group, it'll be moved past the end of the group, not into the group. If you do it on the first member of a group, the whole group is moved (with the same rules as above.) If you do it on a non-first member of a group, then it moves the widget within the group only. So nothing ever moves into or out of a group when doing z-order movement via the popup menu. To add something to a group, just select it and the group and group them together. To move something out of a group, you have to ungroup it, deselect the ones you want to remove, then group again.
  • The first member of a group can have a group name. It's on the Base tab where you set the widget name as well. Only the first member of the group holds the group name. If you delete the first member, the name is moved to the new first member. The group name and the index within the group are now shown on the palette summary screen for widgets that are in groups.
Dean Roddey
Software Geek Extraordinaire
#6
Version 4.1.905 is posted. This one has a couple fixes for UPnP stuff and the media list browser, plus some improvements for the action editor and support for pinging hosts on the network, which will likely be used by some folks to create network monitoring drivers and presence sensing and whatnot.

The changes are:
  • When you click on the media list browser widget at the title set level, it's supposed to either send out an OnSelCollect if there is only one collection in the title set, or an OnSelect for the title set selected and then go down into the title set to display the multiple collections. But, it's using the index of the item you clicked, not the index of the item plus the base index of the current top of list item. So this makes it often not do the right thing because it's looking at the wrong title set unless you are on the first page's worth of titles.

  • We should move to a background UPnP listener thread to watch for device arrival/departure events, instead of doing it inline in the threads that need to access devices. The operation takes a while and that causes issues when used in drivers because it holds them up for long periods of time. It isn't needed in something like the UPnP driver install prompt, but CQCServer should turn it on so that UPnP drivers can check to see if their devices are even out there before trying to create the device object (which will do a search for the device that can take a while if it's not out there.)

  • There was also an issue in the UPnP code that could cause problems if the device isn't available. I misunderstood something and could set a null pointer in some cases if the device isn't found. This likely caused an immediate exception which would be caught and the driver recycled, but it could have possible caused other wierdness as well. Live and learn.

  • Add a new method to the CML Time class, in the form "IsDiffGreater([In] Card8 EarlierTime, [In] Card4 MaxSecsDiff) Returns Boolean". So it will take the difference between this time object's time stamp and the passed one (which is assumed to be earlier) and convert to seconds. If that difference is greater or equal to the max seconds difference passed, it will return True, else False. This makes it easy to compare a stored 'last whatever' type of time stamp to a time object that you are always updating to the current time, to see how much time has passed. If the passed in time is later, the diff will be considered zero.

  • Implement support for doing socket pings, and expose that via a new SockPinger CML class. It's well designed to work as would be needed for device drivers that want to track the presence of hosts on the network by way of periodic pings.

  • In the action editor, there are other commands besides FieldWrite that should allow you to select a field value interactively, if the field information has already been provided in the field name parameter. Add support for it to the FieldWrite2, WaitFldValue, and TimedFldChange commands.

  • In this cases in the action editor where a separate device and field are selected, if the device parameter is already set, allow the field to be selected from a list of fields for that selected device. Currently this is the FieldWrite2 and FieldRead2 commands.
Dean Roddey
Software Geek Extraordinaire
#7
Version 4.1.906 is posted. This has a number of fixes, so I wanted to go ahead and get it out there before I went off on the change to make the storage of triggered/scheduled events hierarchical. That may take a little bit so I figured get these changes out first.

This one has mostly stuff related to the event trigger system and the event filters. The event filters have always been kind of hard to navigate because there are a lot of variations. The filter dialog now changes the prompts for the two filter values based on the type of filter you select, to let you know what is expected. This makes it a lot easier to use.

It also standardizes the From vs. For terminology. From now means from a device, so these are all looking for a device. The For ones are for some specific field. This was inconsistent before. Existing configured event filters will be updated appropriately to match this new scheme.

There were also some bugs in the stuff that sends out the standard pre-fab event triggers in the CML world, so those were fixed. And the Elk driver wasn't correctly sending out some of them as well. I presume no one has bothered using these standard events yet since it doesn't seem like they would have worked for most folks but no one has been complaining about them?

Note that I also got rid of the Xap stuff in the format of the event trigger info that gets sent out. This should be backwards compatible unless you are directly accessing fields in the header block, which I don't think anyone would be doing. Those values are always accessed in other ways. The trigger type specific block (the second one) is the same so you wouldn't be affected there.
  • Add a new type of standard event trigger, for reporting presence events. Drivers can send them when they sense that entities that they are tracking have shown up or gone away. It provides the source device that sent the trigger, a type value which is "enter" or "exit" to indicate if the tracked entity has entered the system or left it, an arbitrary ID information value to indicate what entity changed state, and an area value to indicate what area the entity entered or exited. There is a new method to send them out, and new triggered event filters to filter for them. The event action target has a new command to extract the type and ID values if the incoming trigger is a presence event.

  • Get the Xap stuff finally out of the event trigger system, and just change the format to be our own sort of format, though it's still in the same basic layout, and nothing that should break any existing apps. The only thing that might be breaking is looking at the header block's values directly (source and class), but those are always available via RTVs or other more convenient ways, so it's doubtful anyone would be doing that.

  • The code that sends out field change triggers for fields configured with them is not checking the size of the field and truncating the value if it is long. Probably this has never been an issue but best to make sure. It will add the trunc=yes value if that happens. This is important since these are sent as datagrams, and also because everyone consumes them so it's silly to pass around large values.

  • Update the triggered event filter editing dialog so that provides filter type context sensitive prompts on the two filter values. This will make it much more self documenting. Also, though it's painful, correct some inconsistencies that have crept in. All of the 'For' type ones now refer to devices. All of the From type ones refer to fields. Update any already created filters to match this standard. This will make it easier to keep up with.

  • Low level emergency popups are being supressed when in service mode, so if something is really fundamentally misconfigured or awry and one of these happens, it just leaves the program blocked because there's no way to display the popup from a service, and the code is waiting for this invisible popup to be acknowledged which will never happen. Instead it should just log to a log level log file in the same directory as the executable (can't really depend on finding anything else reliabily in such a fundamental scram type of situation.) It will be named the same as the exectuable but with a _CIDLLog.Txt extension. This will provide the info necessary to diagnose such problems when they happen in services.

  • The lighting simulator driver isn't sending out load change event triggers.

  • The code in the CML driver base class that sends out the standard pre-defined event triggers was sending a load change for motion and zone changes, so that meant that all the drivers that used those were sending out the wrong kinds of triggers. Oy! Obviously no one is using that stuff yet since no one had complained.

  • The Elk isn't sending out load change event triggers when you change the load by writing to the PLC field. The reason being that it has already stored the value, so when the message comes in later confirming the lighting load happened, it doesn't look like a change to the driver since it's the same value as was stored during the field write. So we just let the handler of the incoming PLC change messages send out a trigger even if it doesn't think it's a change in the field's state. That could theoretically send out a redundant on or off trigger, but that's a small worry compared to not getting triggers sent. Since the returned status message is the only ack, we can't just blindly send it out from the field change handler, since we don't know for sure if it happened or not. We could use a wait for the change message as a positive ack of the field write, but that could break existing systems if it threw an exception now when it hasn't in the past.

  • Get a first cut of the Denon 1912 A/V Receiver driver into this release.
Dean Roddey
Software Geek Extraordinaire
#8
Verions 4.1.907 is posted. It's got a couple fixes and one pretty nice expansion of functionality in the IR department.
  • Add a volume adust field to the Denon 1912 driver. Also update it to support semantic fields types so it can be used with the theme stuff. And make some other improvements from the previous driver it was started from. It was polling slowly but the poll also has to pick up async notifications, so it would be slow to pick those up as well. So set the poll time fast and use a time stamp to do the periodic round robin active poll.

  • In the recent changes for IPV6, the datagram socket class was accidentally updated to automatically bind locally in the constructor that previously didn't do a binding (waiting for it to be done later.) This would cause it to show as bound even though it wasn't marked as so because the binding was being done in a lower level constructor than where that information is kept.

  • Add to the generic trigger drivers (and the RTI RP6 which is really the same driver with a different manifest) a new driver prompt that lets the user indicate a separator character. If set, then any incoming trigger strings are split on this character. The first part is used to match the string to a configured action. The second part is passed to the invoked action as an action parameter. The action gets two parameters, the first is the title of the action being invoked, and the second is this second part of the trigger text. The action can use this value to do whatever it wants to do. This allows you to create generic triggered actions and then just pass values into them to be acted on, instead of having to create a new action for every variation you want.

  • There is a bug in the text parsing code of the time class. Internally the hours, minutes, and seconds are all zero based, so some -1 adjustments have to be made when parsing formatted times. But it was incorrectly adjusting 24 hour, minute, and second values downward when they were already naturally zero based, so they were coming out one too low.


Wrt to the IR stuff above, it works like this, just to give an example. If you set the separator character during driver install to be the # character, you could create an action called Set TV Channel, and then train it to respond to the string \TV\SetChannel. You could then invoke that action by sending a string like \TV\SetChannel#201. The driver would split the two bits apart, and use the \TV\SetChannel part to find the action to run. It would then pass the 201 part of the text to the action as the second action parameter.

The action could use that to set the TV to channel 201 using whatever is appropriate for that TV. You could of course make it even more flexible and do something like this

\TV\SetChannel#MasterBR 302

The action could expect to get both a driver moniker and a channel number, assuming you had more than one TV o the same type in the house, for instance, and use the first half of the value to know which driver to write a field of, and it would pass 302 as the value to set the channel.

So it's quite flexible and allows you to set up single triggered actions that can be 'parameterized' instead of having to have one action to set channel 100, another to set channel 102, and so forth. And of course you could use it in many other similar ways.

It only works the generic trigger type drivers, since they just send an ASCII string and so are amenable to this type of thing. The other IR drivers won't support it and don't ask for any separator character during installation. Drivers like the UIRT or GC-100 are sending literal IR flasher on/off values so they can't really work like this.
Dean Roddey
Software Geek Extraordinaire
#9
Version 4.1.908 has been posted. I earned my meager wages on this one. A lot of underlying infrastructure improvements, mostly driven by the need to really get the UPnP stuff up another big notch.

The biggest thing in this one i guess is a second Sonos driver which is for folks who aren't interested in using it as a standard CQC media renderer but who want to still interact with it via CQC. You can also now mark image files and do a copy and then paste them into the CQC image repository management dialog, as a quicker way to get images into the repository, which I'm sure a lot of folks will appreciate.

I will get preliminary docs for the Sonos driver done here in a bit. I haven't had anything but a muffin today and I'm about to fall over from hunger so I need to grab a bite.
  • The last parm of the XML tree parser's NextPrevChild() method should be an InOut parm, not just Out.

  • Implement a standard media renderer driver for the Dune HD series of media players.

  • Add a new "VerbosityChanged([In] VerboseLvls NewLevel)" method to the CML driver base class. This is an optional one that you can override if you want to be notified if the verbosity level changes. For drivers that use helper classes that they may want to also log based on verbosity, this avoids having to constantly update these helpers to make sure they have the right verbosity. It will also be called if you change the verbosity yourself within the driver, which normally you'd never do but be aware of that and the potential circularity issues.

  • Implement a lot more UPnP functionality, including the ability to handle eventing of device info and provide implementations of a lot of the proprietary services of the Sonos zone players. This is going to actually require some fundamental changes even lower down as well, and some large changes in the existing UPnP framework to make it much better.

  • Implement a first cut of a Sonos specific Zone Player driver. This one has a lot of functionality already, though I'm sure that there will be more to come. I just wanted to get what I've got out there for people to comment on. I'm sure it'll have quirks that need addressing.

  • The driver install wizard panel for IP connections isn't preventing modification when the manifest indicates the connection info is not editable.

  • Add rounding methods to the CML Float4 and Float8 methods. They are Round([In] BaseInfo.UpDnClosest Type), where the values for type are UpDlClosest.Closest, UpDlClosest.Up, or UpDlClosest.Down.

  • Add the abilty to paste files into the file open dialog. For now, just expose it in the Intf. Designer's image management dialog incarnation, so that folks can paste images into the image repository, instead of using our current more clunky scheme. You can mark files and do a copy, then Ctrl-V them into the list. It will pop up a dialog that shows the progress and reports on the success or failure of each file as it is uploaded. No hierarchy will be inferred from the files being pasted. They will all be put into the target scope you paste into.

  • In the rare cases when some low level error occurs and the low level popup comes up, we want to get as much info as possible from the user as easily as possible, so put a Copy Info button on that popup to copy it to the clipboard so that they can easily past it into a forum post or e-mail. Kind of a pain since it has to be done down at the fundamental level, but it's one of those things that pays off repeatedly long term.

  • Add Action A, Action B, Action C, and Action D values to the TIVO driver's IRCode field, since these are now supported in more recent models.

  • The IV control driver should allow you to push the IV into Full Screen mode, which currently it doesn't support.

  • CML JSON parser nodes should provide some debug info in the CML IDE when selected, to aid in JSON based development. It can show whether it's initialized or not, what its index is in the parent node, it's name, and the number of children and attributes it has.

  • On multi-monitor displays, the dialog box doesn't position right when the owning windows is not on the primary monitor, because the 'make sure it's visible' code isn't multi-monitor aware so it thinks the dialog is popping up off screen and moves it back on screen (as it perceives it) which pushes it back to the main monitor.
Dean Roddey
Software Geek Extraordinaire
#10
Version 4.1.909 is posted. Mostly some new stuff for the Sonos specific driver, but also some fixes and improvements and some new action commands that may come in handy for some things.
  • In some cases, when installing a UPnP based driver, the name of the actual device found is not what we want to display to the user as the name of the thing being selected. The Sonos is an example. The CQC media renderer version of that driver looks at UPnP media renderer devices, but the zone player version of the Sonos driver looks at the root Zone Player device, which doesn't have the user assigned name associated with it. So we need a way to indicate in the UPnP connection info portion of the driver manifest a way for the UPnP driver install wizard panel to get other info for display. So add an optional service type and state variable name that the panel can use to set up a generic service of that type and query the named state variable to get the display value.

  • Add a new SetDblBrowserList command to the static h/v browser interface widgets. This allows you to query a pair of quoted comma lists from a driver, both in the same text blob, separated by a new line, and set them both on the list. So this is similar to SetBrowserList2, which lets you set you two sets via separate parameters, where the first is the displayed list and the second is kept in the background to hold data about each displayed item. But, in some cases, it's necessary to get both lists from a driver atomically in a single call. This command makes that easy to do via the backdoor command typically used to make such a query (the query driver text command.)

    NOTE: when you use the variable (into which you queryed the text from the driver) to pass into this command, use the "^1" format specifier or the standard expansion of the variable value will eat the new line and mess things up. It'll all look like a single, badly formed, quoted comma list if you don't do this.

  • The Sonos specific zone player driver should be setting the driver category to indicate it's a media player, so that it shows up as such when filtering in the driver selection dialog. Not media renderer, but media player.

  • Somewhere back there, when we changed the driver reconfiguration process to be asynchronous to the calling client, we also lost the automatic bumping of the reconfigured count driver stats field that is supposed to be done.

  • When in RIVA mode the volume knob widget fakes a reference to the position indicator image, because it currentlyjust preloads an image internally, but it can't do that for RIVA mode because it has to draw all images from the repository so that they will be sent to the RIVA client who will download them. But, the image it was pointing them to was invalidly formatted and couldn't be loaded. so just get rid of the whole trickery and just have the regular IV also load the image from the repo, which is hardly much of a performance difference since it's cached anyway. And this will leave us open later to allow the position image to be user selected.

  • Changes made a while back allowed for the opportunity to make the querying of available device drivers, and the filtering of the list thereof, which is done fairly often, to be considerably more efficient. Go ahead now and take advantage of that. In larger systems it would be a considerable gain.

  • Provide a new action command, Devices::FindDrivers(make,model,devcategory, vartofill), which will let you get a filtered list of available device drivers, in quoted comma list form, so that they can be loaded into a static list browser for selection by the user. The make, model and device category can each be empty if you don't want to filter on that particular criteria. The make and model can be regular expressions. The device categories are the ones used in the driver maniests, e.g. MediaRepository, LightingSystem, HVAC, etc...
Dean Roddey
Software Geek Extraordinaire


Possibly Related Threads...
Thread Author Replies Views Last Post
  Official 5.4 Beta Discussion Thread Dean Roddey 194 7,238 Yesterday, 10:06 AM
Last Post: karenlee
  Official 5.4 Beta Release Thread Dean Roddey 10 688 10-18-2018, 10:51 AM
Last Post: Dean Roddey
  Official 5.3 Beta Discussion Thread Dean Roddey 815 74,415 07-05-2018, 12:44 PM
Last Post: Dean Roddey
  Official 5.3 Release Thread Dean Roddey 27 4,057 07-05-2018, 12:44 PM
Last Post: Dean Roddey
  Official 5.2 Beta Discussion Thread Dean Roddey 244 60,409 10-14-2017, 07:57 PM
Last Post: Dean Roddey
  Official 5.2 Beta Release Thread Dean Roddey 13 6,121 10-09-2017, 06:49 PM
Last Post: Dean Roddey
  Official 5.1 Beta Discussion Thread Dean Roddey 453 143,074 05-16-2017, 03:45 PM
Last Post: Dean Roddey
  Official 5.1 Beta Release Thread Dean Roddey 28 14,379 05-12-2017, 05:44 PM
Last Post: Dean Roddey
  Official 5.0 Beta Discussions Dean Roddey 2,019 375,069 11-09-2016, 04:34 PM
Last Post: Dean Roddey
  Official 5.0 Beta Release Thread Dean Roddey 15 11,061 11-01-2016, 10:32 AM
Last Post: Dean Roddey

Forum Jump:


Users browsing this thread: 1 Guest(s)