Programmer's Wiki
Advertisement
to about
game.about
end

to adjusthappy
make "city.happy :city.happy+(:city.colosseums/5)
if :city.army/:city.population < 0.8 [
	make "city.happy :city.happy+(:city.army/10)
]
if :city.army < 0 [
	make "city.happy :city.happy-1
	;GET SOME TROOPS FOR ****s SAKE!!!!111
]
make "city.happy int :city.happy
end

to adjusthealth
make "city.health :city.health
end

to attack
ifelse :barbarian.presence = 1 [
	ifelse :city.army > 0[
		localmake "temp (sentence [The troops of the] :player.civ.name [now ride out in true glory against the Barbaric tribes!])
		print :temp
		if :tech.archery = 1 [firststrike]
		make "attackstr RANDOM :barbarian.number
		make "defencestr RANDOM :city.army
		make "battle :attackstr - :defencestr
		;If battle is positive then defenders lose two soldiers
		;If battle is negative then attackers lose two soldiers
		;If battle is zero then both sides lose one soldier
		if :battle > 0 [
			make "city.army :city.army - 2
		print [Our troops have been killed!]
		]
		if :battle < 0 [
			make "barbarian.number :barbarian.number - 2
		print [Our troops have bravely warded off those unruly barbarians!]
		]
		if :battle = 0 [
			make "barbarian.number :barbarian.number - 1
			make "city.army :city.army - 1
		print [A nice attempt to fight, but neither side won...]
		]
		if :barbarian.number < 0 [
			make "barbarian.number 0
			make "barbarian.presence 0
		]
	][
		localmake "temp (sentence [Note! The ] :player.civ.name [does not have any troops!])
		print :temp
	]
][print [There are no barbarians!]]
end

to barbariansattack
if :barbarian.presence = 1 [
	print [The barbarians are attacking our city!]
	ifelse :city.army > 0 [
		;Kills army
		if :tech.archery = 1 [firststrike]
		make "attackstr RANDOM :barbarian.number
		make "defencestr RANDOM :city.army
		make "battle :attackstr - :defencestr
		;If battle is positive then defenders lose two soldiers
		;If battle is negative then attackers lose two soldiers
		;If battle is zero then both sides lose one soldier
		if :battle > 0 [
			make "city.army :city.army - 2
		print [Our troops have been killed!]
		]
		if :battle < 0 [
			make "barbarian.number :barbarian.number - 2
		print [Our troops have bravely warded off those unruly barbarians!]
		]
		if :battle = 0 [
			make "barbarian.number :barbarian.number - 1
			make "city.army :city.army - 1
		print [A nice attempt to fight, but neither side won...]
		]
		if :barbarian.number < 0 [
			make "barbarian.number 0
			make "barbarian.presence 0
		]
	][
		;Kills civilians
		make "battle RANDOM :barbarian.number
		make "city.population :city.population - :battle
		localmake "temp (sentence :battle [civilians have been killed in this attack!])
		print :temp
		if :city.population < 0 [game.gameover]
	]
]
end

to barbarianscome
localmake "temp RANDOM 100
localmake "temp :temp/100
if :temp < :barbarian.comechance [
	print [Barbarians have been spotted near our city!]
	make "barbarian.number :barbarian.number + RANDOM 5
	make "barbarian.presence 1
	localmake "temp (sentence [There are, as our intelligence experts estimate, ] :barbarian.number [outside the city at this time.])
	print :temp
]
end

to build
ifelse :city.prod > 0 [
	make "choice 0
	print [What do you want to build?]
	make "choice selectbox [Choose a building to build...] [[Farm] [Mine] [Lumbermill] [School] [Storehouse] [Colosseum] [Wonder]]
	if :choice = 1 [build.farm]
	if :choice = 2 [build.mine]
	if :choice = 3 [build.lumbermill]
	if :choice = 4 [build.school]
	if :choice = 5 [build.storehouse]
	if :choice = 6 [build.colosseum]
	if :choice = 7 [build.wonder]
][
	localmake "temp (sentence [The] :player.civ.name [does not have any Production!])
	print :temp
]
;note that building two storehouses gives no bonus
;make "city.farms 10
;make "city.mines 1
;make "city.lumbermills 1
;make "city.nearbywood 5000
;make "city.nearbywood.growthrate 1.5
;make "city.schools 0
;make "city.storehouses 0
;make "city.colosseums 0
;make "city.wonders 0
;;Farms give food
;;Mines give gold and production
;;Lumbermills use up nearby woodland but gives lumber
;;Schools give extra research
;;Storehouses prevent spoilage by doubling spoilage time
;;Colosseums give happiness bonus
;;Wonders make a lot of gold each turn
;;All buildings take up wood to build
;;Mines and Wonders use gold as well
end

to build.colosseum
ifelse (AND :city.prod>60 :city.wood>100) [
	print [Your workers build a colosseum.]
	make "city.colosseums :city.colosseums+1
	make "city.prod :city.prod-60
	make "city.wood :city.wood-100
][
	print [Sorry, your civilisation needs more resources.]	
]
end

to build.farm
ifelse (AND :city.prod>10 :city.wood>5) [
	print [Your workers build a farm.]
	make "city.farms :city.farms+1
	make "city.prod :city.prod-10
	make "city.wood :city.wood-5
][
	print [Sorry, your civilisation needs more resources.]	
]
end

to build.lumbermill
ifelse (AND :city.prod>40 :city.wood>25) [
	print [Your workers build a lumbermill.]
	make "city.lumbermills :city.lumbermills+1
	make "city.prod :city.prod-40
	make "city.wood :city.wood-25
][
	print [Sorry, your civilisation needs more resources.]
]
end

to build.mine
ifelse (AND :city.prod>20 :city.wood>15 :city.gold>20) [
	print [Your workers build a mine.]
	make "city.mines :city.mines+1
	make "city.prod :city.prod-20
	make "city.wood :city.wood-15
	make "city.gold :city.gold-20
][
	print [Sorry, your civilisation needs more resources.]	
]
end

to build.school
ifelse (AND :city.prod>30 :city.wood>30) [
	print [Your workers build a school.]
	make "city.schools :city.schools+1
	make "city.prod :city.prod-30
	make "city.wood :city.wood-30
][
	print [Sorry, your civilisation needs more resources.]	
]
end

to build.storehouse
ifelse (AND :city.prod>20 :city.wood>15) [
	print [Your workers build a storehouse.]
	make "city.storehouses :city.storehouses+1
	make "city.prod :city.prod-20
	make "city.wood :city.wood-15
][
	print [Sorry, your civilisation needs more resources.]	
]
end

to build.wonder
ifelse (AND :city.prod>1000 :city.wood>500 :city.gold>500) [
	print [Your workers build a Wonder of the World!]
	make "city.wonders :city.wonders+1
	make "city.prod :city.prod-1000
	make "city.wood :city.wood-500
	make "city.gold :city.gold-500
][
	print [Sorry, your civilisation needs more resources.]	
]
end

to collect
ifelse :collects > 0 [
	make "city.food :city.food + :city.farms
	if :tech.archery = 1 [make "city.food :city.food + 1]
	make "city.gold :city.gold + :city.mines
	if :tech.bronze = 1 [make "city.gold :city.gold + :city.mines*0.1]
	if :tech.iron = 1 [make "city.gold :city.gold + :city.mines*0.3]
	make "city.wood :city.wood + :city.lumbermills*2
	make "city.nearbywood (:city.nearbywood - (:city.lumbermills*2))*:city.nearbywood.growthrate
	make "city.prod :city.prod + (:city.mines/2)
	make "city.prod :city.prod + (:city.workers*2)
	if :tech.bronze = 1 [make "city.prod :city.prod + :city.mines*0.1]
	if :tech.iron = 1 [make "city.prod :city.prod + :city.mines*0.3]
	make "collects :collects-1
	print [You have harvested the resources that your peasants have been producing.]
	localmake "temp (sentence [You have] :collects [collection credits remaining.])
][
	print [You can't do that! You have no collection credits!]
	print [Wait a few turns first...]
]
end

to debt
if :city.gold < 0 [
	localmake "temp (sentence [The] :player.civ.name [is broke! Its soldiers are no longer willing to fight!])
	print :temp
	if :city.army > 0 [
		make "city.army :city.army-1
		make "city.population :city.population+1
	]
]
end

to dilemma
localmake "dilemmatoday 0
make "choice 0
make "dilemmatoday RANDOM 3
if "dilemmatoday = 0 [dilemma.0]
if "dilemmatoday = 1 [dilemma.1]
end

to dilemma.0
ifelse health < 3 [
	print [Disease is plaging our city.]
	print [Health is at very low levels and our population are all ill.]
	print []
	print [Your adviser suggests you do one of the following:]
	print [* Eradicate the problems by killing all the diseased animals and people or otherwise forcing them to leave the city.]
	;Happiness -3
	;Health +1
	;Gold -10
	print [* Employ more doctors for our hospitals in our city to provide free healthcare services to our people.]
	;Happiness +2
	;Health +3
	;Gold -50
	print [* Ignore the problems.]
	;Happiness -1
	;Health -1
	;Population -3
	make "choice selectbox [Dilemma...] [[Use force!] [Let's be nice...] [Bah! It's their problem!]]
	if :choice = 1 [
		make "city.happy :city.happy-3
		make "city.health :city.health+1
		make "city.gold :city.gold-10
	]
	if :choice = 2 [
		make "city.happy :city.happy+2
		make "city.health :city.health+3
		make "city.gold :city.gold-50	
	]
	if :choice = 3 [
		make "city.happy :city.happy-1
		make "city.health :city.health-1
		make "city.population :city.population-3
	]
	if :choice = 0 [dilemma.0]
	make "choice 0
][nodilemma]
end

to dilemma.1
localmake "temp (sentence [A high-ranking officer in the Army of the] :player.civ.name [has recently been accused of corruption and has been proved guilty.])
print :temp
print [This news has spread around the city and suburbs, and the people are insisting that you fire that man.]
print [However, he is the best general in the army, and his departure may cause the army morale to fall.]
print []
print [Your adviser suggests you do one of the following:]
print [* Fire the general.]
;Happiness +2
;Gold +10
;Army size -20
;Population +20
print [* Ignore the problem.]
;Happiness -1
;Gold -25
make "choice selectbox [Dilemma...] [[Fire that man...] [Who cares?]]
if :choice = 1 [
	make "city.happy :city.happy+2
	make "city.gold :city.gold+10
	make "city.army :city.army-20
	make "city.population :city.population+20
]
if :choice = 2 [
	make "city.happy :city.happy-1
	make "city.gold :city.gold-25
]
if :choice = 0 [dilemma.0]
make "choice 0
end

to firststrike
;Available with Archery
make "damage RANDOM (:city.army/2)
make "barbarian.number :barbarian.number - :damage
end

to game.about
print [Ancient Civilisations]
print [Version 1.0c]
print [Created by jftsang, All Rights Reserved]
print [Copyright © 2007 jftsang]
print [The copyright holder has irrevocably released all rights to this, so effectively this game is in the public domain.]
print [Email jftsang@logogames.org for any queries, or to report bugs.]
print []
print [Type START to begin your civilisation...]
end

to game.gameover
print []
print [Your civilisation has been totally destroyed!]
print [GAME OVER!!!]
info
print []
print []
print []
game.about
end

to game.reset
;This file contains all the starting numbers and the parameters
;Feel free to change this file if you want to change the things here
make "player.ingame 0
make "player.civ 0
make "player.civ.name []
make "player.name []
make "barbarian.number 0
make "barbarian.presence 0
make "barbarian.strength 0
make "barbarian.comechance 0.05
;Barbarians randomly come to the city and stay
;Barbarians will attack the troops and then will attack civilians every day
;Train troops to defend against barbarians
;Barbarian.Number represents the number of barbarians
;but they only come if Barbarian.Presence is true
;Their strength affects the number of citizens killed per attack
make "city.population 10
make "city.workers 10
make "city.army 0
make "city.scientists 0
;Population use up food and can be changed into workers and soldiers
;Workers can farm and can build things by increasing production
;Soldiers defend the city from barbarians and animals
;Scientists give research points
make "city.happy 0
make "city.health 0
;Happiness is dependant on dilemma choices
;If there are frequent attacks from barbarians then happiness decreases
;With Writing tech happiness increases
;Health is dependant mainly on dilemmas
;Some buildings improve healthcare
;If health is below zero more food is used up every turn
make "city.farms 10
make "city.mines 1
make "city.lumbermills 1
make "city.nearbywood 5000
make "city.nearbywood.growthrate 1.5
make "city.schools 0
make "city.storehouses 0
make "city.colosseums 0
make "city.wonders 0
;Farms give food
;Mines give gold and production
;Lumbermills use up nearby woodland but gives lumber
;Schools give extra research
;Storehouses prevent spoilage by doubling spoilage time
;Colosseums give happiness bonus
;Wonders make a lot of gold each turn
;All buildings take up wood to build
;Mines and Wonders use gold as well
make "city.food 120
make "city.gold 1
make "city.prod 0
make "city.wood 10
;Food is used for citizens and troops
;Gold is used for Mines and soldiers
;Production is used when building anything
;Wood is used for buildings
make "tech.bronze 0
make "tech.iron 0
make "tech.archery 0
make "tech.writing 0
make "tech.philosophy 0
;These are the available technologies
;They are bought with the research points in City.Scientists
;Research points are earned from schools and other sources
;Bronze Working and Iron Working improve the strength of soldiers, and give extra Production from Mines
;Archery gives a first strike ability to soldiers, so they defend better
;It also allows hunting, which gives extra food per turn
;Writing gives extra happiness
;Writing and Philosophy give extra research points every day
;Philosophy also means schools are not as expensive in terms of Gold and Production
make "day 1
make "spoilagetime 7
make "spoilagerate 0.3
;Every spoilagetime days spoilagerate of remaining food and wood is discarded
;This is to simulate the rotting of food and wood
;With a storehouse this period is doubled to prevent spoilage
make "collects 1
make "researches 1
;Credits for collecting and researching
;Every turn one credit is given
;Every time the player collects resources or researches a credit is used
;One may want to save up resources in this way before collecting and losing it to spoilage
end

to game.start
initall
print [Welcome to Ancient Civilisation 1.0!]
print [Loads of bugs are present. Email the developer jftsang@hotmail.com to report bug.]
print []
game.reset
print []
print [What is your name, good sire?]
make "player.name questionbox [Ancient Civilisation] [What is your name, honourable leader?]
print [Choose your civilisation...]
make "player.civ selectbox [Select a civilisation...] [Greeks Romans]
player.civ.determine
localmake "temp (sentence "Greetings, [my honourable lord] :player.name [of the] :player.civ.name)
print :temp
make "player.ingame 1
end

to game.welcomegreek
print [Welcome to Ancient Greece!]
end

to game.welcomeroman
print [Welcome to Ancient Italy!]
end

to grow
if :city.food > 0 [
	make "city.population :city.population+1
	make "city.food :city.food-1
	localmake "temp (sentence [The fine] :player.civ.name [has grown in population!])
	print :temp
	localmake "temp (sentence [There are now] :city.population [citizens living in the] :player.civ.name [.])
	print :temp
]
end

to info
localmake "linea (sentence :player.name [of the] :player.civ.name)
localmake "lineb []
localmake "linec [Available resources:]
localmake "lined (sentence [Food enough for] :city.food [men.])
localmake "linee (sentence :city.wood [piles of wood.])
localmake "linef (sentence :city.gold [bars of gold.])
localmake "lineg (sentence :city.prod [production points.])
localmake "lineh []
localmake "linei (sentence :city.population [citizens,] :city.workers [workers,] :city.army [soldiers, and] :city.scientists [scientists are currently in the city.])
localmake "linej (sentence [The happiness of your people, on a scale of minus ten to ten, is] :city.happy)
localmake "linek (sentence [On the same scale, the cleniness is at around] :city.health)
localmake "linel []
localmake "linem (sentence [There are] :city.farms [farms,] :city.mines [mines,] :city.lumbermills [lumbermills,] :city.schools [schools,])
localmake "linen (sentence :city.storehouses [storehouses,] :city.colosseums [colosseums, and] :city.wonders [wonders.])
localmake "lineo []
localmake "linep (sentence [It is now Day] :day [since the founding of our great empire.])
print :linea
print :lineb
print :linec
print :lined
print :linee
print :linef
print :lineg
print :lineh
print :linei
print :linej
print :linek
print :linel
print :linem
print :linen
print :lineo
print :linep
end

to initall
;No libraries in compiled version
end

to newday
;This is the most important function
;If you mess with this then serves you right if the game crashes
make "day :day+1
make "collects :collects+1
make "researches :researches+1
routine
end

to nodilemma
print [Nothing of importance has happened today...]
end

to player.civ.determine
;call at game.start only!
if :player.civ = 1 [
	make "player.civ.name [Greek Empire]
	game.welcomegreek
]
if :player.civ = 2 [
	make "player.civ.name [Roman Empire]
	game.welcomeroman
]
end

to recruitscientists
ifelse :researches>0 [
	make "totalrecruited 0
	make "totalrecruited :totalrecruited+1
	make "totalrecruited :totalrecruited+:city.schools
	if :tech.writing = 1 [make "totalrecruited :totalrecruited+2]
	if :tech.philosophy = 1 [make "totalrecruited :totalrecruited+2]
	ifelse :totalrecruited < :city.population [
		make "city.scientists :city.scientists+:totalrecruited
		make "city.population :city.population-:totalrecruited
		print [We now have more scientists at our disposal!]
		localmake "temp (sentence [The] :player.civ.name [now has] :city.scientists [scientists.])
		print :temp
		make "researches :researches-1
	][
		print [Seeing as the empire doesn't have that many people in it, you can't hire that many scientists.]
	]
][
	print [Sorry, you have used up all your recruitment drives.]
	print [Try waiting for a new day...]
]
end

to recruitworkers :recruitamount
ifelse :recruitamount < :city.population [
	localmake "temp (sentence :recruitamount [members of the] :player.civ.name [are now being used as workers.])
	print :temp
	make "city.workers :city.workers+:recruitamount
	make "city.population :city.population-:recruitamount
][
	print [Sorry, you do not have enough people in your empire to hire.]
]
end

to research
ifelse :city.scientists > 0 [
	make "choice 0
	print [What do you want to research?]
	make "choice selectbox [Choose a technology to research...] [[Bronze Working] [Iron Working] [Archery] [Writing] [Philosophy]]
	if :choice = 1 [tech.bronze.research]
	if :choice = 2 [tech.iron.research]
	if :choice = 3 [tech.archery.research]
	if :choice = 4 [tech.writing.research]
	if :choice = 5 [tech.philosophy.research]
][
	localmake "temp (sentence [The] :player.civ.name [does not have any scientists at its disposal!])
	print :temp
]
end

to routine
;Everyday tasks
useresources
grow
starve
debt
dilemma
barbarianscome
barbariansattack
if :city.army < 0 [
	make "city.army 0
	localmake "temp (sentence [Note! The ] :player.civ.name [does not have any troops!])
	print :temp
]
if :barbarian.number < 1 [make :barbarian.presence 0]
make "city.nearbywood :city.nearbywood+(:city.nearbywood*:city.nearbywood.growthrate)
spoilageall
adjusthappy
adjusthealth
if :city.population < 0 [
	Game.Gameover
]
end

to spoilageall
if OR (AND (modulo :day :spoilagetime) = 0 :city.storehouses = 0) (AND (modulo :day :spoilagetime*2) = 0 :city.storehouses > 0) [
	print [The unused food and wood rots away!]
	make "city.food :city.food*:spoilagerate
	make "city.wood :city.wood*:spoilagerate
	;The food and wood supplies are damaged by storm and disaster
]
end

to start
game.start
end

to starve
if :city.food = 0 [
	localmake "temp (sentence [The] :player.civ.name [is running low on food, and so the people are starving!])
	print :temp
	make "city.population :city.population-1
	make "city.happy :city.happy-1
]
end

to tech.archery.research
ifelse :tech.archery = 0 [
	print [Your scientists are researching Archery...]
	ifelse :city.scientists > 40 [
		print [Your scientists have completed the research.]
		make "city.scientists :city.scientists-40
		make "city.population :city.population+40
		make "archery.bronze 1
	][
		print [You don't have enough scientists.]
	]
][
	print [You already have this tech!]
]
end

to tech.bronze.research
ifelse :tech.bronze = 0 [
	print [Your scientists are researching Bronze Working...]
	ifelse :city.scientists > 30 [
		print [Your scientists have completed the research.]
		make "city.scientists :city.scientists-30
		make "city.population :city.population+30
		make "tech.bronze 1
	][
		print [You don't have enough scientists.]
	]
][
	print [You already have this tech!]
]
end

to tech.iron.research
ifelse :tech.iron = 0 [
	ifelse :city.scientists > 60 [
		print [Your scientists have completed the research.]
		make "city.scientists :city.scientists-60
		make "city.population :city.population+60
		make "tech.iron 1
	][
		print [You don't have enough scientists.]
	]
][
	print [You already have this tech!]
]
print [Your scientists are researching Iron Working...]
end

to tech.philosophy.research
ifelse :tech.philosophy = 0 [
	print [Your scientists are researching Philosophy...]
	ifelse :city.scientists > 100 [
		print [Your scientists have completed the research.]
		make "city.scientists :city.scientists-100
		make "city.population :city.population+100
		make "tech.philosophy 1
	][
		print [You don't have enough scientists.]
	]
][
	print [You already have this tech!]
]
end

to tech.writing.research
ifelse :tech.writing = 0 [
	print [Your scientists are researching Writing...]
	ifelse :city.scientists > 75 [
		print [Your scientists have completed the research.]
		make "city.scientists :city.scientists-75
		make "city.population :city.population+75
		make "tech.writing 1
	][
		print [You don't have enough scientists.]
	]
][
	print [You already have this tech!]
]
end

to traintroops :trainamount
localmake "ratio (:city.army+:trainamount)/(:city.population-:trainamount)
ifelse :city.prod > :trainamount [
	ifelse OR :ratio<0.8 :ratio=0.8 [
		ifelse :city.population > :trainamount [
			make "city.population :city.population - :trainamount
			make "city.army :city.army + :trainamount
			make "city.prod :city.prod - :trainamount
			localmake "temp (sentence [You have just trained] :trainamount [soldiers. They are ready and waiting for battle!])
			print :temp
		][
			print [What are you talking about? You don't have that many people in your city!]
		]
	][
		print [Sorry, your troop to population ratio is too high. Your people are feeling uneasy about the powerful military.]
		localmake "temp (sentence [There are] :city.population [people in the] :player.civ.name [but there are ] :city.army [soldiers.])
		print :temp
		make "maxtrain (:city.population*0.8)-:city.army
		localmake "temp (sentence [Therefore, you can only train up to] :maxtrain [soldiers at the moment.])
		print :temp
	]
][
	print [Sorry, your civilisation is low on production.]
	print [Try COLLECTing a few times to get more production.]
]
end

to useresources
make "city.food :city.food - :city.population
make "city.food :city.food - :city.army
if :city.food < 0 [make "city.food 0]
;Calls STARVE
if :city.health < 0 [make "city.food :city.food - (0-:city.health)*2]
make "city.gold :city.gold - :city.army
if :city.gold < 0 [make "city.gold 0]
;Calls DEBT
end

Make "startup [game.about]
Advertisement