This commit is contained in:
Eric Gallager 2024-12-27 02:09:43 -05:00 committed by GitHub
commit 9cf07ea82c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 400 additions and 139 deletions

View file

@ -51,6 +51,7 @@ jobs:
pngquant --force --output diff_image.png diff_image.png
identify diff_image.png
## Write comment body
log 'Uploading diff_image.png...'
json=$(curl -s -F image=@diff_image.png https://api.imgur.com/3/upload | tee /dev/stderr) || continue

2
.gitignore vendored
View file

@ -209,6 +209,8 @@ fonts/.uuid
.dirstamp
*.cfg-bak
*.orig
*.rej
*.png_original
# might be good to have, but not in data
data/**/*.xcf

View file

@ -26,11 +26,11 @@ Xu, Xu, Xu, Re^Es, Re, Xu, Xu, Xu, Xu, Xos, Xos, Urb, Rr, Urb, Xos, Xos, Xu, Xu,
Xu, Xu, Xu, Xu, Uu, Xu, Xu, Xu, Xu, Xos, Xos, Urb, Rr, Urb, Xos^Efs, Xos, Xu, Xu, Xu, Urb, Cud, Urb, Xu, Xu, Xu, Xos, Urb, Rr, Urb, Xos, Xu, Wwf^Vm, Xu, Wwg, Xu, Wwf^Es, Wwf, Xu, Xu, Xu, Xu, Xu
Xu, Xu, Xu, Xu, Uu, Xu, Xu, Xu, Xu, Xos, Xos, Urb, Rr, Urb, Urb, Xos, Xu, Xu, Xu, Cud, Rr, Cud, Xu, Xu, Xos, Xos^Efs, Urb, Rr, Urb, Xos, Xu, Xu, Rr, Xu, Rr, Xu, Xu, Uu, Uu, Xu, Xu, Xu
Xu, Xu, Xu, Xu, Uu, Xu, Xu, Xu, Xu, Xos, Xos, Urb, Urb, Rr, Rr, Urb, Cud, Xu, Rr, Rr^Eb, Rr, Rr^Eb, Rr, Xu, Cud, Urb, Rr, Rr, Urb, Xos, Xu, Xu, Rr, Rr, Rr, Rr, Xu, Xu, Uu, Uu, Xu, Xu
Xu, Xu, Xu, Xu, Xos, Xos, Xos, Xu, Xu, Xu, Xu, Xos, Xos, Urb, Cud, Cud, Rr, Rr, Rr, Rr, Rr, Rr, Rr, Rr, Rr, Cud, Cud, Urb, Xos, Xos, Xu, Xu, Xu, Rr, Xu, Xu, Uh^Vu, Xu, Uu, Re, Uu^Es, Xu
Xu, Xu, Xu, Xu, Xos, Uu, Uu, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Rr, Rr, Rr, Rr, Rr, Ce, Rr, Rr, Rr, Rr, Rr, Xu, Xos, Xu, Xu, Xu, Xu, Xu, Xu, 3 Kud, Cud, Uh, Uh, Uu, Re, Uu, Xu
Xu, Xu, Xu, Xu, Xos, Xos^Efs, Uu, Uh, Xos, Qxu, Qxu, Xu, Xu, Xu, Xu, Rr, Rr, Rr, Rr, Ce, Ke, Ce, Rr, Rr, Rr, Rr, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Cud, Cud, Uu^Es, Uu, Uu, Xu, Xu, Xu
Xu, Xu, Xu, Xos, Uu, Uu, Uu, Uh, Xos, Qxu, Qxu, Xu, Xu, Xu, Xu, Rr, Rr, Rr, Xu, Ce, Ce, Ce, Rr, Rr, Rr, Rr, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Cud, Uu, Uu, Re, Re, Xu, Xu, Xu, Xu
Xu, Xu, Xu, Cud, Urb, Urb, Xos, Xos, Uu, Uh, Xu, Xu, Xos, Xos^Efs, Cud, Rr, Rr, Xu, Rr, Rr, Rr, Rr, Rr, Rr, Rr, Rr, Cud, Xos^Efs, Xos, Xu, Xu, Xu, Xu, Uh, Uu, Rd^Es, Uu, Uh, Xu, Xu, Xu, Xu
Xu, Xu, Xu, Xu, Xos, Xos, Xos, Xu, Xu, Xu, Xu, Xos, Xos, Urb, Cud, Cud, Rr, Rr, Rr, Rr, Rr^Vu, Rr, Rr, Rr, Rr, Cud, Cud, Urb, Xos, Xos, Xu, Xu, Xu, Rr, Xu, Xu, Uh^Vu, Xu, Uu, Re, Uu^Es, Xu
Xu, Xu, Xu, Xu, Xos, Uu, Uu, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Rr, Rr, Rr, Rr^Vu, Rr^Vu, Ce, Rr^Vu, Rr^Vu, Rr, Rr, Rr, Xu, Xos, Xu, Xu, Xu, Xu, Xu, Xu, 3 Kud, Cud, Uh, Uh, Uu, Re, Uu, Xu
Xu, Xu, Xu, Xu, Xos, Xos^Efs, Uu, Uh, Xos, Qxu, Qxu, Xu, Xu, Xu, Xu, Rr, Rr, Rr, Rr^Vu, Ce, Ke, Ce, Rr^Vu, Rr, Rr, Rr, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Cud, Cud, Uu^Es, Uu, Uu, Xu, Xu, Xu
Xu, Xu, Xu, Xos, Uu, Uu, Uu, Uh, Xos, Qxu, Qxu, Xu, Xu, Xu, Xu, Rr, Rr^Vu, Rr^Vu, Xu, Ce, Ce, Ce, Rr^Vu, Rr, Rr, Rr, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Cud, Uu, Uu, Re, Re, Xu, Xu, Xu, Xu
Xu, Xu, Xu, Cud, Urb, Urb, Xos, Xos, Uu, Uh, Xu, Xu, Xos, Xos^Efs, Cud, Rr, Rr, Xu, Rr^Vu, Rr^Vu, Rr^Vu, Rr^Vu, Rr, Rr, Rr, Rr, Cud, Xos^Efs, Xos, Xu, Xu, Xu, Xu, Uh, Uu, Rd^Es, Uu, Uh, Xu, Xu, Xu, Xu
Xu, Xu, Xu, Urb, Urb, Urb, Urb, Urb, Urb, Uu, Xos^Efs, Xos, Urb, Urb, Rr, Cud, Cud, Rr, Rr, Rr, Rr, Rr, Rr, Rr, Cud, Cud, Rr, Urb, Urb, Xos, Xu, Xu, Xu, Uh^Vu, Uu, Rd, Uh, Uu^Vud, Xu, Xu, Xu, Xu
Xu, Xu, Xos, Xu, Urb, Urb, Urb, Urb, Xuc, Xos, Urb, Urb, Rr, Rr, Urb, Urb, Xos, Xu, Xuc, Rr, Rr, Rr, Xuc, Xu, Xos, Urb, Urb, Rr, Urb, Xos, Xu, Xu, Xu, Xu, Uu, Rd, Xu, Xu, Xu, Xu, Xu, Xu
Xu, Xos, Urb, Urb, Cud, Urb, Urb, Urb, Xuc, Xuc, Urb, Rr, Urb, Urb, Xos, Xos, Xu, Xu, Xuc, Cud, Cud, Cud, Xuc, Xu, Xu, Xos, Urb, Rr, Xuc, Xu, Uh, Rd^Es, Re, Uu, Uu, Re, Xu, Xu, Xu, Xu, Xu, Xu

View file

@ -21,7 +21,6 @@
[/part]
[part]
story= _ "The dwarves of Knalga, cannily reckoning the gains from trade, built strong fortifications around Dwarven Doors. The dwarves and humans who called it home knew that the wealth of the city might arouse envy from afar — hence they kept their weapons sharp, and regarded themselves able to fight off any bandit gang or petty warlord."
{NR_BIGMAP}
{PROLOGUE_STAGE1_END}
[/part]
@ -98,7 +97,7 @@
side=1
controller=human
recruit=Peasant,Woodsman
{GOLD 100 75 60}
{GOLD 100 80 60}
team_name=rebels
user_team_name= _ "Rebels"
{FLAG_VARIANT6 ragged}
@ -143,7 +142,7 @@
[criteria]
side=3
[/criteria]
value=3
value={ON_DIFFICULTY 5 4 3}
[/goal]
[goal]
name=target
@ -171,7 +170,7 @@
canrecruit=yes
[ai]
leader_value=5 # Strong desire to kill Al'Tar
leader_value={ON_DIFFICULTY 7 6 5} # Strong desire to kill Al'Tar
village_value=0.75 # Weakened desire to capture villages
caution=0.50 # Wants to survive the duel
[goal]
@ -179,7 +178,7 @@
[criteria]
side=2
[/criteria]
value=3
value={ON_DIFFICULTY 5 4 3}
[/goal]
[goal]
name=target

View file

@ -4,7 +4,8 @@
id=02_01_Infested_Caves
name= _ "Infested Caves"
map_file=02_01_Infested_Caves.map
{TURNS 55 50 45}
# It can take a long time to break through:
{TURNS 65 55 45}
next_scenario=02_02_Meeting_With_Dwarves
{UNDERGROUND}
@ -47,8 +48,9 @@
[side]
side=1
controller=human
{GOLD 450 400 350}
recruit=Peasant,Woodsman,Thug,Poacher,Footpad
{GOLD 500 425 350}
{INCOME 6 4 2}
recruit=Peasant,Woodsman,Thug,Poacher,Footpad,Ruffian
team_name=rebels
user_team_name= _ "Rebels"
{FLAG_VARIANT6 ragged}
@ -65,7 +67,7 @@
side=2
controller=ai
recruit=Troll Whelp
{GOLD 100 150 200}
{GOLD 80 140 200}
team_name=trolls
user_team_name= _ "Trolls"
@ -73,13 +75,19 @@
id=Knash
name= _ "Knash"
canrecruit=yes
#ifdef EASY
[ai]
# Making Knash passive gives the player a better chance of reaching Camerin's hut:
passive_leader=yes
[/ai]
#endif
[/side]
[side]
side=3
controller=ai
recruit=Troll Whelp
{GOLD 100 150 200}
{GOLD 80 140 200}
team_name=trolls
user_team_name= _ "Trolls"
@ -87,6 +95,12 @@
id=Krog
name= _ "Krog"
canrecruit=yes
#ifdef EASY
[ai]
# For symmetry with Knash:
passive_leader=yes
[/ai]
#endif
[/side]
# Dwarven side
@ -94,8 +108,8 @@
side=4
controller=ai
recruit=Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Guardsman,Dwarvish Scout
{GOLD 130 120 100}
income=9 # covering the upkeep costs
{GOLD 190 145 100}
{INCOME 11 10 9} # covering the upkeep costs, and possibly a bit more on easier difficulties
team_name=rebels
user_team_name= _ "Rebels"
{FLAG_VARIANT knalgan}
@ -164,8 +178,8 @@
side=6
controller=ai
recruit=Troll Whelp,Troll,Troll Rocklobber
{GOLD 300 400 500}
{INCOME 14 18 22}
{GOLD 250 375 500}
{INCOME 8 15 22}
team_name=trolls
user_team_name= _ "Trolls"
@ -192,8 +206,8 @@
side=7
controller=ai
recruit=Skeleton,Skeleton Archer
{GOLD 250 350 450}
{INCOME 4 6 8}
{GOLD 210 330 450}
{INCOME 2 5 8}
team_name=undead
user_team_name= _ "Undead"
{FLAG_VARIANT undead}
@ -210,7 +224,7 @@
recruit=Skeleton,Skeleton Archer
{GOLD 250 350 450}
# One more compared to side 7, for upkeep cost of the Micro AI guardian.
{INCOME 5 7 9}
{INCOME 3 6 9}
team_name=undead
user_team_name= _ "Undead"

View file

@ -26,8 +26,9 @@
[side]
side=1
controller=human
recruit=Peasant,Woodsman,Thug,Poacher,Footpad
{GOLD 600 400 300}
recruit=Peasant,Woodsman,Thug,Poacher,Footpad,Ruffian
{GOLD 650 475 300}
{INCOME 3 2 1}
team_name=rebels
user_team_name= _ "Alliance"
@ -104,7 +105,7 @@
gold=0
# {GOLD 100 150 250}
{INCOME 10 16 22}
{INCOME 6 14 22}
team_name=undead
user_team_name= _ "Undead"
{FLAG_VARIANT undead}
@ -507,7 +508,7 @@
[gold]
side=4
amount={ON_DIFFICULTY 200 350 500}
amount={ON_DIFFICULTY 120 310 500}
[/gold]
[/event]
@ -1235,10 +1236,10 @@
message= _ "Bring it on!"
[/message]
# Add 200, 350 or 500 gold to treasury guards.
# Add 120, 310 or 500 gold to treasury guards.
[gold]
side=5
amount={ON_DIFFICULTY 200 350 500}
amount={ON_DIFFICULTY 120 310 500}
[/gold]
[/event]
@ -1570,7 +1571,7 @@
[gold]
side=7
amount={ON_DIFFICULTY 200 350 500}
amount={ON_DIFFICULTY 120 310 500}
[/gold]
[/event]
@ -1922,7 +1923,7 @@
[gold]
side=6
amount={ON_DIFFICULTY 200 350 500}
amount={ON_DIFFICULTY 120 310 500}
[/gold]
[/event]
@ -1973,7 +1974,7 @@
[gold]
side=3
amount={ON_DIFFICULTY 200 250 300}
amount={ON_DIFFICULTY 120 210 300}
[/gold]
[/event]

View file

@ -124,7 +124,7 @@
# From now on level 0 units can not be recruited anymore.
# However, all of their level 1 advancements are now availaible.
[disallow_recruit]
type=Peasant,Woodsman
type=Peasant,Woodsman,Ruffian
[/disallow_recruit]
[lock_view][/lock_view]

View file

@ -37,7 +37,8 @@
[side]
side=1
controller=human
recruit=Thug,Poacher,Spearman,Bowman,Footpad
# Fencers can be replaced if/when the Dwarvish Grenadier proposal gets accepted:
recruit=Thug,Poacher,Spearman,Bowman,Footpad,Fencer
{GOLD 350 300 250}
team_name=knalgans
user_team_name= _ "Knalgans"

View file

@ -125,7 +125,9 @@
side=1
controller=human
recruit=Thug,Poacher,Spearman,Bowman,Footpad
gold=0 #player has large carryover here, is handled in prestart event
# player is supposed to have a large carryover here (handled in prestart event), so leave this zero on all difficulties here:
{GOLD 0 0 0}
{INCOME 4 3 2}
team_name=knalgans
user_team_name= _ "Knalgans"
@ -143,7 +145,7 @@
side=2
controller=ai
recruit=Dwarvish Ulfserker
{GOLD 100 90 60}
{GOLD 120 90 60}
team_name=knalgans
user_team_name= _ "Knalgans"
{FLAG_VARIANT knalgan}
@ -158,7 +160,7 @@
{TRAIT_HEALTHY}
[/modifications]
hitpoints=1
{QUANTITY hitpoints 11 6 1} # (based on number of hits a Young Ogre would take to kill him)
fog=yes
share_vision=all
facing=se
@ -166,43 +168,47 @@
# Place some combatants at various states of hp/xp
{NOTRAIT_UNIT 2 "Dwarvish Ulfserker" 28 8}
[+unit]
hitpoints=12
{QUANTITY hitpoints 18 15 12}
#ifdef EASY
experience=41
#else
experience=40
#endif
facing=se
[/unit]
{NOTRAIT_UNIT 2 "Dwarvish Ulfserker" 24 7}
[+unit]
hitpoints=34
experience=8
hitpoints=34 # max
{QUANTITY experience 10 9 8}
facing=ne
[/unit]
{NOTRAIT_UNIT 2 "Dwarvish Ulfserker" 24 4}
[+unit]
hitpoints=28
experience=18
{QUANTITY hitpoints 32 30 28}
{QUANTITY experience 22 20 18}
facing=sw
[/unit]
{NOTRAIT_UNIT 2 "Dwarvish Ulfserker" 23 2}
[+unit]
hitpoints=30
experience=16
{QUANTITY hitpoints 34 32 30}
{QUANTITY experience 20 18 16}
facing=s
[/unit]
{NOTRAIT_UNIT 2 "Dwarvish Ulfserker" 30 7}
[+unit]
hitpoints=12
experience=16
{QUANTITY hitpoints 16 14 12}
{QUANTITY experience 20 18 16}
facing=nw
[/unit]
{NOTRAIT_UNIT 2 "Dwarvish Ulfserker" 22 6}
[+unit]
hitpoints=9
experience=41
{QUANTITY hitpoints 15 12 9}
experience=41 # 42 is max
facing=sw
[/unit]
[/side]
@ -212,7 +218,7 @@
side=3
controller=ai
recruit=Gryphon,Young Ogre,Ogre,Troll Whelp,Troll,Troll Rocklobber,Red Mage,Mage
{GOLD 950 1100 1600}
{GOLD 900 1100 1600}
team_name=liches
user_team_name= _ "Liches"
{FLAG_VARIANT undead}
@ -227,29 +233,29 @@
{NOTRAIT_UNIT 3 Troll 30 9}
[+unit]
hitpoints=36
experience=14
{QUANTITY hitpoints 32 34 36}
{QUANTITY experience 10 12 14}
facing=nw
[/unit]
{NOTRAIT_UNIT 3 "Young Ogre" 28 6}
[+unit]
hitpoints=6
experience=31
{QUANTITY hitpoints 4 5 6}
{QUANTITY experience 29 30 31}
facing=se
[/unit]
{NOTRAIT_UNIT 3 "Young Ogre" 20 7}
[+unit]
hitpoints=12
experience=12
{QUANTITY hitpoints 10 11 12}
{QUANTITY experience 10 11 12}
facing=ne
[/unit]
{NOTRAIT_UNIT 3 "Ogre" 23 3}
[+unit]
hitpoints=27
experience=8
{QUANTITY hitpoints 21 24 27}
{QUANTITY experience 6 7 8}
facing=n
[/unit]
@ -287,7 +293,7 @@
[/store_gold]
[modify_side]
side=1
{GOLD 200 100 80}
{GOLD 280 180 80}
[/modify_side]
# Recall heroes

View file

@ -4,7 +4,7 @@
id=08a_Elvish_Princess
name= _ "Elvish Princess"
map_file=08a_Elvish_Princess.map
{TURNS 21 18 15}
{TURNS 23 19 15}
next_scenario=09a_Introductions
victory_when_enemies_defeated=no
@ -94,9 +94,13 @@
[side]
side=1
controller=human
recruit=Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad
# Tallin only asked the mages for their gryphons at the end of the previous scenario, so don't add any more of their units here:
recruit=Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad,Fencer
team_name=knalgans
user_team_name= _ "Knalgans"
# default gold when left unspecified is 100, so keep first 2 difficulties higher than that:
{GOLD 122 111 100}
{INCOME 9 6 3}
# wmllint: recognize Tallin
{CHARACTER_STATS_TALLIN}
@ -107,8 +111,8 @@
side=2
controller=ai
recruit=Orcish Grunt,Orcish Archer,Wolf Rider,Orcish Assassin,Troll Whelp
{GOLD 300 400 500}
{INCOME 15 20 25}
{GOLD 250 375 500}
{INCOME 10 20 25}
team_name=Orcs
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
@ -166,8 +170,10 @@
{GENERIC_UNIT 3 "Orcish Crossbowman" 17 14} {GUARDIAN}
[/side]
{STARTING_VILLAGES 1 5}
{STARTING_VILLAGES_AREA 2 15 17 12}
# 1 = Tallin, so get smaller by difficulty:
{STARTING_VILLAGES 1 {ON_DIFFICULTY 7 6 5}}
# 2 = Orcs, so get bigger by difficulty:
{STARTING_VILLAGES_AREA 2 15 17 {ON_DIFFICULTY 10 11 12}}
{PLACE_PRISONER_IMAGE units/elves-wood/sorceress.png 9 14}
@ -361,6 +367,26 @@
[/message]
[/event]
#ifdef EASY
[event]
name=last breath
[filter]
id=Atul
[/filter]
[message]
race=human
message= _ "This orc was carrying some gold!"
[/message]
[sound]
name=gold.ogg
[/sound]
[gold]
side=1
{QUANTITY amount 120 80 40}
[/gold]
[/event]
#endif
# Freeing Eryssa event - victory proceed to introductions
[event]
name=moveto

View file

@ -23,7 +23,7 @@
[side]
side=1
controller=human
recruit=Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad
recruit=Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad,Fencer
team_name=knalgans
user_team_name=_ "Knalgans"
@ -49,7 +49,7 @@
{GENERIC_UNIT 2 "Troll" 10 6}
{GENERIC_UNIT 2 "Troll" 11 4}
{GENERIC_UNIT 2 "Troll" 16 6}
{GENERIC_UNIT 2 "Troll" 18 11}
{GENERIC_UNIT 2 {ON_DIFFICULTY "Troll Whelp" "Troll" "Troll Warrior"} 18 11}
{GENERIC_UNIT 2 "Troll Whelp" 3 9}
{GENERIC_UNIT 2 "Troll Whelp" 6 3}
@ -63,7 +63,7 @@
{GENERIC_UNIT 2 "Troll Rocklobber" 4 3}
{GENERIC_UNIT 2 "Troll Rocklobber" 9 3}
{GENERIC_UNIT 2 "Troll Rocklobber" 10 5}
{GENERIC_UNIT 2 "Troll Rocklobber" 14 3}
{GENERIC_UNIT 2 {ON_DIFFICULTY "Troll Whelp" "Troll Rocklobber" "Troll Rocklobber"} 14 3}
[/side]
{PLACE_IMAGE scenery/signpost.png 1 1}
@ -134,6 +134,8 @@
id=Stalrag
[/recall]
{RECALL_LOYAL_DWARF}
[recall]
id="Ro'Arthian"
[/recall]

View file

@ -156,8 +156,9 @@
[side]
side=1
controller=human
recruit=Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad
gold=200
recruit=Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad,Fencer
{GOLD 300 250 200}
{INCOME 3 2 1}
team_name=alliance
user_team_name= _ "Alliance"
@ -338,6 +339,12 @@
id="Ro'Sothian"
[/recall]
{RECALL_LOYAL_DWARF}
[recall]
type=Gryphon
[/recall]
# give player extra gold if they do not have krash
[if]
[not]
@ -942,7 +949,7 @@
[/message]
[gold]
amount=1500
{QUANTITY amount 1700 1600 1500}
side=1
[/gold]

View file

@ -32,8 +32,9 @@
[side]
side=1
controller=human
recruit=Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad
recruit=Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad,Fencer,Heavy Infantryman
{GOLD 250 200 150}
{INCOME 3 2 1}
team_name=knalgans
user_team_name= _ "Alliance"
@ -48,7 +49,7 @@
controller=ai
recruit=Troll Whelp,Troll,Troll Rocklobber
{GOLD 500 600 700}
{INCOME 25 35 45}
{INCOME 21 33 45}
team_name=orcs
user_team_name= _ "Orcs"
@ -72,7 +73,7 @@
controller=ai
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 400 500 600}
{INCOME 25 35 45}
{INCOME 21 33 45}
team_name=orcs
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
@ -88,7 +89,7 @@
controller=ai
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 400 500 600}
{INCOME 25 35 45}
{INCOME 21 33 45}
team_name=orcs
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
@ -104,7 +105,7 @@
controller=ai
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 400 500 600}
{INCOME 25 35 45}
{INCOME 21 33 45}
team_name=orcs
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
@ -120,7 +121,7 @@
controller=ai
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 400 500 600}
{INCOME 25 35 45}
{INCOME 21 33 45}
team_name=orcs
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
@ -149,7 +150,8 @@
{FLAG_VARIANT long}
[/side]
{STARTING_VILLAGES 1 6}
# 1 = Tallin, so reduce radius with difficulty:
{STARTING_VILLAGES 1 {ON_DIFFICULTY 8 7 6}}
# Heres where we edit out Krash's side if he's dead.
[event]
@ -188,10 +190,11 @@
side=2,3,4,5,6
amount={ON_DIFFICULTY -125 -100 -75}
[/gold]
{CAPTURE_VILLAGES 1 30 3 5}
{CAPTURE_VILLAGES 1 30 3 {ON_DIFFICULTY 7 6 5}}
[/then]
[else]
{CAPTURE_VILLAGES 7 30 3 5}
# give them to Krash instead if he is in fact still alive:
{CAPTURE_VILLAGES 7 30 3 {ON_DIFFICULTY 7 6 5}}
[/else]
[/if]
@ -267,6 +270,8 @@
id="Ro'Sothian"
[/recall]
{RECALL_LOYAL_DWARF}
[message]
speaker=Tallin
message= _ "Gods of Light, look at that fortress! The castle Angthurim is even grimmer than its reputation!"

View file

@ -47,11 +47,15 @@
canrecruit=yes
side=1
controller=human
recruit=Thug,Poacher,Spearman,Bowman,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Gryphon,Footpad
recruit=Thug,Poacher,Spearman,Bowman,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Gryphon,Footpad,Fencer
team_name=knalgans
user_team_name=_"Alliance"
gold=100
# The first value here ought to be enough for the player to get through their entire recall list,
# and then the middle one is an interpolation of the halfway point between that and the existing third amount:
{GOLD 900 500 100}
{INCOME 18 12 9}
[/side]
# This gets all the ones nearby; keep constant:
{STARTING_VILLAGES 1 5}
# Main enemy
[side]
@ -69,39 +73,55 @@
x=30
y=30
[/criteria]
value=400
value={ON_DIFFICULTY 200 300 400}
[/goal]
[goal]
name=protect_unit
[criteria]
id=Rakshas
[/criteria]
protect_radius={ON_DIFFICULTY 12 11 10}
value={ON_DIFFICULTY 250 350 450}
[/goal] #
[goal]
name=target
[criteria]
side=1 # Tallin
[/criteria]
value={ON_DIFFICULTY 60 180 300}
[/goal]
[goal]
name=target
[criteria]
side=1
side=7 # Krash, or Ro'Arthian
[/criteria]
value=300
value={ON_DIFFICULTY 50 100 150}
[/goal]
[goal]
name=target
[criteria]
side=7
side=8 # Hamel
[/criteria]
value=150
value={ON_DIFFICULTY 40 50 60}
[/goal]
[goal] # separate target for Hamel himself:
name=target
[criteria]
id=Hamel
[/criteria]
value={ON_DIFFICULTY 30 40 50}
[/goal] #
[goal]
name=target
[criteria]
side=8
side=9 # Eryssa, or Ro'Sothian
[/criteria]
value=50
[/goal]
[goal]
name=target
[criteria]
side=9
[/criteria]
value=250
value={ON_DIFFICULTY 100 175 250}
[/goal]
[/ai]
{FLAG_VARIANT6 ragged}
[/side]
# Gets all ones nearby; keep constant:
{STARTING_VILLAGES 2 3}
# Sidekicks
[side]
@ -117,36 +137,52 @@
user_team_name=_"Orcs"
[ai]
[goal]
name=target
name=protect_unit
[criteria]
side=1
id="Ha'Tuil"
[/criteria]
value=400
protect_radius={ON_DIFFICULTY 9 8 7}
value={ON_DIFFICULTY 250 350 450}
[/goal]
[goal]
name=target
[criteria]
side=7
side=1 # Tallin
[/criteria]
value=300
value={ON_DIFFICULTY 160 280 400}
[/goal]
[goal]
name=target
[criteria]
side=8
side=7 # Krash, or Ro'Arthian
[/criteria]
value=200
value={ON_DIFFICULTY 100 200 300}
[/goal]
[goal]
name=target
[criteria]
side=9
side=8 # Hamel
[/criteria]
value=350
value={ON_DIFFICULTY 80 160 240}
[/goal]
[goal] # separate target for Hamel himself:
name=target
[criteria]
id=Hamel
[/criteria]
value={ON_DIFFICULTY 90 180 270}
[/goal] #
[goal]
name=target
[criteria]
side=9 # Eryssa, or Ro'Sothian
[/criteria]
value={ON_DIFFICULTY 150 250 350}
[/goal]
[/ai]
{FLAG_VARIANT6 ragged}
[/side]
# Gets all ones nearby; keep constant:
{STARTING_VILLAGES 3 4}
[side]
@ -162,36 +198,52 @@
user_team_name=_"Orcs"
[ai]
[goal]
name=target
name=protect_unit
[criteria]
side=1
id="Ar'Muff"
[/criteria]
value=400
protect_radius={ON_DIFFICULTY 9 8 7}
value={ON_DIFFICULTY 250 350 450}
[/goal]
[goal]
name=target
[criteria]
side=7
side=1 # Tallin
[/criteria]
value=300
value={ON_DIFFICULTY 160 280 400}
[/goal]
[goal]
name=target
[criteria]
side=8
side=7 # Krash, or Ro'Arthian
[/criteria]
value=200
value={ON_DIFFICULTY 100 200 300}
[/goal]
[goal]
name=target
[criteria]
side=9
side=8 # Hamel
[/criteria]
value=350
value={ON_DIFFICULTY 80 160 240}
[/goal]
[goal] # separate target for Hamel himself:
name=target
[criteria]
id=Hamel
[/criteria]
value={ON_DIFFICULTY 90 180 270}
[/goal] #
[goal]
name=target
[criteria]
side=9 # Eryssa, or Ro'Sothian
[/criteria]
value={ON_DIFFICULTY 150 250 350}
[/goal]
[/ai]
{FLAG_VARIANT6 ragged}
[/side]
# Gets all ones nearby; keep constant:
{STARTING_VILLAGES 4 4}
[side]
@ -207,36 +259,52 @@
user_team_name=_"Orcs"
[ai]
[goal]
name=target
name=protect_unit
[criteria]
side=1
id="Calter"
[/criteria]
value=400
protect_radius={ON_DIFFICULTY 9 8 7}
value={ON_DIFFICULTY 250 350 450}
[/goal]
[goal]
name=target
[criteria]
side=7
side=1 # Tallin
[/criteria]
value=300
value={ON_DIFFICULTY 160 280 400}
[/goal]
[goal]
name=target
[criteria]
side=8
side=7 # Krash, or Ro'Arthian
[/criteria]
value=200
value={ON_DIFFICULTY 100 200 300}
[/goal]
[goal]
name=target
[criteria]
side=9
side=8 # Hamel
[/criteria]
value=350
value={ON_DIFFICULTY 80 160 240}
[/goal]
[goal] # separate target for Hamel himself:
name=target
[criteria]
id=Hamel
[/criteria]
value={ON_DIFFICULTY 90 180 270}
[/goal] #
[goal]
name=target
[criteria]
side=9 # Eryssa, or Ro'Sothian
[/criteria]
value={ON_DIFFICULTY 150 250 350}
[/goal]
[/ai]
{FLAG_VARIANT6 ragged}
[/side]
# Gets all ones nearby; keep constant:
{STARTING_VILLAGES 5 4}
[side]
@ -252,36 +320,52 @@
user_team_name=_"Orcs"
[ai]
[goal]
name=target
name=protect_unit
[criteria]
side=1
id="Halter"
[/criteria]
value=400
protect_radius={ON_DIFFICULTY 9 8 7}
value={ON_DIFFICULTY 250 350 450}
[/goal]
[goal]
name=target
[criteria]
side=7
side=1 # Tallin
[/criteria]
value=300
value={ON_DIFFICULTY 160 280 400}
[/goal]
[goal]
name=target
[criteria]
side=8
side=7 # Krash, or Ro'Arthian
[/criteria]
value=200
value={ON_DIFFICULTY 100 200 300}
[/goal]
[goal]
name=target
[criteria]
side=9
side=8 # Hamel
[/criteria]
value=350
value={ON_DIFFICULTY 80 160 240}
[/goal]
[goal] # separate target for Hamel himself:
name=target
[criteria]
id=Hamel
[/criteria]
value={ON_DIFFICULTY 90 180 270}
[/goal] #
[goal]
name=target
[criteria]
side=9 # Eryssa, or Ro'Sothian
[/criteria]
value={ON_DIFFICULTY 150 250 350}
[/goal]
[/ai]
{FLAG_VARIANT6 ragged}
[/side]
# Gets all ones nearby; keep constant:
{STARTING_VILLAGES 6 4}
# Krash may not actually still be alive at this point, but setting up
@ -291,7 +375,8 @@
side=7
save_id=Krash
side_name= _ "Krash"
gold=200
{GOLD 600 400 200}
{INCOME 9 6 3}
recruit=Drake Fighter,Drake Glider,Drake Burner,Drake Clasher
team_name=knalgans
user_team_name=_"Alliance"
@ -333,12 +418,14 @@
[/object]
[/modifications]
[/side]
# Gets all ones nearby; keep constant:
{STARTING_VILLAGES 8 10}
# Side for Eryssa if alive
[side]
side=9
gold=200
{GOLD 600 400 200}
{INCOME 9 6 3}
recruit=Elvish Fighter,Elvish Archer,Elvish Shaman,Elvish Scout,Elvish Captain,Elvish Hero,Elvish Ranger,Elvish Marksman,Elvish Rider,Elvish Druid,Elvish Sorceress
team_name=knalgans
user_team_name=_"Alliance"
@ -353,9 +440,70 @@
# STARTING_VILLAGES works due to defeat_condition & having a starting location
{STARTING_VILLAGES 9 10}
# This should help prevent Hamel from suiciding himself by discouraging him
# from leaving his castle and surrounding villages
# (copied from SotBE, with modifications)
[event]
name=side 8 turn refresh
first_time_only=no
[modify_unit]
[filter]
side=$side_number
canrecruit=yes
# Only do this if his side is AI-controlled:
[filter_side]
controller=ai
[/filter_side]
[/filter]
[movement_costs]
flat={ON_DIFFICULTY 99 66 33}
[/movement_costs]
[/modify_unit]
[event]
name=side turn end
[modify_unit]
[filter]
side=$side_number
canrecruit=yes
# Only do this if his side is AI-controlled:
[filter_side]
controller=ai
[/filter_side]
[/filter]
[movement_costs]
flat=1
[/movement_costs]
[/modify_unit]
[/event]
[/event]
[event]
name=prestart
#ifdef EASY
[terrain]
x,y=54,30
terrain=Gg^Vh
[/terrain]
[terrain]
x,y=54,31
terrain=Gg^Vh
[/terrain]
[capture_village]
side=1
x,y=54,30
[/capture_village]
[capture_village]
side=1
x,y=54,31
[/capture_village]
#endif
# Check if Krash is alive, if yes place him at helm of side 7,
# otherwise it's taken over by older lich.
{RECALL_KRASH 7}
@ -386,11 +534,16 @@
side=7
type=Troll,Troll Whelp,Ogre,Young Ogre,Mage,Red Mage,Gryphon
[/allow_recruit]
# dwarves also get gold if no krash, since it's much harder to defend them
# for Ro'Arthian:
[gold]
side=7,8
amount=400
side=7
amount={ON_DIFFICULTY 650 525 400}
[/gold]
# dwarves also get gold if no Krash (but less of it, though), since it's harder to defend them
[gold]
side=8
amount={ON_DIFFICULTY 420 410 400}
[/gold] #
[modify_side]
side=7
side_name= _ "RoArthian"
@ -470,10 +623,16 @@
side=9
type=Troll,Troll Whelp,Ogre,Young Ogre,Mage,Red Mage,Gryphon
[/allow_recruit]
# for Ro'Sothian:
[gold]
side=8,9
amount=400
side=9
amount={ON_DIFFICULTY 650 525 400}
[/gold]
# dwarves also get gold if no Eryssa (but less of it, though), since it's harder to defend them
[gold]
side=8
amount={ON_DIFFICULTY 420 410 400}
[/gold] #
[modify_side]
side=9
side_name= _ "RoSothian"
@ -957,6 +1116,7 @@
message= _ "FOR HIDEL!!"
[/message]
[message]
# TODO: Make sure Supporter isn't one of the characters who already said something:
role=Supporter
message= _ "FOR DWARVEN DOORS!!"
[/message]
@ -982,7 +1142,7 @@
message= _ "Yeah. Obviously this is going to take some time. If necessary we can sit tight in our fortifications and besiege them until they starve!"
[/message]
[/event]
# Rakashas death
# Rakshas death
[event]
name=last breath
[filter]

View file

@ -45,6 +45,28 @@
[/if]
#enddef
#define RECALL_LOYAL_DWARF
[recall]
race=dwarf
[filter_wml]
upkeep="loyal"
[or]
[modifications]
[trait]
id=loyal
[or]
[effect]
apply_to=overlay
add="misc/loyal-icon.png"
[/effect]
[/or]
[/trait]
[/modifications]
[/or]
[/filter_wml]
[/recall]
#enddef
#define RECALL_KRASH SIDE
# In S11a-13a Krash starts as the leader of a side if he is alive. He is not
# defined in the corresponding side tags for these scenarios, since if he is,

View file

@ -0,0 +1 @@
!.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -37,7 +37,21 @@ const readTerrainImages = async () => {
const promises = Object
.entries(dictTerrainType2ImagesPath)
.map(async ([terrainType, imageName]) => {
const image = await Jimp.read(`${imageBasepath}/${imageName}.png`)
let image = await Jimp.read(`${imageBasepath}/${imageName}.png`)
// Try a number of other places, as well:
if (!image) {
image = await Jimp.read(`../../../images/${imageName}.png`)
}
if (!image) {
image = await Jimp.read(`./images/${imageName}.png`)
}
if (!image) {
image = await Jimp.read(`../../../attic/${imageName}.png`)
}
if (!image) {
// If nothing worked, provide a sensible default as a fallback:
image = await Jimp.read(`../../../data/core/images/misc/blank-hex.png`)
}
return [terrainType, image]
})