Sneak Peeks, Coming Attractions, Works-In-Progress

Campaign Series: Vietnam is a new turn-based, tactical/operational war game that focuses on the Indochina War, Vietnam Civil War and the first years of US involvement in Vietnam with over 100 historical scenarios.

Moderator: Jason Petho

User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

Campaign Series Vietnam: Testing

Watching the fruits of my labour. The HAL controlled Viet Minh are moving into position around 22Bis to the northwest of Na San.

Image
Attachments
Screenshot..9132557.jpg
Screenshot..9132557.jpg (1.04 MiB) Viewed 754 times
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

Campaign Series Vietnam: Testing

Turn 19 of the playtest. Southeast of Na San is the Bis 26 position. It doesn't look like it will hold much longer. Under the cover of darkness is where the Viet Minh truly shine.

Image
Attachments
Screenshot..9222018.jpg
Screenshot..9222018.jpg (728.75 KiB) Viewed 754 times
User avatar
geforth
Posts: 139
Joined: Fri Jun 05, 2020 8:25 am

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by geforth »

This looks really good. I like your 2D miniatures. :) Maybe you can show us some tanks in the future. :D
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

Here are some helicopters...

Image
Attachments
Screenshot..0101057.jpg
Screenshot..0101057.jpg (890.02 KiB) Viewed 754 times
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

And some Riverine...

Image
Attachments
Screenshot..0095446.jpg
Screenshot..0095446.jpg (267.26 KiB) Viewed 754 times
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

...and some tanks!

Image
Attachments
Screenshot..0095651.jpg
Screenshot..0095651.jpg (746.23 KiB) Viewed 753 times
User avatar
geforth
Posts: 139
Joined: Fri Jun 05, 2020 8:25 am

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by geforth »

Thank you very much! They look gorgeous! really beautiful. :-)
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

Test two of the Na San scenario.

Here is how the Viet Minh are positioned on Turn 12.

You can see how the Viet Minh are attacking the western positions in the hills around Na San



Image
Attachments
Screenshot..0101850.jpg
Screenshot..0101850.jpg (638.76 KiB) Viewed 753 times
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

Turn 12 from the French Perspective.

Image
Attachments
Screenshot..0102611.jpg
Screenshot..0102611.jpg (620.1 KiB) Viewed 753 times
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

Here's the situation on Turn 25 for the Viet Minh.


Image
Attachments
Screenshot..0131357.jpg
Screenshot..0131357.jpg (638.27 KiB) Viewed 753 times
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

While a mammoth amount of work, I am coding most of that combat companies to have three alternatives to choose from for the scenario. From the screenshot below, you can see how this can be tedious for developing and testing... but, I think it is worth it for replayability.

Image
Attachments
Screenshot..0141535.jpg
Screenshot..0141535.jpg (204.64 KiB) Viewed 752 times
benpark
Posts: 3069
Joined: Mon Aug 12, 2002 1:48 pm

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by benpark »

I am coding most of that combat companies to have three alternatives to choose from for the scenario.

Is that followed by all units, per instance? Or will each option trigger irrespective of the other units?

Two variations, very different results. Both interesting.
"Fear is a darkroom where the devil develops his negatives" Gary Busey
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

Each company will have it's own three options. Those three options will be related to a general plan for the entire battalion, but the companies are operating independently depending on which attack vector they will roll a die for.
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

In the main USER.LUA file, are some common variables that are available for the scripting. They are like this:
ATTACK_UNKNOWN = -1
ATTACK_NONE = 0
ATTACK_CENTER = 1
ATTACK_FORWARD = 2
ATTACK_BACKWARD = 3
ATTACK_RIGHT = 4
ATTACK_LEFT = 5
ATTACK_NORTH = 6
ATTACK_NORTHEAST = 7
ATTACK_EAST = 8
ATTACK_SOUTHEAST = 9
ATTACK_SOUTH = 10
ATTACK_SOUTHWEST = 11
ATTACK_WEST = 12
ATTACK_NORTHWEST = 13

VECTOR_UNKNOWN = -1
VECTOR_NONE = 0
VECTOR_CENTER = 1
VECTOR_FORWARD = 2
VECTOR_BACKWARD = 3
VECTOR_RIGHT = 4
VECTOR_LEFT = 5
VECTOR_NORTH = 6
VECTOR_NORTHEAST = 7
VECTOR_EAST = 8
VECTOR_SOUTHEAST = 9
VECTOR_SOUTH = 10
VECTOR_SOUTHWEST = 11
VECTOR_WEST = 12
VECTOR_NORTHWEST = 13


On turn one, each company that is coded will have a die roll which will set their general attack plan for that particular run of the game. You can see below an example of the die rolls and the attack vectors each of the companies will do during that autotest.
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_22ND_1862_ATTACK_VECTOR 1
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_22ND_1867_ATTACK_VECTOR 4
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_22ND_1872_ATTACK_VECTOR 1
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_322ND_1910_ATTACK_VECTOR 5
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_322ND_1915_ATTACK_VECTOR 5
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_322ND_1920_ATTACK_VECTOR 4
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_18TH_1947_ATTACK_VECTOR 4
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_18TH_1952_ATTACK_VECTOR 4
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_18TH_1957_ATTACK_VECTOR 5
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_54TH_1971_ATTACK_VECTOR 1
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_54TH_1976_ATTACK_VECTOR 4
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_54TH_1981_ATTACK_VECTOR 1
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_11TH_1497_ATTACK_VECTOR 4
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_11TH_1502_ATTACK_VECTOR 4
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_11TH_1507_ATTACK_VECTOR 5
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_428TH_1545_ATTACK_VECTOR 1
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_428TH_1550_ATTACK_VECTOR 1
2021-03-12 22:49:41 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_428TH_1555_ATTACK_VECTOR 1
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_130TH_1667_ATTACK_VECTOR 1
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_130TH_1672_ATTACK_VECTOR 5
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_130TH_1677_ATTACK_VECTOR 1
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_154TH_1691_ATTACK_VECTOR 1
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_154TH_1696_ATTACK_VECTOR 4
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_154TH_1701_ATTACK_VECTOR 4
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_215TH_2054_ATTACK_VECTOR 5
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_215TH_2059_ATTACK_VECTOR 4
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_215TH_2064_ATTACK_VECTOR 1
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_249TH_2139_ATTACK_VECTOR 5
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_249TH_2144_ATTACK_VECTOR 4
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_249TH_2149_ATTACK_VECTOR 5
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _1ST_250TH_2163_ATTACK_VECTOR 4
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _2ND_250TH_2168_ATTACK_VECTOR 4
2021-03-12 22:49:42 vnengine.exe: [DEBUG ID 10] (lua.cpp, line 635, l_log()) _3RD_250TH_2173_ATTACK_VECTOR 5

As I am coding a "ATTACK_LEFT, ATTACK_CENTER or ATTACK_RIGHT" option for each company, it will roll between a 1, 4 and 5.

Here is an example of the complete code for the Viet Minh 3rd company of the 250th battalion (sorry about the formatting, I can't screenshot the whole block, so had to do a copy/paste.
-- _3RD_250TH_2173 -- 3rd/250th
do local units = join({_3RD_250TH_2173,_MEDIUM_MACHINE_GUN_2180})

_3RD_250TH_2173_ATTACK_VECTOR = _3RD_250TH_2173_ATTACK_VECTOR or random_pick({ATTACK_RIGHT, ATTACK_CENTER, ATTACK_LEFT})

if DEBUG then
log(LUALOG, LOG_DEBUG, "_3RD_250TH_2173_ATTACK_VECTOR " .. _3RD_250TH_2173_ATTACK_VECTOR)
end

if _3RD_250TH_2173_ATTACK_VECTOR == ATTACK_RIGHT then
if turn >= 1 and turn <= 18 then
defend_strong(units, "27,25", NODIR, 1, 100)
elseif turn >= 19 then
move_fire_way_point(units, {"26,23","24,21"}, NODIR, 1, 100)
if owned(OBJECTIVES[24], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[24], {UPLEFTDIR,UPDIR}, 1, 100)
elseif owned(OBJECTIVES[25], VM_SIDE) then
move_fire_way_point(units, {"25,20",OBJECTIVES[25]}, NODIR, 1, 100)
if (units_within_count(OBJECTIVES[23], NODIR, 1, FRENCH_SIDE, true) >= 1) then
attack_nearest_to_hex(units, OBJECTIVES[23], NODIR, 1, 100, ATTACK_STRONG, true)
elseif owned(OBJECTIVES[23], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[23], {DOWNDIR,DOWNRIGHTDIR}, 1, 100)
elseif owned(OBJECTIVES[20], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[20], {DOWNRIGHTDIR}, 1, 100)
elseif owned(OBJECTIVES[18], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[18], {UPRIGHTDIR}, 1, 100)
elseif (units_within_count(OBJECTIVES[18], NODIR, 1, FRENCH_SIDE, true) >= 1) then
attack_nearest_to_hex(units, OBJECTIVES[18], NODIR, 1, 100, ATTACK_STRONG, true)
end
else
defend_strong(units, OBJECTIVES[24], NODIR, 1, 100)
end
end
elseif _3RD_250TH_2173_ATTACK_VECTOR == ATTACK_CENTER then
if turn >= 1 and turn <= 22 then
defend_strong(units, "27,25", NODIR, 1, 100)
elseif turn >= 23 and turn <= 26 then
move_fire_way_point(units, {"26,23","26,21"}, NODIR, 1, 100)
if (units_within_count("26,21", NODIR, 1, FRENCH_SIDE, true) >= 1) then
attack_strong(units, "26,21", {UPRIGHTDIR,DOWNRIGHTDIR}, 1, 100)
elseif owned(OBJECTIVES[25], VM_SIDE) then
move_fire_way_point(units, {"25,20",OBJECTIVES[25]}, NODIR, 1, 100)
if (units_within_count(OBJECTIVES[23], NODIR, 1, FRENCH_SIDE, true) >= 1) then
attack_nearest_to_hex(units, OBJECTIVES[23], NODIR, 1, 100, ATTACK_STRONG, true)
elseif owned(OBJECTIVES[23], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[23], {DOWNDIR,DOWNRIGHTDIR}, 1, 100)
elseif owned(OBJECTIVES[20], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[20], {DOWNRIGHTDIR}, 1, 100)
elseif owned(OBJECTIVES[18], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[18], {UPRIGHTDIR}, 1, 100)
elseif (units_within_count(OBJECTIVES[18], NODIR, 1, FRENCH_SIDE, true) >= 1) then
attack_nearest_to_hex(units, OBJECTIVES[18], NODIR, 1, 100, ATTACK_STRONG, true)
end
else
defend_strong(units, "26,21", NODIR, 1, 100)
end
elseif turn >= 27 then
move_fire_way_point(units, {"28,19","29,18","29,16"}, NODIR, 1, 100)
if owned(OBJECTIVES[23], FRENCH_SIDE) then
attack_strong(units, "25,15", {UPRIGHTDIR,DOWNRIGHTDIR}, 1, 100)
elseif (units_within_count("25,15", NODIR, 1, FRENCH_SIDE, true) >= 1) then
attack_strong(units, "25,15", {UPRIGHTDIR,DOWNRIGHTDIR}, 1, 100)
end
end
elseif _3RD_250TH_2173_ATTACK_VECTOR == ATTACK_LEFT then
if turn >= 1 and turn <= 22 then
defend_strong(units, "27,25", NODIR, 1, 100)
elseif turn >= 23 then
move_fire_way_point(units, {"27,25","27,23"}, NODIR, 1, 100)
if (units_within_count("27,21", NODIR, 1, FRENCH_SIDE, true) >= 1) then
attack_strong(units, "27,21", {UPRIGHTDIR,DOWNRIGHTDIR}, 1, 100)
elseif owned(OBJECTIVES[25], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[25], {DOWNDIR,DOWNRIGHTDIR}, 1, 100)
elseif (units_within_count(OBJECTIVES[25], NODIR, 1, FRENCH_SIDE, true) >= 1) then
attack_nearest_to_hex(units, OBJECTIVES[25], NODIR, 1, 100, ATTACK_STRONG, true)
elseif owned(OBJECTIVES[23], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[23], {DOWNDIR,DOWNRIGHTDIR}, 1, 100)
elseif owned(OBJECTIVES[22], FRENCH_SIDE) then
attack_strong(units, OBJECTIVES[22], {DOWNRIGHTDIR}, 1, 100)
elseif (units_within_count(OBJECTIVES[22], NODIR, 2, FRENCH_SIDE, true) >= 1) then
attack_nearest_to_hex(units, OBJECTIVES[22], NODIR, 2, 100, ATTACK_STRONG, true)
else
defend_strong(units, OBJECTIVES[22], NODIR, 1, 100)
end
end
end
local hmg = _MEDIUM_MACHINE_GUN_2180
if turn >= 1 and turn <= 15 then
move_norush(hmg, "30,25")
if within(hmg, "30,25", NODIR, 1) then
fire_direct_area(hmg, "30,25", NODIR, 3, 100, true)
end
elseif turn >= 11 and turn <= 20 then
move_norush(hmg, "29,24")
if within(hmg, "29,24", NODIR, 1) then
fire_direct_area(hmg, "29,24", NODIR, 4, 100, true)
end
elseif turn >= 21 then
if (units_within_count("26,24", NODIR, 1, FRENCH_SIDE, true) == 0) then
move_norush(hmg, "26,24")
if within(hmg, "26,24", NODIR, 1) then
fire_direct_area(hmg, "26,24", NODIR, 3, 100, true)
end
elseif (units_within_count("27,21", NODIR, 2, FRENCH_SIDE, true) == 0) then
move_norush(hmg, "27,21")
if within(hmg, "27,21", NODIR, 1) then
fire_direct_area(hmg, "27,21", NODIR, 4, 100, true)
end
else
if owned(OBJECTIVES[25], VM_SIDE) then
move_norush(hmg, OBJECTIVES[25])
if within(hmg, OBJECTIVES[25], NODIR, 1) then
fire_direct_area(hmg, OBJECTIVES[25], NODIR, 3, 100, true)
end
end
end
end
benpark
Posts: 3069
Joined: Mon Aug 12, 2002 1:48 pm

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by benpark »

Thanks for the clarification.

That is an interesting choice, and I think it could lead to great replayabilty gains over something with a set container that all units uniformly fit under.

I'm sure that makes the path finding interesting to wrangle, as there are so many formation levels to have to get to "look right" in formational transit. I'm certain you guys have that under control, though.
"Fear is a darkroom where the devil develops his negatives" Gary Busey
benpark
Posts: 3069
Joined: Mon Aug 12, 2002 1:48 pm

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by benpark »

I am seeing lots lots of nice "if/then" choices as well.

Great AI stuff.
"Fear is a darkroom where the devil develops his negatives" Gary Busey
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

I'm sure that makes the path finding interesting to wrangle, as there are so many formation levels to have to get to "look right" in formational transit.

Most certainly indeed, especially for the larger scenarios.

It's like writing a symphony, to make sure all the individual parts still flow nicely together.
benpark
Posts: 3069
Joined: Mon Aug 12, 2002 1:48 pm

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by benpark »

Lots of combinations and possibilities that seem open to some degree of guided randomness seem possible with that solution.

I'm sure that takes some observation to see how that flows out from the initial orders, given the combination of discrete forces.

Is there a scenario designer "speed-play-through" for friendly side testing for paths? I haven't opened the Editor in about 20 years!
"Fear is a darkroom where the devil develops his negatives" Gary Busey
User avatar
Jason Petho
Posts: 17492
Joined: Tue Jun 22, 2004 10:31 am
Location: Terrace, BC, Canada
Contact:

RE: Sneak Peeks, Coming Attractions, Works-In-Progress

Post by Jason Petho »

Is there a scenario designer "speed-play-through" for friendly side testing for paths? I haven't opened the Editor in about 20 years!

As part of the development package, Berto has created some autotesting tools so I can watch the replays over and over and over again.

I'm not sure what tools will be included in the initial release, but eventually these things will be available for scenario designers
Post Reply

Return to “Campaign Series: Vietnam”