Skip to content

Commit

Permalink
initial work for support mechanic
Browse files Browse the repository at this point in the history
see nemaara/A_New_Order#73
Also rename some macros for the validator
  • Loading branch information
cooljeanius committed Dec 16, 2023
1 parent 46fb907 commit 9aaa093
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 79 deletions.
3 changes: 3 additions & 0 deletions _main.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ add-ons/A_New_Order#enddef
id=A_New_Order
name=_ "A New Order"
abbrev=_ "ANO"
#ifdef DEBUG_MODE
rank=0
#endif
#ifdef OLD_STYLE_VERSIONING
version={~{LDR_PATH}/dist/VERSION}
#else
Expand Down
168 changes: 100 additions & 68 deletions macros/ano_macros.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,7 @@
[/filter]
#enddef

#define SCROLL_TO X Y
[scroll_to]
x={X}
y={Y}
[/scroll_to]
#enddef
# (SCROLL_TO is a mainline macro; no need to define it ourselves)

#define PLAY_SOUND SOUND_FILE
[sound]
Expand Down Expand Up @@ -66,7 +61,7 @@
[/unhide_unit]
#enddef

#define GET_GLOBAL_VARIABLE variable
#define GET_ANO_GLOBAL_VARIABLE variable
[get_global_variable]
namespace=ANewOrder
from_global={variable}
Expand All @@ -75,15 +70,15 @@
[/get_global_variable]
#enddef

#define CLEAR_GLOBAL_VARIABLE variable
#define CLEAR_ANO_GLOBAL_VARIABLE variable
[clear_global_variable]
namespace=ANewOrder
global={variable}
side=1
[/clear_global_variable]
#enddef

#define GLOBAL_VARIABLE_TO_LOCAL variable local
#define ANO_GLOBAL_VARIABLE_TO_LOCAL variable local
[get_global_variable]
namespace=ANewOrder
from_global={variable}
Expand All @@ -92,7 +87,7 @@
[/get_global_variable]
#enddef

#define SET_GLOBAL_VARIABLE variable value
#define SET_ANO_GLOBAL_VARIABLE variable value
[set_variable]
name=global_tmp
value={value}
Expand All @@ -107,28 +102,28 @@
[/set_global_variable]
#enddef

#define GLOBAL_VARIABLE_OP variable op value
{GET_GLOBAL_VARIABLE {variable}}
#define ANO_GLOBAL_VARIABLE_OP variable op value
{GET_ANO_GLOBAL_VARIABLE {variable}}
{VARIABLE_OP global_tmp {op} {value}}
{SET_GLOBAL_VARIABLE {variable} $global_tmp}
{SET_ANO_GLOBAL_VARIABLE {variable} $global_tmp}
#enddef

#define SET_ANO_GLOBAL_VARIABLES
# Remember to update this when making a new release:
{SET_GLOBAL_VARIABLE ANOversion 1.6.0}
{SET_GLOBAL_VARIABLE ANOlast_scenario 0}
{SET_GLOBAL_VARIABLE ANOmax_points_scored 0}
{SET_GLOBAL_VARIABLE ANOpreviously_scored_points 0}
{SET_GLOBAL_VARIABLE ANObarnon_dejavu 0}
{SET_GLOBAL_VARIABLE ANObarnon_killed_last_turn 0}
{SET_GLOBAL_VARIABLE ANObarnon_dejavu_turns 0}
{SET_GLOBAL_VARIABLE ANObarnon_choice -1}
{SET_GLOBAL_VARIABLE ANOhired_dejavu 0}
{SET_GLOBAL_VARIABLE ANOhaeltin_last_dead -1}
{SET_GLOBAL_VARIABLE ANOhaeltin_dejavu 0}
{SET_GLOBAL_VARIABLE ANOburass_alive 0}
{SET_GLOBAL_VARIABLE ANOreumarios_fate invalid}
{SET_GLOBAL_VARIABLE ANOrobroes_fate invalid}
{SET_ANO_GLOBAL_VARIABLE ANOversion 1.6.0}
{SET_ANO_GLOBAL_VARIABLE ANOlast_scenario 0}
{SET_ANO_GLOBAL_VARIABLE ANOmax_points_scored 0}
{SET_ANO_GLOBAL_VARIABLE ANOpreviously_scored_points 0}
{SET_ANO_GLOBAL_VARIABLE ANObarnon_dejavu 0}
{SET_ANO_GLOBAL_VARIABLE ANObarnon_killed_last_turn 0}
{SET_ANO_GLOBAL_VARIABLE ANObarnon_dejavu_turns 0}
{SET_ANO_GLOBAL_VARIABLE ANObarnon_choice -1}
{SET_ANO_GLOBAL_VARIABLE ANOhired_dejavu 0}
{SET_ANO_GLOBAL_VARIABLE ANOhaeltin_last_dead -1}
{SET_ANO_GLOBAL_VARIABLE ANOhaeltin_dejavu 0}
{SET_ANO_GLOBAL_VARIABLE ANOburass_alive 0}
{SET_ANO_GLOBAL_VARIABLE ANOreumarios_fate invalid}
{SET_ANO_GLOBAL_VARIABLE ANOrobroes_fate invalid}
#enddef

#define SET_ANO_VARIABLES
Expand All @@ -147,12 +142,49 @@
{VARIABLE ano_gawen_mother no}
{VARIABLE ano_cryne_and_orcs no}
{VARIABLE ano_luck_counter 0}
[set_variables]
name=ano_hero_chars
[split]
list="Gawen,Reme,Reumario,Regven,Yahyazad,Lorin,Karen"
separator=","
[/split]
[/set_variables]
[foreach]
array=ano_hero_chars
variable=ano_char1
[do]
[foreach]
array=ano_hero_chars
variable=ano_char2
[do]
[if]
[variable]
name=ano_char1.value
not_equals=$ano_char2.value
[/variable]
[then]
[set_variable]
name=$ano_char1.value|_support_with_$ano_char2.value|
value=0
[/set_variable]
[/then]
[/if]
[/do]
[/foreach]
[/do]
[/foreach]
{CLEAR_VARIABLE ano_char1}
{CLEAR_VARIABLE ano_char2}
#enddef

#define ANO_LUCK_EVENTS
# (TODO)
#enddef # ANO_LUCK_EVENTS

#define ANO_SUPPORT_EVENTS
# (TODO)
#enddef # ANO_SUPPORT_EVENTS

#NOTE IMPORTANT: this is COSTLY MACRO
# FIXME: players seem to think this macro is used, however, wmlscope reports that it isn't...
#define COUNT_RELOADS variable unpleasant
Expand All @@ -166,17 +198,17 @@
[event]
name=prestart

{SET_GLOBAL_VARIABLE {variable} 0}
{SET_GLOBAL_VARIABLE {variable}_turns 0}
{SET_ANO_GLOBAL_VARIABLE {variable} 0}
{SET_ANO_GLOBAL_VARIABLE {variable}_turns 0}
{VARIABLE ANOreload false}
{VARIABLE {unpleasant} false}
{VARIABLE {unpleasant}_times 0}
[/event]

[event]
name=victory
{CLEAR_GLOBAL_VARIABLE {variable}}
{CLEAR_GLOBAL_VARIABLE {variable}_turns}
{CLEAR_ANO_GLOBAL_VARIABLE {variable}}
{CLEAR_ANO_GLOBAL_VARIABLE {variable}_turns}
{VARIABLE ANOreload false}
{CLEAR_VARIABLE {unpleasant}}
{CLEAR_VARIABLE {unpleasant}_times}
Expand All @@ -186,25 +218,25 @@
name=preload
first_time_only=no

{GET_GLOBAL_VARIABLE {variable}}
{GET_ANO_GLOBAL_VARIABLE {variable}}
{VARIABLE_OP global_tmp add 1}
[fire_event]
name="reload $global_tmp"
[/fire_event]
[fire_event]
name="reload $global_tmp at turn $turn_number"
[/fire_event]
{SET_GLOBAL_VARIABLE {variable} $global_tmp}
{SET_ANO_GLOBAL_VARIABLE {variable} $global_tmp}

{GET_GLOBAL_VARIABLE {variable}_turns}
{GET_ANO_GLOBAL_VARIABLE {variable}_turns}

{IF global_tmp greater_than $turn_number} #player played a bit, then reloaded to earlier turn
{GLOBAL_VARIABLE_OP {variable} add 1}
{ANO_GLOBAL_VARIABLE_OP {variable} add 1}
[fire_event]
name=back to the past reload
[/fire_event]
{ELSE_IF global_tmp equals $turn_number} #player just reloaded in that turn
{GLOBAL_VARIABLE_OP {variable} add 1}
{ANO_GLOBAL_VARIABLE_OP {variable} add 1}
[fire_event]
name=same turn reload
[/fire_event]
Expand All @@ -214,14 +246,14 @@
{VARIABLE_OP tmp add -1}
{IF global_tmp equals $tmp} #ok no reload
{ELSE} # "reloaded in the past, returned to the older save"
{GLOBAL_VARIABLE_OP {variable} add 1}
{ANO_GLOBAL_VARIABLE_OP {variable} add 1}
[fire_event]
name=back to the future reload
[/fire_event]
{END_IF}
{TWO_END_IFs}

{SET_GLOBAL_VARIABLE ({variable}_turns) $turn_number}
{SET_ANO_GLOBAL_VARIABLE ({variable}_turns) $turn_number}
{VARIABLE ANOreload true}
{VARIABLE {unpleasant} false}
[/event]
Expand Down Expand Up @@ -281,29 +313,29 @@
[event]
name=prestart

{SET_GLOBAL_VARIABLE {variable} 0}
{SET_GLOBAL_VARIABLE {variable}_prev 0}
{SET_GLOBAL_VARIABLE {variable}_count 0}
{SET_GLOBAL_VARIABLE {variable}_turn -1}
{SET_GLOBAL_VARIABLE {variable}_lastkilled_id erroneus_id}
{SET_GLOBAL_VARIABLE {variable}_lastkilled_type error_within_macros}
{SET_ANO_GLOBAL_VARIABLE {variable} 0}
{SET_ANO_GLOBAL_VARIABLE {variable}_prev 0}
{SET_ANO_GLOBAL_VARIABLE {variable}_count 0}
{SET_ANO_GLOBAL_VARIABLE {variable}_turn -1}
{SET_ANO_GLOBAL_VARIABLE {variable}_lastkilled_id erroneus_id}
{SET_ANO_GLOBAL_VARIABLE {variable}_lastkilled_type error_within_macros}
{VARIABLE {variable}_local 0}
{VARIABLE {unpleasant}_attack false}
{VARIABLE wasendturn false}
{SET_GLOBAL_VARIABLE {unpleasant}_endturn false}
{SET_ANO_GLOBAL_VARIABLE {unpleasant}_endturn false}
[/event]

[event]
name=victory
{CLEAR_GLOBAL_VARIABLE {variable}}
{CLEAR_GLOBAL_VARIABLE {variable}_prev}
{CLEAR_GLOBAL_VARIABLE {variable}_count}
{CLEAR_GLOBAL_VARIABLE {variable}_turn}
{CLEAR_GLOBAL_VARIABLE {variable}_lastkilled_id}
{CLEAR_GLOBAL_VARIABLE {variable}_lastkilled_type}
{CLEAR_ANO_GLOBAL_VARIABLE {variable}}
{CLEAR_ANO_GLOBAL_VARIABLE {variable}_prev}
{CLEAR_ANO_GLOBAL_VARIABLE {variable}_count}
{CLEAR_ANO_GLOBAL_VARIABLE {variable}_turn}
{CLEAR_ANO_GLOBAL_VARIABLE {variable}_lastkilled_id}
{CLEAR_ANO_GLOBAL_VARIABLE {variable}_lastkilled_type}
{CLEAR_VARIABLE {variable}_local}
{CLEAR_VARIABLE {unpleasant}_attack}
{CLEAR_GLOBAL_VARIABLE {unpleasant}_endturn}
{CLEAR_ANO_GLOBAL_VARIABLE {unpleasant}_endturn}
{CLEAR_VARIABLE wasendturn}
[/event]

Expand Down Expand Up @@ -336,37 +368,37 @@
[/filter]
{VARIABLE_OP {variable}_local add 1}
{VARIABLE {unpleasant} true}
{GLOBAL_VARIABLE_OP {variable} add 1}
{ANO_GLOBAL_VARIABLE_OP {variable} add 1}
[store_unit]
[filter]
x=$x1
y=$y1
[/filter]
variable=tmp
[/store_unit]
{SET_GLOBAL_VARIABLE {variable}_lastkilled_id $tmp.id}
{SET_GLOBAL_VARIABLE {variable}_lastkilled_type $tmp.type}
{SET_ANO_GLOBAL_VARIABLE {variable}_lastkilled_id $tmp.id}
{SET_ANO_GLOBAL_VARIABLE {variable}_lastkilled_type $tmp.type}
#ifdef DEBUG_MODE
{IF_DEBUG_MODE_IS_ACTUALLY_ON}
{DEBUGMSG1 "last {variable}_lastkilled_type $tmp.type"}
{END_IF_WITHOUT_ELSE}
#endif
{CLEAR_VARIABLE tmp}
{SET_GLOBAL_VARIABLE {variable}_turn $turn_number}
{SET_ANO_GLOBAL_VARIABLE {variable}_turn $turn_number}
{IF wasendturn equals true}
{SET_GLOBAL_VARIABLE {unpleasant}_endturn true}
{SET_ANO_GLOBAL_VARIABLE {unpleasant}_endturn true}
{ELSE}
{SET_GLOBAL_VARIABLE {unpleasant}_endturn false}
{SET_ANO_GLOBAL_VARIABLE {unpleasant}_endturn false}
{END_IF}
[/event]

[event]
name=preload
first_time_only=no
{VARIABLE {unpleasant}_attack false}
{GET_GLOBAL_VARIABLE {variable}}
{GLOBAL_VARIABLE_TO_LOCAL {variable}_turn tmp}
{GLOBAL_VARIABLE_TO_LOCAL {variable}_count xyz}
{GET_ANO_GLOBAL_VARIABLE {variable}}
{ANO_GLOBAL_VARIABLE_TO_LOCAL {variable}_turn tmp}
{ANO_GLOBAL_VARIABLE_TO_LOCAL {variable}_count xyz}
#ifdef DEBUG_MODE
{IF_DEBUG_MODE_IS_ACTUALLY_ON}
{DEBUGMSG1 "reload to avoid deaths : $xyz until now"}
Expand All @@ -375,7 +407,7 @@
# problem: right now, this event is generated both when player reloads
# during his turn, as well as when he hits end turn and then reloads
{IF global_tmp numerical_not_equals (${variable}_local)}
{GLOBAL_VARIABLE_TO_LOCAL {unpleasant}_endturn wasendturn}
{ANO_GLOBAL_VARIABLE_TO_LOCAL {unpleasant}_endturn wasendturn}
{IF tmp equals $turn_number} # reload in the same turn
{IF wasendturn equals false} # same turn
[fire_event]
Expand All @@ -386,30 +418,30 @@
name=reload to the previous turn to avoid losses
[/fire_event]
{END_IF}
{GLOBAL_VARIABLE_OP {variable}_count add 1}
{ANO_GLOBAL_VARIABLE_OP {variable}_count add 1}
[fire_event]
name=reload to avoid losses
[/fire_event]
{GET_GLOBAL_VARIABLE {variable}_count}
{GET_ANO_GLOBAL_VARIABLE {variable}_count}
[fire_event]
name="reload to avoid losses $global_tmp"
[/fire_event]
{ELSE}
{VARIABLE_OP tmp add -1}
{IF tmp equals $turn_number} # end turn, player had losses, reload to the previous turn
{GLOBAL_VARIABLE_OP {variable}_count add 1}
{ANO_GLOBAL_VARIABLE_OP {variable}_count add 1}
[fire_event]
name=reload to avoid losses
[/fire_event]
{GET_GLOBAL_VARIABLE {variable}_count}
{GET_ANO_GLOBAL_VARIABLE {variable}_count}
[fire_event]
name="reload to avoid losses $global_tmp"
[/fire_event]
{END_IF_WITHOUT_ELSE}
{END_IF}
{END_IF_WITHOUT_ELSE}
{SET_GLOBAL_VARIABLE {variable}_prev $global_tmp}
{SET_GLOBAL_VARIABLE {variable} (${variable}_local)}
{SET_ANO_GLOBAL_VARIABLE {variable}_prev $global_tmp}
{SET_ANO_GLOBAL_VARIABLE {variable} (${variable}_local)}
[/event]
#enddef

Expand Down
5 changes: 2 additions & 3 deletions scenarios/04_Battle_of_Barnon.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -2265,7 +2265,7 @@
{IF turn_number equals $ano_tmp_turn}
{IF ano_first_time equals true}
{IF ano_reload equals true}
{GLOBAL_VARIABLE_TO_LOCAL ano_barnon_dejavu_lastkilled_type tmp}
{ANO_GLOBAL_VARIABLE_TO_LOCAL ano_barnon_dejavu_lastkilled_type tmp}
{IF_HAVE_UNIT_TYPE ($tmp)}
{VARIABLE tmpg _"yet he is still alive"}
{IF tmp equals "Akladian Pikeneer"}
Expand Down Expand Up @@ -2319,8 +2319,7 @@
{ELSE}
#po: I was so sure our warriors will kill that
{VARIABLE tmp _"warrior"}
{FOUR_END_IFs}
{FOUR_END_IFs}
{EIGHT_END_IFs}
{FOUR_END_IFs}
{TWO_END_IFs}
{END_IF}
Expand Down
2 changes: 1 addition & 1 deletion scenarios/22_Leaving_Okladia.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -986,7 +986,7 @@
[event]
name=reload to avoid losses
{IF ano_first_time equals true}
{GLOBAL_VARIABLE_TO_LOCAL bride_lastkilled_id tmp}
{ANO_GLOBAL_VARIABLE_TO_LOCAL bride_lastkilled_id tmp}
{MSGm_Gawen _"I have strange feeling of dejavu... Hey, $tmp, take care of yourself, would you? "}
{VARIABLE ano_first_time false}
{END_IF_WITHOUT_ELSE}
Expand Down
Loading

0 comments on commit 9aaa093

Please sign in to comment.