Pages: 1 [2] 3 4
|
|
|
Author
|
Topic: UQM stars/races relocation mod? (Read 17957 times)
|
|
kfdf
Zebranky food
Offline
Posts: 8
|
Great stuff! Grin Which algorithm/library did you use? Would you join mod development? Coding is my hobby, hobbies are supposed to be fun, and there is no fun for me in plain C, only misery and pain. Looking at the codebase only confirmed and reinforced my worst fears. And there is no algorithm per se, things are just arranged randomly, and then "forces" are applied to them until they fall into their proper places. I played with it a bit, mainly trying to introduce some structure into the map it by using dummy fleets that represent empty space (or as they say in Art, "negative space") by being arranged into chains, attached to edges or the center of the map, or even real fleets... I had mixed success, so I ended up using two dummies with fixed positions to force ur-quans away from the edges and one dummy around the Sol to push other fleets away from it without explicitly defining all those constraints. But I still believe that judicial use of dummies and constraints can make maps look more realistic.
it's written c# 5, you'll need standard WPF dependencies - PresentationCore.dll, PresentationFramework.dll, WindowsBase.dll - if you want to compile this using System; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Shapes; using static System.Math;
namespace SC2rm { class Program { public static Fleet[] Fleets; static Brush FromString(string hex) { byte r = byte.Parse(hex.Substring(0, 2), NumberStyles.HexNumber); byte g = byte.Parse(hex.Substring(2, 2), NumberStyles.HexNumber); byte b = byte.Parse(hex.Substring(4, 2), NumberStyles.HexNumber); if (r == 0 && g == 0 && b == 0) return Brushes.Transparent; var ret = new SolidColorBrush(Color.FromRgb(r, g, b)); ret.Freeze(); return ret; } [STAThread] static void Main(string[] args) { try { var folder = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string constraints_file = System.IO.Path.Combine(folder, "constraints.txt"); string[][] lines = (from line in File.ReadAllLines(constraints_file) select line.Split('#')[0] into line select line.Split((char[])null, StringSplitOptions.RemoveEmptyEntries) ).ToArray(); Fleets = (from line in lines where line.Length == 3 || line.Length == 5 let name = line[0] let color = FromString(line[1]) let strength = double.Parse(line[2]) / 2 let x = line.Length == 5 ? double.Parse(line[3]) / 2 : (double?)null let y = line.Length == 5 ? double.Parse(line[4]) / 2 : (double?)null select new Fleet(name, color, strength, x, y) ).ToArray(); var fleet_lookup = Fleets.ToDictionary(fleet => fleet.Name.ToLower());
var expl = from line in lines where line.Length == 4 let name1 = line[0] let name2 = line[1] let min_dist = double.Parse(line[2]) / 2 let max_dist = double.Parse(line[3]) / 2 from c in new[] { new { name1, name2, min_dist, max_dist }, new { name1 = name2, name2 = name1, min_dist, max_dist } } select c; var impl = from fleet in Fleets from fleet2 in Fleets where fleet != fleet2 let name1 = fleet.Name let name2 = fleet2.Name let min_dist = fleet.Strength + fleet2.Strength + 20 let max_dist = double.PositiveInfinity select new { name1, name2, min_dist, max_dist }; var constraints = from c in expl.Concat(impl) group c by c.name1.ToLower() into g let fleet = fleet_lookup[g.Key] let constr = from c in g group c by c.name2.ToLower() into g select g.OrderBy(a => a.max_dist - a.min_dist).First() into c select new Constraint { Fleet = fleet_lookup[c.name2.ToLower()], MinDist = c.min_dist, MaxDist = c.max_dist, } select new { fleet, constr }; foreach (var c in constraints) c.fleet.Constraints = c.constr.ToArray();
new Application().Run(new MainWindow()); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } struct Constraint { public Fleet Fleet; public double MinDist; public double MaxDist; public override string ToString() { return "Constraint: " + Fleet.Name + " " + MinDist + " " + MaxDist; } }
class Fleet : Canvas { public readonly new string Name; public readonly double Strength; public Fleet(string name, Brush color, double strength, double? x, double? y) { Name = name; Strength = strength; Width = Height = Strength * 2; if (x != null && y != null) { X = (double)x; Y = (double)y; Fixed = true; } if (color == Brushes.Transparent) return; var ellipse = new Ellipse { Stroke = color, Width = Strength * 2, Height = Strength * 2, }; Canvas.SetTop(ellipse, -Strength); Canvas.SetLeft(ellipse, -Strength); var text = new TextBlock { Text = Name, Foreground = color, Width = 100, TextAlignment = TextAlignment.Center, }; Canvas.SetTop(text, -11); Canvas.SetLeft(text, -50); Children.Add(ellipse); Children.Add(text);
}
public Constraint[] Constraints; public double VX, VY; public double X, Y; public readonly bool Fixed; public void Update() { Canvas.SetTop(this, Y); Canvas.SetLeft(this, X); } public override string ToString() { return "Fleet " + Name; } } class MainWindow : Window { Random random; public MainWindow() { FontSize = 16; WindowStartupLocation = WindowStartupLocation.CenterScreen; ResizeMode = ResizeMode.CanMinimize; SizeToContent = SizeToContent.WidthAndHeight; Background = Brushes.Black; random = new Random(); var canvas = new Canvas { Width = 500, Height = 500 }; foreach (var fe in Program.Fleets) canvas.Children.Add(fe); Content = canvas; KeyDown += (_, e) => { if (e.Key == Key.Space) { foreach (var fe in Program.Fleets.Where(f => !f.Fixed)) { fe.X += random.NextDouble() * 100 - 50; fe.Y += random.NextDouble() * 100 - 50; fe.VX = random.NextDouble() * 20 - 10; fe.VY = random.NextDouble() * 20 - 10; } } else { foreach (var fe in Program.Fleets.Where(f => !f.Fixed)) { fe.X = random.Next(500); fe.Y = random.Next(500); fe.VX = 0; fe.VY = 0; }
} }; foreach (var fe in Program.Fleets.Where(f => !f.Fixed)) { fe.X = random.Next(500); fe.Y = random.Next(500); } ThreadPool.QueueUserWorkItem(Sim); }
void Sim(object _) { try { while (true) { Thread.Sleep(30); foreach (var fe in Program.Fleets.Where(f => !f.Fixed)) { fe.VX /= 1.2; fe.VY /= 1.2; double dx = 0, dy = 0; foreach (var c in fe.Constraints) { double dist_x = c.Fleet.X - fe.X; double dist_y = c.Fleet.Y - fe.Y; double dist = Sqrt(dist_x * dist_x + dist_y * dist_y); double str = dist > c.MaxDist ? (dist - c.MaxDist) / 30 : dist < c.MinDist ? (dist - c.MinDist) / 30 : 0; str = Min(Max(str, -5), 5); dx += dist_x / dist * str; dy += dist_y / dist * str; if (double.IsNaN(dx) || fe.X == 0 || fe.X == 500) dx = random.NextDouble() - 0.5; if (double.IsNaN(dy) || fe.Y == 0 || fe.Y == 500) dy = random.NextDouble() - 0.5; }
fe.VX = Min(Max(fe.VX + dx, -10), 10); fe.VY = Min(Max(fe.VY + dy, -10), 10); fe.X = Min(Max(fe.X + fe.VX, 0), 500); fe.Y = Min(Max(fe.Y + fe.VY, 0), 500); } foreach (var fe in Program.Fleets) Dispatcher.Invoke(new Action(() => fe.Update())); } } catch (Exception ex) { MessageBox.Show(ex.Message); Environment.Exit(-1); } } } } (3) After timeout check if all constraints are respected. If not, goto (1). Yes, that's what the spacebar does. And it would help to run some heuristics to detect cases where results are technically acceptable but aren't very playable or visually pleasing, like when all or most fleets are lumped together on one side of the map leaving large empty spaces elsewhere, or pushed against the edges of the map etc.
|
|
|
Logged
|
|
|
|
logarithm
Zebranky food
Offline
Gender:
Posts: 32
|
kfdf Thanks for the code - will make use of that. It's good for at least first versions, later we can refine it (althought for me all maps it generated looked quite alright already).
there is no fun for me in plain C, only misery and pain Yeah, that language isn't a gift, especially when got practice with some really advanced languages, like Scala or Haskell. But at least C got macroses loool.
---------------------------------- I'll also need to think of the way of making stars into constellations. Not sure how will be done yet. Probably (1) random-evenly generate only constellation stars first (2) random-evenly put attractors to map, and let them attract nearby stars, grouping them into constellation (3) scan map to get emptiest spaces, and fill them with non-constellation stars
From 502 stars total I've counted 102 constellations stars, and 30 non-constellation stars.
|
|
« Last Edit: November 09, 2015, 07:14:09 am by logarithm »
|
Logged
|
|
|
|
kfdf
Zebranky food
Offline
Posts: 8
|
I'll also need to think of the way of making stars into constellations. Not sure how will be done yet. I wrote a star randomizer that grouped them in constellations as a part of a tool (admittedly, mostly redundant given the generated nature of the map) that can be found in this thread http://forum.uqm.stack.nl/index.php?topic=6078.0, and while simple, the end result needed some postprocessing and more importantly, is kind of hard to integrate with the fleets map. So here's a better, yet even more simple randomizer. It's very much like you described it, and there is even no need to run a simulation on it. Stars are randomly generated and then every star selects one attractor and is pulled towards it. Which attractor is selected is based on the distance to it and its strength, and pull strength is dependent on two factors, one comes from the attractor (to give every constellation some individuality), and another is defined by the star itself. Playing with strength and factors formulas can give some interesting looking results, the ones I used seem to give sufficiently adequate results.
using System; using System.Linq; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging;
class MainWindow : Window { [STAThread] static void Main(string[] args) { new Application().Run(new MainWindow()); } public MainWindow() { Background = Brushes.Black; Width = Height = 700; Loaded += MainWindowLoaded; KeyDown += MainWindowLoaded; }
void MainWindowLoaded(object sender, RoutedEventArgs e) { var random = new Random(); var cnsts = (from _ in Enumerable.Range(0, 100) let x = random.NextDouble() * 1000 let y = random.NextDouble() * 1000 let strength = 1 + random.NextDouble() * 10 // constellation strength let factor = 0.5 + random.NextDouble() * 0.3 // constellation factor select new { strength, x, y, factor } ).ToArray(); var stars = (from _ in Enumerable.Range(0, 500) let old_x = random.NextDouble() * 1000 let old_y = random.NextDouble() * 1000 let factor = 1 - random.NextDouble() * random.NextDouble() // star factor let vec = (from c in cnsts let dx = c.x - old_x let dy = c.y - old_y orderby c.strength * c.strength * (dx * dx + dy * dy) select new { dx, dy, c.factor } ).First() let pull = Math.Min(Math.Max(factor * vec.factor, 0), 1) let new_x = old_x + vec.dx * pull let new_y = old_y + vec.dy * pull select new { x = (int)new_x, y = (int)new_y } ).ToArray();
var buffer = new byte[1000 * 1000]; foreach (var star in stars) buffer[star.y * 1000 + star.x] = 255; var bitmap = BitmapSource.Create(1000, 1000, 96, 96, PixelFormats.Gray8, null, buffer, 1000); Content = new System.Windows.Controls.Image { Source = bitmap }; } }
https://drive.google.com/file/d/0B-x8G2X1znSaMHhaRHlRMFlSWlk/view?usp=sharing
From 502 stars total I've counted 102 constellations stars, and 30 non-constellation stars Is this really important, which stars are parts of constellations and which aren't, they are just names, right? So you can have Alpha Groombridge, Beta Groombridge etc... I mean, the game even has a couple of stars missing from constellations and nobody cares...
|
|
|
Logged
|
|
|
|
logarithm
Zebranky food
Offline
Gender:
Posts: 32
|
On first iterations we can make this simple. Later, after whole mod is done, we can refine this.
I think better stick to those requirements (1) Each "constellation attractor" should attract no more than ~2-10 stars (fixed random for each attractor). (2) Attractor shouldn't make stars come too close to each other. (3) (doubtful) While attractor attracts - it may move too. This way we may get something more complex, than only spheric constellations. (4) Attractor better stop, if stars densities gets too high nearby. May somehow incorporate with (3). Maybe too complex for first iteration, though.
The refinement for after-release may be making a file containing constellation patterns (for constellations like Horologii, Vulpeculae, Chamaeleonis, etc). And for some constellations instead of using dynamic attractors - just place stars in predefined patterns. Can even make more patterns, than generator would actually use - this would give even random set of constellations for each generation...
I'm getting more and more confident, that I'll need to remix names of all stars (except for Sol). Remixing names will fit well into constellation generation procedure (for proper naming of constellations). I'm now somewhere 70% done extracting all hardcoded coordinates to a single manageable module. Next will be extraction of star-names.
Btw, if you feel more on playing with interesting tasks, you may also tackle the problem of identifying big empty spaces. There are few interesting approaches for doing that (like using fields, or making use of sectoring, or other approaches). Knowing, where attractors acted might be handy..
|
|
« Last Edit: November 10, 2015, 10:10:31 pm by logarithm »
|
Logged
|
|
|
|
CelticMinstrel
Enlightened
Offline
Posts: 522
|
Althought assumptions for Druuges not clear. I don't remember many things from gameplay. Basically, the Druuge have confirmed relationships with two races in the story - the Utwig, to whom they tried to sell the Ultron (but got ripped off), and the Burvixese of Arcturus. That means that Arcturus needs to be near the Druuge sphere of influence, and it should probably be near that edge of the map as well, since the Druuge saved themselves from the Kohr-Ah by sacrificing the Burvixese.
And according to map, Yehat is quite far from Pkunk. Not sure if this is starting location or late location, - if i remember correctly, at some point their fleets got intersecting. According to code their (Yehat) fleet starting loc is 497.0, 4.0. That map has the Pkunk's original location. Eventually, they move to rejoin the Yehat.
By the way, one SoI on there was different before the war - the Ilwrath sphere of influence used to be a lot smaller and centred near the Tauri constellation (where their homeworld is). This probably isn't very relevant to your randomization project though.
The "out of the way" part is based on the assumption that a Dreadnought crashing within another race's sphere of influence is unlikely to go unnoticed. That sounds like a far fetched assumption. There is an entire race that stays almost unnoticed inside two other races' spheres of influence. I actually remember being surprised, like, what the hell the ur-quans were doing out there so far from their battlefield? And btw, the original game didn't really push you into the fight with the ur-quan until the very end. They are the main antagonists of the game, but you rarely had any reasons to fight them. And the search for the crashed ur-quan dreadnought deep into their territory sound like the good opportunity to fix this. It would be even better if you didn't know the exact location of the crash site. Same thing with the Syreen ships. The intelligence ZFP give you on them could be a little more vague... Well, you may have a point on the "out of the way" argument. I don't think I'm entirely wrong on that point, but this is a setting where there's no reason to expect you to know what's happening in the nearest star system, let alone some system on the edge of your sphere of influence. There would probably be patrols within the sphere of influence, but even patrols can't watch over every single system 100% of the time.
There's a simple answer for why the crashed dreadnought is so far from the Ur-Quan's battlefield. The Ur-Quan are not from this part of the galaxy. They arrived from the top left of the map, conquered the Thraddash, and then moved on into the war with the Alliance of Free Stars. After bringing the Sa-Matra in to quickly end that war, they met in combat with the Kohr-Ah at the centre of the starmap. So, in fact, that crashed dreadnought is actually pretty close to the area that the Ur-Quan came through.
I think it wouldn't make any sense for the crashed dreadnought to be in their current sphere of influence. I could maybe understand it being in the Thraddash, Umgah, or Spathi SoI, or maybe even in the Ilwrath or VUX SoI, but if it was in their current SoI I would really be wondering why they didn't find and destroy it already. Don't forget that their ships are designed to self-destruct when defeated, so as to keep their technology out of enemy hands. I wouldn't be surprised if they have the ability to detect emissions or something from ships whose self-destruct failed.
|
|
|
Logged
|
|
|
|
CelticMinstrel
Enlightened
Offline
Posts: 522
|
I'm getting more and more confident, that I'll need to remix names of all stars (except for Sol). Remixing names will fit well into constellation generation procedure (for proper naming of constellations).
There might be a few others that it's simpler to not rename. Arcturus and Vela in particular, but possibly also Betelgeuse, Procyon, and Groombridge.
...speaking of Groombridge, will your randomization retain the arrow formation of the rainbow worlds?
...oh, also, the placement of the Slylandro should probably be kept in the upper-left quadrant. This could be difficult, because there's several vague references indicating their location - I believe the Spathi, Thraddash, and Zoq-Fot-Pik all give information that points in the right general direction. Maybe the Umgah do as well? I kinda suspect not, though. (The Melnorme give the exact location, I believe, so that's easy.)
|
|
|
Logged
|
|
|
|
logarithm
Zebranky food
Offline
Gender:
Posts: 32
|
CelticMinstrel Thans for hints. I already took care of Slylandro.
Yeah, there are some stars weaved into story. Apart from mentioned ones, also Antares and Horologii constellation (for Supox and Utwig). Apparently, I'll have to respect those assumptions while relocating stars, races, and giving names to stars and constellations. Quite a knot. But not too difficult.
As for Rainbow worlds - probably not. Maybe in some future release after v1.0. But I'll keep that in mind.
|
|
« Last Edit: November 12, 2015, 09:15:02 pm by logarithm »
|
Logged
|
|
|
|
logarithm
Zebranky food
Offline
Gender:
Posts: 32
|
Finally finished extractind all coordinates. Had to generalize some coordinates evaluation. F.e., when fleet decides to approach another fleet for attack. Also extracted few more distance assumptions.
Tested most coordinates, except for event, when Ilwrath decides to approach Thadds. Also didn't make sure events flow normally (like fleets die in war). And didn't test most of communications - only tested Spathi on Pluto for proof of concept, and then cloned the solution to other communications. If anyone would wish to test, notify me. The risk is low, but it's still worth to test if global events (involving moving and fighting fleets) are not damaged.
Dialogues duplicate in
sc2/content/base/comm/ and
sc2/content/addons/3dovoice/ Not completely sure, but I think latter ones are not used. I modified only first location.
------------------------------------ Next - extraction of all star and cluster names.
After that - randomization of fleets locations. Will make use of experiments made by kfdf.
Have also some thoughts for other future mods, but can't allow them to spring yet. )) I'll just leave them here, so they don't bother me: ** One of ideas involve making alien fleets in Hyperspace more random. F.e. some Slylandros faster, some slower, some attacking with not full crew. Also not all fleets will attack. Some will pass by, and some will run away. Make racial fleets appear rarely randomly away from their Sphere of Influence. Make mixed fleets of mercineries, traders, pirates, cargo. Loot (not only credits), trade and bribery... ** Another mod idea is about better balance. Probably will make cost of thrusters and turning-jets depend on how much installed already. Like, 1st - 500 RU, 2nd - 750, 3rd - 1000, 4th - 1500, 5th - 2000... ** Make "Kohr-Ah Death" mod a bit more configurable.
|
|
« Last Edit: November 15, 2015, 01:12:51 pm by logarithm »
|
Logged
|
|
|
|
|
logarithm
Zebranky food
Offline
Gender:
Posts: 32
|
CelticMinstrel
Actually, with voices on - it used sc2/content/base/comm/ (at least for Spathi on Pluto). I guess I'll have to double-check that...
As for naming - yeah, I'll have to choose proper order of stars relocation, renaming, constellations formation, fleets relocation. I'm not planning to keep original names for homeworlds and important stars. That's why I'm extracting star/contsell names. For Antares and Horologii it's even harder. These are not homeworlds, - these are territories in UrQuan SoI, where allied Utwigs and Supox may come to attack evil asses. I spent few hours for writing/testing algorithm of calculating coordinates of these regions for cases, when Utwigs and Supox reside elsewhere. So I'll have to pick nearby constellation and a lone star and place there, - specially for Supox and Utwigs...
|
|
|
Logged
|
|
|
|
|
|
logarithm
Zebranky food
Offline
Gender:
Posts: 32
|
I need to learn and practice Go language for my next project, so I used that to write a script for smart-search through the project for star-names. I got 242 hits - all of them in communication files
EntryIdx EntryVal FilePath Linenro 82 Gorno c:\Build\sc2\content\addons\3dovoice\arilou\arilou.txt 270 114 Betelgeuse c:\Build\sc2\content\addons\3dovoice\arilou\arilou.txt 278 54 Orionis c:\Build\sc2\content\addons\3dovoice\arilou\arilou.txt 339 54 Orionis c:\Build\sc2\content\addons\3dovoice\arilou\arilou.txt 349 59 Pavonis c:\Build\sc2\content\addons\3dovoice\arilou\arilou.txt 398 59 Pavonis c:\Build\sc2\content\addons\3dovoice\arilou\arilou.txt 408 59 Pavonis c:\Build\sc2\content\addons\3dovoice\arilou\arilou.txt 432 113 Algol c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 183 82 Gorno c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 652 100 Cerenkov c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 658 21 Crateris c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 666 54 Orionis c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 670 23 Columbae c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 687 24 Chandrasekhar c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 687 59 Pavonis c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 696 27 Corvi c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 706 45 Hyades c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 715 61 Persei c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 719 111 Almagest c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 719 113 Algol c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 719 3 Aquarii c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 720 3 Aquarii c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 731 90 Lacaille c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 756 92 Krueger c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 756 91 Giclas c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 764 92 Krueger c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 764 61 Persei c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 790 130 Arcturus c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 794 2 Apodis c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 811 53 Draconis c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 811 53 Draconis c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 814 53 Draconis c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 816 117 Procyon c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 820 23 Columbae c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 849 82 Gorno c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 864 27 Corvi c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 868 109 Gruis c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 876 114 Betelgeuse c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 891 74 Serpentis c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 899 86 Vulpeculae c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 959 21 Crateris c:\Build\sc2\content\addons\3dovoice\melnorme\melnorme.txt 1059 123 Organon c:\Build\sc2\content\addons\3dovoice\mycon\mycon.txt 375 123 Organon c:\Build\sc2\content\addons\3dovoice\mycon\mycon.txt 385 91 Giclas c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 344 117 Procyon c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 344 53 Draconis c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 345 82 Gorno c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 355 86 Vulpeculae c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 454 99 Mira c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 460 80 Centauri c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 480 86 Vulpeculae c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 495 57 Ophiuchi c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 526 54 Orionis c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 530 88 Luyten c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 548 12 Brahe c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 554 89 Indi c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 562 99 Mira c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 562 98 Vela c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 568 89 Indi c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 569 96 Raynet c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 569 99 Mira c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 569 118 Rigel c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 570 117 Procyon c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 571 18 Tucanae c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 667 80 Centauri c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 680 118 Rigel c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 702 18 Tucanae c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 757 129 Sol c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 854 117 Procyon c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 903 118 Rigel c:\Build\sc2\content\addons\3dovoice\starbase\starbase.txt 916 96 Raynet c:\Build\sc2\content\addons\3dovoice\syreen\syreen.txt 164 10 Camelopardalis c:\Build\sc2\content\addons\3dovoice\syreen\syreen.txt 343 123 Organon c:\Build\sc2\content\addons\3dovoice\syreen\syreen.txt 379 123 Organon c:\Build\sc2\content\addons\3dovoice\syreen\syreen.txt 382 123 Organon c:\Build\sc2\content\addons\3dovoice\syreen\syreen.txt 413 39 Horologii c:\Build\sc2\content\addons\3dovoice\syreen\syreen.txt 481 10 Camelopardalis c:\Build\sc2\content\addons\3dovoice\syreen\syreen.txt 508 123 Organon c:\Build\sc2\content\addons\3dovoice\syreen\syreen.txt 536 45 Hyades c:\Build\sc2\content\addons\3dovoice\utwig\utwig.txt 305 130 Arcturus c:\Build\sc2\content\addons\3dovoice\utwig\utwig.txt 319 21 Crateris c:\Build\sc2\content\addons\3dovoice\utwig\utwig.txt 345 45 Hyades c:\Build\sc2\content\addons\3dovoice\utwig\utwig.txt 408 39 Horologii c:\Build\sc2\content\addons\3dovoice\utwig\utwig.txt 432 45 Hyades c:\Build\sc2\content\addons\3dovoice\utwig\utwig.txt 494 39 Horologii c:\Build\sc2\content\addons\3dovoice\utwig\utwig.txt 539 21 Crateris c:\Build\sc2\content\addons\3dovoice\utwig\utwig.txt 555 82 Gorno c:\Build\sc2\content\base\comm\arilou\arilou.txt 270 114 Betelgeuse c:\Build\sc2\content\base\comm\arilou\arilou.txt 278 54 Orionis c:\Build\sc2\content\base\comm\arilou\arilou.txt 339 54 Orionis c:\Build\sc2\content\base\comm\arilou\arilou.txt 349 59 Pavonis c:\Build\sc2\content\base\comm\arilou\arilou.txt 398 59 Pavonis c:\Build\sc2\content\base\comm\arilou\arilou.txt 408 59 Pavonis c:\Build\sc2\content\base\comm\arilou\arilou.txt 432 21 Crateris c:\Build\sc2\content\base\comm\chmmr\chmmr.txt 197 21 Crateris c:\Build\sc2\content\base\comm\chmmr\chmmr.txt 326 21 Crateris c:\Build\sc2\content\base\comm\chmmr\chmmr.txt 338 98 Vela c:\Build\sc2\content\base\comm\commander\commander.txt 111 98 Vela c:\Build\sc2\content\base\comm\commander\commander.txt 177 98 Vela c:\Build\sc2\content\base\comm\commander\commander.txt 310 61 Persei c:\Build\sc2\content\base\comm\druuge\druuge.txt 225 61 Persei c:\Build\sc2\content\base\comm\druuge\druuge.txt 270 53 Draconis c:\Build\sc2\content\base\comm\ilwrath\ilwrath.txt 53 91 Giclas c:\Build\sc2\content\base\comm\ilwrath\ilwrath.txt 155 113 Algol c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 199 82 Gorno c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 668 100 Cerenkov c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 674 21 Crateris c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 682 54 Orionis c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 686 23 Columbae c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 703 24 Chandrasekhar c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 703 59 Pavonis c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 712 27 Corvi c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 722 45 Hyades c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 731 61 Persei c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 735 111 Almagest c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 735 113 Algol c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 735 3 Aquarii c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 736 3 Aquarii c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 747 90 Lacaille c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 772 92 Krueger c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 772 91 Giclas c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 780 92 Krueger c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 780 61 Persei c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 806 130 Arcturus c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 810 2 Apodis c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 827 53 Draconis c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 827 53 Draconis c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 830 53 Draconis c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 832 117 Procyon c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 836 23 Columbae c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 865 82 Gorno c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 880 27 Corvi c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 884 109 Gruis c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 892 114 Betelgeuse c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 907 74 Serpentis c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 915 86 Vulpeculae c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 975 21 Crateris c:\Build\sc2\content\base\comm\melnorme\melnorme.txt 1075 123 Organon c:\Build\sc2\content\base\comm\mycon\mycon.txt 375 123 Organon c:\Build\sc2\content\base\comm\mycon\mycon.txt 385 86 Vulpeculae c:\Build\sc2\content\base\comm\orz\orz.txt 538 92 Krueger c:\Build\sc2\content\base\comm\pkunk\pkunk.txt 55 74 Serpentis c:\Build\sc2\content\base\comm\pkunk\pkunk.txt 323 92 Krueger c:\Build\sc2\content\base\comm\pkunk\pkunk.txt 408 92 Krueger c:\Build\sc2\content\base\comm\pkunk\pkunk.txt 757 92 Krueger c:\Build\sc2\content\base\comm\pkunk\pkunk.txt 764 61 Persei c:\Build\sc2\content\base\comm\pkunk\pkunk.txt 895 53 Draconis c:\Build\sc2\content\base\comm\pkunk\pkunk.txt 908 53 Draconis c:\Build\sc2\content\base\comm\safeones\safeones.txt 201 18 Tucanae c:\Build\sc2\content\base\comm\safeones\safeones.txt 226 108 Herculis c:\Build\sc2\content\base\comm\safeones\safeones.txt 228 54 Orionis c:\Build\sc2\content\base\comm\safeones\safeones.txt 237 12 Brahe c:\Build\sc2\content\base\comm\shofixti\shofixti.txt 308 75 Sextantis c:\Build\sc2\content\base\comm\shofixti\shofixti.txt 327 22 Circini c:\Build\sc2\content\base\comm\spathi\spathi.txt 632 24 Chandrasekhar c:\Build\sc2\content\base\comm\spathi\spathi.txt 632 91 Giclas c:\Build\sc2\content\base\comm\starbase\starbase.txt 344 117 Procyon c:\Build\sc2\content\base\comm\starbase\starbase.txt 344 53 Draconis c:\Build\sc2\content\base\comm\starbase\starbase.txt 345 82 Gorno c:\Build\sc2\content\base\comm\starbase\starbase.txt 355 86 Vulpeculae c:\Build\sc2\content\base\comm\starbase\starbase.txt 454 99 Mira c:\Build\sc2\content\base\comm\starbase\starbase.txt 460 80 Centauri c:\Build\sc2\content\base\comm\starbase\starbase.txt 480 86 Vulpeculae c:\Build\sc2\content\base\comm\starbase\starbase.txt 495 57 Ophiuchi c:\Build\sc2\content\base\comm\starbase\starbase.txt 526 54 Orionis c:\Build\sc2\content\base\comm\starbase\starbase.txt 530 88 Luyten c:\Build\sc2\content\base\comm\starbase\starbase.txt 548 12 Brahe c:\Build\sc2\content\base\comm\starbase\starbase.txt 554 89 Indi c:\Build\sc2\content\base\comm\starbase\starbase.txt 562 99 Mira c:\Build\sc2\content\base\comm\starbase\starbase.txt 562 98 Vela c:\Build\sc2\content\base\comm\starbase\starbase.txt 568 89 Indi c:\Build\sc2\content\base\comm\starbase\starbase.txt 569 96 Raynet c:\Build\sc2\content\base\comm\starbase\starbase.txt 569 99 Mira c:\Build\sc2\content\base\comm\starbase\starbase.txt 569 118 Rigel c:\Build\sc2\content\base\comm\starbase\starbase.txt 570 117 Procyon c:\Build\sc2\content\base\comm\starbase\starbase.txt 571 18 Tucanae c:\Build\sc2\content\base\comm\starbase\starbase.txt 667 80 Centauri c:\Build\sc2\content\base\comm\starbase\starbase.txt 680 118 Rigel c:\Build\sc2\content\base\comm\starbase\starbase.txt 702 18 Tucanae c:\Build\sc2\content\base\comm\starbase\starbase.txt 757 129 Sol c:\Build\sc2\content\base\comm\starbase\starbase.txt 854 117 Procyon c:\Build\sc2\content\base\comm\starbase\starbase.txt 903 118 Rigel c:\Build\sc2\content\base\comm\starbase\starbase.txt 916 38 Antares c:\Build\sc2\content\base\comm\supox\supox.txt 256 38 Antares c:\Build\sc2\content\base\comm\supox\supox.txt 277 39 Horologii c:\Build\sc2\content\base\comm\supox\supox.txt 299 21 Crateris c:\Build\sc2\content\base\comm\supox\supox.txt 315 46 Leporis c:\Build\sc2\content\base\comm\supox\supox.txt 353 96 Raynet c:\Build\sc2\content\base\comm\syreen\syreen.txt 164 14 Copernicus c:\Build\sc2\content\base\comm\syreen\syreen.txt 242 10 Camelopardalis c:\Build\sc2\content\base\comm\syreen\syreen.txt 348 123 Organon c:\Build\sc2\content\base\comm\syreen\syreen.txt 384 123 Organon c:\Build\sc2\content\base\comm\syreen\syreen.txt 387 123 Organon c:\Build\sc2\content\base\comm\syreen\syreen.txt 418 39 Horologii c:\Build\sc2\content\base\comm\syreen\syreen.txt 486 10 Camelopardalis c:\Build\sc2\content\base\comm\syreen\syreen.txt 513 123 Organon c:\Build\sc2\content\base\comm\syreen\syreen.txt 541 59 Pavonis c:\Build\sc2\content\base\comm\talkingpet\talkingpet.txt 10 59 Pavonis c:\Build\sc2\content\base\comm\talkingpet\talkingpet.txt 594 0 Vega c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 118 53 Draconis c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 122 57 Ophiuchi c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 177 2 Apodis c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 494 53 Draconis c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 495 0 Vega c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 591 0 Vega c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 593 0 Vega c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 594 59 Pavonis c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 604 21 Crateris c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 614 53 Draconis c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 729 2 Apodis c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 733 49 Lyncis c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 739 49 Lyncis c:\Build\sc2\content\base\comm\thraddash\thraddash.txt 740 54 Orionis c:\Build\sc2\content\base\comm\umgah\umgah.txt 113 54 Orionis c:\Build\sc2\content\base\comm\umgah\umgah.txt 118 59 Pavonis c:\Build\sc2\content\base\comm\umgah\umgah.txt 265 53 Draconis c:\Build\sc2\content\base\comm\umgah\umgah.txt 297 47 Librae c:\Build\sc2\content\base\comm\utwig\utwig.txt 304 45 Hyades c:\Build\sc2\content\base\comm\utwig\utwig.txt 307 130 Arcturus c:\Build\sc2\content\base\comm\utwig\utwig.txt 320 21 Crateris c:\Build\sc2\content\base\comm\utwig\utwig.txt 346 45 Hyades c:\Build\sc2\content\base\comm\utwig\utwig.txt 420 39 Horologii c:\Build\sc2\content\base\comm\utwig\utwig.txt 450 45 Hyades c:\Build\sc2\content\base\comm\utwig\utwig.txt 512 39 Horologii c:\Build\sc2\content\base\comm\utwig\utwig.txt 557 21 Crateris c:\Build\sc2\content\base\comm\utwig\utwig.txt 573 3 Aquarii c:\Build\sc2\content\base\comm\utwig\utwig.txt 719 0 Vega c:\Build\sc2\content\base\comm\vux\vux.txt 52 117 Procyon c:\Build\sc2\content\base\comm\vux\vux.txt 52 49 Lyncis c:\Build\sc2\content\base\comm\vux\vux.txt 91 100 Cerenkov c:\Build\sc2\content\base\comm\vux\vux.txt 447 100 Cerenkov c:\Build\sc2\content\base\comm\vux\vux.txt 459 74 Serpentis c:\Build\sc2\content\base\comm\yehat\yehat.txt 126 82 Gorno c:\Build\sc2\content\base\comm\yehatrebels\yehatrebels.txt 101 100 Cerenkov c:\Build\sc2\content\base\comm\yehatrebels\yehatrebels.txt 156 18 Tucanae c:\Build\sc2\content\base\comm\zoqfotpik\zoqfotpik.txt 303 10 Camelopardalis c:\Build\sc2\content\base\comm\zoqfotpik\zoqfotpik.txt 542 54 Orionis c:\Build\sc2\content\base\comm\zoqfotpik\zoqfotpik.txt 581 39 Horologii c:\Build\sc2\content\base\comm\zoqfotpik\zoqfotpik.txt 590 21 Crateris c:\Build\sc2\content\base\comm\zoqfotpik\zoqfotpik.txt 689 58 Muscae c:\Build\sc2\content\base\comm\zoqfotpik\zoqfotpik.txt 797 87 Lalande c:\Build\sc2\content\base\lander\energy\androsynth_ruins.txt 18 114 Betelgeuse c:\Build\sc2\content\base\lander\energy\syreenvault.txt 16 I also thoroughly analyzed code for other ways to hardcodedly stick to star-name. Found none. Good style.
Now 242 is too much to handle it manually. It's also risky (to make mistakes). So, I decided to make another Go script to make smart-replaces in those *.txt files, and to make a cunning solution in related *.c files... For example, I'll turn Utwig's words
Indeed, it seems that you should proceed to the second moon of the sixth planet of Zeta Hyades into
Indeed, it seems that you should proceed to the second moon of the sixth planet of $${StarName:ImortantStarIdx=22} It will be much harder with non-important stars being mentiond. Like
Starbase Commander: The Ur-Quan came roaring through VUX space, and tried to push past the Indi and Mira star systems. or
Syreen: They all appear to be originating from the direction of the Horologii constellation. Will have to deal with them manually...
|
|
« Last Edit: November 20, 2015, 07:24:09 pm by logarithm »
|
Logged
|
|
|
|
|
Pages: 1 [2] 3 4
|
|
|
|
|