The Clash
of Civilizations

Coding The "Society Model" Structure

Models for Society 

All the things we may generally refer as "social issues" like politics, government, revolutions, culture evolution, religion, etc., appear to be inevitably linked with each other. It isn't easy to draw lines and create individual modeling for all the social effects we'd desire for Clash. This is why the three models proposed here covering society and its behavior should be seen as one, like sub-models of something bigger. Coherency between them has been carefully taken care of. Each one performs a particular task providing many of the elements we want, but some of the most interesting social effects are a result of the interactions between them three.

The three models are the Social Model, the Government Model and the Riots Model. I suggest you to read them in this same order for better understanding. This is what they do in a very general sense:

Social Model: Simulates culture evolution.

Government Model: Simulates politics within the civ's government.

Riots Model: Simulates people's discontent and what they do about it.

Note: Check out the new Coding The "Society Model" Structure!

   

Coding The "Society Model" Structure Version-2
November/2001

The Riots Model (or Happiness Model), Social Model and Government Model can be seen as parts of a bigger model I'll call the "Society Model". In terms of coding it's better IMO to consider the Society Model rather than the individual 3 models. At least for coding the structure (objects and their relations).

Although my knowledge of OO-coding is very poor, I present here info that should help identify the objects and variables needed. This should only be seen as a base from where real coders can start their work.

The typology considered in this text includes:

Classes: things I see should be classes in terms of OO-coding.

Objects: "copies" of classes defined.

Variables: variables that, unless otherwise specified, are real.

Constants: parameters that are defined prior to playing the game via default settings or scenario designing and that stay constant through game play.

--------------------------

The game has:

Civs

Religions (objects of the RELIGIONS class)

Social Class Definitions (objects of the SOCIALCLASSDEF class)


The civ has:

Provinces (objects of the PROVINCE class)

A (central) government (object of the GOVT class)

A dynamic list of available regimes (objects of the REGIMES class)

An Unrest Status (variable)

Empire's Stability - ES (variable)


The SOCIALCLASSDEF class has:

A (social class) name (string)

An Ethics Social Role (constant)

A Warfare Social Role (constant)

A Kapital Social Role (constant)

A Labor Social Role (constant)

A Human Social Role (constant)

An Administrative Social Role (constant)

List of Events Multipliers (see notes at the end)


The PROVINCE class has:

Ethnic Groups (objects of the ETHNIC GROUP class)

Infrastructure (object of the INFRA class)

A Local Government (object of the LOCALGOVT class)

Present Religions (objects of the PRESENTRELIGIONS class)

Province Isolation - PI (variable)

A Government Nationality's Force - GNF (variable)

* Note: Ethnic Groups can be coded as being in mapsquares instead of provinces. That's alright and at least for the Society Model it makes no difference. The coding decision should lie in other aspects of the game, such as military implications.

A LOCALGOVT class has:

An Autonomy Level (variable)

An Administration Effectiveness Level - AEL (variable)


The INFRA class has:

a list of several types of infrastructure, among them:

Institutional Infrastructure - ININ (variable)

A dynamic list of religious infrastructure (variables). The list length is determined by the number of objects of the PRESENT RELIGIONS class that exist in the province.


The PRESENT RELIGIONS class has:

Faith Points (variable)

An identifier (a pointer to one of the game religions)


The RELIGIONS class has:

A name (string)

A type (variable (boolean))

A Family value (variable)

An Attractiveness value (variable)

A Holy Land (indicates a mapsquare)

And a Moral Code (object of the MORALCODE class)


The ETHNIC GROUP class has:

A nationality (string)

A population (variable (integer))

A religion (pointer to one of the game religions)

A Religious Discrimination Factor - RDF (variable)

An Ethnic Discrimination Factor - EDF (variable)

A Cultural Profile (object of the CULTURALPROFILE class)

Tendency Values (object of the CULTURALPROFILE class)

Social Classes (objects of the SOCIALCLASS class)


The CULTURALPROFILE class has:

Basic Attributes (object of the BASICSOCIALATRR class)

A Moral Code (object of the MORALCODE class)


The BASICSOCIALATTR class has:

Traditionalism (variable)

Nationalism (variable)

Land Connection (variable)

Importance of Religion - IR (variable)

Corruption (variable)


The MORALCODE class has:

Ethnic Tolerance - ET (variable)

Religious Tolerance - RT (variable)

Aggressiveness - AGG (variable)

Asceticism - ASC (variable)

Individualism - IND (variable)

Obedience - OBD (variable)

Natural Affinity - NA (variable)


The SOCIALCLASS class has:

A Definition (pointer to an object of the SOCIALCLASSDEF class)

A preference for Directed Negotiated Policies (object of the DNP class)

A Govt_DNP-SocialClass_DNP distance (variable)

A Ruler_DNP-SocialClass_DNP distance (variable)

An array of regime support shares (see notes at the end)

A demographic share (variable)

Pro-Active Feelings - PAFs (object of the PAFS class)

Events Probabilities (object of the EVENTSPROBS class)

A PCI (variable)

A share of Political Power in the Military Political Block (variable)

A share of Political Power in the Religious Political Block (variable)

A share of Political Power in the Capitalists Political Block (variable)

A share of Political Power in the People's Political Block (variable)

A share of Political Power in the Bureaucracy's Political Block (variable)

A (total, nominal) Political Power (variable)


The PAFS class has:

A Nationalistic Rebellion Feeling - NRF (variable)

A Self Determination Feeling - SDF (variable)

An Anti-Discrimination Feeling - ADF (variable)

A Bad Policies Feeling - BPF (variable)

A Poor Welfare Feeling - PWF (variable)

A Revolutionary Feeling - RF (variable)

A Replace Ruler Feeling - RRF (variable)


The EVENTSPROBS class has:

A Verbally Exposing Discontent Probability (variable)

A Riots Prob. (variable)

A Revolutionary Forces Formation Prob. (variable)

A Guerrilla Forces Formation Prob. (variable)

An Attempt to Murder the Ruler Prob. (variable)

An Army Betrayal Prob. (variable)

A Military Coup Prob. (variable)

A Declaring Independence Prob. (variable)

A Rebel Duke Prob. (variable)


The GOVT class has:

A Current Govt Profile (object of the GOVTPROFILE class)

A Future Govt Profile (object of the GOVTPROFILE class)

A Conservative Govt Profile (object of the GOVTPROFILE class)

A Preliminary Govt Profile (object of the GOVTPROFILE class)

A Nominal Political Structure (object of the POLSTRUCTURE class)

A Real Political Structure (object of the POLSTRUCTURE class)

The People's Political Block Profile  (object of the GOVTPROFILE class)

The Capitalists' Political Block Profile (object of the GOVTPROFILE class)

The Religious Political Block Profile (object of the GOVTPROFILE class)

The Military Political Block Profile (object of the GOVTPROFILE class)

The Bureaucracy's Political Block Profile (object of the GOVTPROFILE class)

A Nationality (string/identifier)

An Official Religion (string/identifier)

A Dominant Religion (string/identifier)

A Code of Law (object of the MORALCODE class)

A Philosophy (object of the MORALCODE class)

A Ruler's Bribes level (variable)

A Ruler's Goons Squad level (variable)

A Propaganda level (variable)

An Internal Intelligence Services level (variable)


The GOVTPROFILE class has:

Directed Negotiated Policies (object of the DNP class)

A Political Structure  (object of the POLSTRUCTURE class)

Regime Policies (object of the REGIMEPOLICIES class)


The DNP class has:

Civil Rights (variable)

Foreign Affairs (variable)

Ethnic Discrimination (variable)

Religious Discrimination (variable)

Slavery (variable)

Tax Rate (variable)


The POLSTRUCTURE class has:

Ruler's Political Power (variable)

Religious Political Block Political Power (variable)

Capitalists' Political Block Political Power (variable)

Military Political Block Political Power (variable)

People's Political Block Political Power (variable)

Bureaucracy Political Block Political Power (variable)


The REGIMEPOLICIES class has:

Private Property (variable)

Social Policies (variable)


The REGIMES class has:

A name (string/identifier)

A Political Structure (object of the POLSTRUCTURE class)

Regime Policies (object of the REGIMEPOLICIES class)

A Govt-Regime Distance (variable)

A Ruler-Regime Distance (variable)

A Knowledge Level - KL (variable)

A Base Attractiveness Value (constant)

A Development Level (variable)

A Banning Factor (variable)

A (total, nominal) Political Power (variable)

------------------

Final notes:

1) I found troubles finding the right "place" for Events (Riots Model) and the approach I took for structure may not be the best. Events have a probability of happening computed using PAF values. Each event should have a set of "instructions" defining what should happen in the game when the event takes place. So, one might say that an Event is an object, with a probability and a set of instructions. But since instructions can be too different from one event compared to another,  I'm not sure. The other aspects of events is that not all social classes can "call" all events. Slaves, for example, shouldn't do a military coup. That's why in the SOCIALCLASSDEF there's a list of "multipliers". Supposedly, there's one multiplier per event and each takes the value 1 or 0 if the social class can or can't call the event. The multipliers are used then when calculating event probabilities multiplying each the respective probability equation to send to zero the probability for an event the social class shouldn't call. As I presented in the text, it works, but maybe there's a better way to do it.

2) The array of support shares in the SOCIALCLASS class should store the fraction of the social class that supports a particular regime. For example, if there're two regimes people can opt to, monarchy and democracy, and if the social class is divided between these options with, say, 40% and 60%, then these two numbers must be store there.

 


We Want Your Feedback! 
Contact us today or join in on the forum!
Project Lead: Mark Everson,  Web Master: Dominic
Copyright © 99-2001 The Clash of Civilizations Team