View Issue Details

IDProjectCategoryView StatusLast Update
0002789FSSCPHUDpublic2013-03-16 00:03
ReporterYarn Assigned Toniffiwan  
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
Platformx64OSWindows 7 
Product Version3.6.16 
Summary0002789: Engine-generated shield icons look horrible
DescriptionIt seems that shield icons generated by the engine always have a bunch of missing lines. Using the -nohtl parameter has no effect on their appearance. I've attached an example of what this looks like.
Steps To ReproduceUsing the attached mod, load any mission that allows the player to use a Ulysses. Play the mission with a Ulysses and check out the shield icon.
TagsNo tags attached.

Activities

Yarn

2013-02-07 07:08

developer  

ShieldTest.zip (48,137 bytes)

Yarn

2013-02-07 07:09

developer  

ShieldIcon.jpg (23,653 bytes)   
ShieldIcon.jpg (23,653 bytes)   

niffiwan

2013-02-11 10:04

developer  

uly-shields-ok.png (50,821 bytes)   
uly-shields-ok.png (50,821 bytes)   

niffiwan

2013-02-11 10:05

developer   ~0014701

Last edited: 2013-02-11 10:07

That's weird, it looks OK when I just tested it with your attached mod. Obviously the icon colour is different, but I don't see why that should make a difference.

Note: this is with Linux, 1440x900 in a window.

Yarn

2013-02-11 18:26

developer   ~0014702

Well, I am definitely not the only one with this problem. The following URLs show the same thing:
http://www.hard-light.net/forums/index.php?topic=81947.msg1635218#msg1635218
http://www.youtube.com/watch?v=Owx18xEYcp4 (video--view in HD to see it better)

Also, when I enable "show pivots" or "show radius" in the F3 lab, the circles that appear have missing horizontal lines. This could be related to the main issue here.

By the way, I am using an AMD Radeon HD 6870; perhaps this happens mainly with AMD/ATI cards. I'll post a log shortly.

Yarn

2013-02-11 18:34

developer  

fs2_open.log (42,929 bytes)

niffiwan

2013-02-11 20:41

developer   ~0014704

Agreed, I'm sure I've seen the issue before, I just don't seem to be able to reproduce it :) I'll have another look in WoD tonight if I get the time.

I have an nVidia Card (GTS 450) so maybe it is related to the video card.

Yarn

2013-02-11 20:54

developer   ~0014705

Have you tested this with -nohtl by any chance?

niffiwan

2013-02-14 08:33

developer  

shield-icon-2.png (13,139 bytes)   
shield-icon-2.png (13,139 bytes)   

niffiwan

2013-02-14 08:34

developer   ~0014708

Last edited: 2013-02-14 10:04

I've reproduced this now. It's resolution dependent, the problem doesn't occur in 1440x900 but it occurs in every other resolution I tried (1680x945, 1680x1050, 1280x960, 1280x1024, and some other non-standard ones). Running in a window doesn't affect it. Neither does -nohtl.

I attached a screenshot from WoD, but it occurs with your test mod as well.

edit: O_o
I just looked at your log and saw that you're running 1440x900... :confused:

edit2: I just had an idea. Do you have a hud gauge table somewhere? If so, what is its "base" setting, e.g. mine is:
$Base: (1440, 900)

Yarn

2013-02-14 17:39

developer   ~0014709

I took that screenshot at 1152x864 actually, but the icon still looks corrupted at 1440x900, even if I use a HUD table with a 1440x900 base. Even at 640x480, it doesn't look good. At 1024x768, it looks almost perfect; the front and rear quadrants appear to be missing one horizontal line each.

niffiwan

2013-02-16 08:35

developer   ~0014713

I've attached a patch, could you please test it to see if shield icons have any missing lines?

Please note, this isn't a final patch, it's more confirming the exact problem. If it works, then I need to re-add the triangles at the end of each shield icon, and I need to work out some colour gradients in the icons as well.

Yarn

2013-02-16 17:59

developer  

ShieldFix1-1152.png (8,027 bytes)   
ShieldFix1-1152.png (8,027 bytes)   

Yarn

2013-02-16 18:00

developer   ~0014716

Looks good so far in the resolutions that I have tried. I've attached an image that shows what icon now looks like. (I'm taking these screenshots at 1152x864 because it is the highest 4:3 resolution that I can use, not because it is my normal resolution, which is 1440x900.)

niffiwan

2013-02-18 10:42

developer  

new-shield-icon-1680.png (11,109 bytes)   
new-shield-icon-1680.png (11,109 bytes)   

niffiwan

2013-02-18 10:45

developer   ~0014720

What do you think of the latest screenshot? It's not 100% like what the old one is supposed to look like, but I think it's pretty close.

I don't have a patch yet because I need to clean up what I've done so far...

Yarn

2013-02-19 17:39

developer   ~0014723

Pretty good. I think it's a bit cleaner than the original one, actually.

niffiwan

2013-02-21 10:00

developer  

mantis2789-svn.patch (13,270 bytes)   
Index: code/graphics/2d.cpp
===================================================================
--- code/graphics/2d.cpp	(revision 9541)
+++ code/graphics/2d.cpp	(working copy)
@@ -1464,6 +1464,28 @@
 	return *this;
 }
 
+void gr_shield_icon(coord2d coords[6], bool resize)
+{
+	if (gr_screen.mode == GR_STUB) {
+		return;
+	}
+
+	if (resize) {
+		gr_resize_screen_pos(&coords[0].x, &coords[0].y);
+		gr_resize_screen_pos(&coords[1].x, &coords[1].y);
+		gr_resize_screen_pos(&coords[2].x, &coords[2].y);
+		gr_resize_screen_pos(&coords[3].x, &coords[3].y);
+		gr_resize_screen_pos(&coords[4].x, &coords[4].y);
+		gr_resize_screen_pos(&coords[5].x, &coords[5].y);
+	}
+
+	g3_draw_2d_shield_icon(coords,
+		gr_screen.current_color.red,
+		gr_screen.current_color.green,
+		gr_screen.current_color.blue,
+		gr_screen.current_color.alpha);
+}
+
 void gr_rect(int x, int y, int w, int h, bool resize)
 {
 	if (gr_screen.mode == GR_STUB) {
Index: code/graphics/2d.h
===================================================================
--- code/graphics/2d.h	(revision 9541)
+++ code/graphics/2d.h	(working copy)
@@ -634,6 +634,7 @@
 	(*gr_screen.gf_bitmap_ex)(x, y, w, h, sx, sy, resize);
 }
 
+void gr_shield_icon(coord2d coords[6], const bool resize = true);
 void gr_rect(int x, int y, int w, int h, bool resize = true);
 void gr_shade(int x, int y, int w, int h, bool resize = true);
 
Index: code/globalincs/pstypes.h
===================================================================
--- code/globalincs/pstypes.h	(revision 9541)
+++ code/globalincs/pstypes.h	(working copy)
@@ -173,6 +173,10 @@
 	ubyte var;
 } def_list;
 
+typedef struct coord2d {
+	int x,y;
+} coord2d;
+
 //This are defined in MainWin.c
 extern void _cdecl WinAssert(char * text,char *filename, int line);
 void _cdecl WinAssert(char * text, char * filename, int linenum, const char * format, ... );
Index: code/render/3ddraw.cpp
===================================================================
--- code/render/3ddraw.cpp	(revision 9541)
+++ code/render/3ddraw.cpp	(working copy)
@@ -1547,6 +1547,106 @@
 	return 1;
 }
 
+void g3_draw_2d_shield_icon(const coord2d coords[6], const int r, const int g, const int b, const int a)
+{
+	int saved_zbuf;
+	vertex v[6];
+	vertex *verts[6] = {&v[0], &v[1], &v[2], &v[3], &v[4], &v[5]};
+
+	memset(v,0,sizeof(vertex)*6);
+	saved_zbuf = gr_zbuffer_get();
+
+	// start the frame, no zbuffering, no culling
+	if (!Fred_running)
+		g3_start_frame(1);
+
+	gr_zbuffer_set(GR_ZBUFF_NONE);
+	int cull = gr_set_cull(0);
+
+	// stuff coords
+	v[0].screen.xyw.x = i2fl(coords[0].x);
+	v[0].screen.xyw.y = i2fl(coords[0].y);
+	v[0].screen.xyw.w = 0.0f;
+	v[0].texture_position.u = 0.0f;
+	v[0].texture_position.v = 0.0f;
+	v[0].flags = PF_PROJECTED;
+	v[0].codes = 0;
+	v[0].r = (ubyte)r;
+	v[0].g = (ubyte)g;
+	v[0].b = (ubyte)b;
+	v[0].a = 0;
+
+	v[1].screen.xyw.x = i2fl(coords[1].x);
+	v[1].screen.xyw.y = i2fl(coords[1].y);
+	v[1].screen.xyw.w = 0.0f;
+	v[1].texture_position.u = 0.0f;
+	v[1].texture_position.v = 0.0f;
+	v[1].flags = PF_PROJECTED;
+	v[1].codes = 0;
+	v[1].r = (ubyte)r;
+	v[1].g = (ubyte)g;
+	v[1].b = (ubyte)b;
+	v[1].a = (ubyte)a;
+
+	v[2].screen.xyw.x = i2fl(coords[2].x);
+	v[2].screen.xyw.y = i2fl(coords[2].y);
+	v[2].screen.xyw.w = 0.0f;
+	v[2].texture_position.u = 0.0f;
+	v[2].texture_position.v = 0.0f;
+	v[2].flags = PF_PROJECTED;
+	v[2].codes = 0;
+	v[2].r = (ubyte)r;
+	v[2].g = (ubyte)g;
+	v[2].b = (ubyte)b;
+	v[2].a = 0;
+
+	v[3].screen.xyw.x = i2fl(coords[3].x);
+	v[3].screen.xyw.y = i2fl(coords[3].y);
+	v[3].screen.xyw.w = 0.0f;
+	v[3].texture_position.u = 0.0f;
+	v[3].texture_position.v = 0.0f;
+	v[3].flags = PF_PROJECTED;
+	v[3].codes = 0;
+	v[3].r = (ubyte)r;
+	v[3].g = (ubyte)g;
+	v[3].b = (ubyte)b;
+	v[3].a = (ubyte)a;
+
+	v[4].screen.xyw.x = i2fl(coords[4].x);
+	v[4].screen.xyw.y = i2fl(coords[4].y);
+	v[4].screen.xyw.w = 0.0f;
+	v[4].texture_position.u = 0.0f;
+	v[4].texture_position.v = 0.0f;
+	v[4].flags = PF_PROJECTED;
+	v[4].codes = 0;
+	v[4].r = (ubyte)r;
+	v[4].g = (ubyte)g;
+	v[4].b = (ubyte)b;
+	v[4].a = 0;
+
+	v[5].screen.xyw.x = i2fl(coords[5].x);
+	v[5].screen.xyw.y = i2fl(coords[5].y);
+	v[5].screen.xyw.w = 0.0f;
+	v[5].texture_position.u = 0.0f;
+	v[5].texture_position.v = 0.0f;
+	v[5].flags = PF_PROJECTED;
+	v[5].codes = 0;
+	v[5].r = (ubyte)r;
+	v[5].g = (ubyte)g;
+	v[5].b = (ubyte)b;
+	v[5].a = 0;
+
+	// draw the polys
+	g3_draw_poly_constant_sw(6, verts, TMAP_FLAG_GOURAUD | TMAP_FLAG_RGB | TMAP_FLAG_ALPHA | TMAP_FLAG_TRISTRIP, 0.1f);
+
+	if (!Fred_running)
+		g3_end_frame();
+
+	// restore zbuffer and culling
+	gr_zbuffer_set(saved_zbuf);
+	gr_set_cull(cull);
+}
+
 void g3_draw_2d_rect(int x, int y, int w, int h, int r, int g, int b, int a)
 {
 	int saved_zbuf;
Index: code/render/3d.h
===================================================================
--- code/render/3d.h	(revision 9541)
+++ code/render/3d.h	(working copy)
@@ -316,6 +316,11 @@
 int g3_draw_perspective_bitmap(angles *a, float scale_x, float scale_y, int div_x, int div_y, uint tmap_flags);
 
 /**
+ * Draw a 2D shield icon w/ 6 points
+ */
+void g3_draw_2d_shield_icon(const coord2d coords[6], const int r, const int g, const int b, const int a);
+
+/**
  * Draw a 2D rectangle
  */
 void g3_draw_2d_rect(int x, int y, int w, int h, int r, int g, int b, int a);
Index: code/hud/hudshield.h
===================================================================
--- code/hud/hudshield.h	(revision 9541)
+++ code/hud/hudshield.h	(working copy)
@@ -60,6 +60,7 @@
 	virtual void render(float frametime);
 	void showShields(object *objp, int mode);
 	int maybeFlashShield(int target_index, int shield_offset);
+	void renderShieldIcon(coord2d coords[6]);
 };
 
 class HudGaugeShieldPlayer: public HudGaugeShield
Index: code/hud/hudshield.cpp
===================================================================
--- code/hud/hudshield.cpp	(revision 9541)
+++ code/hud/hudshield.cpp	(working copy)
@@ -691,9 +691,9 @@
 	//
 	// Draw shield quadrants at one of NUM_SHIELD_LEVELS
 	max_shield = get_max_shield_quad(objp);
-	
-	int j, x_val, y_val, mid_val;
 
+	coord2d shield_icon_coords[6];
+	
 	for ( i = 0; i < MAX_SHIELD_SECTIONS; i++ ) {
 
 		if ( objp->flags & OF_NO_SHIELDS ) {
@@ -731,126 +731,62 @@
 			else
 			{
 				//Ugh, draw four shield quadrants
+				static const int TRI_EDGE = 6;
+				static const int BAR_LENGTH = 112;
+				static const int BAR_HEIGHT = 54;
+				static const int BAR_WIDTH = 6;
+				static const int SHIELD_OFFSET = BAR_WIDTH + TRI_EDGE + 3;
+
 				switch(i)
 				{
 					//Top
 					case 0:
-						sy += 3;
-						for(j = 0; j < 6; j++)
-						{
-							y_val = sy + 10;
-							renderGradientLine(sx + j,
-										sy,
-										sx + j,
-										y_val - j);
-						}
-						mid_val = sy + 5;
-						for(; j < 106; j++)
-						{
-							renderGradientLine(sx + j,
-										sy,
-										sx + j,
-										mid_val);
-						}
-						for(; j < 112; j++)
-						{
-							renderGradientLine(sx + j,
-										sy,
-										sx + j,
-										sy + (j - 101));
-						}
-						y_val = sy - 1;
-						sy -= 3;
-						for(j = 0; j < 112; j++)
-							renderGradientLine(sx + j, y_val, sx + j, sy);
+						shield_icon_coords[0].x = sx;                     shield_icon_coords[0].y = sy+BAR_WIDTH+TRI_EDGE;
+						shield_icon_coords[1].x = sx;                     shield_icon_coords[1].y = sy;
+						shield_icon_coords[2].x = sx+TRI_EDGE;            shield_icon_coords[2].y = sy+BAR_WIDTH;
+						shield_icon_coords[3].x = sx+BAR_LENGTH;          shield_icon_coords[3].y = sy;
+						shield_icon_coords[4].x = sx+BAR_LENGTH-TRI_EDGE; shield_icon_coords[4].y = sy+BAR_WIDTH;
+						shield_icon_coords[5].x = sx+BAR_LENGTH;          shield_icon_coords[5].y = sy+BAR_WIDTH+TRI_EDGE;
+						renderShieldIcon(shield_icon_coords);
 						break;
 					//Left
 					case 3:
-						sx += 1;
-						x_val = sx + 10;
-						y_val = sy + 15;
-						for(j = 0; j < 6; j++)
-						{
-							renderGradientLine(sx,
-										y_val + j,
-										x_val - j,
-										y_val + j);
-						}
-						mid_val = sx + 5;
-						for(; j < 48; j++)
-						{
-							renderGradientLine(sx,
-										y_val + j,
-										mid_val,
-										y_val + j);
-						}
-						for(; j < 54; j++)
-						{
-							renderGradientLine(sx,
-										y_val + j,
-										sx + (j - 43),
-										y_val + j);
-						}
-						x_val = sx;
-						sx -= 3;
-						for(j = 0; j < 54; j++)
-							renderGradientLine(x_val, y_val + j, sx, y_val + j);
-						sx += 2;
+						sy += SHIELD_OFFSET;
+						shield_icon_coords[0].x = sx+BAR_WIDTH+TRI_EDGE; shield_icon_coords[0].y = sy+BAR_HEIGHT;
+						shield_icon_coords[1].x = sx;                    shield_icon_coords[1].y = sy+BAR_HEIGHT;
+						shield_icon_coords[2].x = sx+BAR_WIDTH;          shield_icon_coords[2].y = sy+BAR_HEIGHT-TRI_EDGE;
+						shield_icon_coords[3].x = sx;                    shield_icon_coords[3].y = sy;
+						shield_icon_coords[4].x = sx+BAR_WIDTH;          shield_icon_coords[4].y = sy+TRI_EDGE;
+						shield_icon_coords[5].x = sx+BAR_WIDTH+TRI_EDGE; shield_icon_coords[5].y = sy;
+						renderShieldIcon(shield_icon_coords);
+						sy -= SHIELD_OFFSET + BAR_WIDTH + TRI_EDGE;
 						break;
 					//Right
 					case 1:
-						x_val = sx + 109;	//-3 for border
-						y_val = sy + 15;
-						for(j = 0; j < 6; j++)
-						{
-							renderGradientLine(x_val,
-										y_val + j,
-										x_val - (10 - j),
-										y_val + j);
-						}
-						mid_val = x_val - 5;
-						for(; j < 48; j++)
-						{
-							renderGradientLine(x_val,
-										y_val + j,
-										mid_val,
-										y_val + j);
-						}
-						for(; j < 54; j++)
-						{
-							renderGradientLine(x_val,
-										y_val + j,
-										x_val - (j - 43),
-										y_val + j);
-						}
-						mid_val = x_val;
-						x_val += 3;
-						for(j = 0; j < 54; j++)
-							renderGradientLine(mid_val, y_val + j, x_val, y_val + j);
+						sx += BAR_LENGTH;
+						sy += SHIELD_OFFSET;
+						shield_icon_coords[0].x = sx-BAR_WIDTH-TRI_EDGE; shield_icon_coords[0].y = sy;
+						shield_icon_coords[1].x = sx;                    shield_icon_coords[1].y = sy;
+						shield_icon_coords[2].x = sx-BAR_WIDTH;          shield_icon_coords[2].y = sy+TRI_EDGE;
+						shield_icon_coords[3].x = sx;                    shield_icon_coords[3].y = sy+BAR_HEIGHT;
+						shield_icon_coords[4].x = sx-BAR_WIDTH;          shield_icon_coords[4].y = sy+BAR_HEIGHT-TRI_EDGE;
+						shield_icon_coords[5].x = sx-BAR_WIDTH-TRI_EDGE; shield_icon_coords[5].y = sy+BAR_HEIGHT;
+						renderShieldIcon(shield_icon_coords);
+						sx -= BAR_LENGTH;
+						sy -= SHIELD_OFFSET;
 						break;
 					//Bottom
 					case 2:
-						y_val = sy + 80; //-3 for border
-						for(j = 0; j < 6; j++)
-							renderGradientLine(sx + j,
-										y_val,
-										sx + j,
-										y_val - (10 - j));
-						mid_val = y_val - 5;
-						for(; j < 106; j++)
-							renderGradientLine(sx + j,
-										y_val,
-										sx + j,
-										mid_val);
-						for(; j < 112; j++)
-							renderGradientLine(sx + j,
-										y_val,
-										sx + j,
-										y_val - (j - 101));
-						mid_val = y_val + 1;
-						y_val += 3;
-						for(j = 0; j < 112; j++)
-							renderGradientLine(sx + j, mid_val, sx + j, y_val);
+						sy += BAR_HEIGHT + SHIELD_OFFSET*2 - BAR_WIDTH - TRI_EDGE;
+						shield_icon_coords[0].x = sx+BAR_LENGTH;          shield_icon_coords[0].y = sy;
+						shield_icon_coords[1].x = sx+BAR_LENGTH;          shield_icon_coords[1].y = sy+BAR_WIDTH+TRI_EDGE;
+						shield_icon_coords[2].x = sx+BAR_LENGTH-TRI_EDGE; shield_icon_coords[2].y = sy+TRI_EDGE;
+						shield_icon_coords[3].x = sx;                     shield_icon_coords[3].y = sy+BAR_WIDTH+TRI_EDGE;
+						shield_icon_coords[4].x = sx+TRI_EDGE;            shield_icon_coords[4].y = sy+TRI_EDGE;
+						shield_icon_coords[5].x = sx;                     shield_icon_coords[5].y = sy;
+						shield_icon_coords[6].x = sx; shield_icon_coords[6].y = sy;
+						renderShieldIcon(shield_icon_coords);
+						sy -= BAR_HEIGHT + SHIELD_OFFSET*2 - BAR_WIDTH - TRI_EDGE;
 						break;
 					//Whoops?
 					default:
@@ -864,6 +800,46 @@
 	// hud_set_default_color();
 }
 
+/*
+ * Render a shield icon - basic shape is:
+ *   1                             3
+ *     ***************************
+ *     ***************************
+ *     ** 2                   4 **
+ *     *                         *
+ *     0                         5
+ *
+ * Defined by 6 points, must be passed in the order show above (i.e. a valid triangle strip)
+ *
+ */
+void HudGaugeShield::renderShieldIcon(coord2d coords[6])
+{
+	int nx = 0, ny = 0, i;
+
+	if ( gr_screen.rendering_to_texture != -1 ) {
+		gr_set_screen_scale(canvas_w, canvas_h, target_w, target_h);
+	} else {
+		if ( reticle_follow ) {
+			nx = HUD_nose_x;
+			ny = HUD_nose_y;
+
+			gr_resize_screen_pos(&nx, &ny);
+			gr_set_screen_scale(base_w, base_h);
+			gr_unsize_screen_pos(&nx, &ny);
+		} else {
+			gr_set_screen_scale(base_w, base_h);
+		}
+	}
+
+	for (i = 0; i < 6; ++i) {
+		coords[i].x += nx;
+		coords[i].y += ny;
+	}
+
+	gr_shield_icon(coords);
+	gr_reset_screen_scale();
+}
+
 int HudGaugeShield::maybeFlashShield(int target_index, int shield_offset)
 {
 	int	flashed = 0;
mantis2789-svn.patch (13,270 bytes)   

niffiwan

2013-02-21 10:02

developer   ~0014729

I've attached a patch, please give it a test and let me know how it goes. I've tested this so far on: 1680x1050, 1680x945, 1280x960 & 1280x1024

Yarn

2013-02-21 19:28

developer   ~0014732

It's looks just fine for me on multiple resolutions.

niffiwan

2013-02-22 02:15

developer   ~0014735

Since this is the 1st time I've updated something OpenGL related in FSO, I'd like to get this reviewed before I commit it.

Swifty

2013-03-08 04:34

developer   ~0014757

It's fine.

niffiwan

2013-03-16 00:03

developer   ~0014767

Fix committed to trunk@9584.

Related Changesets

fs2open: trunk r9584

2013-03-15 20:48

niffiwan


Ported: N/A

Details Diff
Fix for mantis 2789: replace shield icons drawn with 100's of lines with 6-point polygons Affected Issues
0002789
mod - /trunk/fs2_open/code/globalincs/pstypes.h Diff File
mod - /trunk/fs2_open/code/graphics/2d.cpp Diff File
mod - /trunk/fs2_open/code/graphics/2d.h Diff File
mod - /trunk/fs2_open/code/hud/hudshield.cpp Diff File
mod - /trunk/fs2_open/code/hud/hudshield.h Diff File
mod - /trunk/fs2_open/code/render/3d.h Diff File
mod - /trunk/fs2_open/code/render/3ddraw.cpp Diff File

Issue History

Date Modified Username Field Change
2013-02-07 07:08 Yarn New Issue
2013-02-07 07:08 Yarn File Added: ShieldTest.zip
2013-02-07 07:09 Yarn File Added: ShieldIcon.jpg
2013-02-11 10:04 niffiwan File Added: uly-shields-ok.png
2013-02-11 10:05 niffiwan Note Added: 0014701
2013-02-11 10:06 niffiwan Note Edited: 0014701
2013-02-11 10:06 niffiwan Note Edited: 0014701
2013-02-11 10:06 niffiwan Note Edited: 0014701
2013-02-11 10:07 niffiwan Note Edited: 0014701
2013-02-11 18:26 Yarn Note Added: 0014702
2013-02-11 18:34 Yarn File Added: fs2_open.log
2013-02-11 20:41 niffiwan Note Added: 0014704
2013-02-11 20:54 Yarn Note Added: 0014705
2013-02-14 08:33 niffiwan File Added: shield-icon-2.png
2013-02-14 08:34 niffiwan Note Added: 0014708
2013-02-14 08:36 niffiwan Note Edited: 0014708
2013-02-14 10:04 niffiwan Note Edited: 0014708
2013-02-14 10:07 niffiwan Assigned To => niffiwan
2013-02-14 10:07 niffiwan Status new => assigned
2013-02-14 17:39 Yarn Note Added: 0014709
2013-02-16 08:32 niffiwan File Added: mantis2789-svn.patch
2013-02-16 08:35 niffiwan Note Added: 0014713
2013-02-16 08:36 niffiwan Status assigned => feedback
2013-02-16 17:59 Yarn File Added: ShieldFix1-1152.png
2013-02-16 18:00 Yarn Note Added: 0014716
2013-02-16 18:00 Yarn Status feedback => assigned
2013-02-18 10:42 niffiwan File Added: new-shield-icon-1680.png
2013-02-18 10:45 niffiwan Note Added: 0014720
2013-02-19 17:39 Yarn Note Added: 0014723
2013-02-21 09:59 niffiwan File Deleted: mantis2789-svn.patch
2013-02-21 10:00 niffiwan File Added: mantis2789-svn.patch
2013-02-21 10:02 niffiwan Note Added: 0014729
2013-02-21 10:02 niffiwan Status assigned => feedback
2013-02-21 19:28 Yarn Note Added: 0014732
2013-02-21 19:28 Yarn Status feedback => assigned
2013-02-22 02:15 niffiwan Note Added: 0014735
2013-02-22 02:15 niffiwan Status assigned => code review
2013-03-08 04:34 Swifty Note Added: 0014757
2013-03-16 00:03 niffiwan Changeset attached => fs2open trunk r9584
2013-03-16 00:03 niffiwan Note Added: 0014767
2013-03-16 00:03 niffiwan Status code review => resolved
2013-03-16 00:03 niffiwan Resolution open => fixed