From 376172adcd70a5cb0dbd4f2df37a07c738c3933f Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 23 Jul 2007 19:36:43 +0000 Subject: [PATCH] Unicode WIP: - sinking ships i18n --- src/common/gamecode/spy.c | 120 ++++++++++++++++++-------------------- src/res/messages.xml | 99 ++++++++++++++++++++++++++++++- 2 files changed, 154 insertions(+), 65 deletions(-) diff --git a/src/common/gamecode/spy.c b/src/common/gamecode/spy.c index ee1ac4c52..73b9e725c 100644 --- a/src/common/gamecode/spy.c +++ b/src/common/gamecode/spy.c @@ -184,11 +184,12 @@ spy_message(int spy, const unit *u, const unit *target) /* spion ist gleich gut wie Wahrnehmung Opfer */ /* spion ist schlechter als Wahrnehmung Opfer */ { /* immer */ + const xmlChar * str; scat("Kampfstatus: "); scat(report_kampfstatus(target, u->faction->locale)); - c = locale_string(u->faction->locale, hp_status(target)); - if (c && strlen(c)) - sprintf(buf, "%s (%s)", buf, c); + str = locale_string(u->faction->locale, hp_status(target)); + if (str && str[0]) + sprintf(buf, "%s (%s)", buf, str); scat("."); } @@ -297,7 +298,7 @@ setwere_cmd(unit *u, struct order * ord) int setstealth_cmd(unit * u, struct order * ord) { - const char *s; + const xmlChar *s; char level; const race * trace; @@ -359,11 +360,11 @@ setstealth_cmd(unit * u, struct order * ord) } else if (findparam(s, u->faction->locale) == P_NOT) { freset(u, UFL_PARTEITARNUNG); } else if (findkeyword(s, u->faction->locale) == K_NUMBER) { - const char *s2 = getstrtoken(); + const xmlChar *s2 = getstrtoken(); int nr = -1; - if(s2) nr = atoi36(s2); - if(!s2 || *s2 == 0 || nr == u->faction->no) { + if (s2) nr = atoi36(s2); + if (!s2 || *s2 == 0 || nr == u->faction->no) { a_removeall(&u->attribs, &at_otherfaction); } else { struct faction * f = findfaction(nr); @@ -450,8 +451,7 @@ setstealth_cmd(unit * u, struct order * ord) /* Tarnungslevel setzen */ level = (char) atoip(s); if (level > effskill(u, SK_STEALTH)) { - sprintf(buf, "%s kann sich nicht so gut tarnen.", unitname(u)); - mistake(u, ord, buf, MSG_EVENT); + ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_lowstealth", "")); return 0; } u_seteffstealth(u, level); @@ -493,42 +493,36 @@ crew_skill(region * r, faction * f, ship * sh, skill_t sk) } static int -try_destruction(unit * u, unit * u2, const char *name, int skilldiff) +try_destruction(unit * u, unit * u2, const ship *sh, int skilldiff) { - const char *destruction_success_msg = "%s wurde von %s zerstoert."; - const char *destruction_failed_msg = "%s konnte %s nicht zerstoeren."; - const char *destruction_detected_msg = "%s wurde beim Versuch, %s zu zerstoeren, entdeckt."; - const char *detect_failure_msg = "Es wurde versucht, %s zu zerstoeren."; - const char *object_destroyed_msg = "%s wurde zerstoert."; + const char *destruction_success_msg = "destroy_ship_0"; + const char *destruction_failed_msg = "destroy_ship_1"; + const char *destruction_detected_msg = "destroy_ship_2"; + const char *detect_failure_msg = "destroy_ship_3"; + const char *object_destroyed_msg = "destroy_ship_4"; if (skilldiff == 0) { /* tell the unit that the attempt failed: */ - sprintf(buf, destruction_failed_msg, unitname(u), name); - addmessage(0, u->faction, buf, MSG_EVENT, ML_WARN); + ADDMSG(&u->faction->msgs, msg_message(destruction_failed_msg, "ship unit", sh, u)); /* tell the enemy about the attempt: */ if (u2) { - sprintf(buf, detect_failure_msg, name); - addmessage(0, u2->faction, buf, MSG_EVENT, ML_IMPORTANT); + ADDMSG(&u2->faction->msgs, msg_message(detect_failure_msg, "ship", sh)); } return 0; - } - if (skilldiff < 0) { + } else if (skilldiff < 0) { /* tell the unit that the attempt was detected: */ - sprintf(buf, destruction_detected_msg, unitname(u), name); - addmessage(0, u->faction, buf, MSG_EVENT, ML_WARN); + ADDMSG(&u2->faction->msgs, msg_message(destruction_detected_msg, "ship unit", sh, u)); /* tell the enemy whodunit: */ if (u2) { - sprintf(buf, detect_failure_msg, unitname(u2), unitname(u), name); - addmessage(0, u2->faction, buf, MSG_EVENT, ML_IMPORTANT); + ADDMSG(&u2->faction->msgs, msg_message(detect_failure_msg, "ship unit", sh, u)); } return 0; - } + } else { /* tell the unit that the attempt succeeded */ - sprintf(buf, destruction_success_msg, name, unitname(u)); - addmessage(0, u->faction, buf, MSG_EVENT, ML_INFO); - if (u2) { - sprintf(buf, object_destroyed_msg, name); - addmessage(0, u2->faction, buf, MSG_EVENT, ML_IMPORTANT); + ADDMSG(&u->faction->msgs, msg_message(destruction_success_msg, "ship unit", sh, u)); + if (u2) { + ADDMSG(&u2->faction->msgs, msg_message(object_destroyed_msg, "ship", sh)); + } } return 1; /* success */ } @@ -536,23 +530,16 @@ try_destruction(unit * u, unit * u2, const char *name, int skilldiff) static void sink_ship(region * r, ship * sh, const char *name, char spy, unit * saboteur) { - const char *person_lost_msg = "- %d Person von %s ertrinkt; %s."; - const char *persons_lost_msg = "- %d Personen von %s ertrinken; %s."; - const char *unit_dies_msg = "Die Einheit wird ausgeloescht"; - const char *unit_lives_msg = "Die Einheit rettet sich nach "; - const char *unit_intact_msg = "%s ueberlebt unbeschadet und rettet sich nach %s."; - const char *ship_sinks_msg = "%s versinkt im Ozean."; - const char *enemy_discovers_spy_msg = "%s wurde beim versenken von %s entdeckt."; - const char *spy_discovered_msg = "%s entdeckte %s beim versenken von %s."; unit **ui; region *safety = r; int i; direction_t d; unsigned int index; double probability = 0.0; - char buffer[DISPLAYSIZE + 1]; vset informed; vset survivors; + message * sink_msg = NULL; + message * enemy_discovers_spy_msg = NULL; vset_init(&informed); vset_init(&survivors); @@ -577,6 +564,7 @@ sink_ship(region * r, ship * sh, const char *name, char spy, unit * saboteur) vset_add(&informed, u->faction); if (u->ship == sh) { int dead = 0; + message * msg; /* if this fails, I misunderstood something: */ for (i = 0; i != u->number; ++i) @@ -588,22 +576,24 @@ sink_ship(region * r, ship * sh, const char *name, char spy, unit * saboteur) { vset_add(&survivors, u); if (dead > 0) { - strcat(strcpy(buffer, unit_lives_msg), regionname(safety, u->faction)); - sprintf(buf, (dead == 1) ? person_lost_msg : persons_lost_msg, - dead, unitname(u), buffer); - } else - sprintf(buf, unit_intact_msg, unitname(u), regionname(safety, u->faction)); - addmessage(0, u->faction, buf, MSG_EVENT, ML_WARN); + msg = msg_message("sink_lost_msg", "dead region unit", dead, safety, u); + } else { + msg = msg_message("sink_saved_msg", "region unit", safety, u); + } set_leftship(u, u->ship); u->ship = 0; - if (r != safety) + if (r != safety) { setguard(u, GUARD_NONE); - while (u->items) i_remove(&u->items, u->items); + } + while (u->items) { + i_remove(&u->items, u->items); + } move_unit(u, safety, NULL); } else { - sprintf(buf, (dead == 1) ? person_lost_msg : persons_lost_msg, - dead, unitname(u), unit_dies_msg); + msg = msg_message("sink_lost_msg", "dead region unit", dead, NULL, u); } + add_message(&u->faction->msgs, msg); + msg_release(msg); if (dead == u->number) { /* the poor creature, she dies */ *ui = u->next; @@ -644,18 +634,22 @@ sink_ship(region * r, ship * sh, const char *name, char spy, unit * saboteur) } } /* finally, report to this faction that the ship sank: */ - sprintf(buf, ship_sinks_msg, name); - addmessage(0, f, buf, MSG_EVENT, ML_WARN); + if (sink_msg==NULL) { + sink_msg = msg_message("sink_msg", "ship region", sh, r); + } + add_message(&f->msgs, sink_msg); vset_erase(&informed, f); - if (spy == 1 && f != saboteur->faction && - faction_skill(r, f, SK_OBSERVATION) - eff_skill(saboteur, SK_STEALTH, r) > 0) { - /* the unit is discovered */ - sprintf(buf, spy_discovered_msg, lastunit, unitname(saboteur), name); - addmessage(0, f, buf, MSG_EVENT, ML_IMPORTANT); - sprintf(buf, enemy_discovers_spy_msg, unitname(saboteur), name); - addmessage(0, saboteur->faction, buf, MSG_EVENT, ML_MISTAKE); + if (spy == 1 && f != saboteur->faction && faction_skill(r, f, SK_OBSERVATION) - eff_skill(saboteur, SK_STEALTH, r) > 0) { + /* the unit is discovered */ + ADDMSG(&f->msgs, msg_message("spy_discovered_msg", "unit saboteur ship", lastunit, saboteur, sh)); + if (enemy_discovers_spy_msg==NULL) { + enemy_discovers_spy_msg = msg_message("enemy_discovers_spy_msg", "unit ship", saboteur, sh); + } + add_message(&saboteur->faction->msgs, sink_msg); } } + if (enemy_discovers_spy_msg) msg_release(enemy_discovers_spy_msg); + if (sink_msg) msg_release(sink_msg); /* finally, get rid of the ship */ destroy_ship(sh); vset_destroy(&informed); @@ -665,12 +659,13 @@ sink_ship(region * r, ship * sh, const char *name, char spy, unit * saboteur) int sabotage_cmd(unit * u, struct order * ord) { - const char *s; + const xmlChar *s; int i; ship *sh; unit *u2; char buffer[DISPLAYSIZE]; region * r = u->region; + int skdiff; init_tokens(ord); skip_token(); @@ -686,9 +681,8 @@ sabotage_cmd(unit * u, struct order * ord) return 0; } u2 = shipowner(sh); - strcat(strcpy(buffer, shipname(sh)), sh->type->name[0]); - if (try_destruction(u, u2, buffer, eff_skill(u, SK_SPY, r) - - crew_skill(r, u2->faction, sh, SK_OBSERVATION))) { + skdiff = eff_skill(u, SK_SPY, r)-crew_skill(r, u2->faction, sh, SK_OBSERVATION); + if (try_destruction(u, u2, sh, skdiff)) { sink_ship(r, sh, buffer, 1, u); } break; diff --git a/src/res/messages.xml b/src/res/messages.xml index f31b33547..5621c7777 100644 --- a/src/res/messages.xml +++ b/src/res/messages.xml @@ -1014,16 +1014,111 @@ "$unit($unit) in $region($region): '$order($command)' - You cannot recruit in this plane." + + + + + + + "$unit($unit) in $region($region): '$order($command)' - Die einheit kann sich nicht so gut tarnen." + "$unit($unit) in $region($region): '$order($command)' -The unit cannot hide that well." + + + + + + + + "$ship($ship) was destroyed by $unit($unit)." + "$ship($ship) wurde von $unit($unit) zerstört." + + + + + + + + "$unit($unit) could not destroy $ship($ship)." + "$unit($unit) konnte $ship($ship) nicht zerstören." + + + + + + + + "$unit($unit) was detected while trying to destroy $ship($ship)." + "$unit($unit) wurde beim Versuch $ship($ship) zu zerstören entdeckt." + + + + + + + "Somebody attempted to destroy $ship($ship)." + "Es wurde versucht, $ship($ship) zu zerstören." + + + + + + + "$ship($ship) was destroyed." + "$ship($ship) wurde zerstört." + + + + + + + + + "$int($amount) Personen von $unit($unit) ertrinken.$if($isnull($region),""," Die Einheit rettet sich nach $region($region).")" + + + + + + + + "$unit($unit) ueberlebt unbeschadet und rettet sich nach $region($region)." + + + + + + + + "$ship($ship) versinkt in den Fluten von $region($region)." + + + + + + + + "$unit($unit) wurde beim versenken von $ship($ship) entdeckt." + + + + + + + + + "$unit($unit) entdeckte $unit($saboteur) beim versenken von $ship($ship)." + + "$unit($unit) ertrinkt in $region($region)." - "$unit($unit) drowns in in $region($region)." "$unit($unit) drowns in in $region($region)." - + +