In the last couple of weeks I focued on polishing LMeve. Especially that the project has a new contributor, who is both user and developer at the same time Say hello to @MarqAideron from Stay Frosty!
Security & CCP Guidelines
About two weeks ago @FuzzySteve suggested that EVE third party devs should use nonce values (also known as CSRF tokens) in all their web apps.
Things for people to consider adding to their Eve applications: Nonce values, where you're updating user data. #devfleet
— Fuzzysteve (@Fuzzysteve) August 11, 2014
What's that? Well, it's a security mechanism, and a quite important one, too.
Let's assume you are an admin of an open source web application (whether it's a forum, blog or anything else). You log in to that application (of course using secure HTTPS protocol and a very secure password). Application then creates a random session identifier, verifies if user is connecting using secure connection and verifies the credentials. Then website then sends the session identifier back to the web browser in a cookie file. Each time you navigate around your app, web browser sends the cookie file to the server, so server knows which user he's talking to.
Now let's assume a hacker wants you to create an account for him in your app. Of course he can't simply ask you to do it, but he knows your app, becuase it's open source. He doesn't know your password, or your session cookie, because it's completely random. But he does know that adding a user in your app is done by this URL: https://your-app.com/?action=adduser&user=hacker_login&pass=1eK4Gaq4gj$g==
All the hacker needs to do, is make you open this URL while your web browser is logged to the application, for example by sending you an email with some embedded images. However, one of the images addresses is not an image at all: it will be the URL which creates a new account! What does your browser do when you open such email? It will attempt to load all images be default, including the crafted URL. It's your browser, so it knows the session cookie for your application. Server will belive this is a genuine request coming from you, and application will create the account for the hacker! I don't have to tell you what happens next. This is an attack known as Cross-site Request Forgery, or CSRF in short.
How to protect against this?
First: use POST in your forms instead of GET. This will make it harder for the hacker, because he won't be able to use a simple URL to deceive the user (he will need a web form to send the crafted request).
Second: add a random hidden field in all your forms. When you draw the form for the user, you add a field with random "token" value. Save this token on the server side (it can be a session variable or a record in database). It should also have a short expiration timeout. so it cannot be used if it was somehow intercepted by the hacker. When user fills in the form and submits it, you verify if the value sent by the user is equal to the one you saved earlier. If both values are the same, request is considered genuine ,and otherwise it should be ignored.
CCP Bugartist followed on the conversation started by @FuzzySteve, and suggested a way to generate the CSRF tokens using openssl:
Don't abuse the API, or else...
A few days later CCP FoxFour suggested adding an User-Agent field in third party apps, because instead of banning API (ab)users, CCP would prefer to contact the developer instead.
If you're the person with a Go app hammering public CREST... add a user agent and slow down before a ban. #devfleet
— Regner Blok-Andersen (@RegnerBA) August 25, 2014
LMeve poller already used context setup in file_get_contents() so I simply added User-Agent field to it. Op success!
LMeve new features!
Ok, end of technicalities, let's get down to business Last two weeks saw three new features added.
API character Self-register
This one was well overdue. I have mentioned it for the first time about a year ago. Why is it important? By default, LMeve doesn't know which in-game characters belong to which person. This information is useful, because LMeve can then highlight the information regarding user's characters, or simply limit the amount of information displayed only to these characters.
Previously only people with "Administrator" permission were able to link LMeve accounts to in-game characters, but with this new feature everyone can do it now. And it's very simple, too.
First, input your account level API KEY first. If you don't have a key ready, simply follow the link.
When ready, user clicks OK. LMeve will now access personal API (just this one time) to download the characters. Then it will compare the corporations these characters belong to with corporation that owns this particular instance of LMeve. When corporations match, LMeve will check if these toons are already visible in corporation API. If all checks are green, characters become linked to the account:
This will become even more important when EVE SSO becomes openly available, because once characters are linked to the account, users will be able to use their EVE Online password to log in to LMeve. there will be no need to remember another password!
Industry Facilities and Logistics
Everyone who's done some industry in EVE knows just how important logistics are. Without ingredients corporation cannot invent or produce anything, so a constant flow of materials is the only way to keep productivity high (and this in turn directly impacts the amount of ISK earned).
Previously I've added a way for users to track the materials needed for their specific tasks, so users could refill their own labs easily. Most corporations however has a few dedicated pilots who do hauling and logistics, and they would benefit if they knew the materials needed by a specific assembly array, rather than specific character. With the information about Industry Facilities now available in the API, we only need to assign tasks to specific facility.
What to build to become a real EVE Online industry mogul?
This is a tricky question. Profit on a single item is not enough to make a well informed decision, because some items, while profitable at single unit level, don't sell very well. Other items have smaller margins, but because of their high sales volume, they give much higher profit. So what should you build? LMeve comes to the rescue.
Under Database you can now find Profit Explorer and Profit Chart. The first one is very similar to normal Item database view, but it also calculates manufacturing cost and compares them with market prices. Please note that:
a) items must have their prices tracked (you must turn on "Fetch Prices" in Database for each item and each material; only minerals are turned on by default after LMeve installation)
b) items must have a bleuprint (so they can be built and their manufacturing cost can be calculated)
That's all for today!
You can download the latest LMeve version from GitHub.
EDIT: Tranquility and eveonline.com are now back online
Since the official website and forums are down, I put this friendly heads-up here:
Tranquility is suffering from a third party networking problem, and CCP is working with their partners to resolve the issue. Tranquility, EVE Online website and forums are currently inaccessible.
This is an excerpt from CCP Falcon's forum post:
Apologies for the connectivity issues some of you are experiencing right now. We're currently having a few login issues and are investigating.
I'll update this thread once I have more information.
Thanks for your patience, and apologies for the inconvenience!
09:40 UTC - OUR OPERATIONS TEAM ARE CURRENTLY WORKING ON INVESTIGATING CONNECTIVITY ISSUES
10:30 UTC - OUR SERVICE PROVIDERS ARE CURRENTLY WORKING ON INVESTIGATING SEVERAL ISSUES
11:00 UTC - THIS APPEARS TO BE A THIRD PARTY ISSUE - WORKING WITH PARTNERS TO RESOLVE IT
12:10 UTC - TRANQUILITY WILL BE REBOOTED IN VIP MODE IN 10 MINUTES
12:20 UTC - TRANQUILITY IS NOW IN VIP MODE
Good luck to CCP and their ISP in resolving the issue!
PS. Feel free to check Chribba's eve-offline website to check if EVE is back up.
Many bloggers already covered in detail all the changes introduced by the newest EVE Online patch known as Crius. Some have even speculated, how it will change industry in the game.
Some time has passed and we can now answer the question how it really affected industrial corporations. We will do that by looking at each feature mentioned by CCP Greyscale in his dev-blog.
No more remote blueprint installation
This feature is a major game changer, and a big pain for many industrialists. Before Crius it was possible to install BPOs in POS labs remotely, from the safety of NPC station. Well, it's not possible anymore. CCP believes that industry needs more risk involved, probably because the rewards can be pretty high. Solution is simple: use NPC station for copying, and store your precious BPO there. Another idea is to have a copy-only POS with one Design Laboratory and some sizable defenses. TL;DR: it is an inconvenience, but there are workarounds.
ME and TE
No big changes here. Blueprints are usually researched once after they've been bought, so in typical day to day operations nothing has changed. What did change is that the perfect ME is now well known without using blueprint calculators - and is simply equal to 10.
Invention and copying
Tech II BPCs invented without decryptors now yield ME 2% and TE 4%, but since all Tech II blueprints had their base materials multiplied by 1,5 it means that invented items actually take 2% less materials than they used to. However BPO owners are much less happy, because their perfect researched blueprints now require 35% more materials than they used to. Aideron Technologies can consider themselves lucky in that regard, because we did not own any Tech II BPOs.
Copying is a funny one, because some blueprints took much more time to copy than to manufacture. This has been changed in Crius to a static 80% of manufacturing time. CCP also changed invention and it now takes 1 run from a BPC, so you can either use 1 run BPCs or reuse a multi run BPC as many times as the number of runs on it. This means less clutter in corp hangar, as we no longer need so many BPCs at all times. This one actually seems to be a good change.
Slot removal and NPC job cost
Right now even jobs which you install in your own POS cost you ISK. This means on top of fuel costs to run these 10 POSs, you will also need to pay ISK for each and every job you installed in them! For many people it seemed simply outrageous. But fear not, with slots gone, we only need 1 or 2 Large POS now. And with the standing requirement for anchoring Control Towers gone, you can freely move our operation in case a system gets too crowded and the install costs are too high. According to the formula, if we assumed uniform distribution of industry jobs over the whole k-space, the cost index is about 0.0136, which translates to NPC install cost of 1,36% of material value per manufacturing run, but it can be more (or less) depending on the system you're in.
With the number of POSs required to run industrial operation substantially reduced, corporations will save tons of ISK in fuel. This did not affect ice and fuel prices just yet, but probably will in the nearest future. On the other hand corporations have to pay for every job they installed, even at their own POS. Let's see which is bigger: fuel savings or install costs.
We used to have 5 Caldari Large POS towers before Crius, and now we only need one.
|Pre Crius||After Crius|
|5 Caldari Large||1 Caldari Large|
|Monthly fuel costs|
|3082M ISK||616,5M ISK|
This is a reduction of 2466M ISK monthly. Now 30 days of manufacturing in our system (cost index 2,6) would yield 416M ISK of additional costs. So in the end this change is a very much positive one, saving us roughly 2 billion ISK monthly.
I love the new S&I UI in terms of both features and look & feel. Previously installing a single job required 7-9 clicks, now it's 1 drag and 1 click. Awesome! The new GUI is much more informative, too. While we still need LMeve to do job planning at the corp level, at individual player level, the amount of information displayed in the new Industry GUI is more than enough. Granted, the new UI is still a little buggy, but all CCP needs to do is add a little polish here and there.
Unfortunately, like every rose, this one has some thorns as well. The new UI is really bad performance-wise. Our corporation is doing a heavy duty operation and we own hundreds of BPOs and thousands of BPCs, not to mention about 120 containers in corp hangars. This new UI will try to scan for each and every single bleuprint, so with the amount of data our corporation has, it becomes really bad.
- When I open S&I window, I have to wait 21,6 seconds before I can interact with it,
- Once it loads, I drag a Tech II BPC into it and the game literally freezes for 18,2 seconds,
- Then I enter the amount of 10 runs (game freezes for 3 seconds),
- Then I click "Start" and the game freezes for an additional 14,7 seconds,
- Then I drag another BPC and the story repeats.
As you can see, all time savings related to the reduced amount of clicks are quickly diminished by the amount of time I have to wait.
EDIT: According to CCP Nullarbor and Crius 1.8 patch notes, one of the performance issues when submitting industry jobs has already been fixed. Devs are still working on performance improvement for long blueprint lists.
By the way, while I appreciate the possibility to install jobs from a container, the list of corp hangar divisions and containers under input and output is way too long in our case. A tree approach (only hangar divisions visible initially, and containers shown only after you've clicked a specific division would be perfect).
* times measured on Intel Core 2 Quad Q6600 running at 2,4 GHz & with 4GB RAM.
** the performance problem has been reported to CCP in the form of a bug report with attached log server logs
And how did Crius affect YOUR industry processes?
I was very excited (and a bit worried) about it, because it was the first time for me to organize an EVE Online player gathering. I simply couldn't wait! I am now really happy and relieved, that it turned out to be a really good time for everyone present.
It's that day!
Me and my wife have arrived earlier to set up a counter with ID cards and an attendance list. Additionaly, SokoleOko, a player well known in the Polish Community, wished to give a presentation to say a few words about the status of nullsec. So we've needed to set up a laptop for that as well. When we've arrived at Hard Rock, there was alaready a bunch of people waiting. We've quickly introduced ourselves and started giving out the IDs. People at Hard Rock are very helpful, so all the preparations for the presentation went smoothly. CCP Gargant showed up shortly after, and still well before 19:00. CCP provided an open bar for the participants, so everyone who picked up their ID could go and grab a beer (or in many cases, something to eat as well).
After half an hour we had 75% of the list already there, and we've decided to give it a go. SokoleOko started his presentation about why nullsec is broken, and how to fix it (you can see his presentation here). After the presentation, I went to the stage and welcomed our guest with two gifts, that Polish Community deemed the most appropriate. First was a bottle of vodka, re-branded as "Frachtówka" (polish for "Freighter Vodka"). I quickly covered the story of that label, and feel free watch that history here yourself. The other gift was a beverage as well (we Poles like gifts that are useful!), but it has quite a different story - it was mead, a drink that had been already known to humanity almost 4000 years ago. Afterwards CCP Gargant has officially confirmed that he will be the one running Alliance Tournament this year, and askedthe crowd if there will be any AT teams from Poland. There were two. So Gargant asked if BUFU is in C0ven. Kharim Katelo responded: "It's not BUFU that is in c0ven, it's c0ven that is with BUFU".
With the official part over, people quickly formed into small groups (who know each other from game), and of course everyone enjoyed themselves.
Some time has passed, and Gargant asked me how we should proceed with giving out the swag that Guard sent over a week before the event. Having no experience with this I asked Gargant if he had an idea himself. He did. We had an attendance list, so we've asked the crowd to give out a number, and then asked that person to the stage. People were being asked some trivia questions ("What are the names of the new Sister of EVE ships?") and given a reward when the answer was correct. Besides this, Gargant gave everyone a code for ship skins - either for an Iteron or Nefantar Mammoth. I don't know how Guard knew how many codes to send, because there was 47 people and exactly the same number of those codes!
The official part ended at about 23:00, but this was not the end of the party. Gargant and a bunch of players went on a Pub Crawl, which lasted almost until dawn!
A bit of background
I first spoke with Guard about player gathering in Poland when my blog was appointed an official fansite. Polish Community is a bit fragmented: there is C0VEN and BUFU, there is Unseen Academy, The Nameless Alliance, Exiled Ones, and the rest is either people playing in international corporations, or smaller Polish ones. I wanted to do this, because integrating all these small communities would be really cool.
Guard promised to get back to me regarding this and he did. So I've scouted some restaurants and pubs around Warszawa Centralna, and forwarded their pricings and offers to CCP. We've chosen the most appropriate venue, and CCP Guard reserved it for us (remotely). When it was a week before, he sent over some swag by DHL. In the meantime, I've designed the ID cards (with some excellent feedback from both my wife and from the Community) and then written a script, which downloaded all Corporation and Alliance names from the EVE API for the registered participant's character nicknames. This way all the IDs were filled automatically using Mail Merge Getting the gifts was the most tricky one, because almost all brands of vodka in Poland have some carvings on the bottle, so it's impossible to glue a new label on them (and the gift would be meaningless if it weren't a "Frachtówka"!).
Op success \o/
Everyone had a great time, and I'm sure we will repeat it in future! Organizing all this was a bit of a challenge (if you've ever herded a bunch of cats, you'll know what I mean), and I'm really glad everything went so smooth. I hope next time we will see more familiar faces from CCP (yes Mr G. , I'm looking at you ;-))!
But wait, Lukas is retired as a player, isn't he?
Well... I was. For the past six months I didn't have time to play games. It's slighly better now, so yes, you can say I'm back
Last week was full of busy evenings and afternoons, but the result was worth the effort!
First off, LMeve is now compatible with Crius API endpoints:
- /corp/IndustryJobs.xml.aspx endpoint has been changed to the new specs
- /corp/IndustryJobs.xml.aspx endpoint has been added
- YAML data from blueprints.yaml is now decoded and insterted into database
Secondly, new formulas are used to calculate the amount of materials required by industry jobs.
Lastly, YAML data is now used to populate "Traits" and "Bonuses" in Database. Oh, and I have almost forgotten, meta variants are now displayed as well:
As usual, code is available to download at GitHub.
A friend of mine, Ubentobox, was trying to install LMeve on his host, and encountered a series of problems, caused by oversimplifications in my code. To prevent others from facing the same problems, I have fixed all the issues that he faced during deployment:
- short PHP open tags '<?' are replaced with long ones '<?php'
- passwd.php is more intelligent now and is able to set or re-set admin password, without the need to manually edit the database
- update_yaml.php is more intelligent now and can either insert all YAML data into database, or just the specified files
- default cookiepath is now set to root '/', so it's easier to set-up LMeve in single site mode (cookiepath MUST be changed if multiple instances of LMeve are to be installed)
- there is no longer need to rename camelCase table names in Static Data Dump to lowercase. LMeve now uses table names exactly as they apper in Fuzzysteve's MySQL conversion.
Some new features I have planned will inculde:
- Facilities XML endpoint, which will replace manually-edited Assembly Array feature
- CREST Teams API
- CREST public facilities API
- Single Sign-On to connect characters to LMeve account (right now admins have to connect users to characters manually)
As per this dev blog by CCP FoxFour (@regnerBA), industry changes in Crius will also change the way Industry API works.
There will be no new endpoints, but old endpoints will be changed instead. This means old tools will no longer work unless their developers adapt them. But fear not, #devfleet has you covered!
Lockefox (@HLIBindustry) has published tools and sample API data to help other third party devs adapt their apps.
You can find his github repository here: https://github.com/lockefox/CriusDev
- scripts which handle the new BPO data (to use on this file: <sisi client path>\bin\staticdata\blueprint.db from your Sisi client)
- sample API outputs from the modified endpoints
Great job Lockefox! It's much appreciated!
PS. I will do my best to add these changes to LMeve before Crius deployment, but due to summer holiday season this might take a few days longer. Stay tuned!
Ponieważ z dumą ogłaszam oficjalny zlot graczy EVE Online w Warszawie, 30 lipca 2014, który uświetni swoją obecnością sam CCP Gargant z teamu Community!
GDZIE: Hard Rock Cafe
ul. Złota 59
KIEDY: 30.07.2014, startujemy o 19:00
Możesz już zacząć organizować transport i nocleg!
Q: Czy to aby na pewno oficjalny zlot?
A: CCP Guard właśnie potwierdził zlot: First Official player gathering in Warsaw
Q: Jak dojechać?
A: Planujemy zlot w ścisłym centrum Warszawy, więc pociągi zatrzymujące się na stacji Warszawa Centralna to najprostszy dojazd. Przed Pałacem Kultury zatrzymują się też prywatne busy i autobusy, więc z dojazdem nie powinno być problemu. Możesz też wybrać Polski Bus, który zatrzymuje się na stacji Młociny. Stamtąd wystarczy dojechać metrem do stacji Centrum. (mapka dojazdu)
Q: Ale 30 lipca to przecież środa, cóż za fatalny termin na zlot!
A: Wiemy o tym. Z drugiej strony tylko w tym terminie możemy gościć w Polsce CCP Garganta. Jednak jeśli zlot wypali, koledzy z CCP z pewnością odwiedzą nas ponownie.
Q: W jakich godzinach będzie zlot?
A: 19:00 - 23:00, przy czym nic nie stoi na przeszkodzie żeby zostać dłużej
Chcielibyśmy ocenić jak dużo osób wybiera się na event - dlatego proszę wypełnij formularz rejestracyjny pod tym postem. Z góry dzięki!
PS. Mail nie musi być prawdziwy, ale po evencie wystawię zdjęcia ze zlotu i namiary zostaną wysłane na podany w formularzu adres.
Do zobaczenia na miejscu!
If you are an EVE Online player, and you are from Poland, you should arrange a day off on 30th and 31th of July. Why?
Because I'm very proud to announce that on July 30th there will be an official Player Meeting in Warsaw, attended by no other, but CCP Gargant himself!
WHERE: Hard Rock Cafe
ul. Złota 59
WHEN: 30.07.2014, we start at 19:00
You can already start arranging accomodation and travel to a party in the hottest summer capital in the Central Europe!
Q: Is this official?
A: CCP Guard has just confirmed the event here: First Official player gathering in Warsaw
Q: How to get there?
A: We plan the event in the Warsaw downtown, so coming by train to Warszawa Centralna is probably the easiest way. Some buses and coaches which have a stop near Pałac Kultury will also work for you. It is also possible to travel with Polski Bus, which stops at Młociny station in Warsaw. You can then take the underground directly to the Centrum station. (downtown map)
Q: But July 30th is Wednesday, what a lousy timing for a gathering!
A: We are well aware of this. On the other hand it's the only way we can have CCP Gargant with us. But I'm pretty sure that after doing it once, we will be able to pull it off again, so everyone interested will be able to attend.
Q: What time will the event take place?
A: 19:00 - 23:00, but you can stay longer if you want.
If you already know that you're coming, please fill the short registration form below. Thanks!
See you there!
Jeśli wybierasz się na zlot ( wystarczy 90% pewność ), proszę wypełnij formularz poniżej. Dzięki!
Rejestracja została zakończona
Jeśli nie zdążyłeś/aś się zarejestrować, nie przejmuj się i przyjedź na zlot! Po prostu wypełnisz identyfikator markerem na miejscu
Hello internet spaceship industry moguls! With Crius and big changes to industry just around the corner, one would surely benefit from a contribution tracking tool such as LMeve.
I realize that, and despite the fact that I'm retired from the game, I still support the tools.
First, thanks to an amazing dev known as CCP FoxFour (@regnerBA) and his recent work on CREST & EVE API, LMeve will now display the list of POCOs owned by your Corporation (or Corporations) and tax rates set on each of them.
Another new feature is one that was well overdue - it even had a placeholder in the menu, but it was not completed before my retirement. Say hello to PVE Activity window. It shows how many missions and incursions have been run in a given month (based on the WalletJournal data; number of missions equals the amount of agent mission payouts and CONCORD payouts account for incursion sites run). A similar graph for PVP is in the works as well (will show kills vs losses).
Some bugs have been squished as well (for example all graphs will now show proper number of days for each month instead of hardcoded 31). Another bug was in poller code for POS list (StarbaseList.xml.aspx). Due to the way it was written (
INSERT ... ON DUPLICATE KEY UPDATE...;), all old POSs would continue to exist in the database, despite the fact they have been unanchored or destroyed. New code (
DELETE...; INSERT...;) removes all old POSs and updates them per latest API data. The same code was used for Pocos, so they should update correctly as well.
By the way, I have a patch ready for EVE: Crius industry changes (new ME and TE formulas), but I will hold it until this new expansion is released.
CCP is not updating the 3D models on their CDN automatically, which means that 3D preview will not work for a good deal of them (or will show old models instead, for example for Tristan or Moa). I have tweeted to @CCP_raRaRa, who is the person behind CCP WebGL, so we have to wait until he runs his model export scripts again.
Does it mean Lukas Rox is back?
If only life was so easy Nope, I'm still retired from EVE. This is just some necessary maintenance work on apps I've written for you guys!
You will need a host with:
- access to crontab (so most likely to shell as well).
- MySQL 5 or above
- PHP 5 or above
- about 250MB of free disk space (for icons and EVE Static Data Dump)
- EVE Online corporation API key(or keys)
First, go to https://github.com/roxlukas/lmeve/releases and download the latest stable version.
The trunk code is unstable and shouldn't be used in production.
Warning! The guide below is deprecated, see readme.md on LMeve GitHub page for the most recent one!
There is no installer currently, so there is some setup work to get LMeve to run
index.php and the website itself is in
./wwwroot/ directory. If you can set up your webserver root to this directory, please do so.
- Go to
./config/ directory, copy
config.phpand set it up according to your host
- Set up a random new
config.php, then generate admin password hash by using
- copy the password hash to clipboard
- Download current
Iconsfrom EVE Online Toolkit page:http://community.eveonline.com/community/fansites/toolkit/
- unpack all PNG files from
- unpack all PNG files from
./data/schema.sqlfile to MySQL database before using LMeve. Remember to set the db config options in
- If in
./data/there are any delta schemas, import them as well (up to the version you're installing)
- Import latest static data dump (can be in a different db schema for clarity, for example you can import lmeve db to
lmeveschema and static data in
sde_rubicon. LMeve will always use SDE schema set in
config.phpfile) You can download latest static data from Steve Ronuken's website:https://www.fuzzwork.co.uk/dump/
- If necessary, change table names to lowercase using script
- Access the database using phpmyadmin or other tool, go to
- Edit record for user
- Paste the password hash from clipboard in the
passfield afterwards you will be able to login as admin/admin . Password should be be changed in
Settingsas soon as possible.
- Add corp API key (or keys) to
cfgapikeystable. keyID goes to
keyID, vCode goes to
- Full corp API key works best, but the app will adjust the amount of visible information according to the rights it has been given.
- Set up API poller in cron to run every 15 minutes
*/15 * * * * [path-to-php]/php [path-to-lmeve]/bin/poller.php
- LMeve by Lukasz "Lukas Rox" Pozniak
- LMframework v3 by 2005-2014 Lukasz Pozniak
- rixxjavix.css skin by Bryan K. "Rixx Javix" Ward
- TheAhmosis and Razeu - it's their idea that I had the pleasure to wrap in code
- Crysis McNally - for excellent ideas and thorough testing
- Aideron Technologies - for excellent closed beta
- CCP Games - for making such a great game and providing API for us, developer kind, to tinker with
After yesterday's dev-blog about ship skins, most players again discuss the micropayment issues. Others discuss the technical aspects - instead of introducing 8 ship skins, maybe it should be possible to create your own, unique color sets?
Remember the game Homeworld? Even though it's several years old, it allowed changing the colors of the stripes on all ships in the fleet. Would that be possible to do in EVE Online? Could corporations have their own "stripe colors"?
The answer is YES, technically it's not very difficult*
* - I know for sure it's possible to do in CCP WebGL, but I do not have enough knowledge about EVE Online client code
When me and T'Amber talked about CCP WebGL, I remember we've discussed ship shaders being text files. What does it mean? Each CCP WebGL ship skin is simply an XML plaintext file that says which files contain the 3d model, what textures to load and all the other parameters (hue, specular, effects etc.) are set there as well, all in plain text.
How does that apply to fully customizable ship skins? Some parameters could be dynamically changed at runtime, for example Diffuse Color (hue). You wouldn't be freely able to change the entire textures, or shape of the ship, but you would get the Homeworld-like ability to change the colourable parts of the hull to any shade you want. Like Punkturis' neon pink? Change the hue to pink (#FF00FF) and set saturation to max. Like matte black? Change the saturation to zero and luminosity to low, and you'll get your black.
As an example, below is the color for Gallente ships from Tristan's .red file:
<MaterialDiffuseColor> <name>MaterialDiffuseColor</name> <value json="true">[0.2901961,0.3764706,0.3843137,1.0,]</value> </MaterialDiffuseColor>
for those who want to test, here's the same colour as HTML ( 0.2901961 * 255 -> convert result to hex )
What does it give us? Instanced ships items (i.e. unpacked ships) would have to contain a few more numbers, that are then used by the game client to replace the default Diffuse Color a moment before rendering the ship on screen. Would that put a lot of strain on GPU? A little bit, yes, because client would have to keep many more shaders at runtime, but the amount of actual texture files would be exactly the same.
Here I replaced the default Gallente color with this:
And this is the result (requires WebGL compatible browser):
Now that I'm not a CCP developer, I don't know if EVE Online client works exactly the same way as CCP WebGL. But I bet CCP knows that already
TL;DR: Hull colors are numbers, saved in plain text. You can easily change them a moment before displaying ship on the screen.