Aurora 4x

Other Games => Quasar4x => Topic started by: Kyle on August 17, 2018, 12:42:59 PM

Title: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on August 17, 2018, 12:42:59 PM
As I mentioned in this post (http://aurora2.pentarch.org/index.php?topic=10122.0), I'm hoping to create a replica of Aurora4x that functionally behaves identically to the original version, as deterministically as possible. I've made progress since my initial post and would like to share some screenshots now, as well as a bit of info about my project.

Here are my objectives for the finished product:

A REPLICA As mentioned already, it should behave identically to the original version.  This means I should be able to load up Aurora4x and Quasar4x side by side, on identical database snapshots, and every action I take should have the same effect in both games.  Further, every control, every button, every piece of the UI should be present in the same location so that an experienced Aurora4x player will feel right at home and know where everything is and what everything does. The database is identical.  It contains all the same pregenerated names for systems, ships, commanders, and so on.

With all that said, note that I am not matching Aurora4x pixel for pixel.  I use a larger font wherever possible and a dark theme for eye comfort. The system map has a slight control layout adjustment but is still largely the same. Finally, and I know this will be a dealbreaker for many, but I've reverted to American English spelling.  I am not matching action for action either when a fix is necessary, for example in A4X searching by two traits in the Search Leaders tool doesn't seem to work correctly.  In Quasar4x, that is fixed, and stats are displayed for both abilities, not just ability A. It's hard to explain why I feel this is not breaking the don't-change-anything spirit of the project, but hopefully you see the reasoning behind it. 

FAST The primary inspiration for this project is to improve upon the incredibly slow speeds that turns in Aurora4x can take when things start to really get going.  I hope to improve turn times by 10x or more through in-memory database caching, parallel processing, and C++ optimizations where profiling suggests it's needed.  And of course by not using VB6.

PORTABLE The engine I use can compile for Windows, Linux, Mac, and tablets.  I use all of these regularly and I will definitely make sure they are all supported.  It should also be a bit more portable and future-proof than VB6.


FAQ:

Q. What engine and why?
A. Godot (https://godotengine.org).  It's portable and open source.  It is well optimized for GUI intensive applications, as compared to Unity which has slow and limited UI capabilities (16k maximum lines in a text window last I checked), and it renders everything every frame.  Godot is simple and straightforward, which is perfect for a game like this.  And Godot uses GDScript, a forgiving language that allows for quite rapid development.

Q. GDScript?  But... But... C#!
A. Never fear, this is another awesome thing about Godot.  It allows you to write any part of the program you desire in C# or C++.  So GDScript will be used where possible, and C++ will be used for intensive calculations where speed has become an issue.

Q. What database platform?
A. SQLite (https://www.sqlite.org/about.html).  Its open source, portable, and quite fast if used correctly (Group multiple inserts and updates in single transaction, for example).  It's super simple and straightforward, perfect for this kind of project and for fast development in general.

Q. Why not wait for Steve's C# version?
A. I have been, for years!  But I'm impatient!  Also, I am predicting Quasar4x will be closer to Aurora4x than Steve's C# version will be. I believe he has improvements and new features in mind, whereas I want to remake a classic that looks and feels like the original.  Also, it will be nice to have a project I can work on myself.  If and when Steve releases A4X C#, I'll continue with my project because I feel the C# version will be different enough to feel like Q4X will still be worth having around.

Q. Do you really think you can copy all the AI logic that goes on behind the scenes?
A. Perfectly? Nope, probably not even close, sadly, unless Steve changes his mind and gives me a peek.  I do have a process to ensure Quasar4x replicates Aurora4x's behavior however, which can be applied to the AI logic.  I take a snapshot of the database before and after I take a turn in Aurora4x and use a script to analyze what changed. I do the same with the UI controls as well.  Finally, when I run out of clues as to how the AI thinks, I guess I'll have to come up with something original, which can help keep the project fun!

Q. Are you gonna get tired of the project and give up?
A. Not gonna lie, it could always happen.  I might even give up tomorrow!  I'm a pretty determined and motivated person in general though.  It helps that this is a project I've been wanting to do for years now, and every time I thought about it, I had no doubts it was just what I wanted to do.  I play lots of Steam games so I shouldn't get burned out too easily on this.

Q. When--
A. When I feel like it.

Q. Do you have any collaborators?  Want any?
A. Nope, and nope, not for now anyway.  I'm OCD about everything being how I want it, so if something doesn't look like I made it myself, I'd probably ignore it, or at best copy paste parts of it in. If Steve wants to collaborate of course I would do that, but currently he isn't interested.  I'm fully prepared to be solo til the end and am fine with that!  This is a hobby project and so far I'm enjoying it.

Q. Why are you so dead set on making an exact replica with 0 enhancements?
A. I like Aurora4x pretty much exactly the way it is.  I don't think there's a thing I want to change. I think a lot of people are probably 95% happy with the existing game as well, and I doubt nearly that many would agree on a particular change, or that the change would actually be that good. Statistically, most ideas turn out to be bad. Also, adding embellishments can lead to ever increasing project time as the developer gets lost in the weeds.  An "exact replica" is a concise, finite, self explanatory, and reachable goal. 

Q. So, an Aurora4x clone.  Are you really not going to add anything more?
A. I do have a few pie-in-the-sky dreams of adding multiplayer and adding ever increasing depth to the AI.  I've always kind of wanted to make a game with computer components that seem human-like -- not in the species they are in game, but in how they play the game, as if another human were controlling their empire.  But for now, those are all just maybes.  I'm willing to bet by the time Quasar4x is completed I'll want a good long break.

Q. Why the name Quasar4x?
A. It's a name that isn't Aurora4x or Pulsar4x.

Q. Isn't this.. an insanely complex and daunting task?
A. Yep

Q. Hows your progress?
A. I'll try to keep this thread updated.

Q. Can I try it?
A. Sure. https://ozer0.itch.io/quasar4x.  New game parameters aren't implemented, just press Select and F3 after you run it. Be warned, the project is very much an early WIP.  An almost empty prototype.  It doesn't do much, and i mean *really* not much at all.  But it does contain all the updates I describe in this thread.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on August 17, 2018, 12:43:16 PM
Game Details:
Off-Topic: show
(https://i.imgur.com/1bLru8K.png)


Create New Game:
Off-Topic: show
(https://i.imgur.com/0TdzCy1.png)


System Map:
(https://i.imgur.com/xosv2HZ.png)

System Map - Body Info:
Off-Topic: show
(https://i.imgur.com/2ZVys74.png)


System Map - Sensors:
Off-Topic: show
(https://i.imgur.com/vOETkpm.png)


System Map - All Bodies:
Off-Topic: show
(https://i.imgur.com/6uOrLqG.png)


Colony Summary:
Off-Topic: show
(https://i.imgur.com/tpqBCqu.png)


Colony Summary - Environment:
Off-Topic: show
(https://i.imgur.com/iMsbBO3.png)


Colony Summary - Mining:
Off-Topic: show
(https://i.imgur.com/g43BAv7.png)


Colony Summary - Research:
Off-Topic: show
(https://i.imgur.com/PacIthU.png)


Colony Summary - Ground Units:
Off-Topic: show
(https://i.imgur.com/ETtQ1ZS.png)


Colony Summary - Teams:
Off-Topic: show
(https://i.imgur.com/FoQysAy.png)


Colony Summary - Industry:
Off-Topic: show
(https://i.imgur.com/2DNPdfA.png)


Task Forces:
Off-Topic: show
(https://i.imgur.com/0BuHNW2.png)


Class Design:
Off-Topic: show
(https://i.imgur.com/LOKR1aJ.png)


Ships:
Off-Topic: show
(https://i.imgur.com/0GG6OlP.png)


Fleet Orders:
Off-Topic: show
(https://i.imgur.com/cPxeoBS.png)


Commanders:
Off-Topic: show
(https://i.imgur.com/Coalgkv.png)



Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on August 17, 2018, 12:43:26 PM
Misc info about the screenshots:
- If you see '?'s scattered around, those are just my little TODO reminders to show that I have some more work to do on the immediate code. 
- Most buttons don't do anything. I am in the process of UI design and populating controls with data from the database
- I don't show them all but every tab in every window is fully designed!
- Quite a lot is functional.  For example on the leaders page, it really pulls from the database and displays all the info, and the info changes when you click a different rank or different officer.  The ability dropdowns in the search panel work and it displays leaders ordered by their stats, with your requested filters applied.
- The system map is very functional.  You can zoom in, out, pan, and most of the controls that dictate what is displayed are functional.



Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: MasonMac on August 17, 2018, 05:03:49 PM
Interesting project, hopefully it does get more attention. The source code being available may also mean that we get mods, yeet.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: MarcAFK on August 18, 2018, 01:01:42 AM
Modding Aurora has always been a dream of mine, mostly I want a way of tweaking the mechanics to work as a modern military simulator. However.... There might be other engines more suited for it :p
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on August 25, 2018, 09:26:47 PM
Progress update 2018 Aug. 25!

I've completed the UI layout for most if not all of the windows in the game, setting up the foundation to go back through them adding functionality.  I plan on making a couple passes through each of them, making them more functional with each pass. (Generally, information display and other low-impact functionalities will come first)

I've completed my first pass on the System View window.  Everything is calculated "for real", with just a couple exceptions (Star Type, Jump Point Survey details, tabs for 2nd through 4th stars)

(https://i.imgur.com/QsmrV7c.png)

The Jump points tab doesn't have much to show right now.  Here is the hierarchy tab (fully functional):

Off-Topic: show
(https://i.imgur.com/Z6kNQcB.png)


The options tab (fully functional):

Off-Topic: show
(https://i.imgur.com/BIwdi9K.png)


And the System Graphic tab (functional, and this was fun to code, a rare opportunity for graphics!):

(https://i.imgur.com/jz6bOWE.png)

And now, the part that really excites me:
I've gotten a first glimpse of what Quasar's exact speed improvements will be over Aurora4x, and I'm not disappointed!

Take a look at this:

(https://i.imgur.com/CyAXx18.gif)

Total time to load Quasar4x System View, which involves pulling all the star and system body data, doing calculations such as colony cost, formatting, and displaying: 

464 ms

For reference, here's Aurora4x, doing the same thing, on an identical database (literally the same schema and the same data in every table):

(https://i.imgur.com/HXxgTRr.gif)

5720 ms

Woohoo!!  Well over my arbitrary goal of a 10x improvement!

Changing options is much faster as well:

A4x:

(https://i.imgur.com/FJ5TnQR.gif)

Q4x:

(https://i.imgur.com/nVE1Sud.gif)



Musings on floating point calculations:

I've noticed that the rounding and general floating point calculations in Aurora4x can be really wacky.  For example, in the Auror4x System View, Mars is shown to have a mean orbital distance of 229m km, when Mars' actual orbital distance is 227.9m km.  This may or may not just be limited to the System View, but it led me to realize something very discouraging:  I had originally said I wanted my game to behave deterministically the same as Aurora4x and I know now that that will never quite happen because of the dreaded... Floating Point Calculations!  I'll never be able to match Godot's floating point math processor with VB6's, so differences are going to crop up everywhere and propagate like crazy.  Ships will deliver their goods a pulse earlier or later, causing economy and timing to skew, and who knows what else.  I need to be able to run Q4X and A4X side by side and make sure what happens in A4X happens in Q4X, but with floating point skew that wont be possible for more than a turn or two.  As far as I can figure, the best I will be able to do while I'm developing is to refresh the Quasar4x database from Aurora's database after every single turn to keep things in sync.  Ah well.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on August 27, 2018, 12:22:42 PM
Here is the Race details page: (as usual the data and images are pulled from the db and processed as needed, not just typed in as placeholders)

Off-Topic: show
(https://i.imgur.com/zbu9i8D.png)


Musings of the day:

Since the database is identical in structure and usage to Aurora4x, one will be able to import their existing Aurora4x games into Quasar4x.  Initially one would need to send me the Stevefire.mdb file and I'd send them back the converted quasar4x.sqlite file, but some form of automated service could feasibly be put into place.  (I already the conversion scripted.)

And since the final database structure and usage is already known from the very beginning of my project, that means as soon as I get Quasar4x into a skeletal playable state, sans many features still on the todo list, one could theoretically start playing the game and never have to worry about a "wipe" because the structure and content of the "save game" (database) is actually already in its final form. 
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on September 05, 2018, 02:07:28 PM
Progress update!  2015-Sep-05

(https://i.imgur.com/yLWXhrS.gif)

Screenshots are going to be progressively less interesting as development continues given that much of Aurora is plain UI and behind the scenes calculation.  Nonetheless, development does indeed continue at full throttle!  It's hard to tell from the screenshot that much has been done since the last update but in fact this is a pretty significant milestone. 

Much of my work since my last update has been on revamping the "refresh" methodology, to ensure that all windows are persistantly showing up-to-date information.  My goal is to make the "Refresh All" button useless, and instead have all the data up to date while maintaining fast UI responsiveness.  This was time consuming because I had to fundamentally change the code for almost every functional control in the game.  But now I have a rock-solid methodology in place and should hopefully never have to do that again!™

After I posted my last update, I made a sudden change in my direction.  Rather than flesh out every single UI control in the game to function as completely as possible without advancing time, I wanted to dive into temporal space and start emulating Aurora as time passes.  What's the point of finishing the UI if you're eventually going to find out that the end-turn code makes you want to jump out the window?

So now I have pulses and end-turn pulses implemented, with both automatic and manual sub pulse lengths.  And I can proudly say that Q4X behaves identically to A4X for the first 400000 seconds!  As in, the same database updates occur in both games. Without alien races or user input, it's actually not much at all, but that's good!  It makes for a very easy controlled environment from which to build upon.  The next step is to emulate the first production cycle and the cycles beyond that.  Beyond that, development iterates on what is already in place.  For example, currently emulation is only accurate if the user does not change anything and there are no alien races.  What would remain is to gradually add support for user input, little by little.  That said, the task overall is obviously monumentally complex and I proceed one step at a time.

Regarding source: I had originally announced this would be open source. My reasoning was to make sure nobody felt I was trying to personally gain anything from this project.  I've since discussed with Steve and he is fine with going closed source (again, as long as nobody is gaining any benefit from that, monetary or otherwise)  I've since changed to a closed source philosophy primarily because I feel more relaxed that way and I feel the game is probably going to be fun when its behavior is more of a black box.  I may revisit sourcing again down the road if I feel it might help with community bug reports.  Moddability remains on my road map but is in the very distant future.

Musings on performance: I'm not too familiar with VB6 but I don't believe it has good support for processing while waiting for user input. I forgot to mention in my OP that another huge optimization I will be able to have is allowing expensive calculations such as path finding run while the user is navigating the UI assigning orders and so on.

The playable prototype is now located here https://ozer0.itch.io/quasar4x and I'll update the OP as well.  As I said in the OP, it's the emptiest of prototypes, but I like to accompany my forum updates with something tangible.

Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: JacenHan on September 05, 2018, 02:16:21 PM
It seems like you are making a lot of progress. I'm looking forward to more updates!

Edit: Trying to start the prototype drops me these errors:
Off-Topic: show

(https://i.imgur.com/rZV8Zxd.png)
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on September 05, 2018, 03:55:09 PM
Should be fixed, thanks for letting me know!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: JacenHan on September 05, 2018, 04:28:32 PM
It works great now, thanks!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on September 07, 2018, 04:49:56 PM
Progress Update 2018-09-07:

Boom :)

(https://i.imgur.com/ieJfumm.gif)

- This is realtime, not a timelapse
- Moons and Trojan Asteroids are computed as well
- Overlapping bodies are displayed, otherwise it's much slower. Should be easy to optimize that eventually.
- Yes, this reads, updates, and writes to disk every frame.  Praise sqlite. 
- The download (https://ozer0.itch.io/quasar4x) of this prototype has been updated.

Onward!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: MasonMac on September 07, 2018, 05:23:24 PM
Awesome!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: SerBeardian on September 07, 2018, 05:30:41 PM
So, this is just plain amazing.
Definitely looking forward to this.

Also looking forward to having all the broken features in Aurora fixed, like missile tracking bonus, laser warheads, the uselesness of orbital habitats at their actual job...

Also, if that wasn't you who posted the lovely spinning video on the Discord, you have a special channel ready for your (re)creation. :)
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: procdrone on September 07, 2018, 07:21:18 PM
I just discovered it, and already fell in love with it.  Keep it coming!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: JustAnotherDude on September 08, 2018, 09:56:22 AM
First of all, this is amazing and I love you for it

Second of all, right now the game doesn't play well with smaller resolutions.  The new game screen isn't entirely visible at my laptops resolution.  Not sure if that is a priority for you but thought you should know.

Third of all, this is amazing and I love you for it.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Tchey on September 09, 2018, 02:38:12 PM
Hi,

If you can, i'd love to play/test that on Linux, but i only can find an Windows . exe from itchio.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Noble713 on September 11, 2018, 09:51:02 AM
Hi,

If you can, i'd love to play/test that on Linux, but i only can find an Windows . exe from itchio.


Same here! I'm on Kubuntu 18.04 on my desktop and will probably be migrating my laptop to Kubuntu as well (away from ParrotSec).
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on September 11, 2018, 05:06:16 PM
Thanks for the encouraging responses!  Here is a progress update for 2018-09-11:

Off-Topic: show
(https://i.imgur.com/wZGbwHg.gif)

(https://i.imgur.com/1WezgZ4.gif)

(real-time, not time-lapse)


Q4X now behaves identically to A4X for at least the first 10 days*.  It can actually be mostly identical for an indefinite amount of time passed, except that Aurora4x will start promoting and killing commanders and probably some other stuff I haven't thought about yet.  I actually had an officer die in an accident in the first 5 days in my Aurora4x game (poor guy), so I went ahead and hardcoded him to die on the Quasar4x side as well just so the games stay in sync.  Not shown in the screenshots or in the game (yet) are the Missile Complexes passively gaining TF Training points, but they do gain them. 

*When I compare databases, I ignore small differences that creep in due to strange quirks in Aurora4x's calculations, such as the bug (http://aurora2.pentarch.org/index.php?topic=10163.0) where a difference of 1 second can mean the difference between gaining 200k population and 250k population.  Almost every calculation I've replicated has some kind of quirk with it.  I've added an internal setting that lets me turn on "A4X emulation" which attempts to emulate some of A4X's quirky math and is turned on for now.

As requested I've posted a Linux build! (and a Mac build, but I'm unable to test that).  Regarding lower screen resolutions, I want to get quite a bit farther in development before I work on things like that.

So, now I have a baseline for developing the game along its temporal axis.  It's now time to return to the UI and start fleshing out the functionality of all the windows as much as possible.  Even at 2025 Jan 1 with a barebones colony, there is a lot that can be done in the game on turn 1.  This will prepare the way for the next phase which is the user making changes AND advancing time to see the effects on the universe.  My next progress update will probably be after a few, not all, of the windows have been completed, since they might take a bit of time to do.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Tchey on September 12, 2018, 01:22:25 AM
Thanks for the Linux update, it seems to work, and indeed so far it's more an empty shell than a game, but it's a great start anyway.

Cheers !
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: El Pip on September 12, 2018, 04:27:50 AM
Knowing nothing at all about coding you appear to have made a very impressive amount of progress. As there is nothing I can do to help, all I can say is congratulations, please keep it up and I look forward to your future efforts. :)
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: TMaekler on September 12, 2018, 07:09:05 AM
Can you write back the data into the A4x DB? Or is it a one way extraction?
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Odin on September 13, 2018, 01:50:09 PM
Will be there multimonitor support?
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on September 16, 2018, 08:45:31 PM
Progress update:  No snazzy screenshots to share this time around.  As mentioned last time, I'm going back through all the windows and giving functionality to controls like buttons so they actually do something beyond pose for a pretty screenshot.  Currently I've "finished" the Race Details screen and System View screen, with misc things like picking flag / hull / race / planet images, renaming race / system / planet, moving columns left and right on System View etc.  I'm currently working on the Main Menu, running into surprises I honestly have never seen before like the Ammo Management page. 

Will be there multimonitor support?  Yes, although as you can see the game is all "virtual" windows drawn inside one Operating System window, so they can't be spread around without making the OS window itself be big.  Can I write data back into A4X DB?  Nope, haven't needed to, and the SpaceMaster features should be sufficient if I do need A4X writing in the future for testing edge cases or whatever.

No new build published this time around since the update is pretty boring.  The next build I do post will have the graphics separated from the program files so they don't have to be re-downloaded every time (or downloaded at all). 
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on September 21, 2018, 11:24:55 AM
Hello!  So I've been working on Q4X for a couple hours already this morning, and have been every day since my last update (!) and began to feel a little overwhelmed (that happens a lot with this project, go figure, right?)  so I figured hey why don't I take a break and write a progress report?  That should help me regain perspective on how much I'm accomplishing, so here's my progress update for 2018-09-21

No screenshots again.  Mainly just to save time and get back to coding, but also there's nothing milestone-y to show, just a lot of misc. stuff.  Next time I promise I'll have some.  I will just list what I've done since my last post:  (Kinda wish I'd done this for my previous post, the list would be about as long)

Main Menu:
- calculations > loadout calculation
- calculations > dice rolls
- empires > ammo transfer (layout only)
- empires > order of battle
- empires > class deployments
- empires > transfer system knowledge (layout only)
- empires > foreign aid (layout only)
- empires > linked everything that opens a window that you can open from the F3 screen
Commanders:
- Add rank
- delete rank
- rename rank
- retire commander
- rename commander
- auto rename commander
- reorder seniorities
- potential assignments list
- grant title
- pp rules
- create medals - new medal
- create medals - select medal image from disk
- create medals - list
- create medals - name, prom value, and description
- create medals - save changes
- award medal
- graphics in Medals Awarded pane

Still a lot more to do in the commanders window.  When you take into account that the Award Medal, Create Medals, Commands, Vacancies, and Highly Rated buttons all open up new panels with their own batch of controls, there is actually a *lot* going on in the Commanders window.  Lots more to do in the Main Menu too, but I'm done with it for awhile.

Why focus on main menu / commanders in particular?  No major reason, but I do have a well-defined objective of replicating everything that A4X does, so it's gotta be done at some point, so might as well.  The items I do first are things that don't depend on other things being done -- the Race window, System view, Commanders window, and portions of the Main Menu are well encapsulated areas that can be completed with minimal knowledge or dependency on other areas of the game.  (As compared to, say, "Ships Requiring Repair" which requires me to have some ships first, and then damage them)

I think next up will be the Colony Summary window and its 12 beefy sub-tabs (eep!) at least the portions that are relevant on turn 1.  But before that I'll need to implement having multiple empires in a single game, and the mechanics that go into "logging in" to particular empires.  Additionally I'll need to add support for going between two different games rather than requiring a restart -- since A4X supports that, I gotta too!  Once I finish the Commanders window though, I'll publish a new build in case anyone wants to play a pointless micromanage-the-commanders minigame. ;)
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on September 25, 2018, 12:26:18 PM
Progress update 2018-09-25:

I'm done with the Commanders window for now.  As promised, I've updated the download (https://ozer0.itch.io/quasar4x) page if anyone feels like giving commanders a hundred different personality traits or assigning and unassigning them until they go insane. :)  I've made the download available through the itch.io app (https://itch.io/app) which, after initial setup, is the easiest way of all to stay updated.

Since my last post I've done:
- assign commander
- unassign type
- unassign all
- commands panel
- vacancies panel
- highly rated panel
- add personality trait
- remove trait
- edit notes and save
- change location to ship
- eligible only checkbox
- unassigned officers only checkbox
- all the controls on the popup panels like sorting
- random background picture

I found an old save file of mine from A4X, only dated 2086 or so but still fairly advanced, a handful of systems colonized, a full array of ship design,s and so on.  It helped me find some kinks in my migration script that I was able to hammer out.  I'm now able to export the A4X save file to a Q4X save file with 1 click and load it in Q4X!  Which means I will now be going back yet again through all the windows to make sure everything is displayed correctly, as well as working on windows that still on my todo list such as Colony Summary, now that there is relevant data for them to work with.  Also this means I now have enough meaningful data to create the 1 remaining window I have left to design: the Galaxy Map.  Additionally I still have adding multi empire / multi game support at the top of my list.  It's a lot to do but I forge onward 1 step at a time!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Tchey on September 26, 2018, 01:31:13 AM
Thanks for your work.  As a itchio and Linux user, i'm following this project with great interest.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on October 03, 2018, 01:45:13 PM
Progress update 2018-10-03:

Possibly the least fun I'll ever have on this project, but super important stuff is now either done, or done enough to ensure a massive rewrite won't be required later on:

- Game Details > Delete Game
- Create New Game > Generate Spacemaster Empire (the generated data is a static prototype, but the game is now able to handle the mostly-empty SM Race)
- Main Menu > SpaceMaster On/Off (limited effect for now)
- Main Menu > Game > Game Info (switch freely between games!)
- Main Menu > Game > Select Default Race
- F9 window > Create Empire (static prototype only)

And finally, all windows: Switch freely between multiple empires, requiring Race Password unless in SM Mode.  So yeah, not a fun batch of updates, but super important to get out of the way early because freely switching between empires and games is a pretty core layer of functionality that almost everything else sits on top of.  There is still more work to do in this vein but the essential groundwork is in place so that I can safely move on to more interesting areas. 

I am now finally starting on what I posted last time: Loading up my 2086 game and going through all the windows to make sure everything is displayed correctly and as many controls as possible are functional, as well as designing the Galaxy Map.  That might be a few weeks and a couple progress updates worth of work, but after that comes the dive into... playability!! 
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: MasonMac on October 08, 2018, 08:23:30 AM
Allow us to full screen the system map?
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on October 18, 2018, 03:13:26 PM
Progress update 2018-10-18:  (Make sure your browser window is wide enough!)

Off-Topic: show
(https://i.imgur.com/2WFZ3Be.gif)


Phew!  That took a lot of work.  As I said in my last update I am going through all the windows with my 2086 game and fleshing out display and functionality. So back on October 3, I figured I'd go through the windows in alphabetical order, and the first up was Ammo Management.  Took an hour or so, easy!  (Although, I'm leaving it disabled without SM Mode because it's cheesy free ammo).  Next up, Class Deployments.  Easy!  Another couple hours.  These were actually pretty well done from my previous pass-thru.  Next up was Class Design.  Ok no problem.  Right?

HA!  What a ride.  Remember, not only am I making things display data from the database correctly but I'm making it actually work.  That means calculating Armor values, Crew requirements, every possible module combination for ships, and you get the idea.  Armor modules were by far the worst to do.  I'm fully aware of how it's supposed to be calculated (http://aurora2.pentarch.org/index.php?topic=2292.0), and of all the forum (http://aurora2.pentarch.org/index.php?topic=6755.0) posts (https://www.reddit.com/r/aurora/comments/4d2q6q/calculating_armor_added_with_a_new_component/) and spreadsheets (https://www.reddit.com/r/aurora/comments/42kp5o/calculation_for_increasing_hs_requirement_of/) in google-land on the topic.  Turns out, none of them are completely accurate when put to the test.  I never was able to get a perfect match but I come pretty close with a lot of fudging.  I will revisit later on.

In making Q4X one of my hopes was that existing A4X spreadsheets and forum posts with ultra precise ship designs would work in Q4X but unfortunately with armor differences and other rounding errors that won't always be the case.  11000 ton ships will become 11050 ton ships, and so on.  The way I have it set up, ships in A4X do keep their statistics intact when imported to Q4X, but as soon as you edit the design, the Q4X math takes over and your values change slightly.  In general, Q4X makes much more precise calculations than A4X because A4X likes to perform rounding multiple times in a formula.

New windows and linux downloads are available (https://ozer0.itch.io/quasar4x) if anyone wants to take a poke.  I recommend using the https://itch.io/app (https://itch.io/app) for nice small patch sizes.  I replaced the database (the save-game) with my year-2086 game that was used to record the animation above, for a better demonstration.  If you want to try out the 2086 game and you've run an older version of Q4X in the past, make sure you close Q4X, delete the old save (at %APPDATA%\Roaming\Godot\app_userdata\Quasar4x\quasar4x.sqlite) then restart Q4X. 

Here's a list of changes:
- New Major calculations: dynamic Ship Design Summary, Armor Thickness, Armor Columns, # of Armor components, Maint Supply amount, # of Crew Quarters, DAC chart, Electronic DAC chart, Design errors and warnings, Show Refit cost from selected other ship, show eligible additional classes if this is primary class for a shipyard, Maint Life, AFR%, IFR%, 1YR msp cost, 5YR msp cost, Ship Range and Duration on full power
- New Minor calculations: Fighter vs Regular class, Commander Priority, cost of ship, size, +4 Armor for PDC, Ship thermal, cross section size, rank required, protection value, cloaking sensor reduction, engine power, fuel efficiency, fuel capacity, # harvesters, # terraformers, salvage rate, MaxSpeed, shield strength, shield recharge rate, daily shield power cost, reactor power, required reactor power, damage control rating, jump rating, jump distance, cryo capacity, active sensor strength, EM sensor strength, grav survey rate, geo survey rate, ECM, cargo capacity, magazine capacity, troop capacity, drop capacity, cryo drop capable, Jump gate construction time, cargo handling, notes, build points, tons per man, capacity per HS, crew HS required, actual crew HS, spare crew HS, armor area, armor strength, armor width, internal HTK, build time, load time, missile GPS, missile MCR, Max repair, thermal signature, EM signature
- New Functionalities: Change class, Ship vs PDC, change hull, keep excess crew quarters, obsoletion, show size in tons, weapon range bands, target speed bands, enter deployment time, enter armor rating, rename class, auto-rename class based on theme, select name of class from db, re-number ships in class, create new hull and abbrev, create new class, delete class, give class to NPR, upgrade armor, unlock/lock, copy design, show civ designs in class dropdown, don't use theme for new class name, sort class dropdown by alpha size hull or cost, enter/exit SM mode, text file for copy paste, list available components, add component by double click or add button, remove component (double-click/add), 1/5/10/100 components at a time, components display window, group/ungroup components, show obsolete compoenents, show commercial components only, preferred mag loadout, add/remove 1/10/100/1000 ordnance to pref loadout, ignore size restriction, obsolete ordnance, show obsolete ordinances, component summary and sort by amount/size/cost/crew/htk, total materials required, min rank and class priority, record notes, show ships in class, hide/show under construction, show civ ships.
- And a few other odds and ends.

Next up will either be the next window in the alphabetical list which is Colony Summary, or switch gears and do the Galaxy View window.  Haven't decided yet!  (Edit: It'll be Galaxy Map ;) )I may be taking a few days off to play the latest Oxygen Not Included update as well! ;)

Thanks for reading!  It's a lot of fun to take a break and do a writeup like this and sort of see for myself how much I've done. 
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Father Tim on October 18, 2018, 10:27:17 PM
In making Q4X one of my hopes was that existing A4X spreadsheets and forum posts with ultra precise ship designs would work in Q4X but unfortunately with armor differences and other rounding errors that won't always be the case.  11000 ton ships will become 11050 ton ships, and so on.  The way I have it set up, ships in A4X do keep their statistics intact when imported to Q4X, but as soon as you edit the design, the Q4X math takes over and your values change slightly.  In general, Q4X makes much more precise calculations than A4X because A4X likes to perform rounding multiple times in a formula.

You may have done a better job than you think.  In Aurora, the very same ship design may be 11,000 tons or 11,050 tons depending on whether you increase the armour value from X-1 to X, or decrease it from X+1 to X.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on October 19, 2018, 11:12:57 AM
Wow, thanks for mentioning that.  Really thought I was losing my mind!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: JustAnotherDude on October 19, 2018, 11:59:37 AM
I remember the Discord chat, which is filled with utter nerds, going insane for about a week on the armor calculations, so getting it somewhere close to that arcane beast is an accomplishment.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on October 25, 2018, 02:57:56 PM
Progress Update 2018-10-25:

(https://i.imgur.com/mYn2Tmv.png)

The first update containing realtime animation! (Also the last one!)

(https://i.imgur.com/WdkUSYU.gif)

Rather than go silent for many weeks, I've decided to post an update on what I've got done on the Galactic Map so far.  I'm really happy to have realtime dragging!   Also the quirky color scheme of A4X's multi-select has been replaced with a diagonal line effect.  Fun fact, the circles, rings, and diagonal lines are rendered using a GL Shader, for ultra fast performance!  This means theoretically tens of thousands of systems could be rendered and dragged around with not too much of an FPS hit, and look crystal clear at any zoom level.

There is still a lot of work to do on the Galactic Map, but a lot of the heavy lifting is done.  The graphics, selecting, and dragging are all done, as is pulling real galaxy data from the database and rendering it.  Nothing in the animated gif is a placeholder for demo purposes, the numbers are actual calculated colony costs, lines represent real connections from surveyed data, system positions are saved and loaded to disk.  Zooming and scrolling is implemented as well.  Here's the full list:

- Sidebar View dropdown, GUI layouts for all sidebar views, Refresh All Map Data button, Scroll Map, Zoom Map, Minimize Sidebar, QV button, QV panel, Map display Options all load and save to disk, Show suitability 2 to 2.9, Show Suitability 3 to 5, show uncolonized <2, show uncol < 4, Show Task group locations, Map Key panel, help panel, Save Positions, Restore positions.   Map graphics: hull icon for fleet present, orange lines for jump gate connections, green lines for non-gate jump connections, bright green for currently focused system, empty circle for systems without bodies, blue/cyan/gray tiny circles for stats, drag, and multi drag.

What's next is a tossup.  I may shift gears again and go back to my alphabetical pass thru of all windows, which would mean working on the colony summary, or I may continue on the Gal Map, or a little of both.  I will be slowing down my pace the next week or so to enjoy some other activities.  Marathon runners gotta pace themselves! ;)
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on November 02, 2018, 12:59:44 PM
Progress update 2018-11-02:

(https://i.imgur.com/HDrGtKt.gif)

(https://i.imgur.com/ZC1lTv9.gif)

Done with Galaxy Map!!*  This one was a hefty one because unlike all the other windows, I didn't have anything done in a previous pass.  So it was really like 2 ½ passes in one. 

*For now.  A few of the things not done in this pass: The Fleet Maintenance statistic is hidden since its usefulness is questionable (http://aurora2.pentarch.org/index.php?topic=10210.0). The Populations context menu isn't currently implemented since it's just a dubious list of numbers on the A4X side.  Map labels aren't done yet.  I'll get back to all of these later. 

I added an "Unsaved Changes" message when you've moved systems around but haven't saved them yet.  Also fixed a few things in Q4X that weren't working correctly in A4X:  Show time to system at speed below honors different speeds when they are entered.  Show Task Group Locations hiding fixed.  Double clicking Jump Point Data rows selects the system instead of erroring.  Col cost 7 to 10 stats are correct.  Select Random color works.  Planets tab shows comets.  Survey point cost doesn't overlap with sector name. Open Fleet Window and Fleet Moves on the context menu have been combined into just Fleets, since they seem to be identical in A4X.

As for a list of what I've done since my last post, the short answer is pretty much everything else.  The long answer is feel free to try it (https://ozer0.itch.io/quasar4x) and see! 

And a special mention for 'Show distance from selected system'.  This required creating the code that finds the shortest path between any two systems taking into account distances between warp points in a system.  (Thanks to Dijkstra (https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm) for the assistance.)  This will be re-used many times later on, so it's nice to be done with that!

Colony Summary is next!  It's really like 12 windows rolled into one so that'll probably be broken into a few updates. Fortunately, the groundwork (https://i.imgur.com/tpqBCqu.png) is already in place for this one!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on November 09, 2018, 10:42:48 AM
Progress update 2018-11-09:

I haven't spent a whole lot of time on Q4X since my last update, but I did get a chance to fix the Populated Systems tree on the colony summary and complete the Environment / GMC tab.

Populated systems tree is now showing Auto Mine count, Civ Mine count, Orbital Transform count, and ordered similarly to A4X.  A few systems were missing or named incorrectly in my previous build which is also fixed.  On the Env/GMC tab: everything is functional; Select Gas, add or remove gas to atmos, set max atm, view atmos data, select species to modify, and view species info.  New win & linux build pushed to Itch.

I do believe I'll have more time to work on Q4X for my next update, which will be more work on the Col Summary window. (aka Population and Production window)

Musings of the day: In fixing system naming for the Populated Systems list I realized there's another way Q4X is going to be faster than A4X.  I'm pretty sure A4X runs very basic SQL such as "select * from Table" or "select Column1 from Table" and does most of the data processing on the VB side.  I'm not sure if there's a benefit to moving the heavy computing to the SQL side in a VB program, but I know there's a huge benefit to doing that in Q4X.  The sqlite engine is a library written in blazing fast C (not even c++), and I do a LOT of game logic on the SQL side.  Many of my queries are dozens of lines long.  This means there's even less work, if any, I'll have to do in C++ down the road because the sqlite engine will already be faster.  Additionally, by doing work in SQL, I can make direct use of query optimization and I can add something very powerful to the database that doesn't exist on the A4X:  indexes!  The A4X databases does have indexes but does not have any dual column indexes, and has at most one index per table.  Since my last update I have added 5 new multi-column indexes to the database (and will be adding more) and saw the run-time in one query (related to system body naming) go from >2000ms to 13ms!  I am very excited to see what other super easy speedups will be made possible with more indexing.  (By the way, no disrespect to the A4X database, it is organized very well and I don't think Q4X would have been possible without such a clean schema!)
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: froggiest1982 on November 09, 2018, 05:50:40 PM
Following you now from another post thanks to Erik Luken, you are my new hero right now! If I knew more about coding I would have been super happy to help.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: firefly2442 on November 11, 2018, 12:59:29 PM
Wow cool, someone else who's heard of Godot.   I actually tried starting something very similar using Godot but ran into snags with the UI.   Do you use any tools for building the UI?  That was one thing I struggled with, Aurora4x has very complicated UI screens and it seemed to be incredibly difficult to get the layout the way I wanted.   If you ever change your mind about collaboration, let me know.   I would be interested in helping.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: TMaekler on November 12, 2018, 06:14:46 AM
In the beginning of this project I thought: why doing this? At that time C# Aurora was already on its way - so already speedy turns ;-)
But now I think that some AARs don't need the new complexity of ground combat - and Quasar 4X might become a good alternative if your AAR focuses only on the space side of things.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: froggiest1982 on November 12, 2018, 03:15:20 PM
In the beginning of this project I thought: why doing this? At that time C# Aurora was already on its way - so already speedy turns ;-)
But now I think that some AARs don't need the new complexity of ground combat - and Quasar 4X might become a good alternative if your AAR focuses only on the space side of things.

That was my point when I was asking Steve and I was redirected here. I am sure I will enjoy all the new features of C#, but still, sometimes the good old flavour and simplicity (compared to the new mechanics) will be great to have.

I am curious now to see how he'll work around the AI and possibly the only extra feature respect to the original would be on that part and the diplomacy.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on November 13, 2018, 05:04:59 PM
Progress update 2018-11-13:

3 more tabs of the Colony Summary (aka Population and Production) plus most of the controls along the bottom done for now, including:

Main: Hide CMC checkbox, Group by function, set Capital, Rename system body, Abandon population, and the other buttons that open other windows
Wealth Trade tab: numbers are all calculated correctly now
Ground units tab: ground forces dropdown, required/actual occupation, police strength/modifier, text for copy paste, ground units list, rename ground unit, convert GU to cadre, disband GU, transfer HQ, Clear HQ, transfer GU to PDC or pop
GU training tab: units training list, rename unit in training, add task, delete task, use cadre, cadre stats, rename unit type

Also made a bunch of fixes for other windows I'd broken without realizing, so the prototype demo is less crashy.

Regarding Godot, I did have a bit of wrestling with it to support the types of controls I needed.  Specifically dropdown menus, Trees for the table layouts, and the bordered panels required some work to get right, but I managed to do it all with the built in controls and theme tools provided.  I had to make a couple concessions for layout, such as tabs, and haven't visited how to limit the height of a dropdown that has many items.

Regarding ground units, it should ideally be identical to A4x 7.1 just as any other feature. 

Regarding AI, I'm actually pretty excited for what I have in mind for that.  Rather than do it all myself, I plan to expose AI logic in external config files, one file per AI "personality", and allow players to design their own AI to use and to share. (Modding, in other words)  The files would be a scripting language that is as simple as I can make it with a well documented set of functions available (like GetShortestPathToSystemBody("Luna") or whatever).  So, while I would include AI "personalities" that seem to resemble AI in A4X as close as possible, I would be using the same external config system that anyone else would use, and developing that system in parallel.  And anyone else that wanted to could try making their own AI variant.  I'd like to have a way to pit one AI type against another and watch both sides, since I need to do that anyway to test that AI is working correctly.  So it might be fun to see whose AI can beat the others :)

AI is a LONG way off, but now you know my vision for it :)

I'm actually a little more nervous about galaxy and race generation.  Might externalize that into config files as well! 
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on November 19, 2018, 02:56:56 PM
Progress update 2018-11-19

Progress will be very slow or non existent til 2019 due to holidays etc.  Probably just one more update this year in mid Dec.  I do have Civ/Ind status tab done (supply/demand contracts, select colonization status, show civ ships, toggle industrial facilities)
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on December 18, 2018, 04:55:04 PM
Progress Report 2018-12-18:

Teams / Academy tab is done for now.  As warned, it's not a big update this time.  Hopefully I'll be able to return to regular updates next month.  Latest prototype build has been updated.

Specifics that are done in this tab: Academy level, Officer grads per year, racial training level, crewmen and junior officers, list available officers by team type, show this pop only, show unassigned only, create team, list teams on this colony, list members of team, list commanders stationed at colony, open officers window, transfer team to ship, rename team, disband team.   

Meta Musings: Not going to lie, the grind is getting real.  At this phase in the project, none of the code is particularly challenging, there is just so.. darn.. much of it, and the end result of finishing a section is a lot like seeing two pages of numbers add up in an accounting program.  It's one of the reasons progress is currently slow.  I'm fiercely determined however, and love to code, so it's not going to die.  Q4X is and will be my only programming-for-fun project until otherwise notified.  And if I ever do move on, I will absolutely make it open source / MIT License first. 

Anyway!  The holidays call, happy times are here and I hope everyone is well!  See you next year!
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: MasonMac on January 21, 2019, 11:25:57 AM
A little thing, but would you be able to change the color of the planet orbit to a darker color? It still kinda hurts my eyes. Thanks.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: se5a on February 02, 2019, 01:26:23 PM
looking good, in hindsite maybe this is what we should have aimed for at the start with pulsar. I think we made a bunch of mistakes with that, starting from scratch half way through being one of them, and on that rewrite we should have aimed to get something graphical right off the bat rather than try build a complete 'engine' first. on the flip side, there were not as many options for C# out there back then. ah well lessons learned. If I ever start another game project I'll do stuff differently and end up with a bunch of different problems :p
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: MasonMac on February 16, 2019, 06:33:34 PM
I hope you haven't stopped working on the project
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on February 19, 2019, 09:02:12 AM
I'm back, after a much-needed "vacation" from hobby coding!  My pace won't be as fast as when I started out, but I can tell you that the itch to work on this has firmly resettled itself!

And I have a progress update (2019-02-19) from the past week or so!  Shipyard Tasks tab and Manage Shipyards tab are done for this phase.

Specifically, in the Shipyard Tasks tab: Show annual ship building rate per slipway, show available slipways, display all shipyard tasks, delete task, pause/unpause task, raise/lower priority, rename ship, select name of ship from themes, show ship delivery schedule for all shipyards.  In the Manage Shipyards tab: Display Total naval and commercial shipyard capacity, display chart of shipyards and their type, slipways, assigned class, current activity, progress%, completion date, and Mod rate.  Set shipyard complex activity, show build cost, completion date. Display list of eligible ship classes to retool, delete activity, pause/unpause activity, rename shipyard, auto-rename shipyard. All task types (Extra slipway, capacity expansion options, and retool) update DB identically to A4X and display correctly.  Create task Construction, Repair, Refit, and Scrap all update DB correctly.  List eligible classes to construct, repair, scrap, or refit from.  Pick eligible ships in orbit, set ship name, show build cost, create build names checkbox, show completion date (sometimes inaccurate for refits currently), select fleet, set default fleet.  Show required minerals for activities and tasks, pick new name from theme, show refit details.

I don't currently have my itch.io build push environment set up on this computer, so no new build this time around. I don't think that'll be much of an issue since by now you know that my progress updates are real and the current build has plenty of material to see how the final product will look and feel on your computer.

Next up is the research tab.
Title: Re: Quasar4x - An early look at an Aurora4x clone in the works
Post by: Kyle on March 04, 2019, 02:32:42 PM
Progress update 2019-03-04:

Actually finished these things last week and had planned to do more before my next update, but I'm currently hooked on a binge of Civ 5, so I figure'd I'd get this out there along with a warning that there will be another delay while I get Civ 5 out of my system :)

Research tab and Mining tab of the F2 screen are done.  Specifically, on the research tab: Display total research facilities & RP per Facility, Display chart of current research projects, Cancel project, pause/unpause, Add/Remove research labs, chart of researchable projects, dropdown to change chart RP type, Create project, delete project, show available, all, completed, or completed excluding start in chart, display technology description, show chart of eligible scientists for project, show matching scientists only checkbox, pick allocated labs, show available labs, use max labs checkbox, research queue, queue project, queue top, remove from queue, reorder queue.  Mining tab: show/pick mass driver dest, display ground-based mines + annual production, mouseover annual production details, finished the remaining few columns in the mining, set/display reserve level.

Up next (when I get back to the project) will be Industry tab and Summary tab then the F2 window will finally be done for this pass!