GithubHelp home page GithubHelp logo

nemaara / a_new_order Goto Github PK

View Code? Open in Web Editor NEW
10.0 1.0 7.0 84.68 MB

add-on campaign for The Battle for Wesnoth featuring the Akladians; originally by szopen

Home Page: https://forums.wesnoth.org/viewtopic.php?f=8&t=6486

License: GNU General Public License v2.0

Lua 100.00%
campaign game-2d game-development gamedev pixel-art wesnoth wesnoth-umc

a_new_order's People

Contributors

alxrem avatar celerini avatar cooljeanius avatar dependabot[bot] avatar elvish-hunter avatar multiseptim avatar nemaara avatar oo13 avatar toranks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

a_new_order's Issues

`{CHECK_EVEN}`/`{IF_EVEN}`/`{IF_ODD}` macros are broken

So, I first noticed this when trying to use the macros in S04 (Battle of Barnon), but it's a more generic issue than that if you look at how the macros are actually implemented:

#-------------------------------------------------------------------------------
# {IF_EVEN <numeric-variable>}
# {IF_ODD <numeric-variable>}
#define CHECK_EVEN N
{SET temp_a {N}}
{SET temp_b {N}}
{INCREMENT temp_a}
{MULTIPLY temp_a .5}
{MULTIPLY temp_b .5}
{IF temp_a equals $temp_b}
{SET_TRUE global_var__is_even}
{ELSE}
{SET_FALSE global_var__is_even}
{END_IF}
{RELEASE temp_a}
{RELEASE temp_b}
#enddef
#define IF_EVEN N
{CHECK_EVEN {N}}
{IF_TRUE global_var__is_even}
# no good place to deallocate 'global_var__is_even'.
#enddef
#define IF_ODD N
{CHECK_EVEN {N}}
{IF_FALSE global_var__is_even}
# no good place to deallocate 'global_var__is_even'.
#enddef

I mean, seriously? Why did szopen do it like that? Why not just use a modulo?

Battle of Barnon: message about being able to evacuate in different directions can be confusing if player clicks thru too quickly

See:

# FIXME: player might click thru this message too quickly, leading to confusion when the second half of it is displayed:
{MSG_Reme _"This isn't a total surprise to me. My king, we have to escape. We have two ways to out of this trap: there is one way to the west..."}
[scroll_to]
x,y=1,4
# FIXME: tile doesn't actually get highlighted:
highlight=yes
[/scroll_to]
[redraw]
[/redraw]
{HIGHLIGHT_IMAGE 1 4 scenery/signpost.png ()}
[delay]
time=500
[/delay]
{MSG_Reme _"...and another way to the east."}
[scroll_to]
x,y=40,21
# FIXME: tile doesn't actually get highlighted:
highlight=yes
[/scroll_to]
[redraw]
[/redraw]
{HIGHLIGHT_IMAGE 40 21 scenery/signpost.png ()}
[delay]
time=500
[/delay]
{MSG_Gawen _"Which one is better?"}

Consider refactoring the `{OBJECTIVE_NOTES}` macro to use the normal `[note]` tag

Right now use of the {OBJECTIVE_NOTES} macro looks kind of weird, can conflict with other note= keys, and can get cut off if the text gets too long:

# FIXME: how about refactoring this just to use the normal "notes" tag?
#define OBJECTIVE_NOTES _NOTES_TEXT
note="*"+_"Scenario notes:"+"
"+{_NOTES_TEXT}
#enddef

See also:

[objectives]
side=1
# Warning: if these notes get much longer, they start to get cut off:
{OBJECTIVE_NOTES _"This is a large-scale map, where you may choose a way to go. Move Gawen to a signpost or any other location to move to a new scenario. Move Gawen to the tent to talk with his friends."}
[/objectives]

and:
[objectives]
side=1
# FIXME: this first note gets overwritten by use of {OBJECTIVE_NOTES} at the end:
note=_"There are no interrogations in this scenario."
[objective]
description=_"Kill all enemy leaders"
condition=win
[/objective]
[objective]
description=_"Any enemy unit reaches the keep of the Oracle."
condition=lose
[/objective]
[objective]
description=_"Death of Gawen Hagarthen"
condition=lose
[/objective]
[objective]
description=_"Death of Ruvio"
condition=lose
[/objective]
[objective]
description=_"Death of Lady Lorin"
condition=lose
[/objective]
{TURNS_RUN_OUT}
{OBJECTIVE_NOTES _"The scenario will continue even if Matthias Ramon dies."}
[/objectives]

Should Gawen have traits?

This isn't really so much a bug report as it is a discussion question: does it make sense for Gawen to have traits or not? It feels kinda weird how he doesn't have any currently, but then again, on second thought, that kinda makes sense from a story POV: throughout most of the beginning of the campaign, he's trying not to be who he is, and thus is avoiding displaying any notable traits. It's only later once he experiences character growth and accepts his role that he starts to display personality. Also, from a gameplay POV, I'm not really sure Gawen needs anything; usually when one of my heroes dies, it's one of my other ones, and I usually manage to get Gawen to level 3 (plus an AMLA or two) by the end of the campaign. So, while he might not technically need any traits, that blank space in the sidebar where traits ought to go does still kinda bug me...

Better fallback code for cases of players killing enemy leaders that they shouldn't

So IMO the messages that you're not supposed to kill Bor Cryne and Uri van Roe in S04 still aren't quite enough; there remains the possibility that the player won't actually stop what they are doing, in which case, what happens then? The player could theoretically just keep playing forever without actually reaching an end to the scenario... see further feedback from @knyghtmare on Discord...

ensure all units have correct portrait associated with them

Currently all units with unique portraits have those unique portraits used via the macros in macros/messages.cfg; much of the time the portraits aren't actually embedded in their unit declarations in the main scenario WML, though, which can lead to the unique portrait getting left out if the unit triggers a message intended for a generic unit. This can be fixed by ensuring all heroes with unique portraits have those portraits set via the profile= key in their UnitWML, which I can do, but I might miss some by accident.

Change traits for enemy leaders

The traits I'm adding in PR #43 are mostly for gameplay purposes, and don't make as much sense from a flavor standpoint... @nemaara suggested I create some new traits that do basically the same thing but have a different name, which I think could be worthwhile once I figure out how to do it. That's out-of-scope for that PR, though, so I'm opening this issue to track it separately.

Scenario 10 "Siege of Haeltin" minor nits

  • In a previous review, @nemaara said I might want to increase the turn limit; that would require changing the code in a lot of places, though, so I didn't do it at the time. It might be worth revisiting, though.
  • The dialogue about there being "too many of them" should only display if there are, in fact, too many enemies (i.e. the case where they outnumber you... I'm not sure how to filter for that, though)

Actually use the abilities from units/macros/abilities.cfg

See here:
https://github.com/cooljeanius/A_New_Order/blob/master/units/macros/abilities.cfg

I think "Terror" and "Obscures" make sense for Grekulak; I'm not quite sure about the rest, though... I think "Protection" is there for back when the Dunefolk were still Aragwaithi, but maybe now it makes sense to put it onto the Akladian Protectors? Since Akladian Protectors are present throughout the campaign, though, changing the entire unit type to have that ability would affect balance of the whole campaign, and require testing, though... also, how about "Dauntless" and "Intimidates"? (I don't think I'm actually going to use any of the "sylvan" abilities, though, as those are pretty heavily tied to IftU/AtS, but if I did use them here... maybe Kyobaine could get one of them upon advancing to level 3?)

`_server.pbl` updates

Screen Shot 2022-05-05 at 22 01 05

The "author" field still says "szopen" even though he is no longer working on it. I'm not saying to remove him entirely from that field, though, just maybe to rephrase it as "szopen (original), egallager and nemaara (current)" or something. Also the description could be updated a bit; linking to the forum thread in the description is redundant when there's already a separate field for a link to the forum thread. Maybe put a link to this GitHub repo there instead?

Use `{COUNT_RELOADS}` macro

Part of ANO's reputation is that it has code tracking player reloads in it, however, this code isn't actually currently used, despite what players think. It might be worthwhile investigating if this code can be reactivated, in order to meet player expectations:

#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
# it fires events "same turn reload", "back to the future reload"
# "back to the past reload" with obvious meaning.
# in addition, reload nth (e.g. reload 5, that is fifth reload)
# and reload nth at turn mth (e.g "reload 5 at turn 4, that is fifth reload which happened at turn 4")
# and reload previous turn (at new turn, if in previous turn was preload)
# and "turn nth with reload mth" (e.g. "turn 5 with reload 4", that is this is turn fifth, and until now there were 4 reloads)
#unpleasant is name of the VARIABLE, set true when something unpleasant happened
[event]
name=prestart
{SET_GLOBAL_VARIABLE {variable} 0}
{SET_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}
{VARIABLE ANOreload false}
{CLEAR_VARIABLE {unpleasant}}
{CLEAR_VARIABLE {unpleasant}_times}
[/event]
[event]
name=preload
first_time_only=no
{GET_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}
{GET_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}
[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}
[fire_event]
name=same turn reload
[/fire_event]
{ELSE} # player reloaded in the past, and now returned to older savegame, or if global_Tmp - turn_number -1 no reload
{VARIABLE tmp 0}
{VARIABLE_OP tmp add $turn_number}
{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}
[fire_event]
name=back to the future reload
[/fire_event]
{END_IF}
{TWO_END_IFs}
{SET_GLOBAL_VARIABLE ({variable}_turns) $turn_number}
{VARIABLE ANOreload true}
{VARIABLE {unpleasant} false}
[/event]
[event]
name=new turn
first_time_only=no
#dejavu start
{IF ANOreload equals true}
#ifdef __DEBUG__
{DEBUGMSG1 "reloaded previous turn (${unpleasant}|:${unpleasant}_times|)"}
#endif
[fire_event]
name=reload previous turn
[/fire_event]
[fire_event]
name="turn $turn_number with reload ${variable}"
[/fire_event]
{IF {unpleasant} equals false}
{VARIABLE_OP {unpleasant}_times add 1}
#ifdef __DEBUG__
{DEBUGMSG1 "generating event"}
#endif
[fire_event]
name="unpleasant event avoided with reload"
[/fire_event]
[fire_event]
name="unpleasant event avoided with reload ${unpleasant}_times"
[/fire_event]
{ELSE}
{IF {unpleasant} equals true} # may be unitialized in case preload happens before prestart
[fire_event]
name=reload failed to avoid unpleasant event
[/fire_event]
{END_IF_WITHOUT_ELSE}
{END_IF}
{END_IF_WITHOUT_ELSE}
{VARIABLE ANOreload false}
{VARIABLE {unpleasant} false}
[/event]
#enddef

Update credits

There have been new contributions that should be noted, and Wesnoth 1.16 fixes the bug where BfW crashes on credits that are too long, so the credits should be updated when porting to that version.

Deal with Fencers becoming recruitable in S19c again

When I started editing this campaign, in the arc starting with S17, the player was only supposed to be able to recruit Peasants, at least until they became able to recruit Mages. However, in S19c, "The Oracle", I noticed a commented-out recruit= line that allowed the recruiting of Fencers again, so I un-commented it, since I was having a hard time anyways, and needed the extra recruits. However, that had the effect of creating a contradiction in some of the dialogue in S24, "Fall of Freetown", where it refers to being able to recruit Fencers "again", as if they were still unrecruitable up until that point. I should either rework that dialogue, disable recruiting of Fencers again after S19c, or come up with some other solution.
Refs:

# This "recruit" line was commented out originally; might want to conditionalize it or just remove it again:
recruit=Peasant,Fencer

# (maybe disallow recruiting of Fencers again here?)

# FIXME: I made Fencers recruitable again earlier than this (in S19c, "The Oracle"); need to fix the dialogue...
{MSG_narrator _"Because you were declared the messiah by the Oracle and recognised as king by the Wesnothians, you may again recruit Fencers, Spearmen, Bowmen, Akladian Clansmen, Akladian Warriors, Akladian Homeguards, and Akladian Wisemen."}

Lorin/Karen killing competition: improve dialogue

This can be kind of hard to test; I don't think I've actually seen all the text in-game yet:

#define LORIN_KAREN_COMPETITION
[event]
name=die
first_time_only=no
[filter_second]
id=Karen
[/filter_second]
{IF_HAVE_UNIT (Lady Lorin)}
{IF ano_competition equals end}
{IF ano_competition_k equals 0}
{MESSAGE (Karen) (portraits/karen.png) (Karen) _"Scored!"}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
# FIXME: the word "again" doesn't make sense if this is the first kill of the competition:
_"Don't start again, kid. I won't play that game this time."}
{VARIABLE ano_competition_k 1}
{END_IF_WITHOUT_ELSE}
{ELSE}
{IF ano_competition_k equals 0}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"Hey, Lorin, or whatever your name is, did you see that? Now you know why underlings give weapons to 'children'!"}
{ELSE_IF ano_competition_k equals 1}
{IF ano_competition_l equals 0}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"Ha! Gawen, did you see that? I've already killed two enemies, and your step-grand-mother hasn't killed a single one!"}
{ELSE}
{MESSAGE (Karen) (portraits/karen.png) (Karen) _"Ha! Scored two!"}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"You think it is some kind of competition?"}
{END_IF}
{ELSE_IF ano_competition_k equals 2}
{IF ano_competition_l equals 0}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"Hey, Gawen. That she-wolf of yours is pathetic. I've scored three and she hasn't killed a single enemy!"}
{ELSE}
{IF ano_competition_l greater_than 2}
{MESSAGE (Karen) (portraits/karen.png) (Karen) _"Ha! Scored three!"}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"So what? I am winning!"}
{ELSE}
{MESSAGE (Karen) (portraits/karen.png) (Karen) _"Ha! Scored three!"}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin) _"So what?"}
{END_IF}
{END_IF}
{ELSE}
{IF ano_competition_l greater_than $ano_competition_k}
{MESSAGE (Karen) (portraits/karen.png) (Karen) _"Ha! Another one!"}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"So what? I am winning!"}
{ELSE_IF ano_competition_l equals 0}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"I'm a killing machine! Lorin should just go back and hide in Haeltin!"}
{ELSE}
{MESSAGE (Karen) (portraits/karen.png) (Karen) _"Ha! I'm winning!"}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"Impertinent heathen underling child, the day has not yet ended!"}
{TWO_END_IFs}
{TWO_END_IFs}
{END_IF}
{END_IF}
{END_IF_WITHOUT_ELSE}
{VARIABLE_OP ano_competition_k add 1}
[/event]
[event]
name=die
first_time_only=no
[filter_second]
id=Lady Lorin
[/filter_second]
{IF ano_competition equals end}
{ELSE}
{IF ano_competition_l equals 0}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin) _"First kill today!"}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"Oh no, the mighty Lorin is coming! Children and little furry animals, run for your life!"}
{ELSE_IF ano_competition_l equals 1}
{IF ano_competition_k equals 0}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Karen)
_"My son, send little Karen back home. She is useless. I've killed two enemies already, and what has she done?"}
{ELSE}
{IF ano_competition_l greater_than $ano_competition_k}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"Scored! Now I'm in the lead!"}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"And I thought you weren't competing with me."}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"I am not competing with you, silly child."}
{ELSE}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"Try a little harder, grand-mother. But not bad for your age."}
{END_IF}
{END_IF}
{ELSE_IF ano_competition_l equals 2}
{IF ano_competition_l greater_than $ano_competition_k}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"Ha! She-wolf of Haeltin is coming! No underling child could be better than me!"}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"The She-wolf of Haeltin, don't get too excited; it will cause more wrinkles."}
{ELSE}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin) _"Three!"}
{MESSAGE (Karen) (portraits/karen.png) (Karen) _"Pfff! Only three?"}
{END_IF}
{ELSE}
{IF ano_competition_l greater_than $ano_competition_k}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"Who's the killing machine now?"}
{ELSE}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"Not bad, but still you have to a lot to learn!"}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"Do you think, little child, that I will honour you with an answer?"}
{END_IF}
{TWO_END_IFs}
{END_IF}
{END_IF}
{VARIABLE_OP ano_competition_l add 1}
[/event]
#enddef
#define LORIN_KAREN_COMPV
{IF ano_competition equals end}
{ELSE}
{IF_HAVE_UNIT (Lady Lorin)}
{IF ano_competition_l greater_than $ano_competition_k}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"By the way, I won. Scored $ano_competition_l"}
{MESSAGE (Majid Yahyazad) (portraits/majid.png) (Majid Yahyazad)
_"Girls, what do you exactly mean by 'scored'? Is it because you are slicing up your fallen foes?"}
{ELSE_IF ano_competition_k greater_than $ano_competition_l}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"By the way, I won. Scored $ano_competition_k"}
{MESSAGE (Majid Yahyazad) (portraits/majid.png) (Majid Yahyazad)
_"Girls, what do you exactly mean by 'scored'? Is it because you are slicing up your fallen foes?"}
{ELSE_IF ano_competition_k greater_than 0}
{MESSAGE (Gawen Hagarthen) (portraits/gawen_winter.png) (Gawen)
_"Why such an angry look, Lorin?"}
{MESSAGE (Karen) (portraits/karen.png) (Karen) _"She lost."}
{MESSAGE (Lady Lorin) (portraits/lorin_winter.png) (Lorin)
_"I have not lost. I have not won."}
{MESSAGE (Karen) (portraits/karen.png) (Karen)
_"That's what I meant. You have not won, great super killing machine, so you have lost."}
{ELSE}
{TWO_END_IFs}
{END_IF}
{ELSE}
{END_IF}
{VARIABLE ano_competition end}
{VARIABLE ano_competition_k 0}
{END_IF}
{IF ano_bug_fix equals yes}
{CLEAR_VARIABLE ano_bug_fix}
{VARIABLE ano_competition start}
{END_IF_WITHOUT_ELSE}
#enddef

FE-style support conversations

The fact that this campaign has the large-scale "strategic map" scenarios where you can talk with other characters gives me the idea that this might be the perfect place to try out implementing my idea for FE-style support conversations in Wesnoth. Basically, it would involve adding some support points variables that get incremented whenever two of your heroes fight next to one another, and then when you go to your camp to talk to them (in S13, S18, & S20), if you've built up enough support points with that character, you'd get a new dialogue option with them to have a "support conversation" that would increase their overall support level. The thing that would make these different from the existing conversations you can have with characters at your camp would be the conditionality of them: being able to know how emotionally "close" characters are to one another would allow us to make additional assumptions in the dialogue as to how the characters should interact.

Scenario 1 minor nits

  • In an attempt to ensure no branches of ifdefs were left blank, I tried adding the placing of an image in a side declaration. However, that doesn't work.
  • Heinric the Redbeard and the old medic should have unique portraits done for them; see ART_TODO.txt and cooljeanius/ANO_art#2
  • Setting Gawen's health at the start is pointless, since it just gets overwritten by an event (also, as @knyghtmare has pointed out, the event doesn't make much sense itself, as it's supposed to represent him being poisoned, but Wesnoth has an actual "poisoned" status that we could be using for him instead)

Missing message captions

From cooljeanius/A_New_Order/6. I filled in captions for most of the messages that were missing them, but there are still a few remaining where giving them a caption would involve something a little more complicated than just copying the 1st parameter to the 3rd parameter. I tried to mark all the ones I could find with TODO comments, so they should be easy to notice.

use `wmlscope` to find and remove unused code/assets

one thing @knyghtmare complained about recently was how big the download was, well a lot of that comes from there being a bunch of old cruft leftover in the repo. We should use wmlscope to find stuff that's unused, and then either actually use it (as I plan to do with abilities.cfg as per #55), or just remove it.

Reme's warning not to get too attached to clansmen: get variation for the clansman being loyal to work

I tried doing so, but it doesn't seem to work:

[event]
name=last breath
[filter]
type=Akladian Clansman
side=1
[/filter]
{MSG_Gawen _"Poor fellow!"}
{MSG_Reme _"He dies an honorable death. You cannot let the fear of losing units paralyse you; there are many more clansmen ready to fight for you."}
# FIXME: This loyalty check doesn't seem to work, even after changing it from a "die" event to a "last breath" event, so I don't know what's wrong:
[if]
[have_unit]
id=$unit.id
[filter_wml]
upkeep="loyal"
[or]
[modifications]
[trait]
id=loyal
[/trait]
[/modifications]
[/or]
[/filter_wml]
[/have_unit]
[then]
{MSG_Gawen _"But he was loyal to our cause though!"}
{MSG_Reme _"Well, I suppose you do have a point there. Feel free to be more careful with our most loyal supporters."}
[/then]
[/if]
[/event]

Use autumn terrain when applicable

Scenario 10, Siege of Haeltin, marks the start of winter. Everything before that is soon before it, so it should still be autumn. This can be confirmed by looking at images/story_images/gawen_alone.png, which has a background with fall colors in it. Any maps in the first 10 scenarios should be updated to use fall terrain when applicable, for example, with any deciduous forests.

Fix wrong ellipses

Reme maintains his spiky "hero" even after he stops being necessary to keep alive. Meanwhile, other units that are necessary to keep alive don't get the spiky "hero" ellipse (e.g. Deorien). Also I think Rob Roe has the wrong crown thingy under his orb... I can fix some of these myself, but not all of them...
Edit: making a checklist:

  • Rob Roe looks like a hero, but isn't
  • Deorien is a hero, but doesn't look like one
  • Need to use {UNMAKE_HERO} on Reme at some point

Finish writing scenario that uses `maps/RaedwoodEast.map`

I came across this unused map when doing some cleaning of the maps in general, and thought it would be interesting to have it actually be used in a scenario... I'm not quite sure where to fit it in, though... possibly as an alternative to 15b ("Repelling The Orcs")?

In `time over` events, actually SHOW the arriving reinforcements

Pretty much all the explicit time over events in this campaign that result in defeat have messages that mention something about reinforcements arriving; it would require less willing suspension of disbelief if these reinforcements were actually shown using {SCATTER_UNITS} or something.

Event where Hoyre is supposed to return in S04 on NIGHTMARE doesn't actually work

Specifically, this part:

#ifdef NIGHTMARE
[event]
# FIXME: doesn't seem to work?
name="turn $($turn_number + 6)"
id=Hoyre_returns
[scroll_to]
x,y=27,1
[/scroll_to]
[unstore_unit]
variable=ano_barnon_Hoyre_tmp
x,y=27,1
find_vacant=yes
[/unstore_unit]
[modify_unit]
[filter]
id="Hoyre O Barnone"
[/filter]
# There's already a F_C_T_H above that ought to keep him safe, but just in case:
[status]
unpoisonable=yes
undrainable=yes
unplagueable=yes
invulnerable=yes
[/status]
[/modify_unit]
{MESSAGE (Hoyre O Barnone) (portraits/hoyre.png) (Hoyre O Barnone) _"I'm back with the reinforcements, just as promised!"}
# Tee hee hee I'm evil:
{ANO4_TIMEOVER_REINFORCEMENTS} # defined in ano-01_06macros.cfg
{CLEAR_VARIABLE ano_barnon_Hoyre_tmp}
[/event]
#endif

Write custom AI to prevent allies from killstealing

From cooljeanius/A_New_Order/1. Basically sometimes allied AI sides kill units that the player might want to kill for EXP, and there should be a way to stop them from doing so. It might actually be better to do this in core Wesnoth rather than limiting it to an add-on, as I've come across many other instances where such a behavior would be useful, as well. But that would require some discussion.

"Unexpected Guests" minor nits

  • Battle music should only play once the player has discovered the orcs; before that it should be calmer and more mysterious
  • Clear fog to show orcs speaking

S14e ("Saorduc Swamps") minor nits

  • Maybe the lizards should be able to join you? I dunno, it's just something Marximilian suggested... (also be sure to test dialogue in that area, too)
  • Make a macro to reduce repetition of the moveto events
  • Ensure modifications to saurians to represent their sluggishness in the cold actually work properly (and consider updating them as necessary)
  • unused macro cleanup; see issue #57 (for example, the PROPOSE_PEACE_LIZARD macro)

Write a new AI to replace AI_CONTROLLER

AI_CONTROLLER is being removed so we need to get rid of it. Probably replace with a microAI or just make the player play the side which I am leaning toward.

Update translations

The copyediting I did as part of the 1.3.0 release changed a lot of strings, which probably broke a lot of translations. I updated the potfile as part of that release, so translators should be able to use msgmerge to update their pofiles and then work from there.

Scenario 27 ("Orannon") minor nits

  • Color-changing animation code when Deorien drives off Grekulak's darkness on turn 16 doesn't really work or look right (and it also takes too long, now that I added delays to it)
  • Bridge-destruction dialogue needs to be improved based on scenario conditions
  • Only the single-tile bridges should be destructible, not the 2-tile one (or at least, not the whole thing of it)
  • Side 8's recruitment_pattern should be updated when it becomes allowed to recruit new units
  • Don't let the {RISE_UP_RISE_UP} macro capture villages (at least not on EASY), for consistency with how the "Plague" mechanic works
  • Handle the case where victory is reached before Grekulak's arrival
  • Ensure all level 3 units are counted properly for the final score tallying (S30, "Final") (low priority, as I'm pretty sure they already are)
  • Change music on Grekulak's arrival, and when he tries his spell of darkness
  • Countdown timer for how many turns Lorin has to retreat
  • Clean up moveto event for when Lorin arrives at keep, so there is dialogue if it's reached between turns 13 and 18, too
  • Ensure zombie IDs are properly quoted

Battle of Barnon: improve code surrounding Uri's `[leader_goal]`

On turns 15 to 30, Uri Van Roe has a [leader_goal] tag directing him to move towards Gawen's keep. However, there is no dialogue indicating that he's going to start doing this, nor is there any dialogue once he's gotten there, which can lead to player confusion as to why he's suddenly acting "suicidal" (seemingly - he has events to guard him, though). More code and dialogue should be added to explain why he's moving and when he's stopped. He could also be protected a bit better.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.