 |
|  |
 |
|
Richard Bruns
|
|
NC, USA
Nov 1999 time: 06:13
|
|
quote:

It worries me that this system does not shut off technologies. When a civilization is researching interstellar space travel it will still be allocating research point to the development of the bow and arrow.
 |
The current tech tree is designed so that this is not a problem. The Bow is an Application, and the relevant technology would be "Ranged Weapons" among other things. A bow might come at Ranged Weapons level 10 and Woodworking level 15. A plasma rifle might come at Ranged Weapons level 150 and Particle Physics level 140.
But some custom designed tech trees might require temination of some sort. I guess there could be a flag that simply stops advancement at a certain level, holds the level where it is, and cuts the tech out of the RP allocation. But if we are not careful, the players will aim for those points so they don't have to spend the RP on upkeep.
quote:

The only way that I can think of to get around this problem is to have an Activity object holding a list of technologies, and the proportion to go to each. Then, when it signals to the Technology object, it can work out the correct percentages.
 |
I assumed that was the plan all along. The Activity objects were meant to distribute the RP's using data they gathered from the other objects.
quote:

The connection between the actual unit or building, and the tech hierarchy can be achieved in one of two ways:
1. Inheritance. Every "thing" which is an Application inherits from a base Activity class.
2. Containment. Every "thing" which is an Application contains an Activity object, as described above, with the required properties.[q]
I don't understand why there is a direct connection between Activities and Applications. Activities determine how RP's are distributed to Technologies. The Technologies turn those RP's into tech levels. The tech levels then determine application effectiveness. The only direct connection I can think of is that creating an Application using the Economy model will generate RP's that are assigned to an Activity, since each Application is created by devoting resources to an Infraclass.
I don't know the proper programming terms very well, so please don't assume that I am telling you how to do something. I'm just trying to explain how we want the model we designed to work. If something I ask for is too difficult too implement, we can certainly make a few changes.
[q]The second option is much the better one, since it is more reasonable to have a military unit inherit from another military unit.
 |
I don't understand this one. Does it mean that you want one unit to be a prerequisite for another in the tech tree?
quote:

In addition, this option allows an Application to be influenced by more than one Activity, which can only add power to the game.
 |
This already happens indirectly. Technologies are influenced by one or more Activities, and Applications are influenced by one or more Technologies.
|
|
|  |
 |
|  |
 |
|
Gary Thomas
|
 |
New Zealand
Mar 2001 time: 17:13
|
|
Richard:
Sorry, my post had errors - my boss showed up as I was typing, and I panicked and sent the post. By the time I got back to edit it you had answered!
Here is what I meant to say:
The connection between the actual unit or building, and the tech hierarchy can be achieved in one of two ways:
1. Inheritance. Every "thing" which is an Application inherits from a base Application class which contains the requirements, etc.
2. Containment. Every "thing" which is an Application contains an ApplicationSpecification object, as with the required properties.
The second option is much the better one, since it is more reasonable to have a military unit inherit from another military unit. In addition, this option allows a number of Applications to have the same relationship to the tech structure, by using the same ApplicationSpecification object.
It will mean that other coders using the Application system will have to point their instances of objects at the correct ApplicationSpecification, which must be created by them, and registered with the tech structure as observable.
I hope this makes more sense.
Cheers
|
|
|  |
 |
|
Gary Thomas
|
 |
New Zealand
Mar 2001 time: 17:13
|
|
I really should give up this doing my posting from work. Unfortunately, my home email connection is 100 miles away, and I don't get to it until Friday. In the meantime, I have no telephone connection in my hotel room, and the cyber cafe around the corner is ridiculously expensive.
My post crossed your further comment!
What time of day is it where you are? It is 3pm Wednesday her.
The TechnologySet is specific to whatever entity has technologies. It may be a civilization, or a province or (heaven forbid) a map square. There is nothing in the technology coding that prevents any combination to be used.
The TechnologySet has a level value for each technology, for the particular entity (civilization, etc), and a link to the relevant Technology.
The Technologies themselves are unchanging, and the same for all civilizations.
The TechnologySet is required, because the calculation of tech rises has to be able to access the helper tech levels.
The TechnologySet will probably have its name changed to TechnologyLevels.
It is actually a hash map, with:
Technology object as the key
Level and NewLevel as data (float)
The process is:
1. Work through the TechnologySet, tech by tech
2. Pick up the Level for the tech
3. Look up the Technology object and get the help list, and the parameters
4. Look up each of the helpers in the TechnologySet and get the levels
5. Perform the calculations
6. Store the result in NewLevel
Then, when all have been calculated,
7. Work through the TechnologySet, tech by tech
8. Set the Level to NewLevel
Cheers
|
|
|  |
 |
|
Richard Bruns
|
|
NC, USA
Nov 1999 time: 06:13
|
|
quote:

Originally posted by Gary Thomas on 03-27-2001 09:57 PM
What time of day is it where you are? It is 3pm Wednesday her.
 |
Ah yes, the wonders of global connectivity. I am relaxing after classes while you are posting from work tomorrow.
By the way, here's how you can deal with unexpected boss visits:
1) Find some arcane portion of your company's webpage, or an industry webpage.
2) Copy that html file to your hard drive.
3) Put a bookmark to the hard drive file in the Favorites folder.
4) Memorize the keyboard shortcuts to that page from the Favorites folder.
You can type the shortcut really fact, and it will load up almost instantly. In less than a second, you can go from posting at Apolyton to stydying Section II-A-3 of your company's Programming Standards Manual. Then you can simply click "Back" and everything will be as it was.
The TechnologySet/TechnologyLevels sounds good. There has been talk of giving one of these to every ethnic group, so we can experiment with that.
quote:

The process is:
1. Work through the TechnologySet, tech by tech
2. Pick up the Level for the tech
3. Look up the Technology object and get the help list, and the parameters
4. Look up each of the helpers in the TechnologySet and get the levels
5. Perform the calculations
6. Store the result in NewLevel
 |
Sounds good for now. In future versions we will have equations for tech diffusion due to trade, conquest, and migration. That would happen between stwp 5 and 6.
Out of curiosity, are you the same Gary Thomas who posts in the Warlords Battlecry forums?
|
|
|  |
 |
|
Mark_Everson
|
 |
Canton, MI
Jan 1970 time: 00:13
|
|
Hi Gents, just a few miscellaneous comments.
Agree strongly with both of you that Everything possible should be read in from ini files and tunable (at their potential peril ) by playtesters.
quote:

For Demo 5, all activities will be associated with Infraclasses, as defined in the Economy model.
 |
Um, for demo 5 there is no tech model... won't even likely be hooked into the game for now, although we could maybe demo some things. What you say is true for demo 6, with the inclusion of military unit effectiveness to the economy you mentioned. At least that is my take on how the staging of such things should work. However with F_Smith's real life attack, and me taking over the stuff he was doing for d5 its possible things will go slowly for me, and tech will be much further along than I anticipate.
quote:

The TechnologySet/TechnologyLevels sounds good. There has been talk of giving one of these to every ethnic group, so we can experiment with that.
 |
Although that may be the preferred long-term solution, perhaps for simplicity in the first tests we should just hook up TechLevels to Civilization. Lord knows the playtesting for the model, and interpreting what's happening and why, is going to be tough enough with tech even at the civ level. So that's my vote anyway. We could have a TechUser interface and Civ would be the first thing that implements it.
|
|
|  |
 |
|  |
 |
|  |
 |
|  |
 |
|  |
 |
|
Gary Thomas
|
 |
New Zealand
Mar 2001 time: 17:13
|
|
Coding for the technology model and its editor is all but complete. I have had some problems coding the technology level change as a function of helpers and RPs. The formulae do not seem to be all that stable and have not been summarized recently. It is taking time to get a coherent picture.
The I and E parameters seem to be floating around - I don't know what to do with them. In passing, the symbol E is used for at least three different things in the model.
The final provisional draft definitive idea for the technology interface is:
code:
/**
* Title: TechnologyActivity
* Description: Technology specific aspects of activities
* Copyright 2001, the Clash of Civilizations Development Group
*
* @author Gary Thomas and Mark Everson
* @version 0.1, Date: March 27, 2001
*/
/**
* The general interface for all connections to the technology model.
*
* The calls are grouped according to their context.
*
* Definition:
* owner or Technology owner:
* any entity (civilization, province, map square, city, scientific genius
* character - the Einstein effect) that has a technology level profile.
* The system keeps a list of owners, and they can interact.
*
* In addition to this interface there are three static calls:
*
* Create a new Technology object for a new technology owner
* TechnologyInterface Technology.newInstance(String owner)
*
* Find a Technology object for a technology owner
* TechnologyInterface Technology.getInstance(String owner)
*
* Update the technology levels for all owners
* void Technology.update()
*/
public interface TechnologyInterface {
//---------------------- Affecting the interface itself -------------------
/**
* Remove this technology.
*
* This does not destroy the interface object, it just removes the owner
* from the owner's list. To get rid of the object, set it o null.
*/
public void remove();
//---------------------------- Other Technology ---------------------------
/**
* Clone this technology (the owner has split into two parts).
*
* The new interface will be a copy of the old one, with all the same
* levels
* @param newOwner the owner's name for the new interface
*/
public TechnologyInterface copy(String newOwner);
/**
* Merge this technology (two owners have merged)
*
* Note that this does not remove the (now) redundant owner.
* @param merging the name of the other owner
*/
public void merge(String merging);
//-------------------------- Technology levels ----------------------------
/**
* Get the level of a particular technology for this civilization
*
* @param name name of the technology
* @return the technology level for this technology
*/
public float getLevel(String name);
/**
* Set the level of a particular technology for this civilization
*
* @param name name of the technology
* @param level the technology level to be set
*/
public void setLevel(String name, float level);
//----------------------------- Applications ------------------------------
/**
* Application, method to determine whether an application is buildable
*
* @param name name of the application
* @return true if the application can be built
*/
public boolean isBuildable(String name);
/**
* Application, get the effect of an application from its name
* @param name name of the application
* @return the effect of technology on the application
*/
public float getEffect(String name);
//-------------------------- Research effects ----------------------------
/**
* Set the research effect related to an activity
*
* @param activityData the activity data
*/
public void addToResearch(String name, float value);
//--------------------------- Diffusion -----------------------------------
/**
* Set diffusion from neighbour
* @param neighbour name of neighbour
* @param effect the effect (0.0 - 1.0) of the diffusion
*/
public void setDiffusionFrom(String neighbour, float effect);
/**
* Set diffusion from neighbour
* @param neighbour TechnologyInterface of neighbour
* @param effect the effect (0.0 - 1.0) of the diffusion
*/
public void setDiffusionFrom(TechnologyInterface neighbour, float effect);
}
To use this:
1. For each technology owner, get an interface:
TechnologyInterface parisTech = Technology.newInstance("Paris");
If you need to find an existing interface, use:
TechnologyInterface londonTech = Technology.getInstance("London")
2. To get rid of an interface (when London burns, for example), use
londonInterface.remove();
3. If Paris splits into two different communes with the same tech levels, use
TechnologyInterface newParisTech = parisTech.copy("New Paris");
4. Then, when they reunite:
parisTech.merge("New Paris");
newParisTech.remove();
5. To get the tech level for a particular technology, use
float londonBottlers = londonTech.getLevel("Bottle washing theory");
6. To set the tech level for a particular technology, use
londonTech.setLevel("Bottle washing theory", 87.43);
7. For applications, to see if London can build an automatic washing machine, use
londonTech.isBuildable("Automatic washing machine");
8. To get the effectiveness of said application, use
float washerbility = londonTech.getEffect("Automatic washing machine");
9. To add some research to an activity, use
addToResearch("Cleanliness", 32.2);
10. To update all the technology levels in the game at the end of a turn, use
Technology.update()
I have also added a couple of diffusion knoledge methods which I will discuss later:
public void setDiffusionFrom(String neighbour, float effect);
public void setDiffusionFrom(TechnologyInterface neighbour, float effect);
That's enough for one post.
Cheers
|
|
|  |
 |
|  |
 |
|
Richard Bruns
|
|
NC, USA
Nov 1999 time: 06:13
|
|
I and E have been dropped out of the picture for now.
What were the other two uses of E?
Yes, we can certainly eliminate the 2Z/2. As I said, that was simply a rough draft of an idea. The ActivityEffect can simply be stored as a number. These numbers would typically be between 1 and 64. The RP distribution would then be based on a proportion. Example:
A CivilizationActivity, Infrastructure, has the following techs with ActivityEffect numbers (Tier 3 techs omitted for brevity):
Architecture, 50
Civil Engineering, 60
Construction, 30
Roads, 35
Masonry and Cement, 20
Mapping and Surveying, 20
Mechanical Engineering, 10
Architecture would then get 50/225, or 22.2%, of the RP's generated by investment in the Infrastructure infraclass.
Hmm, would it be easier to have the techs store a percentage? So Architecture would be assigned 20% Infrastructure. The designer would then have to make sure that the percentages added up to 100%, but it might be a more intuitive way to assign the values.
At a glance, your plan looks good, but I haven't taken time to go over it well.
I wish I has known about the ,sup. tags earlier. That would have made the equations look a lot better. Where can I go to get an overview of useful html code?
|
|
|  |
 |
|
Gary Thomas
|
 |
New Zealand
Mar 2001 time: 17:13
|
|
From Mark:
quote:

One thing you need:
addToResearch(String name, float value) needs to also support adding RPs directly to a tech, a opposed to an activity. That is for the case where Roosevelt says, Here's $2B (1942 dollars), go find out how to build an atomic bomb. Or the modern US govt says use $X for basic Physics research. If you can already do this, then its just the doc that needs to be updated.
 |
One way of achieving this is to create the appropriate Activity for each such transfer, with a single technology as the recipient. Doing it this way has the advantage of using a single mechanism.
After all, spending on basic research (such as bottlewashing) is an activity. Also, in spite of the goverment's efforts there might be some spill-over into another type of research, which the activity system can reflect.
On the other hand, if the idea is that any technology can have research applied, then the program could be easily modified to allow a technology name as well as an activity name.
Cheers
|
|
|  |
 |
|  |
 |
|
Gary Thomas
|
 |
New Zealand
Mar 2001 time: 17:13
|
|
It turned out that the code, which is a modification of Mark's original code, had the right equations. I just got the wrong ones when I was trying to summarize it.
quote:

You can get the tech spreadsheets at My website or the Clash website in the tech section.
 |
Getting equations from a spreadsheet is unbelievably tedious and error prone. Going from the correct equations is much better.
The code, as far as the model goes, is now complete and I am working on the test harness.
There are, however, gaps in the model, or perhaps in my understanding of it.
There are various mentions of "when the technology is first discovered" or "the starting level for the technology". There is nothing in the equations to indicate how this works. From an earlier comment that general technologies ("missile weapons") cover the whole gamut from throwing a rock to throwing an ICBM, I rather thought that all technology owners start with all technologies, at however primitive a level. Is this so?
If not, what is the triggering mechanism?
In the main Clash menu, the description of the tech model starts with a differential equation. I suspect the equation is wrong - it bears a close resemblance to a generalized logistic (and the text suggests that a logistic is intended), but for a logistic, the "RP" (x) term should be "tech level" (y). I haven't checked whether the equations reflect the solution of the differential equation. There is, presumably, some theoretical basis for the equation, otherwise why include a strange term like 1/(log 2) or 1/(log M)?
Cheers
|
|
|  |
 |
|
Gary Thomas
|
 |
New Zealand
Mar 2001 time: 17:13
|
|
I will implement that for the first coding release for ClashD5
I am about halfway through the unit testing of the code. Should be available by Easter, complete, documented, and working.
At that point I would like to clarify all the issues relating to the model. There are quite a few parameters whose use seems a bit dubious, or at least unclear to me. I would like to be able to include in the JavaDoc system an exact specification of what the code does.
Just as an example, what possible reason is there for any technology to start at a value other than zero?
The editor will allow editing of TechnologyData, ApplicationData and ActivityData. In this context all of these relate to their impact on technology only. It will be quite simple to add other aspects of these objects, or to add other objects such as EthnicGroupData, MajorReligionData, or whatever.
Cheers
[This message has been edited by Gary Thomas (edited April 08, 2001).]
|
|
|  |
 |
|
Richard Bruns
|
|
NC, USA
Nov 1999 time: 06:13
|
|
The tech system is defined so that a tech level of 100 represents the highest publicly known implementation of a certain technology as of January 1, 2000. Yes, it's quite arbitrary, but we needed a concrete baseline. This definition, combined with the rule that 10 levels equals double the knowledge or skill, means that the technology will often have to start at a fairly high level.
Consider Genetic Engineering as a Tier 3 technology. We look at what it could do in 2000 and then trace backwards to what it could do when it first started. WE aren't measuring raw data accumulated, we are looking at the practical use of the skill. I'd estimate that this process is about sixteen times as effective and does sixteen times as much as when they first developed it. So if it was at level 100 in 2000, then it would have to start at level 60 in 1980.
|
|
|  |
 |
|
Gary Thomas
|
 |
New Zealand
Mar 2001 time: 17:13
|
|
quote:

The tech system is defined so that a tech level of 100 represents the highest publicly known implementation of a certain technology as of January 1, 2000. Yes, it's quite arbitrary, but we needed a concrete baseline. This definition, combined with the rule that 10 levels equals double the knowledge or skill, means that the technology will often have to start at a fairly high level.
 |
I am afraid that I do not think that this is a very good idea. A new technology (nanotechnology, for example) which is embryonic at 2000 would still get a 100 rating. By the year 2100 it will be something like level 20000. My personal preference would be to define a "mature level" for a technology, and set that to 100, regardless of the year at which it was achieved.
I am uncertain in other areas. Assuming that "the internal combustion engine" would not be an application, but rather an applied technology (it is certainly not a unit), the history of the internal combustion engine, under this system, effectively, has gone from something like 90 to 100 in a hundred years.
In fact most specific technologies of this kind do not improve very greatly. There are, of course some exceptions - electronics and its spin-offs are obvious examples.
Since the "doubling" is utterly subjective, it is actually just adding another parameter without, as far as I can see, any practical contribution to the game's playability or realism. The growth rate factor already adjusts for scale.
Cheers
|
|
|  |
 |
|
Richard Bruns
|
|
NC, USA
Nov 1999 time: 06:13
|
|
quote:

Since the "doubling" is utterly subjective, it is actually just adding another parameter without, as far as I can see, any practical contribution to the game's playability or realism. The growth rate factor already adjusts for scale.
 |
I don't understand. The doubling is not subjective at all. It is central to the operation of the whole system. The effect on applications and as helper techs depends on the scaling rule where 10 levels is double the ability.
quote:

A new technology (nanotechnology, for example) which is embryonic at 2000 would still get a 100 rating. By the year 2100 it will be something like level 20000
 |
Remember that the tech level is a logarithmic scale. 110 is twice as good as 100. Sending the tech to a level of 200 means that its effectiveness has been multiplied by 210, or 1024. That is an enormous change in power and usefulness.
The internal combustion engine has become quite a lot more effective. Compare the difference between a model T and the best modern car available. The speed, range, efficiency, and load carrying capacity have been multiplied by at least eight, putting that tech at a start of about 70.
Besides, I don't see anything wrong with starting a tech at level 90. If skill only doubles in the time period, that seems a reasonable thing to do.
I have tried to make a system that would make it easy to create an accurate tech tree. By referencing the modern world instead of some arbitrary value, I can know exactly what a tech level means. I know instantly that "60" means 1/16th as good as what we have today. There is no question about what the number represents.
Since I will probably be the one entering all the numbers, this is very important. If I have to invent some arbitrary ideal level for every tech, then it will take me a lot longer and be very hard to debug. How does anyone else know what I mean by the 'mature level' for genetic engineering? How can I describe that to the person who makes a military unit? If there isn't any good, clear standard, then nobody will know what a tech level means.
Remember that the numbers in the core model do not have to be the ones seen by the player. They are for internal game mechanics. Most of the time, the interface will have no numbers at all. The numbers only matter if someone is micromanaging and shooting for a particular application, and then all we have to say is "Raise your Chemistry tech by 8.2 levels to get Gunpowder." They don't need to see the actual levels at all.
|
|
|  |
All times are GMT. The time now is 05:13. Apolyton Time is 00:13. |
top of page
|
|
|
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is ON
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|