From: <av...@us...> - 2009-12-12 07:50:51
|
Revision: 3427 http://sc2.svn.sourceforge.net/sc2/?rev=3427&view=rev Author: avolkov Date: 2009-12-12 07:50:45 +0000 (Sat, 12 Dec 2009) Log Message: ----------- Cargo menu cleanup: MENU_STATE.CurState is now 0-based; split drawing into functions; added symbolic positioning constants; moved colors to colors.h; not relying on MENU_STATE.Initialized Modified Paths: -------------- trunk/sc2/src/uqm/colors.h trunk/sc2/src/uqm/planets/cargo.c Modified: trunk/sc2/src/uqm/colors.h =================================================================== --- trunk/sc2/src/uqm/colors.h 2009-12-12 04:45:15 UTC (rev 3426) +++ trunk/sc2/src/uqm/colors.h 2009-12-12 07:50:45 UTC (rev 3427) @@ -342,10 +342,34 @@ #define THREEDOMENU_TEXT_COLOR \ BUILD_COLOR (MAKE_RGB15 (0x00, 0x1F, 0x00), 0x00) + // === Credits === + #define CREDITS_TEXT_COLOR \ WHITE_COLOR + +// === Cargo === + +#define CARGO_BACK_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01) + +#define CARGO_WORTH_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09) + +#define CARGO_AMOUNT_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03) + +#define CARGO_SELECTED_BACK_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09) + +#define CARGO_SELECTED_WORTH_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03) + +#define CARGO_SELECTED_AMOUNT_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B) + + // Temporary, until we can use C'99 features: #define BLACK_COLOR_INIT \ BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x00), 0x00) Modified: trunk/sc2/src/uqm/planets/cargo.c =================================================================== --- trunk/sc2/src/uqm/planets/cargo.c 2009-12-12 04:45:15 UTC (rev 3426) +++ trunk/sc2/src/uqm/planets/cargo.c 2009-12-12 07:50:45 UTC (rev 3427) @@ -26,263 +26,240 @@ #include "../sis.h" // for ClearSISRect(), DrawStatusMessage() #include "planets.h" +#include "libs/graphics/drawable.h" + // for GetFrameBounds() +#define ELEMENT_ORG_Y 35 +#define FREE_ORG_Y (ELEMENT_ORG_Y + (NUM_ELEMENT_CATEGORIES \ + * ELEMENT_SPACING_Y)) +#define BIO_ORG_Y 119 +#define ELEMENT_SPACING_Y 9 + +#define ELEMENT_COL_0 7 +#define ELEMENT_COL_1 32 +#define ELEMENT_COL_2 58 + +#define ELEMENT_SEL_ORG_X (ELEMENT_COL_0 + 7 + 5) +#define ELEMENT_SEL_WIDTH (ELEMENT_COL_2 - ELEMENT_SEL_ORG_X + 1) + +#define TEXT_BASELINE 6 + + void ShowRemainingCapacity (void) { RECT r; - TEXT rt; + TEXT t; CONTEXT OldContext; - UNICODE rt_amount_buf[40]; + UNICODE buf[40]; OldContext = SetContext (StatusContext); SetContextFont (TinyFont); - sprintf (rt_amount_buf, "%u", + r.corner.x = 40; + r.corner.y = FREE_ORG_Y; + + snprintf (buf, sizeof buf, "%u", GetStorageBayCapacity () - GLOBAL_SIS (TotalElementMass)); - rt.baseline.x = 59; - rt.baseline.y = 113; - rt.align = ALIGN_RIGHT; - rt.pStr = rt_amount_buf; - rt.CharCount = (COUNT)~0; + t.baseline.x = ELEMENT_COL_2 + 1; + t.baseline.y = r.corner.y + TEXT_BASELINE; + t.align = ALIGN_RIGHT; + t.pStr = buf; + t.CharCount = (COUNT)~0; - r.corner.x = 40; - r.corner.y = rt.baseline.y - 6; - r.extent.width = rt.baseline.x - r.corner.x + 1; - r.extent.height = 7; + r.extent.width = t.baseline.x - r.corner.x + 1; + r.extent.height = ELEMENT_SPACING_Y - 2; BatchGraphics (); - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01)); + // erase previous free amount + SetContextForeGroundColor (CARGO_BACK_COLOR); DrawFilledRectangle (&r); - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09)); - font_DrawText (&rt); + // print the new free amount + SetContextForeGroundColor (CARGO_WORTH_COLOR); + font_DrawText (&t); UnbatchGraphics (); SetContext (OldContext); } -void -DrawCargoStrings (BYTE OldElement, BYTE NewElement) +static void +DrawElementAmount (COUNT element, bool selected) { - COORD y, cy; - TEXT rt; RECT r; - CONTEXT OldContext; - UNICODE rt_amount_buf[40]; + TEXT t; + UNICODE buf[40]; - LockMutex (GraphicsLock); + r.corner.x = ELEMENT_SEL_ORG_X; + r.extent.width = ELEMENT_SEL_WIDTH; + r.extent.height = ELEMENT_SPACING_Y - 2; - OldContext = SetContext (StatusContext); - SetContextFont (TinyFont); + if (element == NUM_ELEMENT_CATEGORIES) + r.corner.y = BIO_ORG_Y; + else + r.corner.y = ELEMENT_ORG_Y + (element * ELEMENT_SPACING_Y); + + // draw line background + SetContextForeGroundColor (selected ? + CARGO_SELECTED_BACK_COLOR : CARGO_BACK_COLOR); + DrawFilledRectangle (&r); - BatchGraphics (); + t.pStr = buf; + t.baseline.y = r.corner.y + TEXT_BASELINE; - y = 41; - rt.align = ALIGN_RIGHT; - rt.pStr = rt_amount_buf; + if (element == NUM_ELEMENT_CATEGORIES) + { // Bio + snprintf (buf, sizeof buf, "%u", GLOBAL_SIS (TotalBioMass)); + } + else + { // Element + // print element's worth + SetContextForeGroundColor (selected ? + CARGO_SELECTED_WORTH_COLOR : CARGO_WORTH_COLOR); + t.baseline.x = ELEMENT_COL_1; + snprintf (buf, sizeof buf, "%u", GLOBAL (ElementWorth[element])); + t.CharCount = (COUNT)~0; + font_DrawText (&t); + + snprintf (buf, sizeof buf, "%u", GLOBAL_SIS (ElementAmounts[element])); + } - if (OldElement > NUM_ELEMENT_CATEGORIES) - { - STAMP s; + // print the element/bio amount + SetContextForeGroundColor (selected ? + CARGO_SELECTED_AMOUNT_COLOR : CARGO_AMOUNT_COLOR); + t.baseline.x = ELEMENT_COL_2; + t.CharCount = (COUNT)~0; + font_DrawText (&t); +} - r.corner.x = 2; - r.extent.width = FIELD_WIDTH + 1; +static void +DrawCargoDisplay (void) +{ + STAMP s; + TEXT t; + RECT r; + COORD cy; + COUNT i; - { - TEXT ct; + r.corner.x = 2; + r.extent.width = FIELD_WIDTH + 1; - r.corner.y = 20; - r.extent.height = 109; - DrawStarConBox (&r, 1, - BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19), - BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F), - TRUE, - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01)); + r.corner.y = 20; + r.extent.height = 109; + DrawStarConBox (&r, 1, + SHADOWBOX_MEDIUM_COLOR, SHADOWBOX_DARK_COLOR, + TRUE, CARGO_BACK_COLOR); - SetContextFont (StarConFont); - ct.baseline.x = (STATUS_WIDTH >> 1) - 1; - ct.baseline.y = 27; - ct.align = ALIGN_CENTER; - ct.pStr = GAME_STRING (CARGO_STRING_BASE); - ct.CharCount = (COUNT)~0; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B)); - font_DrawText (&ct); + // draw the "CARGO" title + SetContextFont (StarConFont); + t.baseline.x = (STATUS_WIDTH >> 1) - 1; + t.baseline.y = 27; + t.align = ALIGN_CENTER; + t.pStr = GAME_STRING (CARGO_STRING_BASE); + t.CharCount = (COUNT)~0; + SetContextForeGroundColor (CARGO_SELECTED_AMOUNT_COLOR); + font_DrawText (&t); - SetContextFont (TinyFont); - } + SetContextFont (TinyFont); - r.corner.x = 7; - r.extent.width = 7; - r.extent.height = 7; + s.frame = SetAbsFrameIndex (MiscDataFrame, + (NUM_SCANDOT_TRANSITIONS * 2) + 3); + r.corner.x = ELEMENT_COL_0; + r.extent = GetFrameBounds (s.frame); + s.origin.x = r.corner.x + (r.extent.width >> 1); - s.origin.x = r.corner.x + (r.extent.width >> 1); - s.frame = SetAbsFrameIndex ( - MiscDataFrame, - (NUM_SCANDOT_TRANSITIONS << 1) + 3 - ); - cy = y; + cy = ELEMENT_ORG_Y; - rt.baseline.y = cy - 7; - rt.CharCount = 1; + // print element column headings + t.align = ALIGN_RIGHT; + t.baseline.y = cy - 1; + t.CharCount = (COUNT)~0; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09)); - rt.baseline.x = 32; - rt_amount_buf[0] = '$'; - font_DrawText (&rt); + SetContextForeGroundColor (CARGO_WORTH_COLOR); + t.baseline.x = ELEMENT_COL_1; + t.pStr = "$"; + font_DrawText (&t); - rt.baseline.x = 58; - rt_amount_buf[0] = '#'; - font_DrawText (&rt); + t.baseline.x = ELEMENT_COL_2; + t.pStr = "#"; + font_DrawText (&t); - for (OldElement = 0; - OldElement < NUM_ELEMENT_CATEGORIES; ++OldElement) - { - SetContextForeGroundColor (BLACK_COLOR); - r.corner.y = cy - 6; - DrawFilledRectangle (&r); + // draw element icons and print amounts + for (i = 0; i < NUM_ELEMENT_CATEGORIES; ++i, cy += ELEMENT_SPACING_Y) + { + // erase background under an element icon + SetContextForeGroundColor (BLACK_COLOR); + r.corner.y = cy; + DrawFilledRectangle (&r); - s.origin.y = r.corner.y + (r.extent.height >> 1); - DrawStamp (&s); - s.frame = SetRelFrameIndex (s.frame, 5); + // draw an element icon + s.origin.y = r.corner.y + (r.extent.height >> 1); + DrawStamp (&s); + s.frame = SetRelFrameIndex (s.frame, 5); - if (OldElement != NewElement) - { - rt.baseline.y = cy; + DrawElementAmount (i, false); + } - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09)); - rt.baseline.x = 32; - sprintf (rt_amount_buf, "%u", - GLOBAL (ElementWorth[OldElement])); - rt.CharCount = (COUNT)~0; - font_DrawText (&rt); + // erase background under the Bio icon + SetContextForeGroundColor (BLACK_COLOR); + r.corner.y = BIO_ORG_Y; + DrawFilledRectangle (&r); - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03)); - rt.baseline.x = 58; - sprintf (rt_amount_buf, "%u", - GLOBAL_SIS (ElementAmounts[OldElement])); - rt.CharCount = (COUNT)~0; - font_DrawText (&rt); - } + // draw the Bio icon + s.origin.y = r.corner.y + (r.extent.height >> 1); + s.frame = SetAbsFrameIndex (s.frame, 68); + DrawStamp (&s); - cy += 9; - } + // print the Bio amount + DrawElementAmount (NUM_ELEMENT_CATEGORIES, false); - OldElement = NewElement; + // draw the line over the Bio amount + r.corner.x = 4; + r.corner.y = BIO_ORG_Y - 2; + r.extent.width = FIELD_WIDTH - 3; + r.extent.height = 1; + SetContextForeGroundColor (CARGO_SELECTED_BACK_COLOR); + DrawFilledRectangle (&r); - rt.baseline.y = 125; + // print "Free" + t.baseline.x = 5; + t.baseline.y = FREE_ORG_Y + TEXT_BASELINE; + t.align = ALIGN_LEFT; + t.pStr = GAME_STRING (CARGO_STRING_BASE + 1); + t.CharCount = (COUNT)~0; + font_DrawText (&t); - SetContextForeGroundColor (BLACK_COLOR); - r.corner.y = rt.baseline.y - 6; - DrawFilledRectangle (&r); + ShowRemainingCapacity (); +} - s.origin.y = r.corner.y + (r.extent.height >> 1); - s.frame = SetAbsFrameIndex (s.frame, 68); - DrawStamp (&s); +void +DrawCargoStrings (BYTE OldElement, BYTE NewElement) +{ + CONTEXT OldContext; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03)); - rt.baseline.x = 58; - sprintf (rt_amount_buf, "%u", GLOBAL_SIS (TotalBioMass)); - rt.CharCount = (COUNT)~0; - font_DrawText (&rt); + LockMutex (GraphicsLock); - r.corner.x = 4; - r.corner.y = 117; - r.extent.width = 56; - r.extent.height = 1; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09)); - DrawFilledRectangle (&r); + OldContext = SetContext (StatusContext); + SetContextFont (TinyFont); - { - TEXT lt; - - lt.baseline.x = 5; - lt.baseline.y = 113; - lt.align = ALIGN_LEFT; - lt.pStr = GAME_STRING (CARGO_STRING_BASE + 1); - lt.CharCount = (COUNT)~0; - font_DrawText (<); - } + BatchGraphics (); - ShowRemainingCapacity (); + if (OldElement > NUM_ELEMENT_CATEGORIES) + { // Asked for the initial display + DrawCargoDisplay (); + + // do not draw unselected again this time + OldElement = NewElement; } - r.corner.x = 19; - r.extent.width = 40; - r.extent.height = 7; - if (OldElement != NewElement) - { - if (OldElement == NUM_ELEMENT_CATEGORIES) - cy = 125; - else - cy = y + (OldElement * 9); - r.corner.y = cy - 6; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01)); - DrawFilledRectangle (&r); - - rt.baseline.y = cy; - - if (OldElement == NUM_ELEMENT_CATEGORIES) - sprintf (rt_amount_buf, "%u", GLOBAL_SIS (TotalBioMass)); - else - { - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09)); - rt.baseline.x = 32; - sprintf (rt_amount_buf, "%u", GLOBAL (ElementWorth[OldElement])); - rt.CharCount = (COUNT)~0; - font_DrawText (&rt); - sprintf (rt_amount_buf, "%u", GLOBAL_SIS (ElementAmounts[OldElement])); - } - - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03)); - rt.baseline.x = 58; - rt.CharCount = (COUNT)~0; - font_DrawText (&rt); + { // unselect the previous element + DrawElementAmount (OldElement, false); } if (NewElement != (BYTE)~0) - { - if (NewElement == NUM_ELEMENT_CATEGORIES) - cy = 125; - else - cy = y + (NewElement * 9); - r.corner.y = cy - 6; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09)); - DrawFilledRectangle (&r); - - rt.baseline.y = cy; - - if (NewElement == NUM_ELEMENT_CATEGORIES) - sprintf (rt_amount_buf, "%u", GLOBAL_SIS (TotalBioMass)); - else - { - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03)); - rt.baseline.x = 32; - sprintf (rt_amount_buf, "%u", GLOBAL (ElementWorth[NewElement])); - rt.CharCount = (COUNT)~0; - font_DrawText (&rt); - sprintf (rt_amount_buf, "%u", GLOBAL_SIS (ElementAmounts[NewElement])); - } - - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B)); - rt.baseline.x = 58; - rt.CharCount = (COUNT)~0; - font_DrawText (&rt); + { // select the new element + DrawElementAmount (NewElement, true); } UnbatchGraphics (); @@ -290,42 +267,38 @@ UnlockMutex (GraphicsLock); } +static void +DrawElementDescription (COUNT element) +{ + LockMutex (GraphicsLock); + DrawStatusMessage (GAME_STRING (element + (CARGO_STRING_BASE + 2))); + UnlockMutex (GraphicsLock); +} + static BOOLEAN DoDiscardCargo (MENU_STATE *pMS) { BYTE NewState; BOOLEAN select, cancel, back, forward; + select = PulsedInputState.menu[KEY_MENU_SELECT]; cancel = PulsedInputState.menu[KEY_MENU_CANCEL]; back = PulsedInputState.menu[KEY_MENU_UP] || PulsedInputState.menu[KEY_MENU_LEFT]; forward = PulsedInputState.menu[KEY_MENU_DOWN] || PulsedInputState.menu[KEY_MENU_RIGHT]; if (GLOBAL (CurrentActivity) & CHECK_ABORT) - return (FALSE); + return FALSE; - if (!pMS->Initialized) + if (cancel) { - pMS->InputFunc = DoDiscardCargo; - pMS->Initialized = TRUE; - - NewState = pMS->CurState; - pMS->CurState = (BYTE)~0; - goto SelectCargo; + return FALSE; } - else if (cancel) - { - LockMutex (GraphicsLock); - ClearSISRect (DRAW_SIS_DISPLAY); - UnlockMutex (GraphicsLock); - - return (FALSE); - } else if (select) { - if (GLOBAL_SIS (ElementAmounts[pMS->CurState - 1])) + if (GLOBAL_SIS (ElementAmounts[pMS->CurState])) { - --GLOBAL_SIS (ElementAmounts[pMS->CurState - 1]); - DrawCargoStrings ((BYTE)(pMS->CurState - 1), (BYTE)(pMS->CurState - 1)); + --GLOBAL_SIS (ElementAmounts[pMS->CurState]); + DrawCargoStrings (pMS->CurState, pMS->CurState); LockMutex (GraphicsLock); --GLOBAL_SIS (TotalElementMass); @@ -339,7 +312,7 @@ } else { - NewState = pMS->CurState - 1; + NewState = pMS->CurState; if (back) { if (NewState == 0) @@ -353,15 +326,10 @@ NewState = 0; } - ++NewState; if (NewState != pMS->CurState) { -SelectCargo: - DrawCargoStrings ((BYTE)(pMS->CurState - 1), (BYTE)(NewState - 1)); - LockMutex (GraphicsLock); - DrawStatusMessage (GAME_STRING (NewState - 1 + (CARGO_STRING_BASE + 2))); - UnlockMutex (GraphicsLock); - + DrawCargoStrings (pMS->CurState, NewState); + DrawElementDescription (NewState); pMS->CurState = NewState; } } @@ -374,16 +342,22 @@ void CargoMenu (void) { - // XXX: Should get an own STATE struct MENU_STATE MenuState; - MenuState.InputFunc = DoDiscardCargo; - MenuState.Initialized = FALSE; - // XXX: 1-based index because this had to work around the - // pSolarSysState->MenuState.CurState abuse. Should be changed. - MenuState.CurState = 1; + memset (&MenuState, 0, sizeof MenuState); + // draw the initial cargo display + DrawCargoStrings ((BYTE)~0, MenuState.CurState); + DrawElementDescription (MenuState.CurState); + SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); + + MenuState.InputFunc = DoDiscardCargo; DoInput (&MenuState, TRUE); + + // erase the cargo display + LockMutex (GraphicsLock); + ClearSISRect (DRAW_SIS_DISPLAY); + UnlockMutex (GraphicsLock); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-12-12 21:56:36
|
Revision: 3429 http://sc2.svn.sourceforge.net/sc2/?rev=3429&view=rev Author: avolkov Date: 2009-12-12 21:56:29 +0000 (Sat, 12 Dec 2009) Log Message: ----------- Devices menu cleanup: MENU_STATE.CurState is now 0-based; split drawing into functions; added symbolic positioning constants; moved colors to colors.h; removed MENU_STATE hacks Modified Paths: -------------- trunk/sc2/src/uqm/colors.h trunk/sc2/src/uqm/planets/cargo.c trunk/sc2/src/uqm/planets/devices.c Modified: trunk/sc2/src/uqm/colors.h =================================================================== --- trunk/sc2/src/uqm/colors.h 2009-12-12 15:47:45 UTC (rev 3428) +++ trunk/sc2/src/uqm/colors.h 2009-12-12 21:56:29 UTC (rev 3429) @@ -349,7 +349,7 @@ WHITE_COLOR -// === Cargo === +// === Cargo menu === #define CARGO_BACK_COLOR \ BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01) @@ -370,6 +370,21 @@ BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B) +// === Devices menu === + +#define DEVICES_BACK_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01) + +#define DEVICES_NAME_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03) + +#define DEVICES_SELECTED_BACK_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09) + +#define DEVICES_SELECTED_NAME_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B) + + // Temporary, until we can use C'99 features: #define BLACK_COLOR_INIT \ BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x00), 0x00) Modified: trunk/sc2/src/uqm/planets/cargo.c =================================================================== --- trunk/sc2/src/uqm/planets/cargo.c 2009-12-12 15:47:45 UTC (rev 3428) +++ trunk/sc2/src/uqm/planets/cargo.c 2009-12-12 21:56:29 UTC (rev 3429) @@ -143,9 +143,10 @@ r.corner.x = 2; r.extent.width = FIELD_WIDTH + 1; - r.corner.y = 20; - r.extent.height = 109; + // XXX: Shouldn't the height be 1 less? This draws the bottom border + // 1 pixel too low. Or if not, why do we need another box anyway? + r.extent.height = 129 - r.corner.y; DrawStarConBox (&r, 1, SHADOWBOX_MEDIUM_COLOR, SHADOWBOX_DARK_COLOR, TRUE, CARGO_BACK_COLOR); Modified: trunk/sc2/src/uqm/planets/devices.c =================================================================== --- trunk/sc2/src/uqm/planets/devices.c 2009-12-12 15:47:45 UTC (rev 3428) +++ trunk/sc2/src/uqm/planets/devices.c 2009-12-12 21:56:29 UTC (rev 3429) @@ -17,6 +17,7 @@ */ #include "../build.h" +#include "../colors.h" #include "../encount.h" #include "../gamestr.h" #include "../controls.h" @@ -42,155 +43,172 @@ // devices the player actually possesses. //#define DEBUG_DEVICES +#define DEVICE_ICON_WIDTH 16 +#define DEVICE_ICON_HEIGHT 16 + +#define DEVICE_ORG_Y 33 +#define DEVICE_SPACING_Y (DEVICE_ICON_HEIGHT + 2) + +#define DEVICE_COL_0 4 +#define DEVICE_COL_1 40 + +#define DEVICE_SEL_ORG_X (DEVICE_COL_0 + DEVICE_ICON_WIDTH) +#define DEVICE_SEL_WIDTH (FIELD_WIDTH + 1 - DEVICE_SEL_ORG_X + 1) + +#define ICON_OFS_Y 1 +#define NAME_OFS_Y 2 +#define TEXT_BASELINE 6 +#define TEXT_SPACING_Y 7 + +#define MAX_VIS_DEVICES ((129 - DEVICE_ORG_Y) / DEVICE_SPACING_Y) + + +typedef enum +{ + DEVICE_FAILURE = 0, + DEVICE_SUCCESS, + DEVICE_SUCCESS_NO_SOUND, +} DeviceStatus; + +typedef struct +{ + BYTE list[NUM_DEVICES]; + // List of all devices player has + COUNT count; + // Number of devices in the list + COUNT topIndex; + // Index of the top device displayed +} DEVICES_STATE; + + +#if 0 static void -DrawDevices (MENU_STATE *pMS, BYTE OldDevice, BYTE NewDevice) +EraseDevicesBackground (void) { -#define MAX_VIS_DEVICES 5 - COORD y, cy; - TEXT t; RECT r; - BYTE *pDeviceMap; - LockMutex (GraphicsLock); + r.corner.x = 2 + 1; + r.extent.width = FIELD_WIDTH + 1 - 2; + r.corner.y = DEVICE_ORG_Y; + r.extent.height = MAX_VIS_DEVICES * DEVICE_SPACING_Y; + SetContextForeGroundColor (DEVICES_BACK_COLOR); + DrawFilledRectangle (&r); +} +#endif - SetContext (StatusContext); - SetContextFont (TinyFont); +static void +DrawDevice (COUNT device, COUNT pos, bool selected) +{ + RECT r; + TEXT t; - y = 41; - t.baseline.x = 40; t.align = ALIGN_CENTER; - t.CharCount = 3; + t.baseline.x = DEVICE_COL_1; - pDeviceMap = (BYTE*)pMS->CurFrame; - if (OldDevice > NUM_DEVICES - || (NewDevice < NUM_DEVICES - && (NewDevice < (BYTE)pMS->first_item.y - || NewDevice >= (BYTE)(pMS->first_item.y + MAX_VIS_DEVICES)))) - { - STAMP s; + r.extent.width = DEVICE_SEL_WIDTH; + r.extent.height = TEXT_SPACING_Y * 2; + r.corner.x = DEVICE_SEL_ORG_X; - r.corner.x = 2; - r.extent.width = FIELD_WIDTH + 1; + // draw line background + r.corner.y = DEVICE_ORG_Y + pos * DEVICE_SPACING_Y + NAME_OFS_Y; + SetContextForeGroundColor (selected ? + DEVICES_SELECTED_BACK_COLOR : DEVICES_BACK_COLOR); + DrawFilledRectangle (&r); - if (!(pMS->Initialized & 1)) - { - ++r.corner.x; - r.extent.width -= 2; - r.corner.y = 33; - r.extent.height = 89; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01)); - DrawFilledRectangle (&r); - } - else - { - TEXT ct; + SetContextFont (TinyFont); - r.corner.y = 20; - r.extent.height = 109; - DrawStarConBox (&r, 1, - BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19), - BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F), - TRUE, - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01)); + // print device name + SetContextForeGroundColor (selected ? + DEVICES_SELECTED_NAME_COLOR : DEVICES_NAME_COLOR); + t.baseline.y = r.corner.y + TEXT_BASELINE; + t.pStr = GAME_STRING (device + DEVICE_STRING_BASE + 1); + t.CharCount = utf8StringPos (t.pStr, ' '); + font_DrawText (&t); + t.baseline.y += TEXT_SPACING_Y; + t.pStr = skipUTF8Chars (t.pStr, t.CharCount + 1); + t.CharCount = (COUNT)~0; + font_DrawText (&t); +} - SetContextFont (StarConFont); - ct.baseline.x = (STATUS_WIDTH >> 1) - 1; - ct.baseline.y = 27; - ct.align = ALIGN_CENTER; - ct.pStr = GAME_STRING (DEVICE_STRING_BASE); - ct.CharCount = (COUNT)~0; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B)); - font_DrawText (&ct); +static void +DrawDevicesDisplay (DEVICES_STATE *devState) +{ + TEXT t; + RECT r; + STAMP s; + COORD cy; + COUNT i; - SetContextFont (TinyFont); - } + r.corner.x = 2; + r.corner.y = 20; + r.extent.width = FIELD_WIDTH + 1; + // XXX: Shouldn't the height be 1 less? This draws the bottom border + // 1 pixel too low. Or if not, why do we need another box anyway? + r.extent.height = 129 - r.corner.y; + DrawStarConBox (&r, 1, + SHADOWBOX_MEDIUM_COLOR, SHADOWBOX_DARK_COLOR, + TRUE, DEVICES_BACK_COLOR); - if (NewDevice < (BYTE)pMS->first_item.y) - pMS->first_item.y = NewDevice; - else if (NewDevice >= (BYTE)(pMS->first_item.y + MAX_VIS_DEVICES)) - pMS->first_item.y = NewDevice - (MAX_VIS_DEVICES - 1); + // print the "DEVICES" title + SetContextFont (StarConFont); + t.baseline.x = (STATUS_WIDTH >> 1) - 1; + t.baseline.y = r.corner.y + 7; + t.align = ALIGN_CENTER; + t.pStr = GAME_STRING (DEVICE_STRING_BASE); + t.CharCount = (COUNT)~0; + SetContextForeGroundColor (DEVICES_SELECTED_NAME_COLOR); + font_DrawText (&t); - s.origin.x = 4; - s.origin.y = 34; - cy = y; + s.origin.x = DEVICE_COL_0; + cy = DEVICE_ORG_Y; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03)); - for (OldDevice = (BYTE)pMS->first_item.y; - OldDevice < (BYTE)(pMS->first_item.y + MAX_VIS_DEVICES) - && OldDevice < (BYTE)pMS->first_item.x; - ++OldDevice) - { - s.frame = SetAbsFrameIndex ( - MiscDataFrame, 77 + pDeviceMap[OldDevice]); - DrawStamp (&s); + // draw device icons and print names + for (i = 0; i < MAX_VIS_DEVICES; ++i, cy += DEVICE_SPACING_Y) + { + COUNT devIndex = devState->topIndex + i; - if (OldDevice != NewDevice) - { - t.baseline.y = cy; - t.pStr = GAME_STRING (pDeviceMap[OldDevice] + - DEVICE_STRING_BASE + 1); - t.CharCount = utf8StringPos (t.pStr, ' '); - font_DrawText (&t); - t.baseline.y += 7; - t.pStr = skipUTF8Chars (t.pStr, t.CharCount + 1); - t.CharCount = (COUNT)~0; - font_DrawText (&t); - } + if (devIndex >= devState->count) + break; - cy += 18; - s.origin.y += 18; - } + // draw device icon + s.origin.y = cy + ICON_OFS_Y; + s.frame = SetAbsFrameIndex (MiscDataFrame, + 77 + devState->list[devIndex]); + DrawStamp (&s); - OldDevice = NewDevice; + DrawDevice (devState->list[devIndex], i, false); } +} - r.extent.width = 41; - r.extent.height = 14; - r.corner.x = t.baseline.x - (r.extent.width >> 1); +static void +DrawDevices (DEVICES_STATE *devState, COUNT OldDevice, COUNT NewDevice) +{ + LockMutex (GraphicsLock); + BatchGraphics (); - if (OldDevice != NewDevice) - { - cy = y + ((OldDevice - pMS->first_item.y) * 18); - r.corner.y = cy - 6; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01)); - DrawFilledRectangle (&r); + SetContext (StatusContext); - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x14), 0x03)); - t.baseline.y = cy; - t.pStr = GAME_STRING (pDeviceMap[OldDevice] + DEVICE_STRING_BASE + 1); - t.CharCount = utf8StringPos (t.pStr, ' '); - font_DrawText (&t); - t.baseline.y += 7; - t.pStr = skipUTF8Chars (t.pStr, t.CharCount + 1); - t.CharCount = (COUNT)~0; - font_DrawText (&t); + if (OldDevice > NUM_DEVICES) + { // Asked for the initial display or refresh + DrawDevicesDisplay (devState); + + // do not draw unselected again this time + OldDevice = NewDevice; } + if (OldDevice != NewDevice) + { // unselect the previous element + DrawDevice (devState->list[OldDevice], OldDevice - devState->topIndex, + false); + } + if (NewDevice < NUM_DEVICES) - { - cy = y + ((NewDevice - pMS->first_item.y) * 18); - r.corner.y = cy - 6; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09)); - DrawFilledRectangle (&r); - - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B)); - t.baseline.y = cy; - t.pStr = GAME_STRING (pDeviceMap[NewDevice] + DEVICE_STRING_BASE + 1); - t.CharCount = utf8StringPos (t.pStr, ' '); - font_DrawText (&t); - t.baseline.y += 7; - t.pStr = skipUTF8Chars (t.pStr, t.CharCount + 1); - t.CharCount = (COUNT)~0; - font_DrawText (&t); + { // select the new element + DrawDevice (devState->list[NewDevice], NewDevice - devState->topIndex, + true); } + UnbatchGraphics (); UnlockMutex (GraphicsLock); } @@ -280,8 +298,8 @@ return FALSE; } -static UWORD -DeviceFailed (BYTE which_device) +static DeviceStatus +InvokeDevice (BYTE which_device) { BYTE val; @@ -295,7 +313,7 @@ SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 0); SET_GAME_STATE (DISCUSSED_ULTRON, 0); SET_GAME_STATE (SUPOX_ULTRON_HELP, 0); - return (FALSE); + return DEVICE_SUCCESS; } break; case ARTIFACT_2_DEVICE: @@ -329,14 +347,14 @@ CloneShipFragment (CHMMR_SHIP, &GLOBAL (npc_built_ship_q), 0); } - return (MAKE_WORD (0, 1)); + return DEVICE_SUCCESS_NO_SOUND; } break; case UTWIG_BOMB_DEVICE: SET_GAME_STATE (UTWIG_BOMB, 0); GLOBAL (CurrentActivity) &= ~IN_BATTLE; GLOBAL_SIS (CrewEnlisted) = (COUNT)~0; - return (FALSE); + return DEVICE_SUCCESS; case ULTRON_0_DEVICE: break; case ULTRON_1_DEVICE: @@ -380,7 +398,7 @@ if (playerInPlanetOrbit ()) SaveSolarSysLocation (); } - return (FALSE); + return DEVICE_SUCCESS; case AQUA_HELIX_DEVICE: val = GET_GAME_STATE (ULTRON_CONDITION); if (val) @@ -389,7 +407,7 @@ SET_GAME_STATE (AQUA_HELIX_ON_SHIP, 0); SET_GAME_STATE (DISCUSSED_ULTRON, 0); SET_GAME_STATE (SUPOX_ULTRON_HELP, 0); - return (FALSE); + return DEVICE_SUCCESS; } break; case CLEAR_SPINDLE_DEVICE: @@ -400,13 +418,13 @@ SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 0); SET_GAME_STATE (DISCUSSED_ULTRON, 0); SET_GAME_STATE (SUPOX_ULTRON_HELP, 0); - return (FALSE); + return DEVICE_SUCCESS; } break; case UMGAH_HYPERWAVE_DEVICE: case BURVIX_HYPERWAVE_DEVICE: if (UseCaster ()) - return FALSE; + return DEVICE_SUCCESS; break; case TAALO_PROTECTOR_DEVICE: break; @@ -431,7 +449,7 @@ */ GLOBAL_SIS (FuelOnBoard) -= PORTAL_FUEL_COST; SET_GAME_STATE (PORTAL_COUNTER, 1); - return (FALSE); + return DEVICE_SUCCESS; } break; case URQUAN_WARP_DEVICE: @@ -440,95 +458,89 @@ break; } - return (TRUE); + return DEVICE_FAILURE; } static BOOLEAN DoManipulateDevices (MENU_STATE *pMS) { - BYTE NewState; + DEVICES_STATE *devState = pMS->privData; BOOLEAN select, cancel, back, forward; + BOOLEAN pagefwd, pageback; + select = PulsedInputState.menu[KEY_MENU_SELECT]; cancel = PulsedInputState.menu[KEY_MENU_CANCEL]; back = PulsedInputState.menu[KEY_MENU_UP] || PulsedInputState.menu[KEY_MENU_LEFT]; forward = PulsedInputState.menu[KEY_MENU_DOWN] || PulsedInputState.menu[KEY_MENU_RIGHT]; + pagefwd = PulsedInputState.menu[KEY_MENU_PAGE_DOWN]; + pageback = PulsedInputState.menu[KEY_MENU_PAGE_UP]; if (GLOBAL (CurrentActivity) & CHECK_ABORT) - return (FALSE); + return FALSE; - if (!pMS->Initialized) + if (cancel) { - DrawDevices (pMS, (BYTE)~0, (BYTE)~0); - - pMS->InputFunc = DoManipulateDevices; - pMS->Initialized = TRUE; - NewState = pMS->CurState; - goto SelectDevice; + return FALSE; } - else if (cancel) - { - return (FALSE); - } else if (select) { - UWORD status; + DeviceStatus status; LockMutex (GraphicsLock); - status = DeviceFailed ( - ((BYTE*)pMS->CurFrame)[pMS->CurState - 1] - ); - NewState = LOBYTE (status); - if (NewState) + status = InvokeDevice (devState->list[pMS->CurState]); + if (status == DEVICE_FAILURE) PlayMenuSound (MENU_SOUND_FAILURE); - else if (HIBYTE (status) == 0) + else if (status == DEVICE_SUCCESS) PlayMenuSound (MENU_SOUND_INVOKED); UnlockMutex (GraphicsLock); - return ((BOOLEAN)NewState); + return (status == DEVICE_FAILURE); } else { SIZE NewTop; + SIZE NewState; - NewTop = pMS->first_item.y; - NewState = pMS->CurState - 1; + NewTop = devState->topIndex; + NewState = pMS->CurState; + if (back) - { - if (NewState > 0) - --NewState; - - if ((SIZE)NewState < NewTop && (NewTop -= MAX_VIS_DEVICES) < 0) - NewTop = 0; - } + --NewState; else if (forward) - { ++NewState; - if (NewState == (BYTE)pMS->first_item.x) - NewState = (BYTE)(pMS->first_item.x - 1); + else if (pagefwd) + NewState += MAX_VIS_DEVICES; + else if (pageback) + NewState -= MAX_VIS_DEVICES; - if (NewState >= NewTop + MAX_VIS_DEVICES) - NewTop = NewState; - } + if (NewState < 0) + NewState = 0; + else if (NewState >= devState->count) + NewState = devState->count - 1; - ++NewState; + if (NewState < NewTop || NewState >= NewTop + MAX_VIS_DEVICES) + NewTop = NewState - NewState % MAX_VIS_DEVICES; + if (NewState != pMS->CurState) { - if (NewTop != pMS->first_item.y) - { - pMS->first_item.y = NewTop; - pMS->CurState = (BYTE)~0; + if (NewTop != devState->topIndex) + { // redraw the display + devState->topIndex = NewTop; + DrawDevices (devState, (COUNT)~0, NewState); } -SelectDevice: - DrawDevices (pMS, (BYTE)(pMS->CurState - 1), (BYTE)(NewState - 1)); + else + { // move selection to new device + DrawDevices (devState, pMS->CurState, NewState); + } pMS->CurState = NewState; } SleepThread (ONE_SECOND / 30); } - return (TRUE); + return TRUE; } SIZE @@ -634,48 +646,47 @@ } } - return (DevicesOnBoard); + return DevicesOnBoard; } BOOLEAN DevicesMenu (void) { - BYTE DeviceMap[NUM_DEVICES]; MENU_STATE MenuState; + DEVICES_STATE DevicesState; memset (&MenuState, 0, sizeof MenuState); + MenuState.privData = &DevicesState; - MenuState.first_item.x = InventoryDevices (DeviceMap, NUM_DEVICES); - if (MenuState.first_item.x) - { - MenuState.InputFunc = DoManipulateDevices; - MenuState.Initialized = FALSE; - // XXX: 1-based index because this had to work around the - // pSolarSysState->MenuState.CurState abuse. Should be changed. - MenuState.CurState = 1; - MenuState.first_item.y = 0; + memset (&DevicesState, 0, sizeof DevicesState); - // XXX: CurFrame hack - MenuState.CurFrame = (FRAME)DeviceMap; - //DoManipulateDevices (pMS); /* to make sure it's initialized */ - SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); - DoInput (&MenuState, TRUE); + DevicesState.count = InventoryDevices (DevicesState.list, NUM_DEVICES); + if (!DevicesState.count) + return FALSE; - if (GLOBAL_SIS (CrewEnlisted) != (COUNT)~0 - && !(GLOBAL (CurrentActivity) & CHECK_ABORT)) - { - LockMutex (GraphicsLock); - ClearSISRect (DRAW_SIS_DISPLAY); - UnlockMutex (GraphicsLock); + DrawDevices (&DevicesState, (COUNT)~0, MenuState.CurState); - if (!GET_GAME_STATE (PORTAL_COUNTER) - && !(GLOBAL (CurrentActivity) & START_ENCOUNTER) - && GLOBAL_SIS (CrewEnlisted) != (COUNT)~0) -// DrawMenuStateStrings (PM_SCAN, pMS->CurState - 1); - return (TRUE); - } + SetMenuSounds (MENU_SOUND_ARROWS | MENU_SOUND_PAGEUP | MENU_SOUND_PAGEDOWN, + MENU_SOUND_SELECT); + + MenuState.InputFunc = DoManipulateDevices; + DoInput (&MenuState, TRUE); + + SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); + + if (GLOBAL_SIS (CrewEnlisted) != (COUNT)~0 + && !(GLOBAL (CurrentActivity) & CHECK_ABORT)) + { + LockMutex (GraphicsLock); + ClearSISRect (DRAW_SIS_DISPLAY); + UnlockMutex (GraphicsLock); + + if (!GET_GAME_STATE (PORTAL_COUNTER) + && !(GLOBAL (CurrentActivity) & START_ENCOUNTER) + && GLOBAL_SIS (CrewEnlisted) != (COUNT)~0) + return TRUE; } - return (FALSE); + return FALSE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-12-13 11:42:47
|
Revision: 3430 http://sc2.svn.sourceforge.net/sc2/?rev=3430&view=rev Author: avolkov Date: 2009-12-13 11:42:40 +0000 (Sun, 13 Dec 2009) Log Message: ----------- Roster menu cleanup: removed MENU_STATE hacks Modified Paths: -------------- trunk/sc2/src/uqm/colors.h trunk/sc2/src/uqm/planets/roster.c trunk/sc2/src/uqm/sis.c trunk/sc2/src/uqm/sis.h Modified: trunk/sc2/src/uqm/colors.h =================================================================== --- trunk/sc2/src/uqm/colors.h 2009-12-12 21:56:29 UTC (rev 3429) +++ trunk/sc2/src/uqm/colors.h 2009-12-13 11:42:40 UTC (rev 3430) @@ -385,6 +385,12 @@ BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B) +// === Roster menu === + +#define ROSTER_MODIFY_SHIP_COLOR \ + WHITE_COLOR + + // Temporary, until we can use C'99 features: #define BLACK_COLOR_INIT \ BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x00), 0x00) Modified: trunk/sc2/src/uqm/planets/roster.c =================================================================== --- trunk/sc2/src/uqm/planets/roster.c 2009-12-12 21:56:29 UTC (rev 3429) +++ trunk/sc2/src/uqm/planets/roster.c 2009-12-13 11:42:40 UTC (rev 3430) @@ -37,23 +37,36 @@ SUPPORT_SHIP_PTS }; -// Ship icon positions split into (lower half) left and right (upper) -// and sorted in the Y coord. These are used for navigation around the -// escort positions. -static POINT sorted_ship_pos[MAX_BUILT_SHIPS]; +typedef struct +{ + // Ship icon positions split into (lower half) left and right (upper) + // and sorted in the Y coord. These are used for navigation around the + // escort positions. + POINT shipPos[MAX_BUILT_SHIPS]; + COUNT count; + // Number of ships + + POINT curShipPt; + // Location of the currently selected escort + FRAME curShipFrame; + // Icon of the currently selected escort + bool modifyingCrew; + // true when in crew modification "sub-menu". This is simple + // enough that it does not require a real sub-menu. +} ROSTER_STATE; -static SHIP_FRAGMENT* LockSupportShip (MENU_STATE *pMS, HSHIPFRAG *phFrag); +static SHIP_FRAGMENT* LockSupportShip (ROSTER_STATE *, HSHIPFRAG *phFrag); static void -drawSupportShip (MENU_STATE *pMS, BOOLEAN filled) +drawSupportShip (ROSTER_STATE *rosterState, bool filled) { STAMP s; - if (!pMS->flash_frame0) + if (!rosterState->curShipFrame) return; - s.origin = pMS->first_item; - s.frame = pMS->flash_frame0; + s.origin = rosterState->curShipPt; + s.frame = rosterState->curShipFrame; if (filled) DrawFilledStamp (&s); @@ -62,22 +75,22 @@ } static void -getSupportShipIcon (MENU_STATE *pMS) +getSupportShipIcon (ROSTER_STATE *rosterState) { HSHIPFRAG hShipFrag; SHIP_FRAGMENT *ShipFragPtr; - pMS->flash_frame0 = NULL; - ShipFragPtr = LockSupportShip (pMS, &hShipFrag); + rosterState->curShipFrame = NULL; + ShipFragPtr = LockSupportShip (rosterState, &hShipFrag); if (!ShipFragPtr) return; - pMS->flash_frame0 = ShipFragPtr->icons; + rosterState->curShipFrame = ShipFragPtr->icons; UnlockShipFrag (&GLOBAL (built_ship_q), hShipFrag); } static void -flashSupportShip (MENU_STATE *pMS) +flashSupportShip (ROSTER_STATE *rosterState) { static Color c = BUILD_COLOR (MAKE_RGB15_INIT (0x1F, 0x00, 0x00), 0x24); static TimeCount NextTime = 0; @@ -108,16 +121,18 @@ } SetContextForeGroundColor (c); - drawSupportShip (pMS, TRUE); + drawSupportShip (rosterState, TRUE); } } static SHIP_FRAGMENT * -LockSupportShip (MENU_STATE *pMS, HSHIPFRAG *phFrag) +LockSupportShip (ROSTER_STATE *rosterState, HSHIPFRAG *phFrag) { const POINT *pship_pos; HSHIPFRAG hStarShip, hNextShip; + // Lookup the current escort's location in the unsorted points list + // to find the original escort index for (hStarShip = GetHeadLink (&GLOBAL (built_ship_q)), pship_pos = ship_pos; hStarShip; hStarShip = hNextShip, ++pship_pos) @@ -126,8 +141,7 @@ StarShipPtr = LockShipFrag (&GLOBAL (built_ship_q), hStarShip); - if (pship_pos->x == pMS->first_item.x - && pship_pos->y == pMS->first_item.y) + if (pointsEqual (*pship_pos, rosterState->curShipPt)) { *phFrag = hStarShip; return StarShipPtr; @@ -140,8 +154,18 @@ return NULL; } +static void +flashSupportShipCrew (void) +{ + RECT r; + + SetContext (StatusContext); + GetStatusMessageRect (&r); + SetFlashRect (&r); +} + static BOOLEAN -DeltaSupportCrew (MENU_STATE *pMS, SIZE crew_delta) +DeltaSupportCrew (ROSTER_STATE *rosterState, SIZE crew_delta) { BOOLEAN ret = FALSE; UNICODE buf[40]; @@ -150,7 +174,7 @@ SHIP_FRAGMENT *StarShipPtr; FLEET_INFO *TemplatePtr; - StarShipPtr = LockSupportShip (pMS, &hShipFrag); + StarShipPtr = LockSupportShip (rosterState, &hShipFrag); if (!StarShipPtr) return FALSE; @@ -178,14 +202,7 @@ DeltaSISGauges (-crew_delta, 0, 0); if (crew_delta) { - RECT r; - - r.corner.x = 2; - r.corner.y = 130; - r.extent.width = STATUS_MESSAGE_WIDTH; - r.extent.height = STATUS_MESSAGE_HEIGHT; - SetContext (StatusContext); - SetFlashRect (&r); + flashSupportShipCrew (); } ret = TRUE; } @@ -196,21 +213,26 @@ return ret; } -#define SHIP_TOGGLE ((BYTE)(1 << 7)) - static void -RosterCleanup (MENU_STATE *pMS) +drawModifiedSupportShip (ROSTER_STATE *rosterState) { SetContext (StatusContext); - SetContextForeGroundColor (WHITE_COLOR); - drawSupportShip (pMS, (pMS->CurState & SHIP_TOGGLE)); + SetContextForeGroundColor (ROSTER_MODIFY_SHIP_COLOR); + drawSupportShip (rosterState, TRUE); } +static void +selectSupportShip (ROSTER_STATE *rosterState, COUNT shipIndex) +{ + rosterState->curShipPt = rosterState->shipPos[shipIndex]; + getSupportShipIcon (rosterState); + DeltaSupportCrew (rosterState, 0); +} + static BOOLEAN DoModifyRoster (MENU_STATE *pMS) { - BYTE NewState; - RECT r; + ROSTER_STATE *rosterState = pMS->privData; BOOLEAN select, cancel, up, down, horiz; if (GLOBAL (CurrentActivity) & CHECK_ABORT) @@ -224,61 +246,29 @@ horiz = PulsedInputState.menu[KEY_MENU_LEFT] || PulsedInputState.menu[KEY_MENU_RIGHT]; - if (pMS->Initialized && (pMS->CurState & SHIP_TOGGLE)) + if (cancel && !rosterState->modifyingCrew) { - SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, - MENU_SOUND_SELECT | MENU_SOUND_CANCEL); - } - else - { - SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); - } - - if (!pMS->Initialized) - { - pMS->InputFunc = DoModifyRoster; - pMS->Initialized = TRUE; - pMS->CurState = 0; - pMS->first_item = sorted_ship_pos[pMS->CurState]; - - LockMutex (GraphicsLock); - SetContext (StatusContext); - getSupportShipIcon (pMS); - DeltaSupportCrew (pMS, 0); - UnlockMutex (GraphicsLock); - - return TRUE; - } - else if (cancel && !(pMS->CurState & SHIP_TOGGLE)) - { - LockMutex (GraphicsLock); - SetFlashRect (NULL); - RosterCleanup (pMS); - DrawStatusMessage (NULL); - UnlockMutex (GraphicsLock); - return FALSE; } else if (select || cancel) { LockMutex (GraphicsLock); - pMS->CurState ^= SHIP_TOGGLE; - if (!(pMS->CurState & SHIP_TOGGLE)) + rosterState->modifyingCrew ^= true; + if (!rosterState->modifyingCrew) + { SetFlashRect (NULL); + SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); + } else { - RosterCleanup (pMS); - - r.corner.x = 2; - r.corner.y = 130; - r.extent.width = STATUS_MESSAGE_WIDTH; - r.extent.height = STATUS_MESSAGE_HEIGHT; - SetContext (StatusContext); - SetFlashRect (&r); + drawModifiedSupportShip (rosterState); + flashSupportShipCrew (); + SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, + MENU_SOUND_SELECT | MENU_SOUND_CANCEL); } UnlockMutex (GraphicsLock); } - else if (pMS->CurState & SHIP_TOGGLE) + else if (rosterState->modifyingCrew) { SIZE delta = 0; BOOLEAN failed = FALSE; @@ -301,9 +291,10 @@ if (delta != 0) { LockMutex (GraphicsLock); - failed = !DeltaSupportCrew (pMS, delta); + failed = !DeltaSupportCrew (rosterState, delta); UnlockMutex (GraphicsLock); } + if (failed) { // not enough room or crew PlayMenuSound (MENU_SOUND_FAILURE); @@ -311,16 +302,20 @@ } else { - POINT *pship_pos = sorted_ship_pos; - BYTE num_escorts = (BYTE) pMS->delta_item; - BYTE top_right = (num_escorts + 1) >> 1; + COUNT NewState; + POINT *pship_pos = rosterState->shipPos; + COUNT top_right = (rosterState->count + 1) >> 1; NewState = pMS->CurState; - if (horiz) + if (rosterState->count < 2) { + // no navigation allowed + } + else if (horiz) + { if (NewState == top_right - 1) - NewState = num_escorts - 1; + NewState = rosterState->count - 1; else if (NewState >= top_right) { NewState -= top_right; @@ -338,7 +333,7 @@ else if (down) { ++NewState; - if (NewState == num_escorts) + if (NewState == rosterState->count) NewState = top_right; else if (NewState == top_right) NewState = 0; @@ -348,7 +343,7 @@ if (NewState == 0) NewState = top_right - 1; else if (NewState == top_right) - NewState = num_escorts - 1; + NewState = rosterState->count - 1; else --NewState; } @@ -360,15 +355,13 @@ if (NewState != pMS->CurState) { // Draw the previous escort in unselected state - drawSupportShip (pMS, FALSE); + drawSupportShip (rosterState, FALSE); // Select the new one - pMS->first_item = pship_pos[NewState]; - getSupportShipIcon (pMS); - DeltaSupportCrew (pMS, 0); + selectSupportShip (rosterState, NewState); pMS->CurState = NewState; } - flashSupportShip (pMS); + flashSupportShip (rosterState); UnbatchGraphics (); UnlockMutex (GraphicsLock); @@ -403,30 +396,41 @@ BOOLEAN RosterMenu (void) { - SIZE num_support_ships; + MENU_STATE MenuState; + ROSTER_STATE RosterState; - num_support_ships = CountLinks (&GLOBAL (built_ship_q)); - if (num_support_ships) - { - MENU_STATE MenuState; + memset (&MenuState, 0, sizeof MenuState); + MenuState.privData = &RosterState; - // Get the ship positions we will use and sort on X then Y - assert (sizeof (sorted_ship_pos) == sizeof (ship_pos)); - memcpy (sorted_ship_pos, ship_pos, sizeof (ship_pos)); - qsort (sorted_ship_pos, num_support_ships, - sizeof (sorted_ship_pos[0]), compShipPos); + memset (&RosterState, 0, sizeof RosterState); + + RosterState.count = CountLinks (&GLOBAL (built_ship_q)); + if (!RosterState.count) + return FALSE; - memset (&MenuState, 0, sizeof (MenuState)); - MenuState.InputFunc = DoModifyRoster; - MenuState.Initialized = FALSE; - MenuState.delta_item = num_support_ships; - - SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); - DoInput (&MenuState, TRUE); + // Get the escort positions we will use and sort on X then Y + assert (sizeof (RosterState.shipPos) == sizeof (ship_pos)); + memcpy (RosterState.shipPos, ship_pos, sizeof (ship_pos)); + qsort (RosterState.shipPos, RosterState.count, + sizeof (RosterState.shipPos[0]), compShipPos); - return TRUE; - } - - return FALSE; + LockMutex (GraphicsLock); + SetContext (StatusContext); + selectSupportShip (&RosterState, MenuState.CurState); + UnlockMutex (GraphicsLock); + + SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); + + MenuState.InputFunc = DoModifyRoster; + DoInput (&MenuState, TRUE); + + LockMutex (GraphicsLock); + SetContext (StatusContext); + // unselect the last ship + drawSupportShip (&RosterState, FALSE); + DrawStatusMessage (NULL); + UnlockMutex (GraphicsLock); + + return TRUE; } Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2009-12-12 21:56:29 UTC (rev 3429) +++ trunk/sc2/src/uqm/sis.c 2009-12-13 11:42:40 UTC (rev 3430) @@ -354,21 +354,32 @@ } void +GetStatusMessageRect (RECT *r) +{ + r->corner.x = 2; + r->corner.y = 130; + r->extent.width = STATUS_MESSAGE_WIDTH; + r->extent.height = STATUS_MESSAGE_HEIGHT; +} + +void DrawStatusMessage (const UNICODE *pStr) { RECT r; + RECT ctxRect; TEXT t; UNICODE buf[128]; CONTEXT OldContext; OldContext = SetContext (StatusContext); - GetContextClipRect (&r); + GetContextClipRect (&ctxRect); + // XXX: Technically, this does not need OffScreenContext. The only reason + // it is used is to avoid preserving StatusContext settings. SetContext (OffScreenContext); SetContextFGFrame (Screen); - r.corner.x += 2; - r.corner.y += 130; - r.extent.width = STATUS_MESSAGE_WIDTH; - r.extent.height = STATUS_MESSAGE_HEIGHT; + GetStatusMessageRect (&r); + r.corner.x += ctxRect.corner.x; + r.corner.y += ctxRect.corner.y; SetContextClipRect (&r); BatchGraphics (); Modified: trunk/sc2/src/uqm/sis.h =================================================================== --- trunk/sc2/src/uqm/sis.h 2009-12-12 21:56:29 UTC (rev 3429) +++ trunk/sc2/src/uqm/sis.h 2009-12-13 11:42:40 UTC (rev 3430) @@ -1,6 +1,22 @@ -#ifndef _SIS_H -#define _SIS_H +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +#ifndef SIS_H_INCL__ +#define SIS_H_INCL__ + #include "libs/compiler.h" #include "libs/gfxlib.h" #include "planets/elemdata.h" @@ -185,6 +201,8 @@ extern void DateToString (unsigned char *buf, size_t bufLen, BYTE month_index, BYTE day_index, COUNT year_index); +// Returned RECT is relative to the StatusContext +extern void GetStatusMessageRect (RECT *r); extern void DrawStatusMessage (const UNICODE *pStr); typedef enum { @@ -224,5 +242,5 @@ extern void DrawFlagshipName (BOOLEAN InStatusArea); extern void DrawCaptainsName (void); -#endif /* _SIS_H */ +#endif /* SIS_H_INCL__ */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-12-15 22:39:34
|
Revision: 3431 http://sc2.svn.sourceforge.net/sc2/?rev=3431&view=rev Author: avolkov Date: 2009-12-15 22:39:26 +0000 (Tue, 15 Dec 2009) Log Message: ----------- Planet orbit menu cleanup: own MENU_STATE for all; clear sub-menu functions; MENU_STATE hacks removed; not relying on MENU_STATE.Initialized; moved colors to colors.h; planet surface always drawn in ScanContext; Better names for some menu items Modified Paths: -------------- trunk/sc2/src/uqm/colors.h trunk/sc2/src/uqm/credits.c trunk/sc2/src/uqm/hyper.c trunk/sc2/src/uqm/menu.c trunk/sc2/src/uqm/menustat.h trunk/sc2/src/uqm/planets/generate.h trunk/sc2/src/uqm/planets/pl_stuff.c trunk/sc2/src/uqm/planets/planets.c trunk/sc2/src/uqm/planets/planets.h trunk/sc2/src/uqm/planets/report.c trunk/sc2/src/uqm/planets/scan.c trunk/sc2/src/uqm/planets/scan.h trunk/sc2/src/uqm/planets/solarsys.c Modified: trunk/sc2/src/uqm/colors.h =================================================================== --- trunk/sc2/src/uqm/colors.h 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/colors.h 2009-12-15 22:39:26 UTC (rev 3431) @@ -68,7 +68,11 @@ BUILD_COLOR (MAKE_RGB15 (0x06, 0x06, 0x06), 0x00) #define WHITE_COLOR \ BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F) -#define BLUE_COLOR \ +#define BRIGHT_RED_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x1F, 0x00, 0x00), 0x04) +#define BRIGHT_GREEN_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x1F, 0x00), 0x02) +#define BRIGHT_BLUE_COLOR \ BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x1F), 0x01) #define NORMAL_ILLUMINATED_COLOR \ @@ -390,12 +394,44 @@ #define ROSTER_MODIFY_SHIP_COLOR \ WHITE_COLOR +// === Scan menu and general === +#define SCAN_PC_TITLE_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x15), 0x3B) + +#define SCAN_INFO_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0F, 0x00, 0x19), 0x3B) + +#define SCAN_MINERAL_TEXT_COLOR \ + BUILD_COLOR (MAKE_RGB15_INIT (0x13, 0x00, 0x00), 0x2C) + +#define SCAN_ENERGY_TEXT_COLOR \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0C, 0x0C, 0x0C), 0x1C) + +#define SCAN_BIOLOGICAL_TEXT_COLOR \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x0E, 0x00), 0x6C) + +#define SCAN_MINERAL_TINT_COLOR \ + BRIGHT_RED_COLOR_INIT + +#define SCAN_ENERGY_TINT_COLOR \ + WHITE_COLOR_INIT + +#define SCAN_BIOLOGICAL_TINT_COLOR \ + BRIGHT_GREEN_COLOR_INIT + + // Temporary, until we can use C'99 features: #define BLACK_COLOR_INIT \ BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x00), 0x00) #define WHITE_COLOR_INIT \ BUILD_COLOR (MAKE_RGB15_INIT (0x1F, 0x1F, 0x1F), 0x0F) +#define BRIGHT_RED_COLOR_INIT \ + BUILD_COLOR (MAKE_RGB15_INIT (0x1F, 0x00, 0x00), 0x04) +#define BRIGHT_GREEN_COLOR_INIT \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x1F, 0x00), 0x02) +#define BRIGHT_BLUE_COLOR_INIT \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x1F), 0x01) #define UNDEFINED_COLOR_INIT \ BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x00), 0x00) Modified: trunk/sc2/src/uqm/credits.c =================================================================== --- trunk/sc2/src/uqm/credits.c 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/credits.c 2009-12-15 22:39:26 UTC (rev 3431) @@ -39,7 +39,7 @@ #define CREDITS_TIMEOUT (ONE_SECOND * 5) -#define TRANS_COLOR BLUE_COLOR +#define TRANS_COLOR BRIGHT_BLUE_COLOR // Positive or negative scroll rate in pixel lines per second static int CreditsRate; Modified: trunk/sc2/src/uqm/hyper.c =================================================================== --- trunk/sc2/src/uqm/hyper.c 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/hyper.c 2009-12-15 22:39:26 UTC (rev 3431) @@ -50,6 +50,19 @@ static BYTE fuel_ticks; static COUNT hyper_dx, hyper_dy, hyper_extra; +// HyperspaceMenu() items +enum HyperMenuItems +{ + // XXX: Must match the enum in menustat.h + STARMAP = 1, + EQUIP_DEVICE, + CARGO, + ROSTER, + GAME_MENU, + NAVIGATION, +}; + + void MoveSIS (SIZE *pdx, SIZE *pdy) { Modified: trunk/sc2/src/uqm/menu.c =================================================================== --- trunk/sc2/src/uqm/menu.c 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/menu.c 2009-12-15 22:39:26 UTC (rev 3431) @@ -70,7 +70,7 @@ } #define ALT_MANIFEST 0x80 -#define ALT_EXIT_MENU0 0x81 +#define ALT_EXIT_MANIFEST 0x81 static UNICODE pm_crew_str[128]; static UNICODE pm_fuel_str[128]; @@ -151,29 +151,29 @@ return PM_LAUNCH_LANDER; break; case PM_SAVE_GAME: - return PM_EXIT_MENU1; + return PM_EXIT_GAME_MENU; break; case PM_CONVERSE: - return PM_SAVE_LOAD1; + return PM_ENCOUNTER_GAME_MENU; break; case PM_FUEL: - return PM_EXIT_MENU2; + return PM_EXIT_OUTFIT; break; case PM_CREW: - return PM_EXIT_MENU3; + return PM_EXIT_SHIPYARD; break; case PM_SOUND_ON: - return PM_EXIT_MENU4; + return PM_EXIT_SETTINGS; break; case PM_ALT_SCAN: case PM_ALT_STARMAP: return PM_ALT_NAVIGATE; break; case PM_ALT_CARGO: - return PM_ALT_EXITMENU0; + return PM_ALT_EXIT_MANIFEST; break; case PM_ALT_MSCAN: - return PM_ALT_EXITMENU1; + return PM_ALT_EXIT_SCAN; break; } return BaseState; @@ -256,7 +256,7 @@ switch (AdjBase + CurState) { case PM_SOUND_OFF: - NextState = PM_EXIT_MENU4; + NextState = PM_EXIT_SETTINGS; break; case PM_MUSIC_ON: case PM_MUSIC_OFF: @@ -299,9 +299,9 @@ *BaseState = PM_ALT_SCAN + adj; *CurState = PM_ALT_MANIFEST - PM_ALT_SCAN - adj; return TRUE; - case ALT_EXIT_MENU0: + case ALT_EXIT_MANIFEST: *BaseState = PM_ALT_CARGO; - *CurState = PM_ALT_EXITMENU0 - PM_ALT_CARGO; + *CurState = PM_ALT_EXIT_MANIFEST - PM_ALT_CARGO; return TRUE; } log_add (log_Error, "Unknown state combination: %d, %d", @@ -332,9 +332,9 @@ *BaseState = PM_ALT_CARGO; *CurState = PM_ALT_ROSTER - PM_ALT_CARGO; return TRUE; - case PM_SAVE_LOAD0: + case PM_GAME_MENU: *BaseState = PM_ALT_SCAN + adj; - *CurState = PM_ALT_SAVE0 - PM_ALT_SCAN - adj; + *CurState = PM_ALT_GAME_MENU - PM_ALT_SCAN - adj; return TRUE; case PM_NAVIGATE: *BaseState = PM_ALT_SCAN + adj; @@ -352,9 +352,9 @@ *BaseState = PM_ALT_MSCAN; *CurState = PM_ALT_BSCAN - PM_ALT_MSCAN; return TRUE; - case PM_EXIT_MENU0: + case PM_EXIT_SCAN: *BaseState = PM_ALT_MSCAN; - *CurState = PM_ALT_EXITMENU1 - PM_ALT_MSCAN; + *CurState = PM_ALT_EXIT_SCAN - PM_ALT_MSCAN; return TRUE; case PM_AUTO_SCAN: *BaseState = PM_ALT_MSCAN; @@ -381,8 +381,8 @@ return (PM_STARMAP - PM_SCAN); case PM_ALT_MANIFEST: return (ALT_MANIFEST); - case PM_ALT_SAVE0: - return (PM_SAVE_LOAD0 - PM_SCAN); + case PM_ALT_GAME_MENU: + return (PM_GAME_MENU - PM_SCAN); case PM_ALT_NAVIGATE: return (PM_NAVIGATE - PM_SCAN); case PM_ALT_CARGO: @@ -391,8 +391,8 @@ return (PM_DEVICES - PM_SCAN); case PM_ALT_ROSTER: return (PM_ROSTER - PM_SCAN); - case PM_ALT_EXITMENU0: - return (ALT_EXIT_MENU0); + case PM_ALT_EXIT_MANIFEST: + return (ALT_EXIT_MANIFEST); case PM_ALT_MSCAN: return (PM_MIN_SCAN - PM_MIN_SCAN); case PM_ALT_ESCAN: @@ -403,8 +403,8 @@ return (PM_AUTO_SCAN - PM_MIN_SCAN); case PM_ALT_DISPATCH: return (PM_LAUNCH_LANDER - PM_MIN_SCAN); - case PM_ALT_EXITMENU1: - return (PM_EXIT_MENU0 - PM_MIN_SCAN); + case PM_ALT_EXIT_SCAN: + return (PM_EXIT_SCAN - PM_MIN_SCAN); } return (NewState); } @@ -432,7 +432,7 @@ pMS->CurState = PM_CARGO - PM_SCAN; return TRUE; } - if (NewState == ALT_EXIT_MENU0) + if (NewState == ALT_EXIT_MANIFEST) { if (OrigBase == PM_SCAN) DrawMenuStateStrings (PM_ALT_SCAN, @@ -546,7 +546,7 @@ case PM_CHANGE_SHIP: NewState = 4; break; - case PM_EXIT_MENU4: + case PM_EXIT_SETTINGS: NewState = 5; break; } Modified: trunk/sc2/src/uqm/menustat.h =================================================================== --- trunk/sc2/src/uqm/menustat.h 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/menustat.h 2009-12-15 22:39:26 UTC (rev 3431) @@ -57,13 +57,13 @@ PM_DEVICES, PM_CARGO, PM_ROSTER, - PM_SAVE_LOAD0, + PM_GAME_MENU, PM_NAVIGATE, PM_MIN_SCAN, PM_ENE_SCAN, PM_BIO_SCAN, - PM_EXIT_MENU0, + PM_EXIT_SCAN, PM_AUTO_SCAN, PM_LAUNCH_LANDER, @@ -71,20 +71,20 @@ PM_LOAD_GAME, PM_QUIT_GAME, PM_CHANGE_SETTINGS, - PM_EXIT_MENU1, + PM_EXIT_GAME_MENU, PM_CONVERSE, PM_ATTACK, - PM_SAVE_LOAD1, + PM_ENCOUNTER_GAME_MENU, PM_FUEL, PM_MODULE, - PM_SAVE_LOAD2, - PM_EXIT_MENU2, + PM_OUTFIT_GAME_MENU, + PM_EXIT_OUTFIT, PM_CREW, - PM_SAVE_LOAD3, - PM_EXIT_MENU3, + PM_SHIPYARD_GAME_MENU, + PM_EXIT_SHIPYARD, PM_SOUND_ON, PM_SOUND_OFF, @@ -96,25 +96,25 @@ PM_CYBORG_SUPER, PM_CHANGE_CAPTAIN, PM_CHANGE_SHIP, - PM_EXIT_MENU4, + PM_EXIT_SETTINGS, PM_ALT_SCAN, PM_ALT_STARMAP, PM_ALT_MANIFEST, - PM_ALT_SAVE0, + PM_ALT_GAME_MENU, PM_ALT_NAVIGATE, PM_ALT_CARGO, PM_ALT_DEVICES, PM_ALT_ROSTER, - PM_ALT_EXITMENU0, + PM_ALT_EXIT_MANIFEST, PM_ALT_MSCAN, PM_ALT_ESCAN, PM_ALT_BSCAN, PM_ALT_ASCAN, PM_ALT_DISPATCH, - PM_ALT_EXITMENU1 + PM_ALT_EXIT_SCAN, }; extern BOOLEAN DoMenuChooser (MENU_STATE *pMS, BYTE BaseState); Modified: trunk/sc2/src/uqm/planets/generate.h =================================================================== --- trunk/sc2/src/uqm/planets/generate.h 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/planets/generate.h 2009-12-15 22:39:26 UTC (rev 3431) @@ -30,6 +30,8 @@ * (graphics and music) part. * - make generateOrbital return a meaningful value, specifically, whether * or not the player is going into orbit + * - make generateMinerals et al return the last object number (or count + * if called for all objects) and take non-pointer whichNode * - for GenerateNameFunction, set the name in an argument, instead * of in GLOBAL_SYS(PlanetName) * - make generateName work for moons Modified: trunk/sc2/src/uqm/planets/pl_stuff.c =================================================================== --- trunk/sc2/src/uqm/planets/pl_stuff.c 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/planets/pl_stuff.c 2009-12-15 22:39:26 UTC (rev 3431) @@ -242,19 +242,19 @@ PrepareNextRotationFrame (); } -// rgb.a is ignored +// tintColor.a is ignored void -DrawPlanet (int x, int y, int dy, Color rgb) +DrawPlanet (int dy, Color tintColor) { STAMP s; UBYTE a = 128; PLANET_ORBIT *Orbit = &pSolarSysState->Orbit; - s.origin.x = x; - s.origin.y = y; + s.origin.x = 0; + s.origin.y = 0; s.frame = pSolarSysState->TopoFrame; BatchGraphics (); - if (sameColor (rgb, BLACK_COLOR)) + if (sameColor (tintColor, BLACK_COLOR)) { // no tint -- just draw the surface DrawStamp (&s); } @@ -265,20 +265,21 @@ COUNT framew, frameh; RECT srect, drect, *psrect = NULL, *pdrect = NULL; FRAME tintFrame[2]; + tintFrame[0] = SetAbsFrameIndex (Orbit->TintFrame, 0); tintFrame[1] = SetAbsFrameIndex (Orbit->TintFrame, 1); framew = GetFrameWidth (tintFrame[0]); frameh = GetFrameHeight (tintFrame[0]); - if (!sameColor (rgb, pSolarSysState->Tint_rgb)) + if (!sameColor (tintColor, Orbit->TintColor)) { - pSolarSysState->Tint_rgb = rgb; + Orbit->TintColor = tintColor; // Buffer the topoMap to the tintFrame; arith_frame_blit (s.frame, NULL, tintFrame[0], NULL, 0, 0); - r = rgb.r / 2; - g = rgb.g / 2; - b = rgb.b / 2; + r = tintColor.r / 2; + g = tintColor.g / 2; + b = tintColor.b / 2; #ifdef USE_ADDITIVE_SCAN_BLIT a = 255; #endif Modified: trunk/sc2/src/uqm/planets/planets.c =================================================================== --- trunk/sc2/src/uqm/planets/planets.c 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/planets/planets.c 2009-12-15 22:39:26 UTC (rev 3431) @@ -35,6 +35,20 @@ #include "libs/graphics/gfx_common.h" +// PlanetOrbitMenu() items +enum PlanetMenuItems +{ + // XXX: Must match the enum in menustat.h + SCAN = 0, + STARMAP, + EQUIP_DEVICE, + CARGO, + ROSTER, + GAME_MENU, + NAVIGATION, +}; + + void DrawScannedObjects (BOOLEAN Reversed) { @@ -138,9 +152,11 @@ static void DrawOrbitalDisplay (DRAW_ORBITAL_MODE Mode) { - RECT r = { { SIS_ORG_X, SIS_ORG_Y }, - { SIS_SCREEN_WIDTH, SIS_SCREEN_HEIGHT } }; + RECT r; + SetContext (SpaceContext); + GetContextClipRect (&r); + BatchGraphics (); if (Mode != DRAW_ORBITAL_UPDATE) @@ -154,16 +170,14 @@ DrawPlanetSurfaceBorder (); } - SetContext (SpaceContext); - if (Mode == DRAW_ORBITAL_WAIT) { STAMP s; - s.frame = CaptureDrawable ( - LoadGraphic (ORBENTER_PMAP_ANIM)); + SetContext (GetScanContext (NULL)); + s.frame = CaptureDrawable (LoadGraphic (ORBENTER_PMAP_ANIM)); s.origin.x = -SAFE_X; - s.origin.y = SIS_SCREEN_HEIGHT - MAP_HEIGHT; + s.origin.y = 0; DrawStamp (&s); DestroyDrawable (ReleaseDrawable (s.frame)); } @@ -174,8 +188,8 @@ if (Mode != DRAW_ORBITAL_WAIT) { - DrawPlanet (SIS_SCREEN_WIDTH - MAP_WIDTH, - SIS_SCREEN_HEIGHT - MAP_HEIGHT, 0, BLACK_COLOR); + SetContext (GetScanContext (NULL)); + DrawPlanet (0, BLACK_COLOR); } if (Mode != DRAW_ORBITAL_UPDATE) @@ -277,7 +291,7 @@ DestroyDrawable (ReleaseDrawable (Orbit->TintFrame)); Orbit->TintFrame = 0; - pSolarSysState->Tint_rgb = BLACK_COLOR; + Orbit->TintColor = BLACK_COLOR; DestroyDrawable (ReleaseDrawable (Orbit->ObjectFrame)); Orbit->ObjectFrame = 0; @@ -347,6 +361,10 @@ { case SCAN: ScanSystem (); + if (GLOBAL (CurrentActivity) & START_ENCOUNTER) + { // Found Fwiffo on Pluto + return FALSE; + } break; case EQUIP_DEVICE: select = DevicesMenu (); @@ -447,6 +465,10 @@ LockMutex (GraphicsLock); SetFlashRect (NULL); + // Need to make sure ScanContext is not active because we will destroy it + SetContext (SpaceContext); UnlockMutex (GraphicsLock); DrawMenuStateStrings (PM_STARMAP, -NAVIGATION); + + DestroyScanContext (); } Modified: trunk/sc2/src/uqm/planets/planets.h =================================================================== --- trunk/sc2/src/uqm/planets/planets.h 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/planets/planets.h 2009-12-15 22:39:26 UTC (rev 3431) @@ -21,27 +21,13 @@ #define END_INTERPLANETARY START_INTERPLANETARY -enum +enum PlanetScanTypes { - SCAN = 0, - STARMAP, - EQUIP_DEVICE, - CARGO, - ROSTER, - GAME_MENU, - NAVIGATION -}; - -enum -{ MINERAL_SCAN = 0, ENERGY_SCAN, BIOLOGICAL_SCAN, NUM_SCAN_TYPES, - EXIT_SCAN = NUM_SCAN_TYPES, - AUTO_SCAN, - DISPATCH_SHUTTLE }; #define MAP_WIDTH SIS_SCREEN_WIDTH @@ -155,6 +141,8 @@ // automatically drawn if present FRAME TintFrame; // tinted topo images for current scan type (dynamic) + Color TintColor; + // the color of the last used tint DWORD *lpTopoMap; // RGBA version of topo image; for 3d planet DWORD *ScratchArray; @@ -230,7 +218,6 @@ * [4] = bio 2 (world-specific) * [5] = bio 3 (world-specific) */ - Color Tint_rgb; FRAME TopoFrame; PLANET_ORBIT Orbit; BOOLEAN InOrbit; @@ -257,7 +244,7 @@ POINT planetOuterLocation (COUNT planetI); extern void LoadPlanet (FRAME SurfDefFrame); -extern void DrawPlanet (int x, int y, int dy, Color rgb); +extern void DrawPlanet (int dy, Color tintColor); extern void FreePlanet (void); extern void LoadStdLanderFont (PLANET_INFO *info); extern void FreeLanderFont (PLANET_INFO *info); Modified: trunk/sc2/src/uqm/planets/report.c =================================================================== --- trunk/sc2/src/uqm/planets/report.c 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/planets/report.c 2009-12-15 22:39:26 UTC (rev 3431) @@ -270,7 +270,7 @@ SetContext (OldContext); // TODO: Make CONTEXT ref-counted if (ownContext) - DestroyContext (context); + DestroyScanContext (); DestroyDrawable (ReleaseDrawable (saveStamp.frame)); Modified: trunk/sc2/src/uqm/planets/scan.c =================================================================== --- trunk/sc2/src/uqm/planets/scan.c 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/planets/scan.c 2009-12-15 22:39:26 UTC (rev 3431) @@ -57,7 +57,16 @@ static RECT cursorRect; static FRAME eraseFrame; +// ScanSystem() menu items +// The first three are from enum PlanetScanTypes in planets.h +enum ScanMenuItems +{ + EXIT_SCAN = NUM_SCAN_TYPES, + AUTO_SCAN, + DISPATCH_SHUTTLE, +}; + void RepairBackRect (RECT *pRect) { @@ -100,15 +109,13 @@ PrintScanTitlePC (TEXT *t, RECT *r, const char *txt, int xpos) { t->baseline.x = xpos; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x15), 0x3B)); + SetContextForeGroundColor (SCAN_PC_TITLE_COLOR); t->pStr = txt; t->CharCount = (COUNT)~0; font_DrawText (t); TextRect (t, r, NULL); t->baseline.x += r->extent.width; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0F, 0x00, 0x19), 0x3B)); + SetContextForeGroundColor (SCAN_INFO_COLOR); } static void @@ -171,8 +178,7 @@ t.pStr = buf; t.CharCount = (COUNT)~0; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x15), 0x3B)); + SetContextForeGroundColor (SCAN_PC_TITLE_COLOR); SetContextFont (MicroFont); font_DrawText (&t); @@ -357,8 +363,7 @@ t.pStr = buf; t.CharCount = (COUNT)~0; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0F, 0x00, 0x19), 0x3B)); + SetContextForeGroundColor (SCAN_INFO_COLOR); SetContextFont (MicroFont); font_DrawText (&t); @@ -616,7 +621,7 @@ OldContext = SetContext (ScanContext); BatchGraphics (); - DrawPlanet (0, 0, 0, BLACK_COLOR); + DrawPlanet (0, BLACK_COLOR); DrawScannedObjects (TRUE); if (newLoc) { @@ -628,132 +633,120 @@ SetContext (OldContext); } -static BOOLEAN DoScan (MENU_STATE *pMS); +static COUNT +getLandingFuelNeeded (void) +{ + COUNT fuel; -static BOOLEAN -PickPlanetSide (MENU_STATE *pMS) + fuel = pSolarSysState->SysInfo.PlanetInfo.SurfaceGravity << 1; + if (fuel > 3 * FUEL_TANK_SCALE) + fuel = 3 * FUEL_TANK_SCALE; + + return fuel; +} + +static void +spawnFwiffo (void) { - DWORD TimeIn = GetTimeCounter (); - BOOLEAN select, cancel; + HSHIPFRAG hStarShip; - select = PulsedInputState.menu[KEY_MENU_SELECT]; - cancel = PulsedInputState.menu[KEY_MENU_CANCEL]; - - if (GLOBAL (CurrentActivity) & CHECK_ABORT) - { - goto ExitPlanetSide; - } + EncounterGroup = 0; + PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); + ReinitQueue (&GLOBAL (ip_group_q)); + assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); - if (!pMS->Initialized) + hStarShip = CloneShipFragment (SPATHI_SHIP, + &GLOBAL (npc_built_ship_q), 1); + if (hStarShip) { - pMS->InputFunc = PickPlanetSide; - SetMenuSounds (MENU_SOUND_NONE, MENU_SOUND_NONE); - if (!select) - { - pMS->Initialized = TRUE; + SHIP_FRAGMENT *StarShipPtr; - LockMutex (GraphicsLock); - SetContext (ScanContext); - // Set the current flash location - setPlanetCursorLoc (planetLoc); - savePlanetLocationImage (); - UnlockMutex (GraphicsLock); - - InitLander (0); - } + StarShipPtr = LockShipFrag (&GLOBAL (npc_built_ship_q), + hStarShip); + // Name Fwiffo + StarShipPtr->captains_name_index = NAME_OFFSET + + NUM_CAPTAINS_NAMES; + UnlockShipFrag (&GLOBAL (npc_built_ship_q), hStarShip); } - else if (select || cancel) - { - SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); +} - LockMutex (GraphicsLock); - DrawStatusMessage (NULL); - UnlockMutex (GraphicsLock); +// Returns TRUE if the parent menu should remain +static BOOLEAN +DispatchLander (void) +{ + InputFrameCallback *oldCallback; + SIZE landingFuel = getLandingFuelNeeded (); - FlushInput (); + EraseCoarseScan (); - if (!select) - { // Bailing out - LockMutex (GraphicsLock); - restorePlanetLocationImage (); - UnlockMutex (GraphicsLock); - } - else - { - InputFrameCallback *oldCallback; - COUNT fuel_required; + // Deactivate planet rotation callback + oldCallback = SetInputCallback (NULL); - fuel_required = (COUNT)( - pSolarSysState->SysInfo.PlanetInfo.SurfaceGravity << 1); - if (fuel_required > 3 * FUEL_TANK_SCALE) - fuel_required = 3 * FUEL_TANK_SCALE; + LockMutex (GraphicsLock); + DeltaSISGauges (0, -landingFuel, 0); + SetContext (ScanContext); + drawPlanetCursor (FALSE); + UnlockMutex (GraphicsLock); - EraseCoarseScan (); + PlanetSide (planetLoc); + if (GLOBAL (CurrentActivity) & CHECK_ABORT) + return FALSE; - // Deactivate planet rotation callback - oldCallback = SetInputCallback (NULL); + if (GET_GAME_STATE (FOUND_PLUTO_SPATHI) == 1) + { + /* Create Fwiffo group and go into comm with it */ + spawnFwiffo (); - LockMutex (GraphicsLock); - DeltaSISGauges (0, -(SIZE)fuel_required, 0); - SetContext (ScanContext); - drawPlanetCursor (FALSE); - UnlockMutex (GraphicsLock); + NextActivity |= CHECK_LOAD; /* fake a load game */ + GLOBAL (CurrentActivity) |= START_ENCOUNTER; + SaveSolarSysLocation (); - PlanetSide (planetLoc); - if (GLOBAL (CurrentActivity) & CHECK_ABORT) - goto ExitPlanetSide; + return FALSE; + } - if (GET_GAME_STATE (FOUND_PLUTO_SPATHI) == 1) - { - /* Create Fwiffo group and go into comm with it */ - HSHIPFRAG hStarShip; + if (optWhichCoarseScan == OPT_PC) + PrintCoarseScanPC (); + else + PrintCoarseScan3DO (); - NextActivity |= CHECK_LOAD; /* fake a load game */ - GLOBAL (CurrentActivity) |= START_ENCOUNTER; + // Reactivate planet rotation callback + SetInputCallback (oldCallback); - EncounterGroup = 0; - PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); - ReinitQueue (&GLOBAL (ip_group_q)); - assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); + return TRUE; +} - hStarShip = CloneShipFragment (SPATHI_SHIP, - &GLOBAL (npc_built_ship_q), 1); - if (hStarShip) - { - SHIP_FRAGMENT *StarShipPtr; +typedef struct +{ + bool success; + // true when player selected a location +} PICK_PLANET_STATE; - StarShipPtr = LockShipFrag (&GLOBAL (npc_built_ship_q), - hStarShip); - // Name Fwiffo - StarShipPtr->captains_name_index = NAME_OFFSET + - NUM_CAPTAINS_NAMES; - UnlockShipFrag (&GLOBAL (npc_built_ship_q), hStarShip); - } +static BOOLEAN +DoPickPlanetSide (MENU_STATE *pMS) +{ + PICK_PLANET_STATE *pickState = pMS->privData; + DWORD TimeIn = GetTimeCounter (); + BOOLEAN select, cancel; - SaveSolarSysLocation (); - return (FALSE); - } + select = PulsedInputState.menu[KEY_MENU_SELECT]; + cancel = PulsedInputState.menu[KEY_MENU_CANCEL]; + + if (GLOBAL (CurrentActivity) & CHECK_ABORT) + { + pickState->success = false; + return FALSE; + } - if (optWhichCoarseScan == OPT_PC) - PrintCoarseScanPC (); - else - PrintCoarseScan3DO (); - - // Reactivate planet rotation callback - SetInputCallback (oldCallback); - } - - DrawMenuStateStrings (PM_MIN_SCAN, DISPATCH_SHUTTLE); - LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO); - UnlockMutex (GraphicsLock); - -ExitPlanetSide: - SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); - - pMS->InputFunc = DoScan; - pMS->CurState = DISPATCH_SHUTTLE; + if (cancel) + { + pickState->success = false; + return FALSE; } + else if (select) + { + pickState->success = true; + return FALSE; + } else { SIZE dx = 0; @@ -791,8 +784,7 @@ new_pt.y = planetLoc.y; } - if (new_pt.x != planetLoc.x - || new_pt.y != planetLoc.y) + if (!pointsEqual (new_pt, planetLoc)) { setPlanetLoc (new_pt, TRUE); } @@ -805,13 +797,82 @@ SleepThreadUntil (TimeIn + ONE_SECOND / 40); } - return (TRUE); + return TRUE; } +static void +drawLandingFuelUsage (COUNT fuel) +{ + UNICODE buf[100]; + + sprintf (buf, "%s%1.1f", + GAME_STRING (NAVIGATION_STRING_BASE + 5), + (float) fuel / FUEL_TANK_SCALE); + DrawStatusMessage (buf); +} + +static void +eraseLandingFuelUsage (void) +{ + LockMutex (GraphicsLock); + DrawStatusMessage (NULL); + UnlockMutex (GraphicsLock); +} + +static BOOLEAN +PickPlanetSide (void) +{ + MENU_STATE MenuState; + PICK_PLANET_STATE PickState; + COUNT fuel = getLandingFuelNeeded (); + BOOLEAN retval = TRUE; + + memset (&MenuState, 0, sizeof MenuState); + MenuState.privData = &PickState; + + LockMutex (GraphicsLock); + ClearSISRect (CLEAR_SIS_RADAR); + SetContext (ScanContext); + BatchGraphics (); + DrawPlanet (0, BLACK_COLOR); + DrawScannedObjects (FALSE); + UnbatchGraphics (); + + drawLandingFuelUsage (fuel); + // Set the current flash location + setPlanetCursorLoc (planetLoc); + savePlanetLocationImage (); + UnlockMutex (GraphicsLock); + + InitLander (0); + + SetMenuSounds (MENU_SOUND_NONE, MENU_SOUND_SELECT); + + PickState.success = false; + MenuState.InputFunc = DoPickPlanetSide; + DoInput (&MenuState, TRUE); + + eraseLandingFuelUsage (); + if (PickState.success) + { // player chose a location + retval = DispatchLander (); + } + else + { // player bailed out + LockMutex (GraphicsLock); + restorePlanetLocationImage (); + UnlockMutex (GraphicsLock); + } + + SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); + + return retval; +} + #define NUM_FLASH_COLORS 8 static void -DrawScannedStuff (COUNT y, BYTE CurState) +DrawScannedStuff (COUNT y, COUNT scan) { HELEMENT hElement, hNextElement; Color OldColor; @@ -821,76 +882,65 @@ for (hElement = GetHeadElement (); hElement; hElement = hNextElement) { ELEMENT *ElementPtr; - //Color OldColor; SIZE dy; + STAMP s; LockElement (hElement, &ElementPtr); hNextElement = GetSuccElement (ElementPtr); dy = y - ElementPtr->current.location.y; - if (LOBYTE (ElementPtr->scan_node) == CurState - && dy >= 0)// && dy <= 3) - { - COUNT i; - //DWORD Time; - STAMP s; + if (LOBYTE (ElementPtr->scan_node) != scan || dy < 0) + { // node of wrong type, or not time for it yet + UnlockElement (hElement); + continue; + } - // XXX: Hack: flag this as a scanned object - ElementPtr->state_flags |= APPEARING; + // XXX: flag this as 'found' scanned object + ElementPtr->state_flags |= APPEARING; - s.origin = ElementPtr->current.location; - s.frame = ElementPtr->current.image.frame; + s.origin = ElementPtr->current.location; + + if (dy >= NUM_FLASH_COLORS) + { // flashing done for this node, draw normal + s.frame = ElementPtr->next.image.frame; + DrawStamp (&s); + } + else + { + BYTE grad; + Color c = WHITE_COLOR; + COUNT nodeSize; - if (dy >= NUM_FLASH_COLORS) + // mineral -- white --> turquoise?? (contrasts with red) + // energy -- white --> red (contrasts with white) + // bio -- white --> violet (contrasts with green) + grad = 0xff - 0xff * dy / (NUM_FLASH_COLORS - 1); + switch (scan) { - i = (COUNT)(GetFrameIndex (ElementPtr->next.image.frame) - - GetFrameIndex (ElementPtr->current.image.frame) - + 1); - do - { - DrawStamp (&s); - s.frame = IncFrameIndex (s.frame); - } while (--i); + case MINERAL_SCAN: + c.r = grad; + break; + case ENERGY_SCAN: + c.g = grad; + c.b = grad; + break; + case BIOLOGICAL_SCAN: + c.g = grad; + break; } - else - { - BYTE r, g, b; - Color c; - - // mineral -- white --> turquoise?? (contrasts with red) - // energy -- white --> red (contrasts with white) - // bio -- white --> violet (contrasts with green) - b = (BYTE)(0x1f - 0x1f * dy / (NUM_FLASH_COLORS - 1)); - switch (CurState) - { - case (MINERAL_SCAN): - r = b; - g = 0x1f; - b = 0x1f; - break; - case (ENERGY_SCAN): - r = 0x1f; - g = b; - break; - case (BIOLOGICAL_SCAN): - r = 0x1f; - g = b; - b = 0x1f; - break; - } - - c = BUILD_COLOR (MAKE_RGB15 (r, g, b), 0); - - SetContextForeGroundColor (c); - i = (COUNT)(GetFrameIndex (ElementPtr->next.image.frame) - - GetFrameIndex (ElementPtr->current.image.frame) - + 1); - do - { - DrawFilledStamp (&s); - s.frame = IncFrameIndex (s.frame); - } while (--i); - } + + SetContextForeGroundColor (c); + + // flash the node from the smallest size to node size + // Get the node size for mineral, or number of transitions + // for other scan types (was set by GeneratePlanetSide()) + nodeSize = GetFrameIndex (ElementPtr->next.image.frame) + - GetFrameIndex (ElementPtr->current.image.frame); + if (dy > nodeSize) + dy = nodeSize; + + s.frame = SetRelFrameIndex (ElementPtr->current.image.frame, dy); + DrawFilledStamp (&s); } UnlockElement (hElement); @@ -920,248 +970,215 @@ return false; } -static BOOLEAN -DoScan (MENU_STATE *pMS) +static void +ScanPlanet (COUNT scanType) { #define SCAN_DURATION (ONE_SECOND * 7 / 4) // NUM_FLASH_COLORS for flashing blips; 1 for the final frame #define SCAN_LINES (MAP_HEIGHT + NUM_FLASH_COLORS + 1) #define SCAN_LINE_WAIT (SCAN_DURATION / SCAN_LINES) - BOOLEAN select, cancel; - select = PulsedInputState.menu[KEY_MENU_SELECT]; - cancel = PulsedInputState.menu[KEY_MENU_CANCEL]; - if (GLOBAL (CurrentActivity) & CHECK_ABORT) - return (FALSE); + PLANET_ORBIT *Orbit = &pSolarSysState->Orbit; + COUNT startScan, endScan; + COUNT scan; + RECT r; + static const Color textColors[] = + { + SCAN_MINERAL_TEXT_COLOR, + SCAN_ENERGY_TEXT_COLOR, + SCAN_BIOLOGICAL_TEXT_COLOR, + }; + static const Color tintColors[] = + { + SCAN_MINERAL_TINT_COLOR, + SCAN_ENERGY_TINT_COLOR, + SCAN_BIOLOGICAL_TINT_COLOR, + }; - if (!pMS->Initialized) + if (scanType == AUTO_SCAN) { - pMS->Initialized = TRUE; - pMS->InputFunc = DoScan; + startScan = MINERAL_SCAN; + endScan = BIOLOGICAL_SCAN; } - else if (cancel || (select && pMS->CurState == EXIT_SCAN)) + else { + startScan = scanType; + endScan = scanType; + } + + for (scan = startScan; scan <= endScan; ++scan) + { + TEXT t; + SWORD i; + Color tintColor; + // Alpha value will be ignored. + TimeCount TimeOut; + + t.baseline.x = SIS_SCREEN_WIDTH >> 1; + t.baseline.y = SIS_SCREEN_HEIGHT - MAP_HEIGHT - 7; + t.align = ALIGN_CENTER; + t.CharCount = (COUNT)~0; + + pSolarSysState->CurNode = (COUNT)~0; + callGenerateForScanType (pSolarSysState, + pSolarSysState->pOrbitalDesc, &pSolarSysState->CurNode, + scan); + t.pStr = GAME_STRING (SCAN_STRING_BASE + scan); + LockMutex (GraphicsLock); SetContext (SpaceContext); + r.corner.x = 0; + r.corner.y = t.baseline.y - 10; + r.extent.width = SIS_SCREEN_WIDTH; + r.extent.height = t.baseline.y - r.corner.y + 1; + RepairBackRect (&r); + + SetContextFont (MicroFont); + SetContextForeGroundColor (textColors[scan]); + font_DrawText (&t); + + SetContext (ScanContext); + UnlockMutex (GraphicsLock); + + // Draw a virgin surface + LockMutex (GraphicsLock); BatchGraphics (); - DrawPlanet (SIS_SCREEN_WIDTH - MAP_WIDTH, - SIS_SCREEN_HEIGHT - MAP_HEIGHT, 0, BLACK_COLOR); + DrawPlanet (0, BLACK_COLOR); UnbatchGraphics (); UnlockMutex (GraphicsLock); - EraseCoarseScan (); -// DrawMenuStateStrings (PM_SCAN, SCAN); + tintColor = tintColors[scan]; - return (FALSE); + // Draw the scan slowly line by line + TimeOut = GetTimeCounter (); + for (i = 0; i < SCAN_LINES; i++) + { + TimeOut += SCAN_LINE_WAIT; + if (WaitForAnyButtonUntil (TRUE, TimeOut, FALSE)) + break; + + LockMutex (GraphicsLock); + BatchGraphics (); + DrawPlanet (i, tintColor); + DrawScannedStuff (i, scan); + UnbatchGraphics (); +#ifdef SPIN_ON_SCAN + RotatePlanetSphere (TRUE); +#endif + UnlockMutex (GraphicsLock); + } + + if (i < SCAN_LINES) + { // Aborted by a keypress; draw in finished state + LockMutex (GraphicsLock); + BatchGraphics (); + // dy < 0 means "from dy to the end" + DrawPlanet (-i, tintColor); + DrawScannedStuff (SCAN_LINES - 1, scan); + UnbatchGraphics (); + UnlockMutex (GraphicsLock); + } + + // Reset the last used tint color + Orbit->TintColor = BLACK_COLOR; } + + LockMutex (GraphicsLock); + SetContext (SpaceContext); + r.corner.x = 0; + r.corner.y = (SIS_SCREEN_HEIGHT - MAP_HEIGHT - 7) - 10; + r.extent.width = SIS_SCREEN_WIDTH; + r.extent.height = (SIS_SCREEN_HEIGHT - MAP_HEIGHT - 7) + - r.corner.y + 1; + RepairBackRect (&r); + + SetContext (ScanContext); + if (scanType == AUTO_SCAN) + { // clear the last scan + DrawPlanet (0, BLACK_COLOR); + DrawScannedObjects (FALSE); + } + + UnlockMutex (GraphicsLock); + FlushInput (); +} + +static BOOLEAN +DoScan (MENU_STATE *pMS) +{ + BOOLEAN select, cancel; + + select = PulsedInputState.menu[KEY_MENU_SELECT]; + cancel = PulsedInputState.menu[KEY_MENU_CANCEL]; + + if (GLOBAL (CurrentActivity) & CHECK_ABORT) + return FALSE; + + if (cancel || (select && pMS->CurState == EXIT_SCAN)) + { + return FALSE; + } else if (select) { - BYTE min_scan, max_scan; - RECT r; - if (pMS->CurState == DISPATCH_SHUTTLE) { COUNT fuel_required; - UNICODE buf[100]; if ((pSolarSysState->pOrbitalDesc->data_index & PLANET_SHIELDED) || (pSolarSysState->SysInfo.PlanetInfo.AtmoDensity == GAS_GIANT_ATMOSPHERE)) { // cannot dispatch to shielded planets or gas giants PlayMenuSound (MENU_SOUND_FAILURE); - return (TRUE); + return TRUE; } - fuel_required = (COUNT)( - pSolarSysState->SysInfo.PlanetInfo.SurfaceGravity << 1 - ); - if (fuel_required > 3 * FUEL_TANK_SCALE) - fuel_required = 3 * FUEL_TANK_SCALE; - - if (GLOBAL_SIS (FuelOnBoard) < (DWORD)fuel_required + fuel_required = getLandingFuelNeeded (); + if (GLOBAL_SIS (FuelOnBoard) < fuel_required || GLOBAL_SIS (NumLanders) == 0 || GLOBAL_SIS (CrewEnlisted) == 0) { PlayMenuSound (MENU_SOUND_FAILURE); - return (TRUE); + return TRUE; } - sprintf (buf, "%s%1.1f", - GAME_STRING (NAVIGATION_STRING_BASE + 5), - (float) fuel_required / FUEL_TANK_SCALE); LockMutex (GraphicsLock); - ClearSISRect (CLEAR_SIS_RADAR); - DrawStatusMessage (buf); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); + if (!PickPlanetSide ()) + return FALSE; + + DrawMenuStateStrings (PM_MIN_SCAN, pMS->CurState); LockMutex (GraphicsLock); - SetFlashRect (NULL); - SetContext (ScanContext); - BatchGraphics (); - DrawPlanet (0, 0, 0, BLACK_COLOR); - DrawScannedObjects (FALSE); - UnbatchGraphics (); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); - pMS->Initialized = FALSE; - pMS->CurFrame = 0; - // XXX: PickPlanetSide() will take over the InputFunc - // and later restore it when its done - return PickPlanetSide (pMS); + return TRUE; } // Various scans if (pSolarSysState->pOrbitalDesc->data_index & PLANET_SHIELDED) { // cannot scan shielded planets PlayMenuSound (MENU_SOUND_FAILURE); - return (TRUE); + return TRUE; } - min_scan = pMS->CurState; - if (min_scan != AUTO_SCAN) - max_scan = min_scan; - else - { - min_scan = MINERAL_SCAN; - max_scan = BIOLOGICAL_SCAN; - } - - for ( ; min_scan <= max_scan; ++min_scan) - { - TEXT t; - SWORD i; - - t.baseline.x = SIS_SCREEN_WIDTH >> 1; - t.baseline.y = SIS_SCREEN_HEIGHT - MAP_HEIGHT - 7; - t.align = ALIGN_CENTER; - t.CharCount = (COUNT)~0; - - pSolarSysState->CurNode = (COUNT)~0; - callGenerateForScanType (pSolarSysState, - pSolarSysState->pOrbitalDesc, &pSolarSysState->CurNode, - min_scan); - pMS->delta_item = (SIZE)pSolarSysState->CurNode; - t.pStr = GAME_STRING (SCAN_STRING_BASE + min_scan); - - LockMutex (GraphicsLock); - SetContext (SpaceContext); - r.corner.x = 0; - r.corner.y = t.baseline.y - 10; - r.extent.width = SIS_SCREEN_WIDTH; - r.extent.height = t.baseline.y - r.corner.y + 1; - RepairBackRect (&r); - - SetContextFont (MicroFont); - switch (min_scan) - { - case MINERAL_SCAN: - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x13, 0x00, 0x00), 0x2C)); - break; - case ENERGY_SCAN: - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0C, 0x0C, 0x0C), 0x1C)); - break; - case BIOLOGICAL_SCAN: - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x0E, 0x00), 0x6C)); - break; - } - font_DrawText (&t); - - SetContext (ScanContext); - UnlockMutex (GraphicsLock); - - { - Color rgb; - // Alpha value will be ignored. - TimeCount TimeOut; - - switch (min_scan) - { - case MINERAL_SCAN: - rgb = BUILD_COLOR (MAKE_RGB15 (0x1f, 0x00, 0x00), 0x00); - break; - case ENERGY_SCAN: - rgb = BUILD_COLOR (MAKE_RGB15 (0x1f, 0x1f, 0x1f), 0x00); - break; - case BIOLOGICAL_SCAN: - rgb = BUILD_COLOR (MAKE_RGB15 (0x00, 0x1f, 0x00), 0x00); - break; - } - - // Draw a virgin surface - LockMutex (GraphicsLock); - BatchGraphics (); - DrawPlanet (0, 0, 0, BLACK_COLOR); - UnbatchGraphics (); - UnlockMutex (GraphicsLock); - - // Draw the scan slowly line by line - TimeOut = GetTimeCounter (); - for (i = 0; i < SCAN_LINES; i++) - { - TimeOut += SCAN_LINE_WAIT; - if (WaitForAnyButtonUntil (TRUE, TimeOut, FALSE)) - break; - - LockMutex (GraphicsLock); - BatchGraphics (); - DrawPlanet (0, 0, i, rgb); - DrawScannedStuff (i, min_scan); - UnbatchGraphics (); -#ifdef SPIN_ON_SCAN - RotatePlanetSphere (TRUE); -#endif - UnlockMutex (GraphicsLock); - } - - if (i < SCAN_LINES) - { // Aborted by a keypress; draw in finished state - LockMutex (GraphicsLock); - BatchGraphics (); - // dy < 0 means "from dy to the end" - DrawPlanet (0, 0, -i, rgb); - DrawScannedStuff (SCAN_LINES - 1, min_scan); - UnbatchGraphics (); - UnlockMutex (GraphicsLock); - } - - pSolarSysState->Tint_rgb = BLACK_COLOR; - } - } - - LockMutex (GraphicsLock); - SetContext (SpaceContext); - r.corner.x = 0; - r.corner.y = (SIS_SCREEN_HEIGHT - MAP_HEIGHT - 7) - 10; - r.extent.width = SIS_SCREEN_WIDTH; - r.extent.height = (SIS_SCREEN_HEIGHT - MAP_HEIGHT - 7) - - r.corner.y + 1; - RepairBackRect (&r); - - SetContext (ScanContext); + ScanPlanet (pMS->CurState); if (pMS->CurState == AUTO_SCAN) { - DrawPlanet (0, 0, 0, BLACK_COLOR); - DrawScannedObjects (FALSE); - UnlockMutex (GraphicsLock); - pMS->CurState = DISPATCH_SHUTTLE; DrawMenuStateStrings (PM_MIN_SCAN, pMS->CurState); } - else - UnlockMutex (GraphicsLock); - - FlushInput (); } else if (optWhichMenu == OPT_PC || (!(pSolarSysState->pOrbitalDesc->data_index & PLANET_SHIELDED) && pSolarSysState->SysInfo.PlanetInfo.AtmoDensity != GAS_GIANT_ATMOSPHERE)) + { DoMenuChooser (pMS, PM_MIN_SCAN); + } - return (TRUE); + return TRUE; } static CONTEXT @@ -1192,24 +1209,36 @@ // TODO: Make CONTEXT ref-counted if (ScanContext) { - *owner = FALSE; - return ScanContext; + if (owner) + *owner = FALSE; } else { - *owner = TRUE; - return CreateScanContext (); + if (owner) + *owner = TRUE; + ScanContext = CreateScanContext (); } + return ScanContext; } void +DestroyScanContext (void) +{ + if (ScanContext) + { + DestroyContext (ScanContext); + ScanContext = NULL; + } +} + +void ScanSystem (void) { MENU_STATE MenuState; memset (&MenuState, 0, sizeof MenuState); - MenuState.InputFunc = DoScan; + GetScanContext (NULL); if (optWhichMenu == OPT_3DO && ((pSolarSysState->pOrbitalDesc->data_index & PLANET_SHIELDED) @@ -1217,7 +1246,6 @@ GAS_GIANT_ATMOSPHERE)) { MenuState.CurState = EXIT_SCAN; - ScanContext = NULL; } else { @@ -1227,7 +1255,6 @@ LockMutex (GraphicsLock); initPlanetLocationImage (); - ScanContext = CreateScanContext (); SetContext (ScanContext); DrawScannedObjects (FALSE); UnlockMutex (GraphicsLock); @@ -1244,22 +1271,26 @@ PrintCoarseScan3DO (); SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); + + MenuState.InputFunc = DoScan; DoInput (&MenuState, FALSE); LockMutex (GraphicsLock); SetFlashRect (NULL); UnlockMutex (GraphicsLock); - if (ScanContext) - { - LockMutex (GraphicsLock); - SetContext (SpaceContext); - DestroyDrawable (ReleaseDrawable (eraseFrame)); - eraseFrame = NULL; - DestroyContext (ScanContext); - ScanContext = NULL; - UnlockMutex (GraphicsLock); - } + // cleanup scan graphics + LockMutex (GraphicsLock); + BatchGraphics (); + SetContext (ScanContext); + DrawPlanet (0, BLACK_COLOR); + SetContext (SpaceContext); + EraseCoarseScan (); + UnbatchGraphics (); + UnlockMutex (GraphicsLock); + + DestroyDrawable (ReleaseDrawable (eraseFrame)); + eraseFrame = NULL; } static void @@ -1371,7 +1402,7 @@ NodeElementPtr->mass_points = HIBYTE ( pSolarSysState->SysInfo.PlanetInfo.CurDensity); NodeElementPtr->current.image.frame = SetAbsFrameIndex ( - MiscDataFrame, (NUM_SCANDOT_TRANSITIONS << 1) + MiscDataFrame, (NUM_SCANDOT_TRANSITIONS * 2) + ElementCategory (EType) * 5); NodeElementPtr->next.image.frame = SetRelFrameIndex ( NodeElementPtr->current.image.frame, LOBYTE ( Modified: trunk/sc2/src/uqm/planets/scan.h =================================================================== --- trunk/sc2/src/uqm/planets/scan.h 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/planets/scan.h 2009-12-15 22:39:26 UTC (rev 3431) @@ -52,6 +52,7 @@ extern void RedrawSurfaceScan (const POINT *newLoc); extern CONTEXT GetScanContext (BOOLEAN *owner); +extern void DestroyScanContext (void); bool isNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr); void setNodeRetrieved (PLANET_INFO *planetInfo, BYTE scanType, BYTE nodeNr); Modified: trunk/sc2/src/uqm/planets/solarsys.c =================================================================== --- trunk/sc2/src/uqm/planets/solarsys.c 2009-12-13 11:42:40 UTC (rev 3430) +++ trunk/sc2/src/uqm/planets/solarsys.c 2009-12-15 22:39:26 UTC (rev 3431) @@ -60,7 +60,19 @@ static void DrawOuterSystem (void); static void ValidateOrbits (void); +// SolarSysMenu() items +enum SolarSysMenuMenuItems +{ + // XXX: Must match the enum in menustat.h + STARMAP = 1, + EQUIP_DEVICE, + CARGO, + ROSTER, + GAME_MENU, + NAVIGATION, +}; + SOLARSYS_STATE *pSolarSysState; FRAME SISIPFrame; FRAME SunFrame; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-12-17 03:10:26
|
Revision: 3436 http://sc2.svn.sourceforge.net/sc2/?rev=3436&view=rev Author: avolkov Date: 2009-12-17 03:10:18 +0000 (Thu, 17 Dec 2009) Log Message: ----------- Oscilloscope and slider cleanup: determine the dimensions dynamically instead of relying on constants Modified Paths: -------------- trunk/sc2/src/uqm/comm.c trunk/sc2/src/uqm/oscill.c trunk/sc2/src/uqm/oscill.h Modified: trunk/sc2/src/uqm/comm.c =================================================================== --- trunk/sc2/src/uqm/comm.c 2009-12-17 02:47:40 UTC (rev 3435) +++ trunk/sc2/src/uqm/comm.c 2009-12-17 03:10:18 UTC (rev 3436) @@ -491,20 +491,11 @@ static void InitSpeechGraphics (void) { - RECT r; - RECT sr; - FRAME f; + InitOscilloscope (SetAbsFrameIndex (ActivityFrame, 9)); - InitOscilloscope (0, 0, RADAR_WIDTH, RADAR_HEIGHT, - SetAbsFrameIndex (ActivityFrame, 9)); - - f = SetAbsFrameIndex (ActivityFrame, 2); - GetFrameRect (f, &r); - SetSliderImage (f); - f = SetAbsFrameIndex (ActivityFrame, 5); - GetFrameRect (f, &sr); - InitSlider (0, SLIDER_Y, SIS_SCREEN_WIDTH, sr.extent.height, - r.extent.width, r.extent.height, f); + InitSlider (0, SLIDER_Y, SIS_SCREEN_WIDTH, + SetAbsFrameIndex (ActivityFrame, 5), + SetAbsFrameIndex (ActivityFrame, 2)); } static void Modified: trunk/sc2/src/uqm/oscill.c =================================================================== --- trunk/sc2/src/uqm/oscill.c 2009-12-17 02:47:40 UTC (rev 3435) +++ trunk/sc2/src/uqm/oscill.c 2009-12-17 03:10:18 UTC (rev 3436) @@ -18,9 +18,6 @@ #include "oscill.h" -// XXX: we should not refer to units.h here because we should not be -// using RADAR_WIDTH constants! -#include "units.h" #include "setup.h" // for OffScreenContext #include "libs/graphics/gfx_common.h" @@ -33,12 +30,13 @@ static int scope_init = 0; static FRAME scopeWork; static Color scopeColor; +static EXTENT scopeSize; BOOLEAN oscillDisabled = FALSE; void -InitOscilloscope (DWORD x, DWORD y, DWORD width, DWORD height, FRAME f) +InitOscilloscope (FRAME scopeBg) { - scope_frame = f; + scope_frame = scopeBg; if (!scope_init) { EXTENT size = GetFrameBounds (scope_frame); @@ -51,11 +49,12 @@ WANT_PIXMAP | MAPPED_TO_DISPLAY, size.width, size.height, 1)); + // assume and subtract the borders + scopeSize.width = size.width - 2; + scopeSize.height = size.height - 2; + scope_init = 1; } - /* remove compiler warnings */ - (void) x; - (void) y; } void @@ -72,12 +71,15 @@ DrawOscilloscope (void) { STAMP s; - BYTE scope_data[RADAR_WIDTH - 2]; + BYTE scope_data[128]; if (oscillDisabled) return; - if (GraphForegroundStream (scope_data, RADAR_WIDTH - 2, RADAR_HEIGHT - 2)) + assert (scopeSize.width <= sizeof scope_data); + assert (scopeSize.height < 256); + + if (GraphForegroundStream (scope_data, scopeSize.width, scopeSize.height)) { int i; CONTEXT oldContext; @@ -94,7 +96,7 @@ // draw the scope lines SetContextForeGroundColor (scopeColor); - for (i = 0; i < RADAR_WIDTH - 3; ++i) + for (i = 0; i < scopeSize.width - 1; ++i) { LINE line; @@ -139,15 +141,20 @@ */ void -InitSlider (int x, int y, int width, int height, - int bwidth, int bheight, FRAME f) +InitSlider (int x, int y, int width, FRAME sliderFrame, FRAME buttonFrame) { + EXTENT sliderSize = GetFrameBounds (sliderFrame); + EXTENT buttonSize = GetFrameBounds (buttonFrame); + sliderStamp.origin.x = x; sliderStamp.origin.y = y; - sliderStamp.frame = f; + sliderStamp.frame = sliderFrame; + buttonStamp.origin.x = x; - buttonStamp.origin.y = y - ((bheight - height) >> 1); - sliderSpace = width - bwidth; + buttonStamp.origin.y = y - ((buttonSize.height - sliderSize.height) / 2); + buttonStamp.frame = buttonFrame; + + sliderSpace = width - buttonSize.width; } void Modified: trunk/sc2/src/uqm/oscill.h =================================================================== --- trunk/sc2/src/uqm/oscill.h 2009-12-17 02:47:40 UTC (rev 3435) +++ trunk/sc2/src/uqm/oscill.h 2009-12-17 03:10:18 UTC (rev 3436) @@ -23,13 +23,12 @@ extern BOOLEAN sliderDisabled; extern BOOLEAN oscillDisabled; -extern void InitOscilloscope (DWORD x, DWORD y, DWORD width, DWORD height, - FRAME f); +extern void InitOscilloscope (FRAME scopeBg); extern void DrawOscilloscope (void); extern void UninitOscilloscope (void); -extern void InitSlider (int x, int y, int width, int height, - int bwidth, int bheight, FRAME f); +extern void InitSlider (int x, int y, int width, FRAME sliderFrame, + FRAME buttonFrame); extern void SetSliderImage (FRAME f); void DrawSlider (void); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-12-20 03:08:08
|
Revision: 3454 http://sc2.svn.sourceforge.net/sc2/?rev=3454&view=rev Author: avolkov Date: 2009-12-20 03:07:53 +0000 (Sun, 20 Dec 2009) Log Message: ----------- Fix signed value read/writes in savegames and groups Modified Paths: -------------- trunk/sc2/src/uqm/grpinfo.c trunk/sc2/src/uqm/load.c trunk/sc2/src/uqm/save.c trunk/sc2/src/uqm/state.h Modified: trunk/sc2/src/uqm/grpinfo.c =================================================================== --- trunk/sc2/src/uqm/grpinfo.c 2009-12-20 02:18:01 UTC (rev 3453) +++ trunk/sc2/src/uqm/grpinfo.c 2009-12-20 03:07:53 UTC (rev 3454) @@ -153,8 +153,8 @@ GroupPtr->dest_loc = LONIBBLE (tmpb); GroupPtr->orbit_pos = HINIBBLE (tmpb); sread_8 (fp, &GroupPtr->group_id); /* was max_energy */ - sread_16 (fp, &GroupPtr->loc.x); - sread_16 (fp, &GroupPtr->loc.y); + sread_16s(fp, &GroupPtr->loc.x); + sread_16s(fp, &GroupPtr->loc.y); } static void Modified: trunk/sc2/src/uqm/load.c =================================================================== --- trunk/sc2/src/uqm/load.c 2009-12-20 02:18:01 UTC (rev 3453) +++ trunk/sc2/src/uqm/load.c 2009-12-20 03:07:53 UTC (rev 3454) @@ -59,6 +59,19 @@ } static inline COUNT +cread_16s (DECODE_REF fh, SWORD *v) +{ + UWORD t; + COUNT ret; + // value was converted to unsigned when saved + ret = cread_16 (fh, &t); + // unsigned to signed conversion + if (v) + *v = t; + return ret; +} + +static inline COUNT cread_32 (DECODE_REF fh, DWORD *v) { DWORD t; @@ -68,6 +81,19 @@ } static inline COUNT +cread_32s (DECODE_REF fh, SDWORD *v) +{ + DWORD t; + COUNT ret; + // value was converted to unsigned when saved + ret = cread_32 (fh, &t); + // unsigned to signed conversion + if (v) + *v = t; + return ret; +} + +static inline COUNT cread_ptr (DECODE_REF fh) { DWORD t; @@ -109,6 +135,19 @@ } static inline COUNT +read_32s (void *fp, SDWORD *v) +{ + DWORD t; + COUNT ret; + // value was converted to unsigned when saved + ret = read_32 (fp, &t); + // unsigned to signed conversion + if (v) + *v = t; + return ret; +} + +static inline COUNT read_ptr (void *fp) { DWORD t; @@ -123,6 +162,13 @@ } static inline COUNT +read_str (void *fp, char *str, COUNT count) +{ + // no type conversion needed for strings + return read_a8 (fp, (BYTE *)str, count); +} + +static inline COUNT read_a16 (void *fp, UWORD *ar, COUNT count) { assert (ar != NULL); @@ -219,17 +265,17 @@ FleetPtr->max_crew = tmpb; cread_8 (fh, &FleetPtr->growth); cread_8 (fh, &FleetPtr->max_energy); - cread_16 (fh, &FleetPtr->loc.x); - cread_16 (fh, &FleetPtr->loc.y); + cread_16s(fh, &FleetPtr->loc.x); + cread_16s(fh, &FleetPtr->loc.y); cread_16 (fh, &FleetPtr->actual_strength); cread_16 (fh, &FleetPtr->known_strength); - cread_16 (fh, &FleetPtr->known_loc.x); - cread_16 (fh, &FleetPtr->known_loc.y); + cread_16s(fh, &FleetPtr->known_loc.x); + cread_16s(fh, &FleetPtr->known_loc.y); cread_8 (fh, &FleetPtr->growth_err_term); cread_8 (fh, &FleetPtr->func_index); - cread_16 (fh, &FleetPtr->dest_loc.x); - cread_16 (fh, &FleetPtr->dest_loc.y); + cread_16s(fh, &FleetPtr->dest_loc.x); + cread_16s(fh, &FleetPtr->dest_loc.y); cread_16 (fh, NULL); /* alignment padding */ UnlockFleetInfo (pQueue, hStarShip); @@ -268,8 +314,8 @@ GroupPtr->dest_loc = LONIBBLE (tmpb); GroupPtr->orbit_pos = HINIBBLE (tmpb); cread_8 (fh, &GroupPtr->group_id); /* was max_energy */ - cread_16 (fh, &GroupPtr->loc.x); - cread_16 (fh, &GroupPtr->loc.y); + cread_16s(fh, &GroupPtr->loc.x); + cread_16s(fh, &GroupPtr->loc.y); UnlockIpGroup (pQueue, hGroup); } @@ -286,13 +332,13 @@ EncounterPtr->succ = 0; cread_ptr (fh); /* useless ptr; HELEMENT hElement */ EncounterPtr->hElement = 0; - cread_16 (fh, &EncounterPtr->transition_state); - cread_16 (fh, &EncounterPtr->origin.x); - cread_16 (fh, &EncounterPtr->origin.y); + cread_16s (fh, &EncounterPtr->transition_state); + cread_16s (fh, &EncounterPtr->origin.x); + cread_16s (fh, &EncounterPtr->origin.y); cread_16 (fh, &EncounterPtr->radius); // STAR_DESC fields - cread_16 (fh, &EncounterPtr->SD.star_pt.x); - cread_16 (fh, &EncounterPtr->SD.star_pt.y); + cread_16s (fh, &EncounterPtr->SD.star_pt.x); + cread_16s (fh, &EncounterPtr->SD.star_pt.y); cread_8 (fh, &EncounterPtr->SD.Type); cread_8 (fh, &EncounterPtr->SD.Index); cread_16 (fh, NULL); /* alignment padding */ @@ -321,8 +367,8 @@ } // Load the stuff after the BRIEF_SHIP_INFO array - cread_32 (fh, &EncounterPtr->log_x); - cread_32 (fh, &EncounterPtr->log_y); + cread_32s (fh, &EncounterPtr->log_x); + cread_32s (fh, &EncounterPtr->log_y); } static void @@ -367,8 +413,8 @@ cread_8 (fh, &ClockPtr->day_index); cread_8 (fh, &ClockPtr->month_index); cread_16 (fh, &ClockPtr->year_index); - cread_16 (fh, &ClockPtr->tick_count); - cread_16 (fh, &ClockPtr->day_in_ticks); + cread_16s (fh, &ClockPtr->tick_count); + cread_16s (fh, &ClockPtr->day_in_ticks); cread_ptr (fh); /* not loading ptr; Semaphore clock_sem */ cread_ptr (fh); /* not loading ptr; Task clock_task */ cread_32 (fh, NULL); /* not loading; DWORD TimeCounter */ @@ -393,27 +439,27 @@ cread_16 (fh, NULL); /* CLOCK_STATE alignment padding */ LoadClockState (&GSPtr->GameClock, fh); - cread_16 (fh, &GSPtr->autopilot.x); - cread_16 (fh, &GSPtr->autopilot.y); - cread_16 (fh, &GSPtr->ip_location.x); - cread_16 (fh, &GSPtr->ip_location.y); + cread_16s (fh, &GSPtr->autopilot.x); + cread_16s (fh, &GSPtr->autopilot.y); + cread_16s (fh, &GSPtr->ip_location.x); + cread_16s (fh, &GSPtr->ip_location.y); /* STAMP ShipStamp */ - cread_16 (fh, &GSPtr->ShipStamp.origin.x); - cread_16 (fh, &GSPtr->ShipStamp.origin.y); + cread_16s (fh, &GSPtr->ShipStamp.origin.x); + cread_16s (fh, &GSPtr->ShipStamp.origin.y); cread_16 (fh, &GSPtr->ShipFacing); cread_8 (fh, &GSPtr->ip_planet); cread_8 (fh, &GSPtr->in_orbit); /* VELOCITY_DESC velocity */ cread_16 (fh, &GSPtr->velocity.TravelAngle); - cread_16 (fh, &GSPtr->velocity.vector.width); - cread_16 (fh, &GSPtr->velocity.vector.height); - cread_16 (fh, &GSPtr->velocity.fract.width); - cread_16 (fh, &GSPtr->velocity.fract.height); - cread_16 (fh, &GSPtr->velocity.error.width); - cread_16 (fh, &GSPtr->velocity.error.height); - cread_16 (fh, &GSPtr->velocity.incr.width); - cread_16 (fh, &GSPtr->velocity.incr.height); + cread_16s (fh, &GSPtr->velocity.vector.width); + cread_16s (fh, &GSPtr->velocity.vector.height); + cread_16s (fh, &GSPtr->velocity.fract.width); + cread_16s (fh, &GSPtr->velocity.fract.height); + cread_16s (fh, &GSPtr->velocity.error.width); + cread_16s (fh, &GSPtr->velocity.error.height); + cread_16s (fh, &GSPtr->velocity.incr.width); + cread_16s (fh, &GSPtr->velocity.incr.height); cread_16 (fh, NULL); /* VELOCITY_DESC padding */ cread_32 (fh, &GSPtr->BattleGroupRef); @@ -434,8 +480,8 @@ LoadSisState (SIS_STATE *SSPtr, void *fp) { if ( - read_32 (fp, &SSPtr->log_x) != 1 || - read_32 (fp, &SSPtr->log_y) != 1 || + read_32s (fp, &SSPtr->log_x) != 1 || + read_32s (fp, &SSPtr->log_y) != 1 || read_32 (fp, &SSPtr->ResUnits) != 1 || read_32 (fp, &SSPtr->FuelOnBoard) != 1 || read_16 (fp, &SSPtr->CrewEnlisted) != 1 || @@ -447,9 +493,9 @@ read_8 (fp, &SSPtr->NumLanders) != 1 || read_a16 (fp, SSPtr->ElementAmounts, NUM_ELEMENT_CATEGORIES) != 1 || - read_a8 (fp, SSPtr->ShipName, SIS_NAME_SIZE) != 1 || - read_a8 (fp, SSPtr->CommanderName, SIS_NAME_SIZE) != 1 || - read_a8 (fp, SSPtr->PlanetName, SIS_NAME_SIZE) != 1 || + read_str (fp, SSPtr->ShipName, SIS_NAME_SIZE) != 1 || + read_str (fp, SSPtr->CommanderName, SIS_NAME_SIZE) != 1 || + read_str (fp, SSPtr->PlanetName, SIS_NAME_SIZE) != 1 || read_16 (fp, NULL) != 1 /* padding */ ) @@ -487,8 +533,8 @@ static void LoadStarDesc (STAR_DESC *SDPtr, DECODE_REF fh) { - cread_16 (fh, &SDPtr->star_pt.x); - cread_16 (fh, &SDPtr->star_pt.y); + cread_16s(fh, &SDPtr->star_pt.x); + cread_16s(fh, &SDPtr->star_pt.y); cread_8 (fh, &SDPtr->Type); cread_8 (fh, &SDPtr->Index); cread_8 (fh, &SDPtr->Prefix); Modified: trunk/sc2/src/uqm/save.c =================================================================== --- trunk/sc2/src/uqm/save.c 2009-12-20 02:18:01 UTC (rev 3453) +++ trunk/sc2/src/uqm/save.c 2009-12-20 03:07:53 UTC (rev 3454) @@ -105,6 +105,13 @@ } static inline COUNT +write_str (void *fp, const char *str, COUNT count) +{ + // no type conversion needed for strings + return write_a8 (fp, (const BYTE *)str, count); +} + +static inline COUNT write_a16 (void *fp, const UWORD *ar, COUNT count) { for ( ; count > 0; --count, ++ar) @@ -419,9 +426,9 @@ write_8 (fp, SSPtr->NumLanders) != 1 || write_a16 (fp, SSPtr->ElementAmounts, NUM_ELEMENT_CATEGORIES) != 1 || - write_a8 (fp, SSPtr->ShipName, SIS_NAME_SIZE) != 1 || - write_a8 (fp, SSPtr->CommanderName, SIS_NAME_SIZE) != 1 || - write_a8 (fp, SSPtr->PlanetName, SIS_NAME_SIZE) != 1 || + write_str (fp, SSPtr->ShipName, SIS_NAME_SIZE) != 1 || + write_str (fp, SSPtr->CommanderName, SIS_NAME_SIZE) != 1 || + write_str (fp, SSPtr->PlanetName, SIS_NAME_SIZE) != 1 || write_16 (fp, 0) != 1 /* padding */ ) Modified: trunk/sc2/src/uqm/state.h =================================================================== --- trunk/sc2/src/uqm/state.h 2009-12-20 02:18:01 UTC (rev 3453) +++ trunk/sc2/src/uqm/state.h 2009-12-20 03:07:53 UTC (rev 3454) @@ -93,6 +93,18 @@ } static inline COUNT +sread_16s (void *fp, SWORD *v) +{ + UWORD t; + COUNT ret; + ret = sread_16 (fp, &t); + // unsigned to signed conversion + if (v) + *v = t; + return ret; +} + +static inline COUNT sread_32 (void *fp, DWORD *v) { DWORD t; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-12-21 03:56:01
|
Revision: 3461 http://sc2.svn.sourceforge.net/sc2/?rev=3461&view=rev Author: avolkov Date: 2009-12-21 03:55:46 +0000 (Mon, 21 Dec 2009) Log Message: ----------- Sort out game kernel cleanup sequences; also dodge a warning Modified Paths: -------------- trunk/sc2/src/uqm/cleanup.c trunk/sc2/src/uqm/setup.h trunk/sc2/src/uqm/starcon.c Modified: trunk/sc2/src/uqm/cleanup.c =================================================================== --- trunk/sc2/src/uqm/cleanup.c 2009-12-20 20:58:55 UTC (rev 3460) +++ trunk/sc2/src/uqm/cleanup.c 2009-12-21 03:55:46 UTC (rev 3461) @@ -16,7 +16,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "master.h" #include "nameref.h" #include "libs/reslib.h" #include "gamestr.h" @@ -34,21 +33,14 @@ // should be something like solarsys.h extern void FreeIPData (void); -static void UninitContexts (void); -static void UninitKernel (BOOLEAN ships); -static void UninitGameKernel (void); - void FreeKernel (void) { - UninitKernel (TRUE); - UninitContexts (); + UninitPlayerInput (); UninitResourceSystem (); - UninitPlayerInput (); - DestroyDrawable (ReleaseDrawable (Screen)); DestroyContext (ScreenContext); @@ -68,7 +60,7 @@ } static void -UninitKernel (BOOLEAN ships) +UninitKernel (void) { UninitSpace (); @@ -83,9 +75,6 @@ UninitQueue (&race_q[0]); UninitQueue (&race_q[1]); - if (ships) - FreeMasterShipList (); - ActivityFrame = 0; } @@ -98,17 +87,15 @@ FreeHyperData (); } -static void +void UninitGameKernel (void) { - // XXX: this function is never called. Why not? (BUG?) if (ActivityFrame) { FreeGameData (); - UninitKernel (FALSE); + UninitKernel (); UninitContexts (); } } - Modified: trunk/sc2/src/uqm/setup.h =================================================================== --- trunk/sc2/src/uqm/setup.h 2009-12-20 20:58:55 UTC (rev 3460) +++ trunk/sc2/src/uqm/setup.h 2009-12-21 03:55:46 UTC (rev 3461) @@ -61,6 +61,7 @@ BOOLEAN InitContexts (void); void UninitPlayerInput (void); BOOLEAN InitGameKernel (void); +void UninitGameKernel (void); extern BOOLEAN LoadKernel (int argc, char *argv[]); extern void FreeKernel (void); Modified: trunk/sc2/src/uqm/starcon.c =================================================================== --- trunk/sc2/src/uqm/starcon.c 2009-12-20 20:58:55 UTC (rev 3460) +++ trunk/sc2/src/uqm/starcon.c 2009-12-21 03:55:46 UTC (rev 3461) @@ -296,7 +296,8 @@ } // CloseJournal (); - FreeGameData (); + UninitGameKernel (); + FreeMasterShipList (); FreeKernel (); MainExited = TRUE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-12-28 17:27:00
|
Revision: 3486 http://sc2.svn.sourceforge.net/sc2/?rev=3486&view=rev Author: avolkov Date: 2009-12-28 17:26:54 +0000 (Mon, 28 Dec 2009) Log Message: ----------- Migrate FlashContext to the new drawing modes; also remove FlashContext.parent; drawing to off-screen CONTEXTs is incomplete Modified Paths: -------------- trunk/sc2/src/uqm/flash.c trunk/sc2/src/uqm/flash.h trunk/sc2/src/uqm/restart.c trunk/sc2/src/uqm/supermelee/pickmele.c Modified: trunk/sc2/src/uqm/flash.c =================================================================== --- trunk/sc2/src/uqm/flash.c 2009-12-28 16:49:09 UTC (rev 3485) +++ trunk/sc2/src/uqm/flash.c 2009-12-28 17:26:54 UTC (rev 3486) @@ -19,10 +19,6 @@ // currently in use. // TODO: -// - Add Flash_setHighlight() to change the brightness as in -// Flash_createHighlight(), for an already created flash area. -// - Be able to set a minimum and maximum merge factor for overlay and -// transition areas, as the numer/denom with highlights. // - During a few frames during the sequence, the frame to be displayed // is equal to a frame which was supplied as a parameter to the flash // sequence (instead of generated during the sequence). It is not @@ -41,10 +37,7 @@ #include "libs/threadlib.h" -extern void arith_frame_blit (FRAME srcFrame, const RECT *rsrc, - FRAME dstFrame, const RECT *rdst, int num, int denom); - -static FlashContext *Flash_create (CONTEXT gfxContext, FRAME parent); +static FlashContext *Flash_create (CONTEXT gfxContext); static void Flash_fixState (FlashContext *context); static void Flash_nextState (FlashContext *context); static void Flash_clearCache (FlashContext *context); @@ -53,7 +46,7 @@ static void Flash_blendFraction (FlashContext *context, int numer, int denom, int *resNumer, int *resDenom); static void Flash_makeFrame (FlashContext *context, - FRAME dest, RECT *destRect, int numer, int denom); + FRAME dest, int numer, int denom); static inline void Flash_prepareCacheFrame (FlashContext *context, COUNT index); static void Flash_drawFrame (FlashContext *context, FRAME frame); @@ -64,13 +57,15 @@ int numer, int denom); static void Flash_drawCurrentFrame (FlashContext *context); +static CONTEXT workGfxContext; + // Off-screen internal drawing context + static FlashContext * -Flash_create (CONTEXT gfxContext, FRAME parent) +Flash_create (CONTEXT gfxContext) { FlashContext *context = HMalloc (sizeof (FlashContext)); context->gfxContext = gfxContext; - context->parent = parent; context->original = 0; @@ -96,7 +91,11 @@ context->cacheSize = Flash_DEFAULT_CACHE_SIZE; context->lastFrameIndex = (COUNT) -1; - + + // TODO: Delete the context somewhere + if (!workGfxContext) + workGfxContext = CreateContext ("Flash.workGfxContext"); + return context; } @@ -104,9 +103,9 @@ // 'endNumer / denom' is the brightness in the end state of the sequence. // These numbers are relative to the brighness of the original image. FlashContext * -Flash_createHighlight (CONTEXT gfxContext, FRAME parent, const RECT *rect) +Flash_createHighlight (CONTEXT gfxContext, const RECT *rect) { - FlashContext *context = Flash_create (gfxContext, parent); + FlashContext *context = Flash_create (gfxContext); if (rect == NULL) { @@ -125,10 +124,10 @@ } FlashContext * -Flash_createTransition (CONTEXT gfxContext, FRAME parent, - const POINT *origin, FRAME first, FRAME final) +Flash_createTransition (CONTEXT gfxContext, const POINT *origin, + FRAME first, FRAME final) { - FlashContext *context = Flash_create (gfxContext, parent); + FlashContext *context = Flash_create (gfxContext); context->type = FlashType_transition; @@ -141,10 +140,9 @@ } FlashContext * -Flash_createOverlay (CONTEXT gfxContext, FRAME parent, - const POINT *origin, FRAME overlay) +Flash_createOverlay (CONTEXT gfxContext, const POINT *origin, FRAME overlay) { - FlashContext *context = Flash_create (gfxContext, parent); + FlashContext *context = Flash_create (gfxContext); context->type = FlashType_overlay; @@ -361,7 +359,8 @@ // Set the time between updates of the flash area. void -Flash_setFrameTime (FlashContext *context, TimeCount frameTime) { +Flash_setFrameTime (FlashContext *context, TimeCount frameTime) +{ context->frameTime = frameTime; } @@ -451,8 +450,8 @@ } void -Flash_setOverlay (FlashContext *context, const POINT *origin, - FRAME overlay) { +Flash_setOverlay (FlashContext *context, const POINT *origin, FRAME overlay) +{ assert(context->type == FlashType_overlay); if (context->started) @@ -533,32 +532,33 @@ static void Flash_grabOriginal (FlashContext *context) { + CONTEXT oldGfxContext; + RECT clipRect; + RECT grabRect; + if (context->original != (FRAME) 0) DestroyDrawable (ReleaseDrawable (context->original)); - if (context->parent == 0) - { - // Grab from the entire screen - CONTEXT oldGfxContext; - LockMutex (GraphicsLock); - oldGfxContext = SetContext (context->gfxContext); - context->original = CaptureDrawable (LoadDisplayPixmap ( - &context->rect, (FRAME) 0)); - SetContext (oldGfxContext); - UnlockMutex (GraphicsLock); - FlushGraphics (); - // LoadDisplayPixmap only queues the command to read - // a rectangle from the screen; a FlushGraphics() - // is necessary to ensure that it can actually be used. - } - else - { - // Grab from a frame. - context->original = CaptureDrawable (CreateDrawable (WANT_PIXMAP, - context->rect.extent.width, context->rect.extent.height, 1)); - arith_frame_blit (context->parent, &context->rect, - context->original, NULL, 1, 1); - } + // XXX: This assumes that FlashContext.gfxContext is an on-screen CONTEXT + // (i.e. it's foreground frame is Screen). LoadDisplayPixmap() would + // not work with an off-screen context. + // TODO: Get rid of LoadDisplayPixmap(). It does not take CONTEXT + // clip-rect into account. + LockMutex (GraphicsLock); + oldGfxContext = SetContext (context->gfxContext); + // FlashContext.rect is relative to the CONTEXT clip-rect + grabRect = context->rect; + GetContextClipRect (&clipRect); + grabRect.corner.x += clipRect.corner.x; + grabRect.corner.y += clipRect.corner.y; + context->original = CaptureDrawable (LoadDisplayPixmap ( + &grabRect, (FRAME) 0)); + SetContext (oldGfxContext); + UnlockMutex (GraphicsLock); + FlushGraphics (); + // LoadDisplayPixmap only queues the command to read + // a rectangle from the screen; a FlushGraphics() + // is necessary to ensure that it can actually be used. } static inline void @@ -582,24 +582,33 @@ } static void -Flash_makeFrame (FlashContext *context, FRAME dest, RECT *destRect, - int numer, int denom) +Flash_makeFrame (FlashContext *context, FRAME dest, int numer, int denom) { - RECT orgRect; + CONTEXT oldGfxContext; + STAMP s; int blendedNumer; int blendedDenom; - orgRect.corner.x = 0; - orgRect.corner.y = 0; - orgRect.extent = context->rect.extent; + s.origin.x = 0; + s.origin.y = 0; Flash_blendFraction (context, numer, denom, &blendedNumer, &blendedDenom); + LockMutex (GraphicsLock); + oldGfxContext = SetContext (workGfxContext); + SetContextFGFrame (dest); + switch (context->type) { case FlashType_highlight: { - arith_frame_blit (context->original, &orgRect, dest, destRect, - blendedNumer, blendedDenom); + // Clear the destination just in case + SetContextBackGroundColor (BUILD_COLOR_RGBA (0, 0, 0, 0)); + ClearDrawable (); + // Draw the frame at modulated strength (0 < strength <= 128) + SetContextDrawMode (MAKE_DRAW_MODE (DRAW_ADDITIVE, + DRAW_FACTOR_1 * blendedNumer / blendedDenom)); + s.frame = context->original; + DrawStamp (&s); break; } case FlashType_transition: @@ -614,42 +623,39 @@ if (final == (FRAME) 0) final = context->original; - arith_frame_blit (first, &orgRect, dest, destRect, - blendedDenom - blendedNumer, blendedDenom); - arith_frame_blit (final, &orgRect, dest, destRect, - blendedNumer, -blendedDenom); + // Draw the first frame at full strength + SetContextDrawMode (DRAW_REPLACE_MODE); + s.frame = first; + DrawStamp (&s); + // Merge in the final frame + SetContextDrawMode (MAKE_DRAW_MODE (DRAW_ALPHA, + DRAW_FACTOR_1 * blendedNumer / blendedDenom)); + s.frame = final; + DrawStamp (&s); break; } case FlashType_overlay: { - int addOrSubtractNumer; - int addOrSubtractDenom; - if (blendedNumer < 0) - { - // Subtractive blit. - blendedNumer = -blendedNumer; - addOrSubtractNumer = -1; - addOrSubtractDenom = 1; - } - else - { - // Additive blit. - addOrSubtractNumer = 1; - addOrSubtractDenom = -1; - } + POINT oldOrigin; - // Draw the overlay at partial strength: - arith_frame_blit (context->u.overlay.frame, &orgRect, - dest, destRect, blendedNumer, blendedDenom); - - // Merge the original in at full strength: - // For additive blit: dest = context->original + dest - // For subtractive blit blit: dest = context->original - dest - arith_frame_blit (context->original, &orgRect, dest, destRect, - addOrSubtractNumer, addOrSubtractDenom); + // Draw the original at full strength + SetContextDrawMode (DRAW_REPLACE_MODE); + s.frame = context->original; + DrawStamp (&s); + // Add or subtract the overlay at partial strength + SetContextDrawMode (MAKE_DRAW_MODE (DRAW_ADDITIVE, + DRAW_FACTOR_1 * blendedNumer / blendedDenom)); + s.frame = context->u.overlay.frame; + // Offset the draw origin to hit the right area + oldOrigin = SetContextOrigin (GetFrameHot (s.frame)); + DrawStamp (&s); + SetContextOrigin (oldOrigin); break; } } + + SetContext (oldGfxContext); + UnlockMutex (GraphicsLock); } // Prepare an entry in the cache. @@ -674,7 +680,7 @@ { context->cache[index] = CaptureDrawable (CreateDrawable (WANT_PIXMAP, context->rect.extent.width, context->rect.extent.height, 1)); - Flash_makeFrame (context, context->cache[index], NULL, + Flash_makeFrame (context, context->cache[index], index, context->cacheSize - 1); } } @@ -683,20 +689,15 @@ Flash_drawFrame (FlashContext *context, FRAME frame) { CONTEXT oldGfxContext; - FRAME oldFGFrame = (FRAME) 0; STAMP stamp; LockMutex (GraphicsLock); oldGfxContext = SetContext (context->gfxContext); - if (context->parent != NULL) - oldFGFrame = SetContextFGFrame (context->parent); stamp.origin = context->rect.corner; stamp.frame = frame; DrawStamp(&stamp); - if (context->parent != NULL) - SetContextFGFrame (oldFGFrame); SetContext (oldGfxContext); UnlockMutex (GraphicsLock); } @@ -752,33 +753,17 @@ context->lastFrameIndex = 2; #endif /* BEGIN_AND_END_FRMAE_EXCEPTIONS */ - if (context->parent == NULL) { // Painting to the screen; we need a temporary frame to draw to. FRAME work; work = CaptureDrawable (CreateDrawable (WANT_PIXMAP, context->rect.extent.width, context->rect.extent.height, 1)); - Flash_makeFrame (context, work, NULL, numer, denom); + Flash_makeFrame (context, work, numer, denom); Flash_drawFrame (context, work); DestroyDrawable (ReleaseDrawable (work)); } - else - { - // Painting to another frame; we can directly draw to it. - CONTEXT oldGfxContext; - FRAME oldFGFrame; - - LockMutex (GraphicsLock); - oldGfxContext = SetContext (context->gfxContext); - oldFGFrame = SetContextFGFrame (context->parent); - Flash_makeFrame (context, context->parent, &context->rect, - numer, denom); - SetContextFGFrame (oldFGFrame); - SetContext (oldGfxContext); - UnlockMutex (GraphicsLock); - } } static inline void Modified: trunk/sc2/src/uqm/flash.h =================================================================== --- trunk/sc2/src/uqm/flash.h 2009-12-28 16:49:09 UTC (rev 3485) +++ trunk/sc2/src/uqm/flash.h 2009-12-28 17:26:54 UTC (rev 3486) @@ -76,6 +76,20 @@ * You can use Flash_nextTime() to determine when the next update is needed, * or just call Flash_process() to try (it does no updates if not needed). * + * Limitations: + * + * 1) Highlight and overlay flashing modes read the original gfxContext + * contents, but they do so with LoadDisplayPixmap(). This means that these + * modes can currently only be used with on-screen CONTEXTs (i.e. CONTEXTs + * that have Screen as foreground FRAME); + * + * 2) Functions that draw to the gfxContext or read the original gfxContext + * contents, which is most of them, must be called with gfxContext having + * the same clip-rect as it did when other drawing functions were called. + * Otherwise, original contents restoration may draw to the wrong area, or + * the wrong area may be read. + * There may be cases where one would *want* that to happen, and such + * cases are not covered by this limitation. */ #include "libs/gfxlib.h" @@ -104,8 +118,6 @@ struct FlashContext { CONTEXT gfxContext; // The graphics context used for drawing. - FRAME parent; - // The frame that contains the flash rectangle. RECT rect; // The rectangle to flash. @@ -175,11 +187,10 @@ #endif /* FLASH_INTERNAL */ -FlashContext *Flash_createHighlight (CONTEXT gfxContext, FRAME parent, - const RECT *rect); -FlashContext *Flash_createTransition (CONTEXT gfxContext, FRAME parent, +FlashContext *Flash_createHighlight (CONTEXT gfxContext, const RECT *rect); +FlashContext *Flash_createTransition (CONTEXT gfxContext, const POINT *origin, FRAME first, FRAME final); -FlashContext *Flash_createOverlay (CONTEXT gfxContext, FRAME parent, +FlashContext *Flash_createOverlay (CONTEXT gfxContext, const POINT *origin, FRAME overlay); void Flash_setState (FlashContext *context, FlashState state, Modified: trunk/sc2/src/uqm/restart.c =================================================================== --- trunk/sc2/src/uqm/restart.c 2009-12-28 16:49:09 UTC (rev 3485) +++ trunk/sc2/src/uqm/restart.c 2009-12-28 17:26:54 UTC (rev 3486) @@ -128,7 +128,7 @@ pMS->hMusic = LoadMusic (MAINMENU_MUSIC); InactTimeOut = (pMS->hMusic ? 120 : 20) * ONE_SECOND; pMS->flashContext = Flash_createOverlay (ScreenContext, - NULL, NULL, NULL); + NULL, NULL); Flash_setMergeFactors (pMS->flashContext, -3, 3, 16); Flash_setSpeed (pMS->flashContext, (6 * ONE_SECOND) / 16, 0, (6 * ONE_SECOND) / 16, 0); Modified: trunk/sc2/src/uqm/supermelee/pickmele.c =================================================================== --- trunk/sc2/src/uqm/supermelee/pickmele.c 2009-12-28 16:49:09 UTC (rev 3485) +++ trunk/sc2/src/uqm/supermelee/pickmele.c 2009-12-28 17:26:54 UTC (rev 3486) @@ -580,7 +580,7 @@ #endif gmstate.player[playerI].flashContext = - Flash_createHighlight (ScreenContext, (FRAME) 0, NULL); + Flash_createHighlight (ScreenContext, NULL); Flash_setMergeFactors (gmstate.player[playerI].flashContext, 2, 3, 2); Flash_setFrameTime (gmstate.player[playerI].flashContext, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Mee...@us...> - 2010-01-23 20:36:07
|
Revision: 3510 http://sc2.svn.sourceforge.net/sc2/?rev=3510&view=rev Author: Meep-Eep Date: 2010-01-23 20:36:00 +0000 (Sat, 23 Jan 2010) Log Message: ----------- Remove two more obsolete files. Removed Paths: ------------- trunk/sc2/src/uqm/star3do.res trunk/sc2/src/uqm/star3do.typ Deleted: trunk/sc2/src/uqm/star3do.res =================================================================== --- trunk/sc2/src/uqm/star3do.res 2010-01-23 20:30:31 UTC (rev 3509) +++ trunk/sc2/src/uqm/star3do.res 2010-01-23 20:36:00 UTC (rev 3510) @@ -1,790 +0,0 @@ -INCLUDE star3do.typ - -PACKAGE INIT_PACKAGE starcon.pkg - KEY_CONFIG JOYSTICK_KEYS starcon.key -PATH lbm - STRTAB STARCON_COLOR_MAP scclrtab.ct - -PACKAGE TITLE_PACKAGE starcon.pkg - GFXRES TITLE_ANIM title.ani - -PATH . -PACKAGE ARILOU_SHIP_PACKAGE starcon.pkg - RES_INDEX ARILOU_SHIP_INDEX arilou.shp -PACKAGE CHMMR_SHIP_PACKAGE starcon.pkg - RES_INDEX CHMMR_SHIP_INDEX chmmr.shp -PACKAGE EARTHLING_SHIP_PACKAGE starcon.pkg - RES_INDEX EARTHLING_SHIP_INDEX human.shp -PACKAGE ORZ_SHIP_PACKAGE starcon.pkg - RES_INDEX ORZ_SHIP_INDEX orz.shp -PACKAGE PKUNK_SHIP_PACKAGE starcon.pkg - RES_INDEX PKUNK_SHIP_INDEX pkunk.shp -PACKAGE SHOFIXTI_SHIP_PACKAGE starcon.pkg - RES_INDEX SHOFIXTI_SHIP_INDEX shofixti.shp -PACKAGE SPATHI_SHIP_PACKAGE starcon.pkg - RES_INDEX SPATHI_SHIP_INDEX spathi.shp -PACKAGE SUPOX_SHIP_PACKAGE starcon.pkg - RES_INDEX SUPOX_SHIP_INDEX supox.shp -PACKAGE THRADD_SHIP_PACKAGE starcon.pkg - RES_INDEX THRADD_SHIP_INDEX thradd.shp -PACKAGE UTWIG_SHIP_PACKAGE starcon.pkg - RES_INDEX UTWIG_SHIP_INDEX utwig.shp -PACKAGE VUX_SHIP_PACKAGE starcon.pkg - RES_INDEX VUX_SHIP_INDEX vux.shp -PACKAGE YEHAT_SHIP_PACKAGE starcon.pkg - RES_INDEX YEHAT_SHIP_INDEX yehat.shp -PACKAGE MELNORME_SHIP_PACKAGE starcon.pkg - RES_INDEX MELNORME_SHIP_INDEX melnorme.shp -PACKAGE DRUUGE_SHIP_PACKAGE starcon.pkg - RES_INDEX DRUUGE_SHIP_INDEX druuge.shp -PACKAGE ILWRATH_SHIP_PACKAGE starcon.pkg - RES_INDEX ILWRATH_SHIP_INDEX ilwrath.shp -PACKAGE MYCON_SHIP_PACKAGE starcon.pkg - RES_INDEX MYCON_SHIP_INDEX mycon.shp -PACKAGE SLYLANDRO_SHIP_PACKAGE starcon.pkg - RES_INDEX SLYLANDRO_SHIP_INDEX slylandr.shp -PACKAGE UMGAH_SHIP_PACKAGE starcon.pkg - RES_INDEX UMGAH_SHIP_INDEX umgah.shp -PACKAGE URQUAN_SHIP_PACKAGE starcon.pkg - RES_INDEX URQUAN_SHIP_INDEX urquan.shp -PACKAGE ZOQFOTPIK_SHIP_PACKAGE starcon.pkg - RES_INDEX ZOQFOTPIK_SHIP_INDEX zoqfot.shp -PACKAGE SYREEN_SHIP_PACKAGE starcon.pkg - RES_INDEX SYREEN_SHIP_INDEX syreen.shp -PACKAGE BLACKURQ_SHIP_PACKAGE starcon.pkg - RES_INDEX BLACKURQ_SHIP_INDEX blackurq.shp -PACKAGE ANDROSYN_SHIP_PACKAGE starcon.pkg - RES_INDEX ANDROSYN_SHIP_INDEX androsyn.shp -PACKAGE CHENJESU_SHIP_PACKAGE starcon.pkg - RES_INDEX CHENJESU_SHIP_INDEX chenjesu.shp -PACKAGE MMRNMHRM_SHIP_PACKAGE starcon.pkg - RES_INDEX MMRNMHRM_SHIP_INDEX mmrnmhrm.shp - -PATH lbm -PACKAGE KERNEL_PACKAGE starcon.pkg - FONTRES STARCON_FONT starcon.fon - FONTRES TINY_FONT tiny.fon - GFXRES STATUS_MASK_PMAP_ANIM status.ani - GFXRES ACTIVITY_ANIM activity.ani - STRTAB STARCON_GAME_STRINGS starcon.txt - -PACKAGE SC2KERNEL_PACKAGE starcon.pkg - GFXRES PLAYMENU_ANIM playmenu.ani - -PACKAGE MICROFONT_PACKAGE starcon.pkg - FONTRES MICRO_FONT micro.fon - -PACKAGE SC2DATA_PACKAGE starcon.pkg - GFXRES FLAGSTAT_MASK_PMAP_ANIM flagstat.ani - GFXRES MISCDATA_MASK_PMAP_ANIM miscdata.ani - -PACKAGE MENU_SOUND_PACKAGE starcon.pkg - SNDRES MENU_SOUNDS menusnd.snd - -PACKAGE SOUND_PACKAGE starcon.pkg - SNDRES GAME_SOUNDS gamesnd.snd - -PACKAGE SPACE_PACKAGE starcon.pkg - GFXRES STAR_MASK_PMAP_ANIM stars.ani - - GFXRES ASTEROID_BIG_MASK_PMAP_ANIM astbig.ani - GFXRES ASTEROID_MED_MASK_PMAP_ANIM astmed.ani - GFXRES ASTEROID_SML_MASK_PMAP_ANIM astsml.ani - - GFXRES BLAST_BIG_MASK_PMAP_ANIM blabig.ani - GFXRES BLAST_MED_MASK_PMAP_ANIM blamed.ani - GFXRES BLAST_SML_MASK_PMAP_ANIM blasml.ani - - GFXRES BOOM_BIG_MASK_PMAP_ANIM boobig.ani - GFXRES BOOM_MED_MASK_PMAP_ANIM boomed.ani - GFXRES BOOM_SML_MASK_PMAP_ANIM boosml.ani - -PACKAGE AMBIENT_HYPER_PACKAGE starcon.pkg - GFXRES AMBIENT_MASK_PMAP_ANIM ambanim.ani -PACKAGE HYPER_PACKAGE starcon.pkg - GFXRES HYPERSTARS_MASK_PMAP_ANIM hyperstr.ani - STRTAB HYPER_COLOR_TAB hyperpal.ct -PACKAGE ARISPACE_PACKAGE starcon.pkg - GFXRES ARISPACE_MASK_PMAP_ANIM arispace.ani - STRTAB ARISPACE_COLOR_TAB arispace.ct - -PACKAGE HYPERSPACE_MUSIC_PACKAGE starcon.pkg - MUSICRES HYPERSPACE_MUSIC hyper.mod -PACKAGE QUASISPACE_MUSIC_PACKAGE starcon.pkg - MUSICRES QUASISPACE_MUSIC arispace.mod - -PATH ipanims -PACKAGE INIT_PACKAGE starcon.pkg - GFXRES IPBKGND_MASK_PMAP_ANIM obbkgnd.ani - -PACKAGE IP_PACKAGE starcon.pkg - GFXRES SISIP_MASK_PMAP_ANIM sis_ip.ani - GFXRES ORBPLAN_MASK_PMAP_ANIM orbplan.ani - STRTAB ORBPLAN_COLOR_MAP orbplan.ct - GFXRES SUN_MASK_PMAP_ANIM ip_sun.ani - -PACKAGE LANDER_PACKAGE starcon.pkg - GFXRES LANDER_MASK_PMAP_ANIM lander.ani - SNDRES LANDER_SOUNDS landsnds.snd - GFXRES QUAKE_MASK_PMAP_ANIM quake.ani - GFXRES LIGHTNING_MASK_ANIM lightnin.ani - GFXRES LAVA_MASK_PMAP_ANIM lavaspot.ani - GFXRES LANDER_SHIELD_MASK_ANIM lndrshld.ani - GFXRES LANDER_LAUNCH_MASK_PMAP_ANIM launch.ani - GFXRES LANDER_RETURN_MASK_PMAP_ANIM return.ani -PACKAGE ORBIT_VIEW_PACKAGE starcon.pkg - GFXRES ORBIT_VIEW_ANIM orbview.ani - -PACKAGE EARTH_PACKAGE starcon.pkg - GFXRES EARTH_MASK_ANIM eartmask.ani - -PACKAGE CANNISTER_PACKAGE starcon.pkg - GFXRES CANNISTER_MASK_PMAP_ANIM lifecan.ani - -PACKAGE LIFE00_PACKAGE starcon.pkg - GFXRES LIFE00_MASK_PMAP_ANIM lifea.ani -PACKAGE LIFE01_PACKAGE starcon.pkg - GFXRES LIFE01_MASK_PMAP_ANIM lifeb.ani -PACKAGE LIFE02_PACKAGE starcon.pkg - GFXRES LIFE02_MASK_PMAP_ANIM lifec.ani -PACKAGE LIFE03_PACKAGE starcon.pkg - GFXRES LIFE03_MASK_PMAP_ANIM lifed.ani -PACKAGE LIFE04_PACKAGE starcon.pkg - GFXRES LIFE04_MASK_PMAP_ANIM lifee.ani -PACKAGE LIFE05_PACKAGE starcon.pkg - GFXRES LIFE05_MASK_PMAP_ANIM lifef.ani -PACKAGE LIFE06_PACKAGE starcon.pkg - GFXRES LIFE06_MASK_PMAP_ANIM lifeg.ani -PACKAGE LIFE07_PACKAGE starcon.pkg - GFXRES LIFE07_MASK_PMAP_ANIM lifeh.ani -PACKAGE LIFE08_PACKAGE starcon.pkg - GFXRES LIFE08_MASK_PMAP_ANIM lifei.ani -PACKAGE LIFE09_PACKAGE starcon.pkg - GFXRES LIFE09_MASK_PMAP_ANIM lifej.ani -PACKAGE LIFE10_PACKAGE starcon.pkg - GFXRES LIFE10_MASK_PMAP_ANIM lifek.ani -PACKAGE LIFE11_PACKAGE starcon.pkg - GFXRES LIFE11_MASK_PMAP_ANIM lifel.ani -PACKAGE LIFE12_PACKAGE starcon.pkg - GFXRES LIFE12_MASK_PMAP_ANIM lifem.ani -PACKAGE LIFE13_PACKAGE starcon.pkg - GFXRES LIFE13_MASK_PMAP_ANIM lifen.ani -PACKAGE LIFE14_PACKAGE starcon.pkg - GFXRES LIFE14_MASK_PMAP_ANIM lifeo.ani -PACKAGE LIFE15_PACKAGE starcon.pkg - GFXRES LIFE15_MASK_PMAP_ANIM lifep.ani -PACKAGE LIFE16_PACKAGE starcon.pkg - GFXRES LIFE16_MASK_PMAP_ANIM lifeq.ani -PACKAGE LIFE17_PACKAGE starcon.pkg - GFXRES LIFE17_MASK_PMAP_ANIM lifer.ani -PACKAGE LIFE18_PACKAGE starcon.pkg - GFXRES LIFE18_MASK_PMAP_ANIM lifes.ani -PACKAGE LIFE19_PACKAGE starcon.pkg - GFXRES LIFE19_MASK_PMAP_ANIM lifet.ani -PACKAGE LIFE20_PACKAGE starcon.pkg - GFXRES LIFE20_MASK_PMAP_ANIM lifew.ani -PACKAGE LIFE21_PACKAGE starcon.pkg - GFXRES LIFE21_MASK_PMAP_ANIM lifex.ani -PACKAGE LIFE22_PACKAGE starcon.pkg - GFXRES LIFE22_MASK_PMAP_ANIM lifey.ani -PACKAGE LIFE23_PACKAGE starcon.pkg - GFXRES LIFE23_MASK_PMAP_ANIM lifeu.ani -PACKAGE LIFE24_PACKAGE starcon.pkg - GFXRES LIFE24_MASK_PMAP_ANIM lifev.ani -PACKAGE LIFE25_PACKAGE starcon.pkg - GFXRES LIFE25_MASK_PMAP_ANIM lifez.ani - -PACKAGE OOLITE_PACKAGE starcon.pkg - STRTAB OOLITE_COLOR_TAB str_cts_.ct - STRTAB OOLITE_XLAT_TAB mtl2xlts.xlt -PACKAGE YTTRIC_COLOR_PACKAGE starcon.pkg - STRTAB YTTRIC_COLOR_TAB wr1_cts_.ct -PACKAGE YTTRIC_XLAT_PACKAGE starcon.pkg - STRTAB YTTRIC_XLAT_TAB rst_xlts.xlt -PACKAGE QD_COLOR_PACKAGE starcon.pkg - STRTAB QUASI_DEGENERATE_COLOR_TAB co2_cts_.ct -PACKAGE QD_XLAT_PACKAGE starcon.pkg - STRTAB QUASI_DEGENERATE_XLAT_TAB bnd_xlts.xlt -PACKAGE LANTHANIDE_COLOR_PACKAGE starcon.pkg - STRTAB LANTHANIDE_COLOR_TAB ylgscts_.ct -PACKAGE TREASURE_COLOR_PACKAGE starcon.pkg - STRTAB TREASURE_COLOR_TAB lll_cts_.ct -PACKAGE UREA_COLOR_PACKAGE starcon.pkg - STRTAB UREA_COLOR_TAB ylgscts_.ct -PACKAGE UREA_XLAT_PACKAGE starcon.pkg - STRTAB UREA_XLAT_TAB den_xlts.xlt -PACKAGE METAL_PACKAGE starcon.pkg - STRTAB METAL_COLOR_TAB mtl_cts_.ct - STRTAB METAL_XLAT_TAB mtl1xlts.xlt -PACKAGE RADIOACTIVE_COLOR_PACKAGE starcon.pkg - STRTAB RADIOACTIVE_COLOR_TAB rrr_cts_.ct -PACKAGE OPALESCENT_COLOR_PACKAGE starcon.pkg - STRTAB OPALESCENT_COLOR_TAB ice_cts_.ct -PACKAGE OPALESCENT_XLAT_PACKAGE starcon.pkg - STRTAB OPALESCENT_XLAT_TAB ice_xlts.xlt -PACKAGE CYANIC_COLOR_PACKAGE starcon.pkg - STRTAB CYANIC_COLOR_TAB qqq_cts_.ct -PACKAGE ACID_COLOR_PACKAGE starcon.pkg - STRTAB ACID_COLOR_TAB rst_cts_.ct -PACKAGE ALKALI_COLOR_PACKAGE starcon.pkg - STRTAB ALKALI_COLOR_TAB bnd_cts_.ct -PACKAGE HALIDE_COLOR_PACKAGE starcon.pkg - STRTAB HALIDE_COLOR_TAB rdx_cts_.ct -PACKAGE GREEN_COLOR_PACKAGE starcon.pkg - STRTAB GREEN_COLOR_TAB nnn_cts_.ct -PACKAGE COPPER_COLOR_PACKAGE starcon.pkg - STRTAB COPPER_COLOR_TAB qqq_cts_.ct -PACKAGE CARBIDE_COLOR_PACKAGE starcon.pkg - STRTAB CARBIDE_COLOR_TAB rrr_cts_.ct -PACKAGE ULTRAMARINE_COLOR_PACKAGE starcon.pkg - STRTAB ULTRAMARINE_COLOR_TAB den_cts_.ct -PACKAGE NOBLE_COLOR_PACKAGE starcon.pkg - STRTAB NOBLE_COLOR_TAB blgscts_.ct -PACKAGE AZURE_COLOR_PACKAGE starcon.pkg - STRTAB AZURE_COLOR_TAB www_cts_.ct -PACKAGE CHONDRITE_PACKAGE starcon.pkg - STRTAB CHONDRITE_COLOR_TAB grv_cts_.ct - STRTAB CHONDRITE_XLAT_TAB grv_xlts.xlt -PACKAGE PURPLE_COLOR_PACKAGE starcon.pkg - STRTAB PURPLE_COLOR_TAB vigscts_.ct -PACKAGE SUPER_DENSE_COLOR_PACKAGE starcon.pkg - STRTAB SUPER_DENSE_COLOR_TAB kkk_cts_.ct -PACKAGE PELLUCID_COLOR_PACKAGE starcon.pkg - STRTAB PELLUCID_COLOR_TAB prgscts_.ct -PACKAGE DUST_COLOR_PACKAGE starcon.pkg - STRTAB DUST_COLOR_TAB dst_cts_.ct -PACKAGE MAROON_COLOR_PACKAGE starcon.pkg - STRTAB MAROON_COLOR_TAB dst_cts_.ct -PACKAGE CIMMERIAN_COLOR_PACKAGE starcon.pkg - STRTAB CIMMERIAN_COLOR_TAB jjj_cts_.ct -PACKAGE INFRARED_COLOR_PACKAGE starcon.pkg - STRTAB INFRARED_COLOR_TAB dst_cts_.ct -PACKAGE SELENIC_COLOR_PACKAGE starcon.pkg - STRTAB SELENIC_COLOR_TAB lit_cts_.ct -PACKAGE AURIC_COLOR_PACKAGE starcon.pkg - STRTAB AURIC_COLOR_TAB ylgscts_.ct -PACKAGE FLUORESCENT_COLOR_PACKAGE starcon.pkg - STRTAB FLUORESCENT_COLOR_TAB vigscts_.ct -PACKAGE ULTRAVIOLET_COLOR_PACKAGE starcon.pkg - STRTAB ULTRAVIOLET_COLOR_TAB vigscts_.ct -PACKAGE PLUTONIC_COLOR_PACKAGE starcon.pkg - STRTAB PLUTONIC_COLOR_TAB orgscts_.ct -PACKAGE RAINBOW_COLOR_PACKAGE starcon.pkg - STRTAB RAINBOW_COLOR_TAB rai_cts_.ct - STRTAB RAINBOW_XLAT_TAB rai_xlts.xlt -PACKAGE CRACKED_PACKAGE starcon.pkg - STRTAB CRACKED_COLOR_TAB hel_cts_.ct - STRTAB CRACKED_XLAT_TAB hel_xlts.xlt -PACKAGE SAPPHIRE_COLOR_PACKAGE starcon.pkg - STRTAB SAPPHIRE_COLOR_TAB cry_cts_.ct -PACKAGE SAPPHIRE_XLAT_PACKAGE starcon.pkg - STRTAB SAPPHIRE_XLAT_TAB cry_xlts.xlt -PACKAGE ORGANIC_COLOR_PACKAGE starcon.pkg - STRTAB ORGANIC_COLOR_TAB bnd_cts_.ct -PACKAGE XENOLITHIC_COLOR_PACKAGE starcon.pkg - STRTAB XENOLITHIC_COLOR_TAB cygscts_.ct -PACKAGE REDUX_PACKAGE starcon.pkg - STRTAB REDUX_COLOR_TAB rdx_cts_.ct - STRTAB REDUX_XLAT_TAB rdx1xlts.xlt -PACKAGE PRIMORDIAL_COLOR_PACKAGE starcon.pkg - STRTAB PRIMORDIAL_COLOR_TAB co2_cts_.ct -PACKAGE EMERALD_COLOR_PACKAGE starcon.pkg - STRTAB EMERALD_COLOR_TAB eme_cts_.ct -PACKAGE CHLORINE_COLOR_PACKAGE starcon.pkg - STRTAB CHLORINE_COLOR_TAB rst_cts_.ct -PACKAGE CHLORINE_XLAT_PACKAGE starcon.pkg - STRTAB CHLORINE_XLAT_TAB h2o_xlts.xlt -PACKAGE MAGNETIC_COLOR_PACKAGE starcon.pkg - STRTAB MAGNETIC_COLOR_TAB rdx_cts_.ct -PACKAGE WATER_COLOR_PACKAGE starcon.pkg - STRTAB WATER_COLOR_TAB h2o_cts_.ct -PACKAGE TELLURIC_COLOR_PACKAGE starcon.pkg - STRTAB TELLURIC_COLOR_TAB h2o_cts_.ct -PACKAGE HYDROCARBON_COLOR_PACKAGE starcon.pkg - STRTAB HYDROCARBON_COLOR_TAB www_cts_.ct -PACKAGE IODINE_COLOR_PACKAGE starcon.pkg - STRTAB IODINE_COLOR_TAB co2_cts_.ct -PACKAGE VINYLOGOUS_COLOR_PACKAGE starcon.pkg - STRTAB VINYLOGOUS_COLOR_TAB wr1_cts_.ct -PACKAGE RUBY_COLOR_PACKAGE starcon.pkg - STRTAB RUBY_COLOR_TAB rub_cts_.ct -PACKAGE MAGMA_COLOR_PACKAGE starcon.pkg - STRTAB MAGMA_COLOR_TAB rrr_cts_.ct -PACKAGE CRIMSON_COLOR_PACKAGE starcon.pkg - STRTAB CRIMSON_COLOR_TAB bbb_cts_.ct - -PACKAGE GAS_XLAT_PACKAGE starcon.pkg - STRTAB GAS_XLAT_TAB gasg.xlt - -PACKAGE BLU_GAS_CT_PACKAGE starcon.pkg - STRTAB BLU_GAS_COLOR_TAB blugasgi.ct -PACKAGE CYA_GAS_CT_PACKAGE starcon.pkg - STRTAB CYA_GAS_COLOR_TAB cyagasgi.ct -PACKAGE GRN_GAS_CT_PACKAGE starcon.pkg - STRTAB GRN_GAS_COLOR_TAB grngasgi.ct -PACKAGE GRY_GAS_CT_PACKAGE starcon.pkg - STRTAB GRY_GAS_COLOR_TAB grygasgi.ct -PACKAGE ORA_GAS_CT_PACKAGE starcon.pkg - STRTAB ORA_GAS_COLOR_TAB oragasgi.ct -PACKAGE PUR_GAS_CT_PACKAGE starcon.pkg - STRTAB PUR_GAS_COLOR_TAB purgasgi.ct -PACKAGE RED_GAS_CT_PACKAGE starcon.pkg - STRTAB RED_GAS_COLOR_TAB redgasgi.ct -PACKAGE VIO_GAS_CT_PACKAGE starcon.pkg - STRTAB VIO_GAS_COLOR_TAB viogasgi.ct -PACKAGE YEL_GAS_CT_PACKAGE starcon.pkg - STRTAB YEL_GAS_COLOR_TAB yelgasgi.ct - -PACKAGE REPORT_PACKAGE starcon.pkg - FONTRES LANDER_FONT lander.fon -PACKAGE MOONBASE_PACKAGE starcon.pkg - GFXRES MOONBASE_MASK_PMAP_ANIM moonbase.ani - STRTAB MOONBASE_STRTAB moonbase.txt -PACKAGE MAIDENS_PACKAGE starcon.pkg - GFXRES MAIDENS_MASK_PMAP_ANIM maidens.ani - STRTAB MAIDENS_STRTAB maidens.txt -PACKAGE CHMMR_BASE_PACKAGE starcon.pkg - STRTAB CHMMR_BASE_STRTAB chmmrbas.txt -PACKAGE AQUA_PACKAGE starcon.pkg - GFXRES AQUA_MASK_PMAP_ANIM aquhelix.ani - STRTAB AQUA_STRTAB aquhelix.txt -PACKAGE BURV_BCS_PACKAGE starcon.pkg - GFXRES BURV_BCS_MASK_PMAP_ANIM drutrans.ani - STRTAB BURV_BCS_STRTAB drutrans.txt -PACKAGE TAALO_DEVICE_PACKAGE starcon.pkg - GFXRES TAALO_DEVICE_MASK_PMAP_ANIM taadevic.ani - STRTAB TAALO_DEVICE_STRTAB taadevic.txt -PACKAGE SUN_DEVICE_PACKAGE starcon.pkg - GFXRES SUN_DEVICE_MASK_PMAP_ANIM sundevic.ani - STRTAB SUN_DEVICE_STRTAB sundevic.txt -PACKAGE VAULT_PACKAGE starcon.pkg - GFXRES VAULT_MASK_PMAP_ANIM syrvault.ani - STRTAB VAULT_STRTAB syrvault.txt -PACKAGE WRECK_PACKAGE starcon.pkg - GFXRES WRECK_MASK_PMAP_ANIM urqwreck.ani - STRTAB WRECK_STRTAB urqwreck.txt -PACKAGE BOMB_PACKAGE starcon.pkg - GFXRES BOMB_MASK_PMAP_ANIM utwbomb.ani - STRTAB BOMB_STRTAB utwbomb.txt -PACKAGE BEAST_PACKAGE starcon.pkg - STRTAB BEAST_STRTAB vuxbeast.txt -PACKAGE EGG_CASE_PACKAGE starcon.pkg - GFXRES EGG_CASE_MASK_PMAP_ANIM eggcase.ani - STRTAB EGG_CASE_STRTAB eggcase.txt -PACKAGE SPAPLUTO_PACKAGE starcon.pkg - GFXRES SPAPLUTO_MASK_PMAP_ANIM spapluto.ani - STRTAB SPAPLUTO_STRTAB spapluto.txt -PACKAGE BURV_RUINS_PACKAGE starcon.pkg - STRTAB BURV_RUINS_STRTAB burruins.txt -PACKAGE ANDROSYNTH_RUINS_PACKAGE starcon.pkg - STRTAB ANDROSYNTH_RUINS_STRTAB andruins.txt -PACKAGE DRUUGE_RUINS_PACKAGE starcon.pkg - STRTAB DRUUGE_RUINS_STRTAB sphere.txt -PACKAGE PKUNK_RUINS_PACKAGE starcon.pkg - STRTAB PKUNK_RUINS_STRTAB spindle.txt -PACKAGE RACE_RUINS_PACKAGE starcon.pkg - GFXRES RUINS_MASK_PMAP_ANIM ruins.ani -PACKAGE RACE_RUINS_TEXT_PACKAGE starcon.pkg - STRTAB RUINS_STRTAB ruins.txt -PACKAGE UMGAH_BCS_PACKAGE starcon.pkg - GFXRES UMGAH_BCS_MASK_PMAP_ANIM umgtrans.ani - STRTAB UMGAH_BCS_STRTAB umgtrans.txt - -PACKAGE IP_MUSIC_PACKAGE starcon.pkg - MUSICRES IP_MUSIC space.mod -PACKAGE ORBIT_MUSIC_PACKAGE starcon.pkg - MUSICRES ORBIT1_MUSIC orbit1.mod - MUSICRES ORBIT2_MUSIC orbit2.mod - MUSICRES ORBIT3_MUSIC orbit3.mod - MUSICRES ORBIT4_MUSIC orbit4.mod - MUSICRES ORBIT5_MUSIC orbit5.mod - -PATH melee -PACKAGE MELEE_BGROUND_PACKAGE starcon.pkg - GFXRES MELEE_SCREEN_PMAP_ANIM melebkgd.ani -PACKAGE MELEE_PICK_PACKAGE starcon.pkg - GFXRES MELEE_PICK_MASK_PMAP_ANIM melee.ani - -PATH lbm -PACKAGE SC2_SEGUE_PACKAGE starcon.pkg - GFXRES SEGUE_PMAP_ANIM segue.ani - MUSICRES REDALERT_MUSIC redalert.mod -PACKAGE SC2_PICK_PACKAGE starcon.pkg - GFXRES SC2_PICK_PMAP_ANIM pickship.ani - -PATH . -PACKAGE ARILOU_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX ARILOU_CONVERSATION arilou.con -PACKAGE CHMMR_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX CHMMR_CONVERSATION chmmr.con -PACKAGE COMMANDER_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX COMMANDER_CONVERSATION comandr.con -PACKAGE ORZ_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX ORZ_CONVERSATION orz.con -PACKAGE PKUNK_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX PKUNK_CONVERSATION pkunk.con -PACKAGE SHOFIXTI_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX SHOFIXTI_CONVERSATION shofixt.con -PACKAGE SPATHI_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX SPATHI_CONVERSATION spathi.con -PACKAGE SUPOX_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX SUPOX_CONVERSATION supox.con -PACKAGE THRADD_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX THRADD_CONVERSATION thradd.con -PACKAGE UTWIG_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX UTWIG_CONVERSATION utwig.con -PACKAGE VUX_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX VUX_CONVERSATION vux.con -PACKAGE YEHAT_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX YEHAT_CONVERSATION yehat.con -PACKAGE MELNORME_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX MELNORME_CONVERSATION melnorm.con -PACKAGE DRUUGE_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX DRUUGE_CONVERSATION druuge.con -PACKAGE ILWRATH_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX ILWRATH_CONVERSATION ilwrath.con -PACKAGE MYCON_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX MYCON_CONVERSATION mycon.con -PACKAGE SLYLANDRO_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX SLYLANDRO_CONVERSATION slyland.con -PACKAGE UMGAH_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX UMGAH_CONVERSATION umgah.con -PACKAGE URQUAN_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX URQUAN_CONVERSATION urquan.con -PACKAGE ZOQFOTPIK_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX ZOQFOTPIK_CONVERSATION zoqfot.con -PACKAGE SYREEN_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX SYREEN_CONVERSATION syreen.con -PACKAGE BLACKURQ_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX BLACKURQ_CONVERSATION blackur.con -PACKAGE TALKING_PET_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX TALKING_PET_CONVERSATION talkpet.con -PACKAGE SLYLANDRO_HOME_CONVERSATION_PACKAGE starcon.pkg - RES_INDEX SLYLANDRO_HOME_CONVERSATION slyhome.con - -PATH lbm -PACKAGE PLAYER_CONVERSATION_PACKAGE starcon.pkg - FONTRES PLAYER_FONT player.fon - -PATH . -PACKAGE SIS_PACKAGE starcon.pkg - RES_INDEX SIS_RES_INDEX sis.dat -PACKAGE SAMATRA_PACKAGE starcon.pkg - RES_INDEX SAMATRA_RES_INDEX lastbat.sc2 -PACKAGE URQUAN_PROBE_PACKAGE starcon.pkg - RES_INDEX PROBE_RES_INDEX probe.sc2 - -PATH lbm -PACKAGE RESTART_PACKAGE starcon.pkg - GFXRES RESTART_PMAP_ANIM newgame.ani - -PACKAGE MODULE_PACKAGE starcon.pkg - GFXRES MODULES_PMAP_ANIM modules.ani - -PACKAGE OUTFIT_PACKAGE starcon.pkg - GFXRES SISMODS_MASK_PMAP_ANIM sismods.ani - GFXRES OUTFIT_PMAP_ANIM outfit.ani -PACKAGE OUTFIT_MUSIC_PACKAGE starcon.pkg - MUSICRES OUTFIT_MUSIC outfit.mod - -PACKAGE BLUEPRINT_PACKAGE starcon.pkg - GFXRES SISBLU_MASK_ANIM sisblu.ani - GFXRES SHIPYARD_PMAP_ANIM shipyard.ani -PACKAGE SHIPYARD_MUSIC_PACKAGE starcon.pkg - MUSICRES SHIPYARD_MUSIC shipyard.mod - -PACKAGE STARBASE_PACKAGE starcon.pkg - MUSICRES STARBASE_MUSIC starbase.mod - GFXRES STARBASE_ANIM starbase.ani - -PACKAGE SAMATRA_BATTLE_PACKAGE starcon.pkg - GFXRES SAMATRA_BIG_MASK_PMAP_ANIM sam__big.ani - -PACKAGE SHIELDED_BATTLE_PACKAGE starcon.pkg - GFXRES SHIELDED_BIG_MASK_PMAP_ANIM shie_big.ani - GFXRES SHIELDED_MED_MASK_PMAP_ANIM shie_med.ani - GFXRES SHIELDED_SML_MASK_PMAP_ANIM shie_sml.ani - -PACKAGE PLANET00_PACKAGE starcon.pkg - GFXRES PLANET00_BIG_MASK_PMAP_ANIM ool__big.ani - GFXRES PLANET00_MED_MASK_PMAP_ANIM ool__med.ani - GFXRES PLANET00_SML_MASK_PMAP_ANIM ool__sml.ani -PACKAGE PLANET01_PACKAGE starcon.pkg - GFXRES PLANET01_BIG_MASK_PMAP_ANIM ytt__big.ani - GFXRES PLANET01_MED_MASK_PMAP_ANIM ytt__med.ani - GFXRES PLANET01_SML_MASK_PMAP_ANIM ytt__sml.ani -PACKAGE PLANET02_PACKAGE starcon.pkg - GFXRES PLANET02_BIG_MASK_PMAP_ANIM deg__big.ani - GFXRES PLANET02_MED_MASK_PMAP_ANIM deg__med.ani - GFXRES PLANET02_SML_MASK_PMAP_ANIM deg__sml.ani -PACKAGE PLANET03_PACKAGE starcon.pkg - GFXRES PLANET03_BIG_MASK_PMAP_ANIM lan__big.ani - GFXRES PLANET03_MED_MASK_PMAP_ANIM lan__med.ani - GFXRES PLANET03_SML_MASK_PMAP_ANIM lan__sml.ani -PACKAGE PLANET04_PACKAGE starcon.pkg - GFXRES PLANET04_BIG_MASK_PMAP_ANIM tre__big.ani - GFXRES PLANET04_MED_MASK_PMAP_ANIM tre__med.ani - GFXRES PLANET04_SML_MASK_PMAP_ANIM tre__sml.ani -PACKAGE PLANET05_PACKAGE starcon.pkg - GFXRES PLANET05_BIG_MASK_PMAP_ANIM ure__big.ani - GFXRES PLANET05_MED_MASK_PMAP_ANIM ure__med.ani - GFXRES PLANET05_SML_MASK_PMAP_ANIM ure__sml.ani -PACKAGE PLANET06_PACKAGE starcon.pkg - GFXRES PLANET06_BIG_MASK_PMAP_ANIM mtl__big.ani - GFXRES PLANET06_MED_MASK_PMAP_ANIM mtl__med.ani - GFXRES PLANET06_SML_MASK_PMAP_ANIM mtl__sml.ani -PACKAGE PLANET07_PACKAGE starcon.pkg - GFXRES PLANET07_BIG_MASK_PMAP_ANIM rad__big.ani - GFXRES PLANET07_MED_MASK_PMAP_ANIM rad__med.ani - GFXRES PLANET07_SML_MASK_PMAP_ANIM rad__sml.ani -PACKAGE PLANET08_PACKAGE starcon.pkg - GFXRES PLANET08_BIG_MASK_PMAP_ANIM opa__big.ani - GFXRES PLANET08_MED_MASK_PMAP_ANIM opa__med.ani - GFXRES PLANET08_SML_MASK_PMAP_ANIM opa__sml.ani -PACKAGE PLANET09_PACKAGE starcon.pkg - GFXRES PLANET09_BIG_MASK_PMAP_ANIM cya__big.ani - GFXRES PLANET09_MED_MASK_PMAP_ANIM cya__med.ani - GFXRES PLANET09_SML_MASK_PMAP_ANIM cya__sml.ani -PACKAGE PLANET10_PACKAGE starcon.pkg - GFXRES PLANET10_BIG_MASK_PMAP_ANIM aci__big.ani - GFXRES PLANET10_MED_MASK_PMAP_ANIM aci__med.ani - GFXRES PLANET10_SML_MASK_PMAP_ANIM aci__sml.ani -PACKAGE PLANET11_PACKAGE starcon.pkg - GFXRES PLANET11_BIG_MASK_PMAP_ANIM alk__big.ani - GFXRES PLANET11_MED_MASK_PMAP_ANIM alk__med.ani - GFXRES PLANET11_SML_MASK_PMAP_ANIM alk__sml.ani -PACKAGE PLANET12_PACKAGE starcon.pkg - GFXRES PLANET12_BIG_MASK_PMAP_ANIM hal__big.ani - GFXRES PLANET12_MED_MASK_PMAP_ANIM hal__med.ani - GFXRES PLANET12_SML_MASK_PMAP_ANIM hal__sml.ani -PACKAGE PLANET13_PACKAGE starcon.pkg - GFXRES PLANET13_BIG_MASK_PMAP_ANIM gre__big.ani - GFXRES PLANET13_MED_MASK_PMAP_ANIM gre__med.ani - GFXRES PLANET13_SML_MASK_PMAP_ANIM gre__sml.ani -PACKAGE PLANET14_PACKAGE starcon.pkg - GFXRES PLANET14_BIG_MASK_PMAP_ANIM cop__big.ani - GFXRES PLANET14_MED_MASK_PMAP_ANIM cop__med.ani - GFXRES PLANET14_SML_MASK_PMAP_ANIM cop__sml.ani -PACKAGE PLANET15_PACKAGE starcon.pkg - GFXRES PLANET15_BIG_MASK_PMAP_ANIM car__big.ani - GFXRES PLANET15_MED_MASK_PMAP_ANIM car__med.ani - GFXRES PLANET15_SML_MASK_PMAP_ANIM car__sml.ani -PACKAGE PLANET16_PACKAGE starcon.pkg - GFXRES PLANET16_BIG_MASK_PMAP_ANIM ult__big.ani - GFXRES PLANET16_MED_MASK_PMAP_ANIM ult__med.ani - GFXRES PLANET16_SML_MASK_PMAP_ANIM ult__sml.ani -PACKAGE PLANET17_PACKAGE starcon.pkg - GFXRES PLANET17_BIG_MASK_PMAP_ANIM nob__big.ani - GFXRES PLANET17_MED_MASK_PMAP_ANIM nob__med.ani - GFXRES PLANET17_SML_MASK_PMAP_ANIM nob__sml.ani -PACKAGE PLANET18_PACKAGE starcon.pkg - GFXRES PLANET18_BIG_MASK_PMAP_ANIM azu__big.ani - GFXRES PLANET18_MED_MASK_PMAP_ANIM azu__med.ani - GFXRES PLANET18_SML_MASK_PMAP_ANIM azu__sml.ani -PACKAGE PLANET19_PACKAGE starcon.pkg - GFXRES PLANET19_BIG_MASK_PMAP_ANIM cho__big.ani - GFXRES PLANET19_MED_MASK_PMAP_ANIM cho__med.ani - GFXRES PLANET19_SML_MASK_PMAP_ANIM cho__sml.ani -PACKAGE PLANET20_PACKAGE starcon.pkg - GFXRES PLANET20_BIG_MASK_PMAP_ANIM pur__big.ani - GFXRES PLANET20_MED_MASK_PMAP_ANIM pur__med.ani - GFXRES PLANET20_SML_MASK_PMAP_ANIM pur__sml.ani -PACKAGE PLANET21_PACKAGE starcon.pkg - GFXRES PLANET21_BIG_MASK_PMAP_ANIM sup__big.ani - GFXRES PLANET21_MED_MASK_PMAP_ANIM sup__med.ani - GFXRES PLANET21_SML_MASK_PMAP_ANIM sup__sml.ani -PACKAGE PLANET22_PACKAGE starcon.pkg - GFXRES PLANET22_BIG_MASK_PMAP_ANIM pel__big.ani - GFXRES PLANET22_MED_MASK_PMAP_ANIM pel__med.ani - GFXRES PLANET22_SML_MASK_PMAP_ANIM pel__sml.ani -PACKAGE PLANET23_PACKAGE starcon.pkg - GFXRES PLANET23_BIG_MASK_PMAP_ANIM dus__big.ani - GFXRES PLANET23_MED_MASK_PMAP_ANIM dus__med.ani - GFXRES PLANET23_SML_MASK_PMAP_ANIM dus__sml.ani -PACKAGE PLANET24_PACKAGE starcon.pkg - GFXRES PLANET24_BIG_MASK_PMAP_ANIM mar__big.ani - GFXRES PLANET24_MED_MASK_PMAP_ANIM mar__med.ani - GFXRES PLANET24_SML_MASK_PMAP_ANIM mar__sml.ani -PACKAGE PLANET25_PACKAGE starcon.pkg - GFXRES PLANET25_BIG_MASK_PMAP_ANIM cim__big.ani - GFXRES PLANET25_MED_MASK_PMAP_ANIM cim__med.ani - GFXRES PLANET25_SML_MASK_PMAP_ANIM cim__sml.ani -PACKAGE PLANET26_PACKAGE starcon.pkg - GFXRES PLANET26_BIG_MASK_PMAP_ANIM inf__big.ani - GFXRES PLANET26_MED_MASK_PMAP_ANIM inf__med.ani - GFXRES PLANET26_SML_MASK_PMAP_ANIM inf__sml.ani -PACKAGE PLANET27_PACKAGE starcon.pkg - GFXRES PLANET27_BIG_MASK_PMAP_ANIM sel__big.ani - GFXRES PLANET27_MED_MASK_PMAP_ANIM sel__med.ani - GFXRES PLANET27_SML_MASK_PMAP_ANIM sel__sml.ani -PACKAGE PLANET28_PACKAGE starcon.pkg - GFXRES PLANET28_BIG_MASK_PMAP_ANIM aur__big.ani - GFXRES PLANET28_MED_MASK_PMAP_ANIM aur__med.ani - GFXRES PLANET28_SML_MASK_PMAP_ANIM aur__sml.ani -PACKAGE PLANET29_PACKAGE starcon.pkg - GFXRES PLANET29_BIG_MASK_PMAP_ANIM flu__big.ani - GFXRES PLANET29_MED_MASK_PMAP_ANIM flu__med.ani - GFXRES PLANET29_SML_MASK_PMAP_ANIM flu__sml.ani -PACKAGE PLANET30_PACKAGE starcon.pkg - GFXRES PLANET30_BIG_MASK_PMAP_ANIM ult__big.ani - GFXRES PLANET30_MED_MASK_PMAP_ANIM ult__med.ani - GFXRES PLANET30_SML_MASK_PMAP_ANIM ult__sml.ani -PACKAGE PLANET31_PACKAGE starcon.pkg - GFXRES PLANET31_BIG_MASK_PMAP_ANIM plu__big.ani - GFXRES PLANET31_MED_MASK_PMAP_ANIM plu__med.ani - GFXRES PLANET31_SML_MASK_PMAP_ANIM plu__sml.ani -PACKAGE PLANET32_PACKAGE starcon.pkg - GFXRES PLANET32_BIG_MASK_PMAP_ANIM rai__big.ani - GFXRES PLANET32_MED_MASK_PMAP_ANIM rai__med.ani - GFXRES PLANET32_SML_MASK_PMAP_ANIM rai__sml.ani -PACKAGE PLANET33_PACKAGE starcon.pkg - GFXRES PLANET33_BIG_MASK_PMAP_ANIM cra__big.ani - GFXRES PLANET33_MED_MASK_PMAP_ANIM cra__med.ani - GFXRES PLANET33_SML_MASK_PMAP_ANIM cra__sml.ani -PACKAGE PLANET34_PACKAGE starcon.pkg - GFXRES PLANET34_BIG_MASK_PMAP_ANIM sap__big.ani - GFXRES PLANET34_MED_MASK_PMAP_ANIM sap__med.ani - GFXRES PLANET34_SML_MASK_PMAP_ANIM sap__sml.ani -PACKAGE PLANET35_PACKAGE starcon.pkg - GFXRES PLANET35_BIG_MASK_PMAP_ANIM org__big.ani - GFXRES PLANET35_MED_MASK_PMAP_ANIM org__med.ani - GFXRES PLANET35_SML_MASK_PMAP_ANIM org__sml.ani -PACKAGE PLANET36_PACKAGE starcon.pkg - GFXRES PLANET36_BIG_MASK_PMAP_ANIM xen__big.ani - GFXRES PLANET36_MED_MASK_PMAP_ANIM xen__med.ani - GFXRES PLANET36_SML_MASK_PMAP_ANIM xen__sml.ani -PACKAGE PLANET37_PACKAGE starcon.pkg - GFXRES PLANET37_BIG_MASK_PMAP_ANIM red__big.ani - GFXRES PLANET37_MED_MASK_PMAP_ANIM red__med.ani - GFXRES PLANET37_SML_MASK_PMAP_ANIM red__sml.ani -PACKAGE PLANET38_PACKAGE starcon.pkg - GFXRES PLANET38_BIG_MASK_PMAP_ANIM pri__big.ani - GFXRES PLANET38_MED_MASK_PMAP_ANIM pri__med.ani - GFXRES PLANET38_SML_MASK_PMAP_ANIM pri__sml.ani -PACKAGE PLANET39_PACKAGE starcon.pkg - GFXRES PLANET39_BIG_MASK_PMAP_ANIM eme__big.ani - GFXRES PLANET39_MED_MASK_PMAP_ANIM eme__med.ani - GFXRES PLANET39_SML_MASK_PMAP_ANIM eme__sml.ani -PACKAGE PLANET40_PACKAGE starcon.pkg - GFXRES PLANET40_BIG_MASK_PMAP_ANIM chl__big.ani - GFXRES PLANET40_MED_MASK_PMAP_ANIM chl__med.ani - GFXRES PLANET40_SML_MASK_PMAP_ANIM chl__sml.ani -PACKAGE PLANET41_PACKAGE starcon.pkg - GFXRES PLANET41_BIG_MASK_PMAP_ANIM mgn__big.ani - GFXRES PLANET41_MED_MASK_PMAP_ANIM mgn__med.ani - GFXRES PLANET41_SML_MASK_PMAP_ANIM mgn__sml.ani -PACKAGE PLANET42_PACKAGE starcon.pkg - GFXRES PLANET42_BIG_MASK_PMAP_ANIM wat__big.ani - GFXRES PLANET42_MED_MASK_PMAP_ANIM wat__med.ani - GFXRES PLANET42_SML_MASK_PMAP_ANIM wat__sml.ani -PACKAGE PLANET43_PACKAGE starcon.pkg - GFXRES PLANET43_BIG_MASK_PMAP_ANIM tel__big.ani - GFXRES PLANET43_MED_MASK_PMAP_ANIM tel__med.ani - GFXRES PLANET43_SML_MASK_PMAP_ANIM tel__sml.ani -PACKAGE PLANET44_PACKAGE starcon.pkg - GFXRES PLANET44_BIG_MASK_PMAP_ANIM hyd__big.ani - GFXRES PLANET44_MED_MASK_PMAP_ANIM hyd__med.ani - GFXRES PLANET44_SML_MASK_PMAP_ANIM hyd__sml.ani -PACKAGE PLANET45_PACKAGE starcon.pkg - GFXRES PLANET45_BIG_MASK_PMAP_ANIM iod__big.ani - GFXRES PLANET45_MED_MASK_PMAP_ANIM iod__med.ani - GFXRES PLANET45_SML_MASK_PMAP_ANIM iod__sml.ani -PACKAGE PLANET46_PACKAGE starcon.pkg - GFXRES PLANET46_BIG_MASK_PMAP_ANIM vin__big.ani - GFXRES PLANET46_MED_MASK_PMAP_ANIM vin__med.ani - GFXRES PLANET46_SML_MASK_PMAP_ANIM vin__sml.ani -PACKAGE PLANET47_PACKAGE starcon.pkg - GFXRES PLANET47_BIG_MASK_PMAP_ANIM rub__big.ani - GFXRES PLANET47_MED_MASK_PMAP_ANIM rub__med.ani - GFXRES PLANET47_SML_MASK_PMAP_ANIM rub__sml.ani -PACKAGE PLANET48_PACKAGE starcon.pkg - GFXRES PLANET48_BIG_MASK_PMAP_ANIM mgm__big.ani - GFXRES PLANET48_MED_MASK_PMAP_ANIM mgm__med.ani - GFXRES PLANET48_SML_MASK_PMAP_ANIM mgm__sml.ani -PACKAGE PLANET49_PACKAGE starcon.pkg - GFXRES PLANET49_BIG_MASK_PMAP_ANIM cri__big.ani - GFXRES PLANET49_MED_MASK_PMAP_ANIM cri__med.ani - GFXRES PLANET49_SML_MASK_PMAP_ANIM cri__sml.ani -PACKAGE PLANET50_PACKAGE starcon.pkg - GFXRES PLANET50_BIG_MASK_PMAP_ANIM blg__big.ani - GFXRES PLANET50_MED_MASK_PMAP_ANIM blg__med.ani - GFXRES PLANET50_SML_MASK_PMAP_ANIM blg__sml.ani -PACKAGE PLANET51_PACKAGE starcon.pkg - GFXRES PLANET51_BIG_MASK_PMAP_ANIM cyg__big.ani - GFXRES PLANET51_MED_MASK_PMAP_ANIM cyg__med.ani - GFXRES PLANET51_SML_MASK_PMAP_ANIM cyg__sml.ani -PACKAGE PLANET52_PACKAGE starcon.pkg - GFXRES PLANET52_BIG_MASK_PMAP_ANIM gng__big.ani - GFXRES PLANET52_MED_MASK_PMAP_ANIM gng__med.ani - GFXRES PLANET52_SML_MASK_PMAP_ANIM gng__sml.ani -PACKAGE PLANET53_PACKAGE starcon.pkg - GFXRES PLANET53_BIG_MASK_PMAP_ANIM gyg__big.ani - GFXRES PLANET53_MED_MASK_PMAP_ANIM gyg__med.ani - GFXRES PLANET53_SML_MASK_PMAP_ANIM gyg__sml.ani -PACKAGE PLANET54_PACKAGE starcon.pkg - GFXRES PLANET54_BIG_MASK_PMAP_ANIM org__big.ani - GFXRES PLANET54_MED_MASK_PMAP_ANIM org__med.ani - GFXRES PLANET54_SML_MASK_PMAP_ANIM org__sml.ani -PACKAGE PLANET55_PACKAGE starcon.pkg - GFXRES PLANET55_BIG_MASK_PMAP_ANIM pug__big.ani - GFXRES PLANET55_MED_MASK_PMAP_ANIM pug__med.ani - GFXRES PLANET55_SML_MASK_PMAP_ANIM pug__sml.ani -PACKAGE PLANET56_PACKAGE starcon.pkg - GFXRES PLANET56_BIG_MASK_PMAP_ANIM reg__big.ani - GFXRES PLANET56_MED_MASK_PMAP_ANIM reg__med.ani - GFXRES PLANET56_SML_MASK_PMAP_ANIM reg__sml.ani -PACKAGE PLANET57_PACKAGE starcon.pkg - GFXRES PLANET57_BIG_MASK_PMAP_ANIM vig__big.ani - GFXRES PLANET57_MED_MASK_PMAP_ANIM vig__med.ani - GFXRES PLANET57_SML_MASK_PMAP_ANIM vig__sml.ani -PACKAGE PLANET58_PACKAGE starcon.pkg - GFXRES PLANET58_BIG_MASK_PMAP_ANIM yeg__big.ani - GFXRES PLANET58_MED_MASK_PMAP_ANIM yeg__med.ani - GFXRES PLANET58_SML_MASK_PMAP_ANIM yeg__sml.ani - -PACKAGE BATTLE_MUSIC_PACKAGE starcon.pkg - MUSICRES BATTLE_MUSIC battle.mod - -PACKAGE CREDIT00_PACKAGE starcon.pkg - GFXRES CREDIT00_ANIM credit00.ani -PACKAGE CREDIT01_PACKAGE starcon.pkg - GFXRES CREDIT01_ANIM credit01.ani -PACKAGE CREDIT02_PACKAGE starcon.pkg - GFXRES CREDIT02_ANIM credit02.ani -PACKAGE CREDIT03_PACKAGE starcon.pkg - GFXRES CREDIT03_ANIM credit03.ani -PACKAGE CREDIT04_PACKAGE starcon.pkg - GFXRES CREDIT04_ANIM credit04.ani -PACKAGE CREDIT05_PACKAGE starcon.pkg - GFXRES CREDIT05_ANIM credit05.ani -PACKAGE CREDIT06_PACKAGE starcon.pkg - GFXRES CREDIT06_ANIM credit06.ani -PACKAGE CREDIT07_PACKAGE starcon.pkg - GFXRES CREDIT07_ANIM credit07.ani -PACKAGE CREDIT08_PACKAGE starcon.pkg - GFXRES CREDIT08_ANIM credit08.ani -PACKAGE CREDIT09_PACKAGE starcon.pkg - GFXRES CREDIT09_ANIM credit09.ani -PACKAGE CREDIT10_PACKAGE starcon.pkg - GFXRES CREDIT10_ANIM credit10.ani -PACKAGE CREDIT11_PACKAGE starcon.pkg - GFXRES CREDIT11_ANIM credit11.ani -PACKAGE CREDIT12_PACKAGE starcon.pkg - GFXRES CREDIT12_ANIM credit12.ani -PACKAGE CREDIT13_PACKAGE starcon.pkg - GFXRES CREDIT13_ANIM credit13.ani -PACKAGE CREDIT14_PACKAGE starcon.pkg - GFXRES CREDIT14_ANIM credit14.ani -PACKAGE CREDIT15_PACKAGE starcon.pkg - GFXRES CREDIT15_ANIM credit15.ani -PACKAGE CREDIT16_PACKAGE starcon.pkg - GFXRES CREDIT16_ANIM credit16.ani -PACKAGE CREDIT17_PACKAGE starcon.pkg - GFXRES CREDIT17_ANIM credit17.ani -PACKAGE CREDIT18_PACKAGE starcon.pkg - GFXRES CREDIT18_ANIM credit18.ani -PACKAGE CREDIT19_PACKAGE starcon.pkg - GFXRES CREDIT19_ANIM credit19.ani -PACKAGE CREDIT_MUSIC_PACKAGE starcon.pkg - MUSICRES CREDITS_MUSIC credits.mod - Deleted: trunk/sc2/src/uqm/star3do.typ =================================================================== --- trunk/sc2/src/uqm/star3do.typ 2010-01-23 20:30:31 UTC (rev 3509) +++ trunk/sc2/src/uqm/star3do.typ 2010-01-23 20:36:00 UTC (rev 3510) @@ -1,9 +0,0 @@ -TYPE KEY_CONFIG -TYPE GFXRES -TYPE FONTRES -TYPE STRTAB -TYPE SNDRES -TYPE MUSICRES - -TYPE RES_INDEX -TYPE CODE This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Mee...@us...> - 2010-02-13 22:15:44
|
Revision: 3530 http://sc2.svn.sourceforge.net/sc2/?rev=3530&view=rev Author: Meep-Eep Date: 2010-02-13 22:15:38 +0000 (Sat, 13 Feb 2010) Log Message: ----------- Fix bounds checking errors relating to the fuel reserve aboard the flagship. Modified Paths: -------------- trunk/sc2/src/uqm/outfit.c trunk/sc2/src/uqm/sis.c Modified: trunk/sc2/src/uqm/outfit.c =================================================================== --- trunk/sc2/src/uqm/outfit.c 2010-02-12 00:20:25 UTC (rev 3529) +++ trunk/sc2/src/uqm/outfit.c 2010-02-13 22:15:38 UTC (rev 3530) @@ -102,7 +102,8 @@ DWORD FuelVolume; RECT r; - if ((FuelVolume = GLOBAL_SIS (FuelOnBoard)) <= FUEL_RESERVE) + FuelVolume = GLOBAL_SIS (FuelOnBoard); + if (FuelVolume <= FUEL_RESERVE) return; GLOBAL_SIS (FuelOnBoard) = 0; @@ -559,18 +560,17 @@ LockMutex (GraphicsLock); SetContext (SpaceContext); if (GetFTankCapacity (&r.corner) > GLOBAL_SIS (FuelOnBoard) - && GLOBAL_SIS (ResUnits) >= - (DWORD)GLOBAL (FuelCost)) + && GLOBAL_SIS (ResUnits) >= (DWORD)GLOBAL (FuelCost)) { - if (GLOBAL_SIS (FuelOnBoard) >= - FUEL_RESERVE - FUEL_TANK_SCALE) + if (GLOBAL_SIS (FuelOnBoard) >= FUEL_RESERVE) { r.extent.width = 3; DrawPoint (&r.corner); r.corner.x += r.extent.width + 1; DrawPoint (&r.corner); r.corner.x -= r.extent.width; - SetContextForeGroundColor (SetContextBackGroundColor (BLACK_COLOR)); + SetContextForeGroundColor ( + SetContextBackGroundColor (BLACK_COLOR)); DrawFilledRectangle (&r); } DeltaSISGauges (0, FUEL_TANK_SCALE, -GLOBAL (FuelCost)); @@ -590,10 +590,9 @@ SetContext (SpaceContext); if (GLOBAL_SIS (FuelOnBoard)) { - DeltaSISGauges (0, -FUEL_TANK_SCALE, - GLOBAL (FuelCost)); - if (GLOBAL_SIS (FuelOnBoard) - % FUEL_VOLUME_PER_ROW == 0) + DeltaSISGauges (0, -FUEL_TANK_SCALE, GLOBAL (FuelCost)); + if (GLOBAL_SIS (FuelOnBoard) % FUEL_VOLUME_PER_ROW == 0 && + GLOBAL_SIS (FuelOnBoard) >= FUEL_RESERVE) { GetFTankCapacity (&r.corner); SetContextForeGroundColor ( Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2010-02-12 00:20:25 UTC (rev 3529) +++ trunk/sc2/src/uqm/sis.c 2010-02-13 22:15:38 UTC (rev 3530) @@ -1418,12 +1418,15 @@ // crew pod, where the Nth unit of fuel would be located. // If the unit does not fit, false is returned, and *slotNr and // *compartmentNr are unchanged. +// Pre: unitNr >= FUEL_RESERER static bool GetFuelTankForFuelUnit (DWORD unitNr, COUNT *slotNr, DWORD *compartmentNr) { COUNT slotI; DWORD capacity = FUEL_RESERVE; + assert (unitNr >= FUEL_RESERVE); + slotI = NUM_MODULE_SLOTS; while (slotI--) { BYTE moduleType = GLOBAL_SIS (ModuleSlots[slotI]); @@ -1447,6 +1450,7 @@ DWORD GetFTankCapacity (POINT *ppt) { + DWORD capacity; DWORD fuelAmount; COUNT slotNr; DWORD compartmentNr; @@ -1454,14 +1458,22 @@ DWORD volume; COUNT rowNr; - + static const Color fuelColors[] = FUEL_COLOR_TABLE; + + capacity = GetFuelTankCapacity (); + fuelAmount = GetFuelTotal (); + if (fuelAmount < FUEL_RESERVE) + { + // Fuel is in the SIS reserve, not in a fuel tank. + // *ppt is unchanged + return capacity; + } - fuelAmount = GetFuelTotal (); if (!GetFuelTankForFuelUnit (fuelAmount, &slotNr, &compartmentNr)) { // Fuel does not fit. *ppt is unchanged. - return GetFuelTankCapacity (); + return capacity; } moduleType = GLOBAL_SIS (ModuleSlots[slotNr]); @@ -1475,10 +1487,11 @@ else ppt->y = 30 - rowNr; + assert (rowNr + 1 < (COUNT) (sizeof fuelColors / sizeof fuelColors[0])); SetContextForeGroundColor (fuelColors[rowNr]); SetContextBackGroundColor (fuelColors[rowNr + 1]); - return GetFuelTankCapacity (); + return capacity; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2011-04-20 18:54:33
|
Revision: 3577 http://sc2.svn.sourceforge.net/sc2/?rev=3577&view=rev Author: avolkov Date: 2011-04-20 18:54:27 +0000 (Wed, 20 Apr 2011) Log Message: ----------- Removed SOLARSYS_STATE.CurNode; uniform usage of callGenerateForScanType() Modified Paths: -------------- trunk/sc2/src/uqm/planets/lander.c trunk/sc2/src/uqm/planets/planets.h trunk/sc2/src/uqm/planets/scan.c trunk/sc2/src/uqm/uqmdebug.c Modified: trunk/sc2/src/uqm/planets/lander.c =================================================================== --- trunk/sc2/src/uqm/planets/lander.c 2011-04-20 18:23:17 UTC (rev 3576) +++ trunk/sc2/src/uqm/planets/lander.c 2011-04-20 18:54:27 UTC (rev 3577) @@ -718,6 +718,7 @@ { COUNT scan, NumRetrieved; SIZE which_node; + COUNT allNodes; scan = LOBYTE (ElementPtr->scan_node); if (pLanderPrim == 0) @@ -859,10 +860,10 @@ which_node = HIBYTE (ElementPtr->scan_node) - 1; pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[scan] |= (1L << which_node); - pSolarSysState->CurNode = (COUNT)~0; + allNodes = (COUNT)~0; callGenerateForScanType (pSolarSysState, pSolarSysState->pOrbitalDesc, - &pSolarSysState->CurNode, scan); + &allNodes, scan); if (!(pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[scan] & (1L << which_node))) Modified: trunk/sc2/src/uqm/planets/planets.h =================================================================== --- trunk/sc2/src/uqm/planets/planets.h 2011-04-20 18:23:17 UTC (rev 3576) +++ trunk/sc2/src/uqm/planets/planets.h 2011-04-20 18:54:27 UTC (rev 3577) @@ -204,7 +204,6 @@ SYSTEM_INFO SysInfo; - COUNT CurNode; const GenerateFunctions *genFuncs; // Functions to call to fill in various parts of this structure. // See generate.h, doc/devel/generate Modified: trunk/sc2/src/uqm/planets/scan.c =================================================================== --- trunk/sc2/src/uqm/planets/scan.c 2011-04-20 18:23:17 UTC (rev 3576) +++ trunk/sc2/src/uqm/planets/scan.c 2011-04-20 18:54:27 UTC (rev 3577) @@ -1337,15 +1337,15 @@ f = SetAbsFrameIndex (MiscDataFrame, NUM_SCANDOT_TRANSITIONS * (scan - ENERGY_SCAN)); - pSolarSysState->CurNode = (COUNT)~0; + num_nodes = (COUNT)~0; callGenerateForScanType (pSolarSysState, - pSolarSysState->pOrbitalDesc, &pSolarSysState->CurNode, scan); + pSolarSysState->pOrbitalDesc, &num_nodes, scan); - num_nodes = pSolarSysState->CurNode; while (num_nodes--) { HELEMENT hNodeElement; ELEMENT *NodeElementPtr; + COUNT whichNode; if (isNodeRetrieved (&pSolarSysState->SysInfo.PlanetInfo, scan, num_nodes)) @@ -1357,9 +1357,9 @@ LockElement (hNodeElement, &NodeElementPtr); - pSolarSysState->CurNode = num_nodes; + whichNode = num_nodes; callGenerateForScanType (pSolarSysState, - pSolarSysState->pOrbitalDesc, &pSolarSysState->CurNode, + pSolarSysState->pOrbitalDesc, &whichNode, scan); NodeElementPtr->scan_node = MAKE_WORD (scan, num_nodes + 1); Modified: trunk/sc2/src/uqm/uqmdebug.c =================================================================== --- trunk/sc2/src/uqm/uqmdebug.c 2011-04-20 18:23:17 UTC (rev 3576) +++ trunk/sc2/src/uqm/uqmdebug.c 2011-04-20 18:54:27 UTC (rev 3577) @@ -31,6 +31,7 @@ #include "gendef.h" #include "globdata.h" #include "planets/lifeform.h" +#include "planets/scan.h" #include "races.h" #include "setup.h" #include "state.h" @@ -1054,17 +1055,16 @@ assert (system->pOrbitalDesc == world); - ((SOLARSYS_STATE *) system)->CurNode = (COUNT)~0; - (*system->genFuncs->generateLife) ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, &((SOLARSYS_STATE *) system)->CurNode); - numBio = system->CurNode; + numBio = (COUNT)~0; + callGenerateForScanType ((SOLARSYS_STATE *) system, (PLANET_DESC *) world, + &numBio, BIOLOGICAL_SCAN); result = 0; for (i = 0; i < numBio; i++) { - ((SOLARSYS_STATE *) system)->CurNode = i; - (*system->genFuncs->generateLife) ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, &((SOLARSYS_STATE *) system)->CurNode); + COUNT whichNode = i; + callGenerateForScanType ((SOLARSYS_STATE *) system, + (PLANET_DESC *) world, &whichNode, BIOLOGICAL_SCAN); result += BIO_CREDIT_VALUE * LONIBBLE (CreatureData[ system->SysInfo.PlanetInfo.CurType].ValueAndHitPoints); } @@ -1080,19 +1080,18 @@ assert (system->pOrbitalDesc == world); - ((SOLARSYS_STATE *) system)->CurNode = (COUNT)~0; - (*system->genFuncs->generateLife) ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, &((SOLARSYS_STATE *) system)->CurNode); - numBio = system->CurNode; + numBio = (COUNT)~0; + callGenerateForScanType ((SOLARSYS_STATE *) system, (PLANET_DESC *) world, + &numBio, BIOLOGICAL_SCAN); for (i = 0; i < NUM_CREATURE_TYPES + NUM_SPECIAL_CREATURE_TYPES; i++) bio[i] = 0; for (i = 0; i < numBio; i++) { - ((SOLARSYS_STATE *) system)->CurNode = i; - (*system->genFuncs->generateLife) ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, &((SOLARSYS_STATE *) system)->CurNode); + COUNT whichNode = i; + callGenerateForScanType ((SOLARSYS_STATE *) system, + (PLANET_DESC *) world, &whichNode, BIOLOGICAL_SCAN); bio[system->SysInfo.PlanetInfo.CurType]++; } } @@ -1106,17 +1105,16 @@ assert (system->pOrbitalDesc == world); - ((SOLARSYS_STATE *) system)->CurNode = (COUNT)~0; - (*system->genFuncs->generateMinerals) ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, &((SOLARSYS_STATE *) system)->CurNode); - numDeposits = system->CurNode; + numDeposits = (COUNT)~0; + callGenerateForScanType ((SOLARSYS_STATE *) system, (PLANET_DESC *) world, + &numDeposits, MINERAL_SCAN); result = 0; for (i = 0; i < numDeposits; i++) { - ((SOLARSYS_STATE *) system)->CurNode = i; - (*system->genFuncs->generateMinerals) ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, &((SOLARSYS_STATE *) system)->CurNode); + COUNT whichNode = i; + callGenerateForScanType ((SOLARSYS_STATE *) system, + (PLANET_DESC *) world, &whichNode, MINERAL_SCAN); result += HIBYTE (system->SysInfo.PlanetInfo.CurDensity) * GLOBAL (ElementWorth[ElementCategory ( system->SysInfo.PlanetInfo.CurType)]); @@ -1133,19 +1131,18 @@ assert (system->pOrbitalDesc == world); - ((SOLARSYS_STATE *) system)->CurNode = (COUNT)~0; - (*system->genFuncs->generateMinerals) ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, &((SOLARSYS_STATE *) system)->CurNode); - numDeposits = system->CurNode; + numDeposits = (COUNT)~0; + callGenerateForScanType ((SOLARSYS_STATE *) system, (PLANET_DESC *) world, + &numDeposits, MINERAL_SCAN); for (i = 0; i < NUM_ELEMENT_CATEGORIES; i++) minerals[i] = 0; for (i = 0; i < numDeposits; i++) { - ((SOLARSYS_STATE *) system)->CurNode = i; - (*system->genFuncs->generateMinerals) ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, &((SOLARSYS_STATE *) system)->CurNode); + COUNT whichNode = i; + callGenerateForScanType ((SOLARSYS_STATE *) system, + (PLANET_DESC *) world, &whichNode, MINERAL_SCAN); minerals[ElementCategory(system->SysInfo.PlanetInfo.CurType)] += HIBYTE (system->SysInfo.PlanetInfo.CurDensity); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2011-04-26 02:21:42
|
Revision: 3587 http://sc2.svn.sourceforge.net/sc2/?rev=3587&view=rev Author: avolkov Date: 2011-04-26 02:21:34 +0000 (Tue, 26 Apr 2011) Log Message: ----------- Generation code refactoring: split off pickupXxx() from generateXxx(), make generateXxx() return the count and take non-pointer Modified Paths: -------------- trunk/sc2/src/uqm/planets/generate/genand.c trunk/sc2/src/uqm/planets/generate/genburv.c trunk/sc2/src/uqm/planets/generate/genchmmr.c trunk/sc2/src/uqm/planets/generate/gencol.c trunk/sc2/src/uqm/planets/generate/gendefault.c trunk/sc2/src/uqm/planets/generate/gendefault.h trunk/sc2/src/uqm/planets/generate/gendru.c trunk/sc2/src/uqm/planets/generate/genilw.c trunk/sc2/src/uqm/planets/generate/genmel.c trunk/sc2/src/uqm/planets/generate/genmyc.c trunk/sc2/src/uqm/planets/generate/genorz.c trunk/sc2/src/uqm/planets/generate/genpet.c trunk/sc2/src/uqm/planets/generate/genpku.c trunk/sc2/src/uqm/planets/generate/genrain.c trunk/sc2/src/uqm/planets/generate/gensam.c trunk/sc2/src/uqm/planets/generate/genshof.c trunk/sc2/src/uqm/planets/generate/gensly.c trunk/sc2/src/uqm/planets/generate/gensol.c trunk/sc2/src/uqm/planets/generate/genspa.c trunk/sc2/src/uqm/planets/generate/gensup.c trunk/sc2/src/uqm/planets/generate/gensyr.c trunk/sc2/src/uqm/planets/generate/genthrad.c trunk/sc2/src/uqm/planets/generate/gentrap.c trunk/sc2/src/uqm/planets/generate/genutw.c trunk/sc2/src/uqm/planets/generate/genvault.c trunk/sc2/src/uqm/planets/generate/genvux.c trunk/sc2/src/uqm/planets/generate/genwreck.c trunk/sc2/src/uqm/planets/generate/genyeh.c trunk/sc2/src/uqm/planets/generate/genzfpscout.c trunk/sc2/src/uqm/planets/generate/genzoq.c trunk/sc2/src/uqm/planets/generate.h trunk/sc2/src/uqm/planets/lander.c trunk/sc2/src/uqm/planets/scan.c trunk/sc2/src/uqm/planets/scan.h trunk/sc2/src/uqm/uqmdebug.c Modified: trunk/sc2/src/uqm/planets/generate/genand.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genand.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genand.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -30,8 +30,10 @@ static bool GenerateAndrosynth_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateAndrosynth_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateAndrosynth_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateAndrosynthFunctions = { @@ -45,6 +47,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateAndrosynth_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateAndrosynth_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -121,34 +126,39 @@ } static bool -onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) +GenerateAndrosynth_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; + if (matchWorld (solarSys, world, 1, MATCH_PLANET)) + { + PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; - // Ruins previously visited are marked in the upper 16 bits - if (isNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16)) - return false; // already visited this ruin before, no report + // Ruins previously visited are marked in the upper 16 bits + if (isNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16)) + return false; // already visited this ruin, do not remove - setNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16); - // We set the retrieved bit manually here and need to indicate - // the change to the solar system state functions - SET_GAME_STATE (PLANETARY_CHANGE, 1); + setNodeRetrieved (planetInfo, ENERGY_SCAN, whichNode + 16); + // We set the retrieved bit manually here and need to indicate + // the change to the solar system state functions + SET_GAME_STATE (PLANETARY_CHANGE, 1); - return true; // give whatever report is next + // Androsynth ruins have several lander reports which form a story + GenerateDefault_landerReportCycle (solarSys); + + return false; // do not remove the node from the surface + } + + return false; } -static bool +static COUNT GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 1, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, onRuinPickedUp); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } - Modified: trunk/sc2/src/uqm/planets/generate/genburv.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genburv.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genburv.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../globdata.h" #include "../../nameref.h" #include "../../resinst.h" @@ -31,8 +30,10 @@ PLANET_DESC *planet); static bool GenerateBurvixese_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateBurvixese_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateBurvixeseFunctions = { @@ -46,6 +47,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateBurvixese_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateBurvixese_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -136,40 +140,54 @@ return true; } -static bool +static COUNT GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } if (matchWorld (solarSys, world, 0, 0)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (BURVIXESE_BROADCASTERS)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (BURVIXESE_BROADCASTERS, 1); - SET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1); + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateBurvixese_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } - return true; + if (matchWorld (solarSys, world, 0, 0)) + { + assert (!GET_GAME_STATE (BURVIXESE_BROADCASTERS) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (BURVIXESE_BROADCASTERS, 1); + SET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1); + + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/genchmmr.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genchmmr.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genchmmr.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -46,6 +46,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gencol.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gencol.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gencol.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -42,6 +42,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gendefault.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendefault.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gendefault.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -16,7 +16,6 @@ #include "genall.h" #include "../planets.h" -#include "../scan.h" #include "../lander.h" #include "../../encount.h" #include "../../gamestr.h" @@ -38,12 +37,6 @@ PLANET_DESC *world); bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -bool GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -bool GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -bool GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); static void GeneratePlanets (SOLARSYS_STATE *system); static void check_yehat_rebellion (void); @@ -60,6 +53,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -166,74 +162,84 @@ return true; } -bool +COUNT GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode) + PLANET_DESC *world, COUNT whichNode) { - GenerateMineralDeposits (&solarSys->SysInfo, whichNode); + GenerateMineralDeposits (&solarSys->SysInfo, &whichNode); (void) world; - return true; + return whichNode; } bool -GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) +GenerateDefault_pickupMinerals (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - *whichNode = 0; + // Minerals do not need any extra handling as of now (void) solarSys; (void) world; + (void) whichNode; return true; } +COUNT +GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + (void) whichNode; + (void) solarSys; + (void) world; + return 0; +} + bool +GenerateDefault_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + // This should never be called since every energy node needs + // special handling and the function should be overridden + assert (false); + (void) solarSys; + (void) world; + (void) whichNode; + return false; +} + +COUNT GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { - GenerateLifeForms (&solarSys->SysInfo, whichNode); + GenerateLifeForms (&solarSys->SysInfo, &whichNode); (void) world; - return true; + return whichNode; } bool -GenerateDefault_generateArtifact (SOLARSYS_STATE *solarSys, COUNT *whichNode) +GenerateDefault_pickupLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - // Generate an energy node at a random location - GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, 1, 0, whichNode); + // Bio does not need any extra handling as of now + (void) solarSys; + (void) world; + (void) whichNode; return true; } -bool -GenerateDefault_generateRuins (SOLARSYS_STATE *solarSys, COUNT *whichNode) +COUNT +GenerateDefault_generateArtifact (SOLARSYS_STATE *solarSys, COUNT whichNode) { - // Generate a standard spread of city ruins of a destroyed civilization - GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, NUM_RACE_RUINS, - 0, whichNode); - return true; + // Generate an energy node at a random location + GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, 1, 0, &whichNode); + return whichNode; } -bool -GenerateDefault_pickupRuins (SOLARSYS_STATE *solarSys, - PickupRuinCallback callback) +COUNT +GenerateDefault_generateRuins (SOLARSYS_STATE *solarSys, COUNT whichNode) { - PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; - COUNT i; - - for (i = 0; i < NUM_RACE_RUINS; ++i) - { - if (!isNodeRetrieved (planetInfo, ENERGY_SCAN, i)) - continue; - - // Retrieval status is cleared to keep the node on the map - setNodeNotRetrieved (planetInfo, ENERGY_SCAN, i); - - if (callback && !callback (solarSys, i)) - continue; // no lander report wanted - - // Some ruins have more than one lander report, like when - // you fish artifacts out of the ruins. - GenerateDefault_landerReportCycle (solarSys); - } - return true; + // Generate a standard spread of city ruins of a destroyed civilization + GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, NUM_RACE_RUINS, + 0, &whichNode); + return whichNode; } static inline void Modified: trunk/sc2/src/uqm/planets/generate/gendefault.h =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendefault.h 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gendefault.h 2011-04-26 02:21:34 UTC (rev 3587) @@ -31,20 +31,21 @@ PLANET_DESC *world); bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -bool GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -bool GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -bool GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); - -// Ruin callback returns 'true' if a lander report should be given -typedef bool (*PickupRuinCallback)(SOLARSYS_STATE *solarSys, +COUNT GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +COUNT GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +COUNT GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +bool GenerateDefault_pickupMinerals (SOLARSYS_STATE *, PLANET_DESC *world, COUNT whichNode); +bool GenerateDefault_pickupEnergy (SOLARSYS_STATE *, PLANET_DESC *world, + COUNT whichNode); +bool GenerateDefault_pickupLife (SOLARSYS_STATE *, PLANET_DESC *world, + COUNT whichNode); -bool GenerateDefault_generateArtifact (SOLARSYS_STATE *, COUNT *whichNode); -bool GenerateDefault_generateRuins (SOLARSYS_STATE *, COUNT *whichNode); -bool GenerateDefault_pickupRuins (SOLARSYS_STATE *, PickupRuinCallback); +COUNT GenerateDefault_generateArtifact (SOLARSYS_STATE *, COUNT whichNode); +COUNT GenerateDefault_generateRuins (SOLARSYS_STATE *, COUNT whichNode); bool GenerateDefault_landerReport (SOLARSYS_STATE *); bool GenerateDefault_landerReportCycle (SOLARSYS_STATE *); Modified: trunk/sc2/src/uqm/planets/generate/gendru.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendru.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gendru.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -33,8 +33,10 @@ static bool GenerateDruuge_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateDruugeFunctions = { @@ -48,6 +50,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDruuge_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDruuge_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -127,34 +132,38 @@ } static bool -onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) +GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - if (!GET_GAME_STATE (ROSY_SPHERE)) - { // Just picked up the Rosy Sphere from a ruin - SetLanderTakeoff (); + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + GenerateDefault_landerReportCycle (solarSys); - SET_GAME_STATE (ROSY_SPHERE, 1); - SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1); + // The artifact can be picked up from any ruin + if (!GET_GAME_STATE (ROSY_SPHERE)) + { // Just picked up the Rosy Sphere from a ruin + SetLanderTakeoff (); + + SET_GAME_STATE (ROSY_SPHERE, 1); + SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1); + } + + return false; // do not remove the node } - (void) solarSys; (void) whichNode; - - return true; // give whatever report is next + return false; } -static bool +static COUNT GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, onRuinPickedUp); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genilw.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genilw.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genilw.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -30,8 +30,10 @@ static bool GenerateIlwrath_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateIlwrath_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateIlwrathFunctions = { @@ -45,6 +47,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateIlwrath_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateIlwrath_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -117,19 +122,29 @@ return true; } -static bool +static COUNT GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; + return 0; +} - return true; +static bool +GenerateIlwrath_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } + + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/genmel.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genmel.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genmel.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -42,6 +42,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/genmyc.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genmyc.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genmyc.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -34,10 +34,12 @@ static bool GenerateMycon_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateMycon_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -static bool GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateMycon_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateMyconFunctions = { @@ -51,6 +53,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateMycon_generateEnergy, /* .generateLife = */ GenerateMycon_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateMycon_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -182,32 +187,21 @@ return true; } -static bool +static COUNT GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (CurStarDescPtr->Index == SUN_DEVICE_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (SUN_DEVICE)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); - - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (SUN_DEVICE, 1); - SET_GAME_STATE (SUN_DEVICE_ON_SHIP, 1); - SET_GAME_STATE (MYCON_VISITS, 0); - - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } - - return true; + return GenerateDefault_generateArtifact (solarSys, whichNode); } if ((CurStarDescPtr->Index == EGG_CASE0_DEFINED @@ -215,50 +209,77 @@ || CurStarDescPtr->Index == EGG_CASE2_DEFINED) && matchWorld (solarSys, world, 0, MATCH_PLANET)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again // XXX: DiscoveryString is set by generateOrbital() only when the // node has not been picked up yet - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0) - && !solarSys->SysInfo.PlanetInfo.DiscoveryString) + if (!solarSys->SysInfo.PlanetInfo.DiscoveryString) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); - - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) + return GenerateDefault_generateArtifact (solarSys, whichNode); + } + + return 0; +} + +static bool +GenerateMycon_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (CurStarDescPtr->Index == SUN_DEVICE_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + assert (!GET_GAME_STATE (SUN_DEVICE) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (SUN_DEVICE, 1); + SET_GAME_STATE (SUN_DEVICE_ON_SHIP, 1); + SET_GAME_STATE (MYCON_VISITS, 0); + + return true; // picked up + } + + if ((CurStarDescPtr->Index == EGG_CASE0_DEFINED + || CurStarDescPtr->Index == EGG_CASE1_DEFINED + || CurStarDescPtr->Index == EGG_CASE2_DEFINED) + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + assert (whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + switch (CurStarDescPtr->Index) { - switch (CurStarDescPtr->Index) - { - case EGG_CASE0_DEFINED: - SET_GAME_STATE (EGG_CASE0_ON_SHIP, 1); - break; - case EGG_CASE1_DEFINED: - SET_GAME_STATE (EGG_CASE1_ON_SHIP, 1); - break; - case EGG_CASE2_DEFINED: - SET_GAME_STATE (EGG_CASE2_ON_SHIP, 1); - break; - } - - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); + case EGG_CASE0_DEFINED: + SET_GAME_STATE (EGG_CASE0_ON_SHIP, 1); + break; + case EGG_CASE1_DEFINED: + SET_GAME_STATE (EGG_CASE1_ON_SHIP, 1); + break; + case EGG_CASE2_DEFINED: + SET_GAME_STATE (EGG_CASE2_ON_SHIP, 1); + break; } - return true; + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } -static bool +static COUNT GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { - *whichNode = 0; + (void) whichNode; (void) solarSys; (void) world; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genorz.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genorz.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genorz.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../build.h" #include "../../comm.h" #include "../../encount.h" @@ -34,8 +33,10 @@ static bool GenerateOrz_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateOrz_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateOrz_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateOrzFunctions = { @@ -49,6 +50,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateOrz_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateOrz_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -162,42 +166,58 @@ return true; } -static bool +static COUNT GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED && matchWorld (solarSys, world, 1, 2)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (TAALO_PROTECTOR)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (TAALO_PROTECTOR, 1); - SET_GAME_STATE (TAALO_PROTECTOR_ON_SHIP, 1); + if (CurStarDescPtr->Index == ORZ_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + return GenerateDefault_generateRuins (solarSys, whichNode); + } - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } + return 0; +} - return true; +static bool +GenerateOrz_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED + && matchWorld (solarSys, world, 1, 2)) + { + assert (!GET_GAME_STATE (TAALO_PROTECTOR) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (TAALO_PROTECTOR, 1); + SET_GAME_STATE (TAALO_PROTECTOR_ON_SHIP, 1); + + return true; // picked up } if (CurStarDescPtr->Index == ORZ_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; } - *whichNode = 0; - return true; + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/genpet.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genpet.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genpet.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -32,8 +32,10 @@ static bool GenerateTalkingPet_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateTalkingPet_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateTalkingPet_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); static void ZapToUrquanEncounter (void); @@ -49,6 +51,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateTalkingPet_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateTalkingPet_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -154,21 +159,33 @@ return true; } -static bool +static COUNT GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } +static bool +GenerateTalkingPet_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } + + (void) whichNode; + return false; +} + static void ZapToUrquanEncounter (void) { Modified: trunk/sc2/src/uqm/planets/generate/genpku.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genpku.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genpku.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -31,8 +31,10 @@ static bool GeneratePkunk_generatePlanets (SOLARSYS_STATE *solarSys); static bool GeneratePkunk_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GeneratePkunk_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generatePkunkFunctions = { @@ -46,6 +48,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GeneratePkunk_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GeneratePkunk_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -117,34 +122,38 @@ } static bool -onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) +GeneratePkunk_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - if (!GET_GAME_STATE (CLEAR_SPINDLE)) - { // Just picked up the Clear Spindle from a ruin - SetLanderTakeoff (); + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + GenerateDefault_landerReportCycle (solarSys); - SET_GAME_STATE (CLEAR_SPINDLE, 1); - SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1); + // The artifact can be picked up from any ruin + if (!GET_GAME_STATE (CLEAR_SPINDLE)) + { // Just picked up the Clear Spindle from a ruin + SetLanderTakeoff (); + + SET_GAME_STATE (CLEAR_SPINDLE, 1); + SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1); + } + + return false; // do not remove the node } - (void) solarSys; (void) whichNode; - - return true; // give whatever report is next + return false; } -static bool +static COUNT GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, onRuinPickedUp); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genrain.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genrain.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genrain.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -39,6 +39,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gensam.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensam.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensam.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -49,6 +49,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/genshof.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genshof.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genshof.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -43,6 +43,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gensly.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensly.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensly.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -37,6 +37,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/gensol.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensol.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensol.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -20,7 +20,6 @@ #include "../lander.h" #include "../lifeform.h" #include "../planets.h" -#include "../scan.h" #include "../../build.h" #include "../../encount.h" #include "../../globdata.h" @@ -40,10 +39,12 @@ PLANET_DESC *world); static bool GenerateSol_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -static bool GenerateSol_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateSol_generateLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateSol_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); static int init_probe (void); static void check_probe (void); @@ -60,6 +61,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateSol_generateEnergy, /* .generateLife = */ GenerateSol_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateSol_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -509,88 +513,100 @@ return true; } -static bool +static COUNT GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 8, MATCH_PLANET)) { /* Pluto */ + // This check is needed because the retrieval bit is not set for + // this node to keep it on the surface while the lander is taking off if (GET_GAME_STATE (FOUND_PLUTO_SPATHI)) { // already picked up - *whichNode = 0; - return true; + return 0; } solarSys->SysInfo.PlanetInfo.CurPt.x = 20; solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT - 8; - *whichNode = 1; // only matters when count is requested - - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { // Ran into Fwiffo on Pluto - // Retrieval status is cleared to keep the node on the map - // while the lander is taking off. FOUND_PLUTO_SPATHI bit - // will keep the node from showing up on subsequent visits. - setNodeNotRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0); - - #define FWIFFO_FRAGS 8 - if (!KillLanderCrewSeq (FWIFFO_FRAGS, ONE_SECOND / 20)) - return true; // lander probably died - - SET_GAME_STATE (FOUND_PLUTO_SPATHI, 1); - - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } - - return true; + return 1; // only matters when count is requested } if (matchWorld (solarSys, world, 2, 1)) { /* Earth Moon */ + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (MOONBASE_DESTROYED)) { // already picked up - *whichNode = 0; - return true; + return 0; } solarSys->SysInfo.PlanetInfo.CurPt.x = MAP_WIDTH * 3 / 4; solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT * 1 / 4; - *whichNode = 1; // only matters when count is requested + return 1; // only matters when count is requested + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (MOONBASE_DESTROYED, 1); - SET_GAME_STATE (MOONBASE_ON_SHIP, 1); + (void) whichNode; + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateSol_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 8, MATCH_PLANET)) + { // Pluto + assert (!GET_GAME_STATE (FOUND_PLUTO_SPATHI) && whichNode == 0); + + // Ran into Fwiffo on Pluto + #define FWIFFO_FRAGS 8 + if (!KillLanderCrewSeq (FWIFFO_FRAGS, ONE_SECOND / 20)) + return false; // lander probably died - return true; + SET_GAME_STATE (FOUND_PLUTO_SPATHI, 1); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + // Do not remove the node from the surface while the lander is + // taking off. FOUND_PLUTO_SPATHI bit will keep the node from + // showing up on subsequent visits. + return false; } + + if (matchWorld (solarSys, world, 2, 1)) + { // Earth Moon + assert (!GET_GAME_STATE (MOONBASE_DESTROYED) && whichNode == 0); - *whichNode = 0; - return true; + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (MOONBASE_DESTROYED, 1); + SET_GAME_STATE (MOONBASE_ON_SHIP, 1); + + return true; // picked up + } + + (void) whichNode; + return false; } -static bool +static COUNT GenerateSol_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 2, 1)) { /* Earth Moon */ GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, 10, - NUM_CREATURE_TYPES + 1, whichNode); - return true; + NUM_CREATURE_TYPES + 1, &whichNode); + return whichNode; } - *whichNode = 0; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genspa.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genspa.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genspa.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -35,10 +35,14 @@ PLANET_DESC *planet); static bool GenerateSpathi_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); -static bool GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateSpathi_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateSpathi_pickupLife (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateSpathiFunctions = { @@ -52,6 +56,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateSpathi_generateEnergy, /* .generateLife = */ GenerateSpathi_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateSpathi_pickupEnergy, + /* .pickupLife = */ GenerateSpathi_pickupLife, }; @@ -191,64 +198,79 @@ return true; } -static bool +static COUNT GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, 0)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (UMGAH_BROADCASTERS)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (UMGAH_BROADCASTERS, 1); - SET_GAME_STATE (UMGAH_BROADCASTERS_ON_SHIP, 1); + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateSpathi_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, 0)) + { + assert (!GET_GAME_STATE (UMGAH_BROADCASTERS) && whichNode == 0); - return true; + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (UMGAH_BROADCASTERS, 1); + SET_GAME_STATE (UMGAH_BROADCASTERS_ON_SHIP, 1); + + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } -static bool +static COUNT GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - if (GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED) - || GET_GAME_STATE (SPATHI_SHIELDED_SELVES)) - { // no creatures left - *whichNode = 0; - return true; - } + #define NUM_EVIL_ONES 32 + GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, NUM_EVIL_ONES, + NUM_CREATURE_TYPES, &whichNode); + return whichNode; + } - GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, 32, - NUM_CREATURE_TYPES, whichNode); + return 0; +} - if (solarSys->SysInfo.PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN]) - { - SET_GAME_STATE (SPATHI_CREATURES_EXAMINED, 1); - if (solarSys->SysInfo. - PlanetInfo.ScanRetrieveMask[BIOLOGICAL_SCAN] == 0xFFFFFFFF) - SET_GAME_STATE (SPATHI_CREATURES_ELIMINATED, 1); +static bool +GenerateSpathi_pickupLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + assert (!GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED) && + !GET_GAME_STATE (SPATHI_SHIELDED_SELVES)); + + SET_GAME_STATE (SPATHI_CREATURES_EXAMINED, 1); + if (countNodesRetrieved (&solarSys->SysInfo.PlanetInfo, BIOLOGICAL_SCAN) + + 1 == NUM_EVIL_ONES) + { // last creature picked up + SET_GAME_STATE (SPATHI_CREATURES_ELIMINATED, 1); } - return true; + return true; // picked up } - *whichNode = 0; - return true; + return GenerateDefault_pickupLife (solarSys, world, whichNode); } - Modified: trunk/sc2/src/uqm/planets/generate/gensup.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensup.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensup.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -31,8 +31,10 @@ static bool GenerateSupox_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateSupoxFunctions = { @@ -46,6 +48,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateSupox_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateSupox_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -118,33 +123,37 @@ } static bool -onRuinPickedUp (SOLARSYS_STATE *solarSys, COUNT whichNode) +GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) { - if (!GET_GAME_STATE (ULTRON_CONDITION)) - { // Just picked up the Ultron from a ruin - SetLanderTakeoff (); + if (matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + GenerateDefault_landerReportCycle (solarSys); - SET_GAME_STATE (ULTRON_CONDITION, 1); + // The artifact can be picked up from any ruin + if (!GET_GAME_STATE (ULTRON_CONDITION)) + { // Just picked up the Ultron from a ruin + SetLanderTakeoff (); + + SET_GAME_STATE (ULTRON_CONDITION, 1); + } + + return false; // do not remove the node } - (void) solarSys; (void) whichNode; - - return true; // give whatever report is next + return false; } -static bool +static COUNT GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, onRuinPickedUp); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } - *whichNode = 0; - return true; + return 0; } Modified: trunk/sc2/src/uqm/planets/generate/gensyr.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensyr.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gensyr.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -38,6 +38,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/genthrad.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genthrad.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genthrad.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../build.h" #include "../../comm.h" #include "../../encount.h" @@ -34,8 +33,10 @@ static bool GenerateThraddash_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateThraddash_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateThraddash_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateThraddashFunctions = { @@ -49,6 +50,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateThraddash_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateThraddash_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -155,44 +159,60 @@ return true; } -static bool +static COUNT GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode) + PLANET_DESC *world, COUNT whichNode) { if (CurStarDescPtr->Index == THRADD_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (AQUA_HELIX)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (HELIX_VISITS, 0); - SET_GAME_STATE (AQUA_HELIX, 1); - SET_GAME_STATE (AQUA_HELIX_ON_SHIP, 1); - SET_GAME_STATE (HELIX_UNPROTECTED, 1); + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateThraddash_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (CurStarDescPtr->Index == THRADD_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } - return true; + if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + assert (!GET_GAME_STATE (AQUA_HELIX) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (HELIX_VISITS, 0); + SET_GAME_STATE (AQUA_HELIX, 1); + SET_GAME_STATE (AQUA_HELIX_ON_SHIP, 1); + SET_GAME_STATE (HELIX_UNPROTECTED, 1); + + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/gentrap.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gentrap.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/gentrap.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -36,6 +36,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateDefault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateDefault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; Modified: trunk/sc2/src/uqm/planets/generate/genutw.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genutw.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genutw.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../build.h" #include "../../comm.h" #include "../../encount.h" @@ -35,8 +34,10 @@ static bool GenerateUtwig_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateUtwig_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateUtwig_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateUtwigFunctions = { @@ -50,6 +51,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateUtwig_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateUtwig_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -206,45 +210,61 @@ return true; } -static bool +static COUNT GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (CurStarDescPtr->Index == UTWIG_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - GenerateDefault_generateRuins (solarSys, whichNode); - GenerateDefault_pickupRuins (solarSys, NULL); - return true; + return GenerateDefault_generateRuins (solarSys, whichNode); } if (CurStarDescPtr->Index == BOMB_DEFINED && matchWorld (solarSys, world, 5, 1)) { + // This check is redundant since the retrieval bit will keep the + // node from showing up again if (GET_GAME_STATE (UTWIG_BOMB)) { // already picked up - *whichNode = 0; - return true; + return 0; } - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (&solarSys->SysInfo.PlanetInfo, ENERGY_SCAN, 0)) - { - SET_GAME_STATE (UTWIG_BOMB, 1); - SET_GAME_STATE (UTWIG_BOMB_ON_SHIP, 1); - SET_GAME_STATE (DRUUGE_MANNER, 1); - SET_GAME_STATE (DRUUGE_VISITS, 0); - SET_GAME_STATE (DRUUGE_HOME_VISITS, 0); + return 0; +} - GenerateDefault_landerReport (solarSys); - SetLanderTakeoff (); - } +static bool +GenerateUtwig_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{ + if (CurStarDescPtr->Index == UTWIG_DEFINED + && matchWorld (solarSys, world, 0, MATCH_PLANET)) + { + // Standard ruins report + GenerateDefault_landerReportCycle (solarSys); + return false; + } - return true; + if (CurStarDescPtr->Index == BOMB_DEFINED + && matchWorld (solarSys, world, 5, 1)) + { + assert (!GET_GAME_STATE (UTWIG_BOMB) && whichNode == 0); + + GenerateDefault_landerReport (solarSys); + SetLanderTakeoff (); + + SET_GAME_STATE (UTWIG_BOMB, 1); + SET_GAME_STATE (UTWIG_BOMB_ON_SHIP, 1); + SET_GAME_STATE (DRUUGE_MANNER, 1); + SET_GAME_STATE (DRUUGE_VISITS, 0); + SET_GAME_STATE (DRUUGE_HOME_VISITS, 0); + + return true; // picked up } - *whichNode = 0; - return true; + (void) whichNode; + return false; } - Modified: trunk/sc2/src/uqm/planets/generate/genvault.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genvault.c 2011-04-24 19:47:22 UTC (rev 3586) +++ trunk/sc2/src/uqm/planets/generate/genvault.c 2011-04-26 02:21:34 UTC (rev 3587) @@ -19,7 +19,6 @@ #include "genall.h" #include "../lander.h" #include "../planets.h" -#include "../scan.h" #include "../../globdata.h" #include "../../nameref.h" #include "../../resinst.h" @@ -28,8 +27,10 @@ static bool GenerateVault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static bool GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT *whichNode); +static COUNT GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); +static bool GenerateVault_pickupEnergy (SOLARSYS_STATE *solarSys, + PLANET_DESC *world, COUNT whichNode); const GenerateFunctions generateVaultFunctions = { @@ -43,6 +44,9 @@ /* .generateMinerals = */ GenerateDefault_generateMinerals, /* .generateEnergy = */ GenerateVault_generateEnergy, /* .generateLife = */ GenerateDefault_generateLife, + /* .pickupMinerals = */ GenerateDefault_pickupMinerals, + /* .pickupEnergy = */ GenerateVault_pickupEnergy, + /* .pickupLife = */ GenerateDefault_pickupLife, }; @@ -74,50 +78,54 @@ return true; } -static bool +static COUNT GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT *whichNode) + COUNT whichNode) { if (matchWorld (solarSys, world, 0, 0)) { - PLANET_INFO *planetInfo = &solarSys->SysInfo.PlanetInfo; - - GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode); + } - if (isNodeRetrieved (planetInfo, ENERGY_SCAN, 0)) + return 0; +} + +static bool +GenerateVault_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, + COUNT whichNode) +{... [truncated message content] |
From: <av...@us...> - 2011-04-27 08:12:55
|
Revision: 3594 http://sc2.svn.sourceforge.net/sc2/?rev=3594&view=rev Author: avolkov Date: 2011-04-27 08:12:49 +0000 (Wed, 27 Apr 2011) Log Message: ----------- Unused function Logo() removed. We've never had a pre-splash logo and probably never will Modified Paths: -------------- trunk/sc2/src/uqm/fmv.c trunk/sc2/src/uqm/fmv.h trunk/sc2/src/uqm/starcon.c Modified: trunk/sc2/src/uqm/fmv.c =================================================================== --- trunk/sc2/src/uqm/fmv.c 2011-04-27 08:01:47 UTC (rev 3593) +++ trunk/sc2/src/uqm/fmv.c 2011-04-27 08:12:49 UTC (rev 3594) @@ -132,12 +132,5 @@ FadeScreen (FadeAllToBlack, 0); } -void -Logo (void) -{ - ShowPresentation ("slides.logo"); -} - - Modified: trunk/sc2/src/uqm/fmv.h =================================================================== --- trunk/sc2/src/uqm/fmv.h 2011-04-27 08:01:47 UTC (rev 3593) +++ trunk/sc2/src/uqm/fmv.h 2011-04-27 08:12:49 UTC (rev 3594) @@ -22,7 +22,6 @@ #include "libs/gfxlib.h" #define WANT_SHIP_SPINS -extern void Logo (void); extern void SplashScreen (void (* DoProcessing)(DWORD TimeOut)); extern void Introduction (void); extern void Victory (void); Modified: trunk/sc2/src/uqm/starcon.c =================================================================== --- trunk/sc2/src/uqm/starcon.c 2011-04-27 08:01:47 UTC (rev 3593) +++ trunk/sc2/src/uqm/starcon.c 2011-04-27 08:12:49 UTC (rev 3594) @@ -187,8 +187,6 @@ } log_add (log_Info, "We've loaded the Kernel"); - Logo (); - GLOBAL (CurrentActivity) = 0; // show splash and init the kernel in the meantime SplashScreen (BackgroundInitKernel); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2011-08-25 23:33:23
|
Revision: 3670 http://sc2.svn.sourceforge.net/sc2/?rev=3670&view=rev Author: avolkov Date: 2011-08-25 23:33:17 +0000 (Thu, 25 Aug 2011) Log Message: ----------- Cleanup of ENCOUNTER member fields abuse Modified Paths: -------------- trunk/sc2/src/uqm/comm.c trunk/sc2/src/uqm/encount.h trunk/sc2/src/uqm/hyper.c trunk/sc2/src/uqm/load.c trunk/sc2/src/uqm/planets/generate/genpet.c trunk/sc2/src/uqm/save.c Modified: trunk/sc2/src/uqm/comm.c =================================================================== --- trunk/sc2/src/uqm/comm.c 2011-08-25 21:34:10 UTC (rev 3669) +++ trunk/sc2/src/uqm/comm.c 2011-08-25 23:33:17 UTC (rev 3670) @@ -1536,7 +1536,6 @@ else { /* Encounter with a black globe in HS, prepare enemy ship list */ - COUNT NumShips; ENCOUNTER *EncounterPtr; // The encounter globe that the flagship collided with is moved @@ -1544,10 +1543,9 @@ hEncounter = GetHeadEncounter (); LockEncounter (hEncounter, &EncounterPtr); - NumShips = LONIBBLE (EncounterPtr->SD.Index); - for (i = 0; i < NumShips; ++i) + for (i = 0; i < EncounterPtr->num_ships; ++i) { - CloneShipFragment (EncounterPtr->SD.Type, + CloneShipFragment (EncounterPtr->race_id, &GLOBAL (npc_built_ship_q), EncounterPtr->ShipList[i].crew_level); } @@ -1588,12 +1586,11 @@ LockEncounter (hEncounter, &EncounterPtr); - NumShips = (BYTE)CountLinks (&GLOBAL (npc_built_ship_q)); - EncounterPtr->SD.Index = MAKE_BYTE (NumShips, - HINIBBLE (EncounterPtr->SD.Index)); - EncounterPtr->SD.Index |= ENCOUNTER_REFORMING; + NumShips = CountLinks (&GLOBAL (npc_built_ship_q)); + EncounterPtr->num_ships = NumShips; + EncounterPtr->flags |= ENCOUNTER_REFORMING; if (status == 0) - EncounterPtr->SD.Index |= ONE_SHOT_ENCOUNTER; + EncounterPtr->flags |= ONE_SHOT_ENCOUNTER; for (i = 0; i < NumShips; ++i) { Modified: trunk/sc2/src/uqm/encount.h =================================================================== --- trunk/sc2/src/uqm/encount.h 2011-08-25 21:34:10 UTC (rev 3669) +++ trunk/sc2/src/uqm/encount.h 2011-08-25 23:33:17 UTC (rev 3670) @@ -38,8 +38,16 @@ typedef HLINK HENCOUNTER; #define MAX_HYPER_SHIPS 7 + +// ENCOUNTER.flags +// XXX: Currently, the flags are combined with num_ships into a single BYTE +// in the savegames: num_ships occupy the low nibble and flags the high one. +// Bits 4 and 5 are available for more flags in the savegames, +// and bits 0-3 available in the game but will not be saved. #define ONE_SHOT_ENCOUNTER (1 << 7) #define ENCOUNTER_REFORMING (1 << 6) +#define ENCOUNTER_SHIPS_MASK 0x0f +#define ENCOUNTER_FLAGS_MASK 0xf0 struct brief_ship_info { @@ -61,9 +69,14 @@ SIZE transition_state; POINT origin; COUNT radius; + BYTE race_id; + BYTE num_ships; + BYTE flags; + // See ENCOUNTER.flags above + POINT loc_pt; - STAR_DESC SD; BRIEF_SHIP_INFO ShipList[MAX_HYPER_SHIPS]; + // Only the crew_level member is currently used SDWORD log_x, log_y; }; Modified: trunk/sc2/src/uqm/hyper.c =================================================================== --- trunk/sc2/src/uqm/hyper.c 2011-08-25 21:34:10 UTC (rev 3669) +++ trunk/sc2/src/uqm/hyper.c 2011-08-25 23:33:17 UTC (rev 3670) @@ -225,13 +225,13 @@ encounter_flags = ONE_SHOT_ENCOUNTER; } - + // There can be only one! (of either Slylandro or Melnorme) for (hEncounter = GetHeadEncounter (); hEncounter; hEncounter = hNextEncounter) { LockEncounter (hEncounter, &EncounterPtr); hNextEncounter = GetSuccEncounter (EncounterPtr); - if (EncounterPtr->SD.Type == Type) + if (EncounterPtr->race_id == Type) { percent = 0; hNextEncounter = 0; @@ -266,8 +266,8 @@ memset (EncounterPtr, 0, sizeof (*EncounterPtr)); EncounterPtr->origin = FleetPtr->loc; EncounterPtr->radius = encounter_radius; - EncounterPtr->SD.Index = encounter_flags; - EncounterPtr->SD.Type = Type; + EncounterPtr->flags = encounter_flags; + EncounterPtr->race_id = Type; UnlockEncounter (hEncounter); PutEncounter (hEncounter); @@ -956,20 +956,20 @@ if (GET_GAME_STATE (ARILOU_SPACE_SIDE) >= 2) return 0; - if (EncounterPtr->SD.Index & ENCOUNTER_REFORMING) + if (EncounterPtr->flags & ENCOUNTER_REFORMING) { - EncounterPtr->SD.Index &= ~ENCOUNTER_REFORMING; + EncounterPtr->flags &= ~ENCOUNTER_REFORMING; EncounterPtr->transition_state = 100; - if ((EncounterPtr->SD.Index & ONE_SHOT_ENCOUNTER) - || LONIBBLE (EncounterPtr->SD.Index) == 0) + if ((EncounterPtr->flags & ONE_SHOT_ENCOUNTER) + || EncounterPtr->num_ships == 0) return 0; } - if (LONIBBLE (EncounterPtr->SD.Index)) + if (EncounterPtr->num_ships) { NewEncounter = FALSE; - enc_pt = EncounterPtr->SD.star_pt; + enc_pt = EncounterPtr->loc_pt; } else { @@ -987,7 +987,7 @@ radius_squared = (DWORD)EncounterPtr->radius * EncounterPtr->radius; - Type = EncounterPtr->SD.Type; + Type = EncounterPtr->race_id; NumShips = LONIBBLE (EncounterMakeup[Type]); for (i = HINIBBLE (EncounterMakeup[Type]) - NumShips; i; --i) { @@ -998,9 +998,7 @@ if (NumShips > MAX_HYPER_SHIPS) NumShips = MAX_HYPER_SHIPS; - - EncounterPtr->SD.Index = - MAKE_BYTE (NumShips, HINIBBLE (EncounterPtr->SD.Index)); + EncounterPtr->num_ships = NumShips; for (i = 0; i < NumShips; ++i) { BRIEF_SHIP_INFO *BSIPtr = &EncounterPtr->ShipList[i]; @@ -1038,7 +1036,7 @@ dy = enc_pt.y - EncounterPtr->origin.y; } while ((DWORD)((long)dx * dx + (long)dy * dy) > radius_squared); - EncounterPtr->SD.star_pt = enc_pt; + EncounterPtr->loc_pt = enc_pt; EncounterPtr->log_x = UNIVERSE_TO_LOGX (enc_pt.x); EncounterPtr->log_y = UNIVERSE_TO_LOGY (enc_pt.y); } @@ -1197,8 +1195,8 @@ cur_facing = ANGLE_TO_FACING ( GetVelocityTravelAngle (&ElementPtr->velocity)); delta_facing = NORMALIZE_FACING (cur_facing - ANGLE_TO_FACING ( - ARCTAN (puniverse->x - EncounterPtr->SD.star_pt.x, - puniverse->y - EncounterPtr->SD.star_pt.y))); + ARCTAN (puniverse->x - EncounterPtr->loc_pt.x, + puniverse->y - EncounterPtr->loc_pt.y))); if (delta_facing || (delta_x == 0 && delta_y == 0)) { SIZE speed; @@ -1208,7 +1206,7 @@ }; #define ENCOUNTER_TRACK_WAIT 3 - speed = RaceHyperSpeed[EncounterPtr->SD.Type]; + speed = RaceHyperSpeed[EncounterPtr->race_id]; if (delta_facing < ANGLE_TO_FACING (HALF_CIRCLE)) --cur_facing; else @@ -1233,14 +1231,14 @@ } EncounterPtr->log_x += delta_x; EncounterPtr->log_y -= delta_y; - EncounterPtr->SD.star_pt.x = LOGX_TO_UNIVERSE (EncounterPtr->log_x); - EncounterPtr->SD.star_pt.y = LOGY_TO_UNIVERSE (EncounterPtr->log_y); + EncounterPtr->loc_pt.x = LOGX_TO_UNIVERSE (EncounterPtr->log_x); + EncounterPtr->loc_pt.y = LOGY_TO_UNIVERSE (EncounterPtr->log_y); encounter_radius = EncounterPtr->radius + (GRID_OFFSET >> 1); - delta_x = EncounterPtr->SD.star_pt.x - EncounterPtr->origin.x; + delta_x = EncounterPtr->loc_pt.x - EncounterPtr->origin.x; if (delta_x < 0) delta_x = -delta_x; - delta_y = EncounterPtr->SD.star_pt.y - EncounterPtr->origin.y; + delta_y = EncounterPtr->loc_pt.y - EncounterPtr->origin.y; if (delta_y < 0) delta_y = -delta_y; if ((COUNT)delta_x >= encounter_radius @@ -1248,6 +1246,7 @@ || (DWORD)delta_x * delta_x + (DWORD)delta_y * delta_y >= (DWORD)encounter_radius * encounter_radius) { + // Encounter globe traveled outside the SoI and now disappears ElementPtr->state_flags |= NONSOLID; ElementPtr->life_span = 0; @@ -1266,8 +1265,8 @@ } } - ex = EncounterPtr->SD.star_pt.x; - ey = EncounterPtr->SD.star_pt.y; + ex = EncounterPtr->loc_pt.x; + ey = EncounterPtr->loc_pt.y; if (ex - puniverse->x >= -UNIT_SCREEN_WIDTH && ex - puniverse->x <= UNIT_SCREEN_WIDTH && ey - puniverse->y >= -UNIT_SCREEN_HEIGHT Modified: trunk/sc2/src/uqm/load.c =================================================================== --- trunk/sc2/src/uqm/load.c 2011-08-25 21:34:10 UTC (rev 3669) +++ trunk/sc2/src/uqm/load.c 2011-08-25 23:33:17 UTC (rev 3670) @@ -325,6 +325,7 @@ LoadEncounter (ENCOUNTER *EncounterPtr, DECODE_REF fh) { COUNT i; + BYTE tmpb; cread_ptr (fh); /* useless ptr; HENCOUNTER pred */ EncounterPtr->pred = 0; @@ -336,18 +337,19 @@ cread_16s (fh, &EncounterPtr->origin.x); cread_16s (fh, &EncounterPtr->origin.y); cread_16 (fh, &EncounterPtr->radius); - // STAR_DESC fields - cread_16s (fh, &EncounterPtr->SD.star_pt.x); - cread_16s (fh, &EncounterPtr->SD.star_pt.y); - cread_8 (fh, &EncounterPtr->SD.Type); - cread_8 (fh, &EncounterPtr->SD.Index); + // former STAR_DESC fields + cread_16s (fh, &EncounterPtr->loc_pt.x); + cread_16s (fh, &EncounterPtr->loc_pt.y); + cread_8 (fh, &EncounterPtr->race_id); + cread_8 (fh, &tmpb); + EncounterPtr->num_ships = tmpb & ENCOUNTER_SHIPS_MASK; + EncounterPtr->flags = tmpb & ENCOUNTER_FLAGS_MASK; cread_16 (fh, NULL); /* alignment padding */ // Load each entry in the BRIEF_SHIP_INFO array for (i = 0; i < MAX_HYPER_SHIPS; i++) { BRIEF_SHIP_INFO *ShipInfo = &EncounterPtr->ShipList[i]; - BYTE tmpb; cread_16 (fh, NULL); /* useless; was SHIP_INFO.ship_flags */ cread_8 (fh, &ShipInfo->race_id); Modified: trunk/sc2/src/uqm/planets/generate/genpet.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genpet.c 2011-08-25 21:34:10 UTC (rev 3669) +++ trunk/sc2/src/uqm/planets/generate/genpet.c 2011-08-25 23:33:17 UTC (rev 3670) @@ -211,17 +211,18 @@ TemplatePtr = LockFleetInfo (&GLOBAL (avail_race_q), hStarShip); EncounterPtr->origin = TemplatePtr->loc; EncounterPtr->radius = TemplatePtr->actual_strength; - EncounterPtr->SD.Type = URQUAN_SHIP; - EncounterPtr->SD.Index = MAKE_BYTE (1, 0) | ONE_SHOT_ENCOUNTER; + EncounterPtr->race_id = URQUAN_SHIP; + EncounterPtr->num_ships = 1; + EncounterPtr->flags = ONE_SHOT_ENCOUNTER; BSIPtr = &EncounterPtr->ShipList[0]; BSIPtr->race_id = URQUAN_SHIP; BSIPtr->crew_level = TemplatePtr->crew_level; BSIPtr->max_crew = TemplatePtr->max_crew; BSIPtr->max_energy = TemplatePtr->max_energy; - EncounterPtr->SD.star_pt.x = 5288; - EncounterPtr->SD.star_pt.y = 4892; - EncounterPtr->log_x = UNIVERSE_TO_LOGX (EncounterPtr->SD.star_pt.x); - EncounterPtr->log_y = UNIVERSE_TO_LOGY (EncounterPtr->SD.star_pt.y); + EncounterPtr->loc_pt.x = 5288; + EncounterPtr->loc_pt.y = 4892; + EncounterPtr->log_x = UNIVERSE_TO_LOGX (EncounterPtr->loc_pt.x); + EncounterPtr->log_y = UNIVERSE_TO_LOGY (EncounterPtr->loc_pt.y); GLOBAL_SIS (log_x) = EncounterPtr->log_x; GLOBAL_SIS (log_y) = EncounterPtr->log_y; UnlockFleetInfo (&GLOBAL (avail_race_q), hStarShip); @@ -236,8 +237,8 @@ GLOBAL (CurrentActivity) = MAKE_WORD (IN_HYPERSPACE, 0) | START_ENCOUNTER; - dx = CurStarDescPtr->star_pt.x - EncounterPtr->SD.star_pt.x; - dy = CurStarDescPtr->star_pt.y - EncounterPtr->SD.star_pt.y; + dx = CurStarDescPtr->star_pt.x - EncounterPtr->loc_pt.x; + dy = CurStarDescPtr->star_pt.y - EncounterPtr->loc_pt.y; dx = (SIZE)square_root ((long)dx * dx + (long)dy * dy) + (FUEL_TANK_SCALE >> 1); @@ -250,7 +251,7 @@ DeltaSISGauges (0, dx, 0); } DrawSISMessage (NULL); - DrawHyperCoords (EncounterPtr->SD.star_pt); + DrawHyperCoords (EncounterPtr->loc_pt); UnlockMutex (GraphicsLock); UnlockEncounter (hEncounter); Modified: trunk/sc2/src/uqm/save.c =================================================================== --- trunk/sc2/src/uqm/save.c 2011-08-25 21:34:10 UTC (rev 3669) +++ trunk/sc2/src/uqm/save.c 2011-08-25 23:33:17 UTC (rev 3670) @@ -276,11 +276,13 @@ cwrite_16 (fh, EncounterPtr->origin.x); cwrite_16 (fh, EncounterPtr->origin.y); cwrite_16 (fh, EncounterPtr->radius); - // STAR_DESC fields - cwrite_16 (fh, EncounterPtr->SD.star_pt.x); - cwrite_16 (fh, EncounterPtr->SD.star_pt.y); - cwrite_8 (fh, EncounterPtr->SD.Type); - cwrite_8 (fh, EncounterPtr->SD.Index); + // former STAR_DESC fields + cwrite_16 (fh, EncounterPtr->loc_pt.x); + cwrite_16 (fh, EncounterPtr->loc_pt.y); + cwrite_8 (fh, EncounterPtr->race_id); + // XXX: writing combined fields to maintain savegame compatibility + cwrite_8 (fh, (EncounterPtr->num_ships & ENCOUNTER_SHIPS_MASK) + | (EncounterPtr->flags & ENCOUNTER_FLAGS_MASK)); cwrite_16 (fh, 0); /* alignment padding */ // Save each entry in the BRIEF_SHIP_INFO array This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2011-09-09 21:36:42
|
Revision: 3695 http://sc2.svn.sourceforge.net/sc2/?rev=3695&view=rev Author: avolkov Date: 2011-09-09 21:36:34 +0000 (Fri, 09 Sep 2011) Log Message: ----------- Refactor scan nodes generation funcs: get rid of PLANET_INFO.CurXXX fields and pass a struct to generation funcs to fill instead; makes SOLARSYS_STATE const for the funcs; gets rid of unconst casts; bug #50 Modified Paths: -------------- trunk/sc2/src/uqm/planets/generate/genand.c trunk/sc2/src/uqm/planets/generate/genburv.c trunk/sc2/src/uqm/planets/generate/gendefault.c trunk/sc2/src/uqm/planets/generate/gendefault.h trunk/sc2/src/uqm/planets/generate/gendru.c trunk/sc2/src/uqm/planets/generate/genilw.c trunk/sc2/src/uqm/planets/generate/genmyc.c trunk/sc2/src/uqm/planets/generate/genorz.c trunk/sc2/src/uqm/planets/generate/genpet.c trunk/sc2/src/uqm/planets/generate/genpku.c trunk/sc2/src/uqm/planets/generate/gensol.c trunk/sc2/src/uqm/planets/generate/genspa.c trunk/sc2/src/uqm/planets/generate/gensup.c trunk/sc2/src/uqm/planets/generate/genthrad.c trunk/sc2/src/uqm/planets/generate/genutw.c trunk/sc2/src/uqm/planets/generate/genvault.c trunk/sc2/src/uqm/planets/generate/genvux.c trunk/sc2/src/uqm/planets/generate/genwreck.c trunk/sc2/src/uqm/planets/generate/genyeh.c trunk/sc2/src/uqm/planets/generate/genzoq.c trunk/sc2/src/uqm/planets/generate.h trunk/sc2/src/uqm/planets/plandata.h trunk/sc2/src/uqm/planets/planets.h trunk/sc2/src/uqm/planets/scan.c trunk/sc2/src/uqm/planets/scan.h trunk/sc2/src/uqm/planets/sundata.h trunk/sc2/src/uqm/planets/surface.c trunk/sc2/src/uqm/uqmdebug.c Modified: trunk/sc2/src/uqm/planets/generate/genand.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genand.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genand.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -30,8 +30,8 @@ static bool GenerateAndrosynth_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateAndrosynth_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateAndrosynth_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateAndrosynth_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -152,12 +152,12 @@ } static COUNT -GenerateAndrosynth_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateAndrosynth_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 1, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genburv.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genburv.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genburv.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -30,8 +30,8 @@ PLANET_DESC *planet); static bool GenerateBurvixese_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateBurvixese_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateBurvixese_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -104,11 +104,11 @@ rand_val = RandomContext_GetSeed (SysGenRNG); solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN] = rand_val; - GenerateLifeForms (&solarSys->SysInfo, GENERATE_ALL); + GenerateLifeForms (&solarSys->SysInfo, GENERATE_ALL, NULL); rand_val = RandomContext_GetSeed (SysGenRNG); solarSys->SysInfo.PlanetInfo.ScanSeed[MINERAL_SCAN] = rand_val; - GenerateMineralDeposits (&solarSys->SysInfo, GENERATE_ALL); + GenerateMineralDeposits (&solarSys->SysInfo, GENERATE_ALL, NULL); solarSys->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN] = rand_val; @@ -140,12 +140,12 @@ } static COUNT -GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateBurvixese_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } if (matchWorld (solarSys, world, 0, 0)) @@ -157,7 +157,7 @@ return 0; } - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/gendefault.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendefault.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/gendefault.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -27,17 +27,6 @@ #include "libs/mathlib.h" -bool GenerateDefault_initNpcs (SOLARSYS_STATE *solarSys); -bool GenerateDefault_reinitNpcs (SOLARSYS_STATE *solarSys); -bool GenerateDefault_uninitNpcs (SOLARSYS_STATE *solarSys); -bool GenerateDefault_generatePlanets (SOLARSYS_STATE *solarSys); -bool GenerateDefault_generateMoons (SOLARSYS_STATE *solarSys, - PLANET_DESC *planet); -bool GenerateDefault_generateName (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); -bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); - static void GeneratePlanets (SOLARSYS_STATE *system); static void check_yehat_rebellion (void); @@ -113,7 +102,8 @@ } bool -GenerateDefault_generateName (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +GenerateDefault_generateName (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world) { COUNT i = planetIndex (solarSys, world); utf8StringCopy (GLOBAL_SIS (PlanetName), sizeof (GLOBAL_SIS (PlanetName)), @@ -149,11 +139,11 @@ rand_val = RandomContext_GetSeed (SysGenRNG); sysInfo->PlanetInfo.ScanSeed[BIOLOGICAL_SCAN] = rand_val; - GenerateLifeForms (sysInfo, GENERATE_ALL); + GenerateLifeForms (sysInfo, GENERATE_ALL, NULL); rand_val = RandomContext_GetSeed (SysGenRNG); sysInfo->PlanetInfo.ScanSeed[MINERAL_SCAN] = rand_val; - GenerateMineralDeposits (sysInfo, GENERATE_ALL); + GenerateMineralDeposits (sysInfo, GENERATE_ALL, NULL); sysInfo->PlanetInfo.ScanSeed[ENERGY_SCAN] = rand_val; LoadPlanet (NULL); @@ -162,10 +152,10 @@ } COUNT -GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode) +GenerateDefault_generateMinerals (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { - return GenerateMineralDeposits (&solarSys->SysInfo, whichNode); + return GenerateMineralDeposits (&solarSys->SysInfo, whichNode, info); (void) world; } @@ -181,12 +171,13 @@ } COUNT -GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateDefault_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { (void) whichNode; (void) solarSys; (void) world; + (void) info; return 0; } @@ -204,10 +195,10 @@ } COUNT -GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateDefault_generateLife (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { - return GenerateLifeForms (&solarSys->SysInfo, whichNode); + return GenerateLifeForms (&solarSys->SysInfo, whichNode, info); (void) world; } @@ -223,18 +214,21 @@ } COUNT -GenerateDefault_generateArtifact (SOLARSYS_STATE *solarSys, COUNT whichNode) +GenerateDefault_generateArtifact (const SOLARSYS_STATE *solarSys, + COUNT whichNode, NODE_INFO *info) { // Generate an energy node at a random location - return GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, 1, 0, whichNode); + return GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, 1, 0, + whichNode, info); } COUNT -GenerateDefault_generateRuins (SOLARSYS_STATE *solarSys, COUNT whichNode) +GenerateDefault_generateRuins (const SOLARSYS_STATE *solarSys, + COUNT whichNode, NODE_INFO *info) { // Generate a standard spread of city ruins of a destroyed civilization return GenerateRandomNodes (&solarSys->SysInfo, ENERGY_SCAN, NUM_RACE_RUINS, - 0, whichNode); + 0, whichNode, info); } static inline void Modified: trunk/sc2/src/uqm/planets/generate/gendefault.h =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendefault.h 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/gendefault.h 2011-09-09 21:36:34 UTC (rev 3695) @@ -31,16 +31,16 @@ bool GenerateDefault_generatePlanets (SOLARSYS_STATE *solarSys); bool GenerateDefault_generateMoons (SOLARSYS_STATE *solarSys, PLANET_DESC *planet); -bool GenerateDefault_generateName (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); +bool GenerateDefault_generateName (const SOLARSYS_STATE *, + const PLANET_DESC *world); bool GenerateDefault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -COUNT GenerateDefault_generateMinerals (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); -COUNT GenerateDefault_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); -COUNT GenerateDefault_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +COUNT GenerateDefault_generateMinerals (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); +COUNT GenerateDefault_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); +COUNT GenerateDefault_generateLife (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); bool GenerateDefault_pickupMinerals (SOLARSYS_STATE *, PLANET_DESC *world, COUNT whichNode); bool GenerateDefault_pickupEnergy (SOLARSYS_STATE *, PLANET_DESC *world, @@ -48,8 +48,10 @@ bool GenerateDefault_pickupLife (SOLARSYS_STATE *, PLANET_DESC *world, COUNT whichNode); -COUNT GenerateDefault_generateArtifact (SOLARSYS_STATE *, COUNT whichNode); -COUNT GenerateDefault_generateRuins (SOLARSYS_STATE *, COUNT whichNode); +COUNT GenerateDefault_generateArtifact (const SOLARSYS_STATE *, + COUNT whichNode, NODE_INFO *info); +COUNT GenerateDefault_generateRuins (const SOLARSYS_STATE *, + COUNT whichNode, NODE_INFO *info); bool GenerateDefault_landerReport (SOLARSYS_STATE *); bool GenerateDefault_landerReportCycle (SOLARSYS_STATE *); Modified: trunk/sc2/src/uqm/planets/generate/gendru.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gendru.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/gendru.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -33,8 +33,8 @@ static bool GenerateDruuge_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateDruuge_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateDruuge_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateDruuge_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -156,12 +156,12 @@ } static COUNT -GenerateDruuge_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateDruuge_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genilw.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genilw.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genilw.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -30,8 +30,8 @@ static bool GenerateIlwrath_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateIlwrath_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateIlwrath_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -123,12 +123,12 @@ } static COUNT -GenerateIlwrath_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateIlwrath_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genmyc.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genmyc.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genmyc.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -35,10 +35,10 @@ static bool GenerateMycon_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateMycon_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); -static COUNT GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateMycon_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); +static COUNT GenerateMycon_generateLife (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateMycon_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -189,8 +189,8 @@ } static COUNT -GenerateMycon_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateMycon_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (CurStarDescPtr->Index == SUN_DEVICE_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) @@ -202,7 +202,7 @@ return 0; } - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } if ((CurStarDescPtr->Index == EGG_CASE0_DEFINED @@ -219,7 +219,7 @@ return 0; } - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } return 0; @@ -275,12 +275,14 @@ } static COUNT -GenerateMycon_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateMycon_generateLife (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { + // Gee, I wonder why there isn't any life in Mycon systems... (void) whichNode; (void) solarSys; (void) world; + (void) info; return 0; } Modified: trunk/sc2/src/uqm/planets/generate/genorz.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genorz.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genorz.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -34,8 +34,8 @@ static bool GenerateOrz_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateOrz_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateOrz_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateOrz_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -168,8 +168,8 @@ } static COUNT -GenerateOrz_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateOrz_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (CurStarDescPtr->Index == TAALO_PROTECTOR_DEFINED && matchWorld (solarSys, world, 1, 2)) @@ -181,13 +181,13 @@ return 0; } - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } if (CurStarDescPtr->Index == ORZ_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genpet.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genpet.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genpet.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -33,8 +33,8 @@ static bool GenerateTalkingPet_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateTalkingPet_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateTalkingPet_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateTalkingPet_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -161,12 +161,12 @@ } static COUNT -GenerateTalkingPet_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateTalkingPet_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genpku.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genpku.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genpku.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -31,8 +31,8 @@ static bool GeneratePkunk_generatePlanets (SOLARSYS_STATE *solarSys); static bool GeneratePkunk_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GeneratePkunk_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GeneratePkunk_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -146,12 +146,12 @@ } static COUNT -GeneratePkunk_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GeneratePkunk_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/gensol.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensol.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/gensol.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -35,14 +35,14 @@ static bool GenerateSol_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateSol_generateMoons (SOLARSYS_STATE *solarSys, PLANET_DESC *planet); -static bool GenerateSol_generateName (SOLARSYS_STATE *solarSys, - PLANET_DESC *world); +static bool GenerateSol_generateName (const SOLARSYS_STATE *, + const PLANET_DESC *world); static bool GenerateSol_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); -static COUNT GenerateSol_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateSol_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); +static COUNT GenerateSol_generateLife (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateSol_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -241,7 +241,8 @@ } static bool -GenerateSol_generateName (SOLARSYS_STATE *solarSys, PLANET_DESC *world) +GenerateSol_generateName (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world) { COUNT planetNr = planetIndex (solarSys, world); utf8StringCopy (GLOBAL_SIS (PlanetName), sizeof (GLOBAL_SIS (PlanetName)), @@ -274,7 +275,7 @@ rand_val = RandomContext_GetSeed (SysGenRNG); solarSys->SysInfo.PlanetInfo.ScanSeed[MINERAL_SCAN] = rand_val; - GenerateMineralDeposits (&solarSys->SysInfo, GENERATE_ALL); + GenerateMineralDeposits (&solarSys->SysInfo, GENERATE_ALL, NULL); rand_val = RandomContext_GetSeed (SysGenRNG); planetNr = planetIndex (solarSys, world); @@ -514,8 +515,8 @@ } static COUNT -GenerateSol_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateSol_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 8, MATCH_PLANET)) { @@ -527,8 +528,11 @@ return 0; } - solarSys->SysInfo.PlanetInfo.CurPt.x = 20; - solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT - 8; + if (info) + { + info->loc_pt.x = 20; + info->loc_pt.y = MAP_HEIGHT - 8; + } return 1; // only matters when count is requested } @@ -543,8 +547,11 @@ return 0; } - solarSys->SysInfo.PlanetInfo.CurPt.x = MAP_WIDTH * 3 / 4; - solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT * 1 / 4; + if (info) + { + info->loc_pt.x = MAP_WIDTH * 3 / 4; + info->loc_pt.y = MAP_HEIGHT * 1 / 4; + } return 1; // only matters when count is requested } @@ -595,14 +602,14 @@ } static COUNT -GenerateSol_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateSol_generateLife (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 2, 1)) { /* Earth Moon */ return GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, 10, - NUM_CREATURE_TYPES + 1, whichNode); + NUM_CREATURE_TYPES + 1, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genspa.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genspa.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genspa.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -35,10 +35,10 @@ PLANET_DESC *planet); static bool GenerateSpathi_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); -static COUNT GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateSpathi_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); +static COUNT GenerateSpathi_generateLife (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateSpathi_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); static bool GenerateSpathi_pickupLife (SOLARSYS_STATE *solarSys, @@ -148,11 +148,11 @@ rand_val = RandomContext_GetSeed (SysGenRNG); solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN] = rand_val; - GenerateLifeForms (&solarSys->SysInfo, GENERATE_ALL); + GenerateLifeForms (&solarSys->SysInfo, GENERATE_ALL, NULL); rand_val = RandomContext_GetSeed (SysGenRNG); solarSys->SysInfo.PlanetInfo.ScanSeed[MINERAL_SCAN] = rand_val; - GenerateMineralDeposits (&solarSys->SysInfo, GENERATE_ALL); + GenerateMineralDeposits (&solarSys->SysInfo, GENERATE_ALL, NULL); solarSys->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN] = rand_val; @@ -185,7 +185,7 @@ rand_val = RandomContext_GetSeed (SysGenRNG); solarSys->SysInfo.PlanetInfo.ScanSeed[MINERAL_SCAN] = rand_val; - GenerateMineralDeposits (&solarSys->SysInfo, GENERATE_ALL); + GenerateMineralDeposits (&solarSys->SysInfo, GENERATE_ALL, NULL); rand_val = RandomContext_GetSeed (SysGenRNG); solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN] = rand_val; @@ -207,8 +207,8 @@ } static COUNT -GenerateSpathi_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateSpathi_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, 0)) { @@ -219,7 +219,7 @@ return 0; } - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } return 0; @@ -247,14 +247,14 @@ } static COUNT -GenerateSpathi_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateSpathi_generateLife (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { #define NUM_EVIL_ONES 32 return GenerateRandomNodes (&solarSys->SysInfo, BIOLOGICAL_SCAN, NUM_EVIL_ONES, - NUM_CREATURE_TYPES, whichNode); + NUM_CREATURE_TYPES, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/gensup.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/gensup.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/gensup.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -31,8 +31,8 @@ static bool GenerateSupox_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateSupox_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateSupox_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateSupox_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -146,12 +146,12 @@ } static COUNT -GenerateSupox_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateSupox_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genthrad.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genthrad.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genthrad.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -34,8 +34,8 @@ static bool GenerateThraddash_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateThraddash_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateThraddash_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateThraddash_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -161,13 +161,13 @@ } static COUNT -GenerateThraddash_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode) +GenerateThraddash_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (CurStarDescPtr->Index == THRADD_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } if (CurStarDescPtr->Index == AQUA_HELIX_DEFINED @@ -180,7 +180,7 @@ return 0; } - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genutw.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genutw.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genutw.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -35,8 +35,8 @@ static bool GenerateUtwig_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateUtwig_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateUtwig_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateUtwig_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -212,13 +212,13 @@ } static COUNT -GenerateUtwig_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateUtwig_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (CurStarDescPtr->Index == UTWIG_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } if (CurStarDescPtr->Index == BOMB_DEFINED @@ -231,7 +231,7 @@ return 0; } - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genvault.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genvault.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genvault.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -27,8 +27,8 @@ static bool GenerateVault_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateVault_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateVault_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -79,12 +79,12 @@ } static COUNT -GenerateVault_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateVault_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, 0)) { - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genvux.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genvux.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genvux.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -36,10 +36,10 @@ static bool GenerateVux_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateVux_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateVux_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); -static COUNT GenerateVux_generateLife (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateVux_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); +static COUNT GenerateVux_generateLife (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateVux_pickupEnergy (SOLARSYS_STATE *, PLANET_DESC *world, COUNT whichNode); static bool GenerateVux_pickupLife (SOLARSYS_STATE *, PLANET_DESC *world, @@ -211,8 +211,8 @@ } static COUNT -GenerateVux_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateVux_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (CurStarDescPtr->Index == MAIDENS_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) @@ -224,8 +224,11 @@ return 0; } - solarSys->SysInfo.PlanetInfo.CurPt.x = MAP_WIDTH / 3; - solarSys->SysInfo.PlanetInfo.CurPt.y = MAP_HEIGHT * 5 / 8; + if (info) + { + info->loc_pt.x = MAP_WIDTH / 3; + info->loc_pt.y = MAP_HEIGHT * 5 / 8; + } return 1; // only matters when count is requested } @@ -233,7 +236,7 @@ if (CurStarDescPtr->Index == VUX_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; @@ -270,56 +273,37 @@ } static COUNT -GenerateVux_generateLife (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateVux_generateLife (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (CurStarDescPtr->Index == MAIDENS_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - COUNT i; - - RandomContext_SeedRandom (SysGenRNG, - solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN]); - - for (i = 0; i <= whichNode && i < 12; ++i) + static const SBYTE life[] = { - GenerateRandomLocation (&solarSys->SysInfo); - if (i < 4) - solarSys->SysInfo.PlanetInfo.CurType = 9; - else if (i < 8) - solarSys->SysInfo.PlanetInfo.CurType = 14; - else /* if (i < 12) */ - solarSys->SysInfo.PlanetInfo.CurType = 18; - } - - return 12; // only matters when count is requested + 9, 9, 9, 9, /* Carousel Beast */ + 14, 14, 14, 14, /* Amorphous Trandicula */ + 18, 18, 18, 18, /* Penguin Cyclops */ + -1 /* term */ + }; + return GeneratePresetLife (&solarSys->SysInfo, life, whichNode, info); } if (CurStarDescPtr->Index == VUX_BEAST_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { - COUNT i; - - RandomContext_SeedRandom (SysGenRNG, - solarSys->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN]); - - for (i = 0; i <= whichNode && i < 11; ++i) + static const SBYTE life[] = { - GenerateRandomLocation (&solarSys->SysInfo); - if (i == 0) /* VUX Beast */ - solarSys->SysInfo.PlanetInfo.CurType = NUM_CREATURE_TYPES + 2; - else if (i <= 5) - /* {SPEED_MOTIONLESS | DANGER_NORMAL, MAKE_BYTE (5, 3)}, */ - solarSys->SysInfo.PlanetInfo.CurType = 3; - else /* if (i <= 10) */ - /* {BEHAVIOR_UNPREDICTABLE | SPEED_SLOW | DANGER_NORMAL, MAKE_BYTE (3, 8)}, */ - solarSys->SysInfo.PlanetInfo.CurType = 8; - } - - return 11; // only matters when count is requested + NUM_CREATURE_TYPES + 2, /* VUX Beast */ + // Must be the first node, see pickupLife() below + 3, 3, 3, 3, 3, /* Whackin' Bush */ + 8, 8, 8, 8, 8, /* Glowing Medusa */ + -1 /* term */ + }; + return GeneratePresetLife (&solarSys->SysInfo, life, whichNode, info); } - return GenerateDefault_generateLife (solarSys, world, whichNode); + return GenerateDefault_generateLife (solarSys, world, whichNode, info); } static bool Modified: trunk/sc2/src/uqm/planets/generate/genwreck.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genwreck.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genwreck.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -27,8 +27,8 @@ static bool GenerateWreck_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateWreck_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateWreck_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateWreck_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -73,12 +73,12 @@ } static COUNT -GenerateWreck_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateWreck_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 6, MATCH_PLANET)) { - return GenerateDefault_generateArtifact (solarSys, whichNode); + return GenerateDefault_generateArtifact (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genyeh.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genyeh.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genyeh.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -30,8 +30,8 @@ static bool GenerateYehat_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateYehat_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateYehat_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateYehat_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateYehat_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -113,12 +113,12 @@ } static COUNT -GenerateYehat_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateYehat_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate/genzoq.c =================================================================== --- trunk/sc2/src/uqm/planets/generate/genzoq.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate/genzoq.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -30,8 +30,8 @@ static bool GenerateZoqFotPik_generatePlanets (SOLARSYS_STATE *solarSys); static bool GenerateZoqFotPik_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world); -static COUNT GenerateZoqFotPik_generateEnergy (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +static COUNT GenerateZoqFotPik_generateEnergy (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); static bool GenerateZoqFotPik_pickupEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT whichNode); @@ -143,12 +143,12 @@ } static COUNT -GenerateZoqFotPik_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT whichNode) +GenerateZoqFotPik_generateEnergy (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *info) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { - return GenerateDefault_generateRuins (solarSys, whichNode); + return GenerateDefault_generateRuins (solarSys, whichNode, info); } return 0; Modified: trunk/sc2/src/uqm/planets/generate.h =================================================================== --- trunk/sc2/src/uqm/planets/generate.h 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/generate.h 2011-09-09 21:36:34 UTC (rev 3695) @@ -56,16 +56,16 @@ PLANET_DESC *planet); typedef bool (*GenerateOrbitalFunction)(SOLARSYS_STATE *solarSys, PLANET_DESC *world); -typedef bool (*GenerateNameFunction)(SOLARSYS_STATE *solarSys, - PLANET_DESC *world); +typedef bool (*GenerateNameFunction)(const SOLARSYS_STATE *, + const PLANET_DESC *world); // The following functions return the number of objects being generated // (or the index of the current object in some cases) -typedef COUNT (*GenerateMineralsFunction)(SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); -typedef COUNT (*GenerateEnergyFunction)(SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); -typedef COUNT (*GenerateLifeFunction)(SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT whichNode); +typedef COUNT (*GenerateMineralsFunction)(const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); +typedef COUNT (*GenerateEnergyFunction)(const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); +typedef COUNT (*GenerateLifeFunction)(const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT whichNode, NODE_INFO *); // The following functions return true if the node should be removed // from the surface, i.e. picked up. typedef bool (*PickupMineralsFunction)(SOLARSYS_STATE *solarSys, Modified: trunk/sc2/src/uqm/planets/plandata.h =================================================================== --- trunk/sc2/src/uqm/planets/plandata.h 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/plandata.h 2011-09-09 21:36:34 UTC (rev 3695) @@ -279,25 +279,6 @@ DWORD ScanSeed[NUM_SCAN_TYPES]; DWORD ScanRetrieveMask[NUM_SCAN_TYPES]; - // The CurPt, CurDensity and CurType fields are filled in - // when a GENERATE_MINERAL, GENERATE_ENERGY, or GENERATE_LIFE - // call is made. - POINT CurPt; - // Position of the mineral/bio/energy node on the planet. - COUNT CurDensity; - // For bio and energy: undefined - // For minerals the low byte is the gross size of the - // deposit (this determines the image), and the high - // byte is the fine size (the actual quantity). - COUNT CurType; - // For minerals: the type of element - // For bio: the type of the creature. - // 0 through NUM_CREATURE_TYPES - 1 are normal creatures, - // NUM_CREATURE_TYPES is an Evil One - // NUM_CREATURE_TYPES + 1 is a Brainbox Bulldozer - // NUM_CREATURE_TYPES + 2 is Zex' Beauty - // For energy: undefined - STRING DiscoveryString; FONT LanderFont; FRAME LanderFontEff; Modified: trunk/sc2/src/uqm/planets/planets.h =================================================================== --- trunk/sc2/src/uqm/planets/planets.h 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/planets.h 2011-09-09 21:36:34 UTC (rev 3695) @@ -88,6 +88,7 @@ typedef struct planet_desc PLANET_DESC; typedef struct star_desc STAR_DESC; +typedef struct node_info NODE_INFO; typedef struct planet_orbit PLANET_ORBIT; typedef struct solarsys_state SOLARSYS_STATE; @@ -131,7 +132,26 @@ BYTE Postfix; }; -typedef void (*PLAN_GEN_FUNC) (BYTE control); +struct node_info +{ + // This structire is filled in when a generateMinerals, generateEnergy, + // or generateLife call is made. + POINT loc_pt; + // Position of the mineral/bio/energy node on the planet. + COUNT density; + // For bio and energy: undefined + // For minerals the low byte is the gross size of the + // deposit (this determines the image), and the high + // byte is the fine size (the actual quantity). + COUNT type; + // For minerals: the type of element + // For bio: the type of the creature. + // 0 through NUM_CREATURE_TYPES - 1 are normal creatures, + // NUM_CREATURE_TYPES is an Evil One + // NUM_CREATURE_TYPES + 1 is a Brainbox Bulldozer + // NUM_CREATURE_TYPES + 2 is Zex' Beauty + // For energy: undefined +}; struct planet_orbit { @@ -264,7 +284,6 @@ extern void ExploreSolarSys (void); extern void DrawStarBackGround (void); extern void XFormIPLoc (POINT *pIn, POINT *pOut, BOOLEAN ToDisplay); -extern PLAN_GEN_FUNC GenerateIP (BYTE Index); extern void DrawOval (RECT *pRect, BYTE num_off_pixels); extern void DrawFilledOval (RECT *pRect); extern void FillOrbits (SOLARSYS_STATE *system, BYTE NumPlanets, Modified: trunk/sc2/src/uqm/planets/scan.c =================================================================== --- trunk/sc2/src/uqm/planets/scan.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/scan.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -935,20 +935,20 @@ } COUNT -callGenerateForScanType (SOLARSYS_STATE *solarSys, PLANET_DESC *world, - COUNT node, BYTE scanType) +callGenerateForScanType (const SOLARSYS_STATE *solarSys, + const PLANET_DESC *world, COUNT node, BYTE scanType, NODE_INFO *info) { switch (scanType) { case MINERAL_SCAN: return (*solarSys->genFuncs->generateMinerals) ( - solarSys, world, node); + solarSys, world, node, info); case ENERGY_SCAN: return (*solarSys->genFuncs->generateEnergy) ( - solarSys, world, node); + solarSys, world, node, info); case BIOLOGICAL_SCAN: return (*solarSys->genFuncs->generateLife) ( - solarSys, world, node); + solarSys, world, node, info); } assert (false); @@ -1293,19 +1293,16 @@ static void generateBioNode (SOLARSYS_STATE *system, ELEMENT *NodeElementPtr, - BYTE *life_init_tab) + BYTE *life_init_tab, COUNT creatureType) { COUNT i; - COUNT creatureType; - creatureType = system->SysInfo.PlanetInfo.CurType; - // NOTE: TFB_Random() calls here are NOT part of the deterministic planet // generation PRNG flow. if (CreatureData[creatureType].Attributes & SPEED_MASK) { // Place moving creatures at a random location. - i = (COUNT)TFB_Random (); + i = TFB_Random (); NodeElementPtr->current.location.x = (LOBYTE (i) % (MAP_WIDTH - (8 << 1))) + 8; NodeElementPtr->current.location.y = @@ -1361,12 +1358,13 @@ NUM_SCANDOT_TRANSITIONS * (scan - ENERGY_SCAN)); num_nodes = callGenerateForScanType (pSolarSysState, - pSolarSysState->pOrbitalDesc, ~0, scan); + pSolarSysState->pOrbitalDesc, GENERATE_ALL, scan, NULL); while (num_nodes--) { HELEMENT hNodeElement; ELEMENT *NodeElementPtr; + NODE_INFO info; if (isNodeRetrieved (&pSolarSysState->SysInfo.PlanetInfo, scan, num_nodes)) @@ -1380,30 +1378,24 @@ callGenerateForScanType (pSolarSysState, pSolarSysState->pOrbitalDesc, num_nodes, - scan); + scan, &info); NodeElementPtr->scan_node = MAKE_WORD (scan, num_nodes + 1); NodeElementPtr->playerNr = PS_NON_PLAYER; - NodeElementPtr->current.location.x = - pSolarSysState->SysInfo.PlanetInfo.CurPt.x; - NodeElementPtr->current.location.y = - pSolarSysState->SysInfo.PlanetInfo.CurPt.y; + NodeElementPtr->current.location.x = info.loc_pt.x; + NodeElementPtr->current.location.y = info.loc_pt.y; SetPrimType (&DisplayArray[NodeElementPtr->PrimIndex], STAMP_PRIM); if (scan == MINERAL_SCAN) { - COUNT EType; - - EType = pSolarSysState->SysInfo.PlanetInfo.CurType; - NodeElementPtr->turn_wait = (BYTE)EType; - NodeElementPtr->mass_points = HIBYTE ( - pSolarSysState->SysInfo.PlanetInfo.CurDensity); + NodeElementPtr->turn_wait = info.type; + NodeElementPtr->mass_points = HIBYTE (info.density); NodeElementPtr->current.image.frame = SetAbsFrameIndex ( MiscDataFrame, (NUM_SCANDOT_TRANSITIONS * 2) - + ElementCategory (EType) * 5); + + ElementCategory (info.type) * 5); NodeElementPtr->next.image.frame = SetRelFrameIndex ( - NodeElementPtr->current.image.frame, LOBYTE ( - pSolarSysState->SysInfo.PlanetInfo.CurDensity) + 1); + NodeElementPtr->current.image.frame, + LOBYTE (info.density) + 1); DisplayArray[NodeElementPtr->PrimIndex].Object.Stamp.frame = IncFrameIndex (NodeElementPtr->next.image.frame); } @@ -1423,7 +1415,7 @@ else /* (scan == BIOLOGICAL_SCAN) */ { generateBioNode (pSolarSysState, NodeElementPtr, - life_init_tab); + life_init_tab, info.type); } } Modified: trunk/sc2/src/uqm/planets/scan.h =================================================================== --- trunk/sc2/src/uqm/planets/scan.h 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/scan.h 2011-09-09 21:36:34 UTC (rev 3695) @@ -50,8 +50,8 @@ extern void RepairBackRect (RECT *pRect); extern void GeneratePlanetSide (void); -extern COUNT callGenerateForScanType (SOLARSYS_STATE *solarSys, - PLANET_DESC *world, COUNT node, BYTE scanType); +extern COUNT callGenerateForScanType (const SOLARSYS_STATE *, + const PLANET_DESC *world, COUNT node, BYTE scanType, NODE_INFO *); // Returns true if the node should be removed from the surface extern bool callPickupForScanType (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT node, BYTE scanType); Modified: trunk/sc2/src/uqm/planets/sundata.h =================================================================== --- trunk/sc2/src/uqm/planets/sundata.h 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/sundata.h 2011-09-09 21:36:34 UTC (rev 3695) @@ -45,12 +45,16 @@ #define GENERATE_ALL ((COUNT)~0) -extern COUNT GenerateMineralDeposits (SYSTEM_INFO *SysInfoPtr, - COUNT whichDeposit); -extern COUNT GenerateLifeForms (SYSTEM_INFO *SysInfoPtr, COUNT whichLife); -extern void GenerateRandomLocation (SYSTEM_INFO *); -extern COUNT GenerateRandomNodes (SYSTEM_INFO *, COUNT scan, COUNT numNodes, - COUNT type, COUNT whichNode); +extern COUNT GenerateMineralDeposits (const SYSTEM_INFO *, COUNT whichDeposit, + NODE_INFO *info); +extern COUNT GenerateLifeForms (const SYSTEM_INFO *, COUNT whichLife, + NODE_INFO *info); +extern void GenerateRandomLocation (POINT *loc); +extern COUNT GenerateRandomNodes (const SYSTEM_INFO *, COUNT scan, COUNT numNodes, + COUNT type, COUNT whichNode, NODE_INFO *info); +// Generate lifeforms from a preset lifeTypes[] array +extern COUNT GeneratePresetLife (const SYSTEM_INFO *, + const SBYTE *lifeTypes, COUNT whichLife, NODE_INFO *info); #define DWARF_ELEMENT_DENSITY 1 #define GIANT_ELEMENT_DENSITY 3 Modified: trunk/sc2/src/uqm/planets/surface.c =================================================================== --- trunk/sc2/src/uqm/planets/surface.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/planets/surface.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -28,7 +28,8 @@ const PlanetFrame *PlanData; static COUNT -CalcMineralDeposits (SYSTEM_INFO *SysInfoPtr, COUNT which_deposit) +CalcMineralDeposits (const SYSTEM_INFO *SysInfoPtr, COUNT which_deposit, + NODE_INFO *info) { BYTE j; COUNT num_deposits; @@ -62,27 +63,26 @@ else deposit_quality_gross = 2; - GenerateRandomLocation (SysInfoPtr); + GenerateRandomLocation (&info->loc_pt); - SysInfoPtr->PlanetInfo.CurDensity = - MAKE_WORD ( - deposit_quality_gross, deposit_quality_fine / 10 + 1 - ); - SysInfoPtr->PlanetInfo.CurType = eptr->ElementType; + info->density = MAKE_WORD ( + deposit_quality_gross, deposit_quality_fine / 10 + 1); + info->type = eptr->ElementType; #ifdef DEBUG_SURFACE log_add (log_Debug, "\t\t%d units of %Fs", - SysInfoPtr->PlanetInfo.CurDensity, + info->density, Elements[eptr->ElementType].name); #endif /* DEBUG_SURFACE */ if (num_deposits >= which_deposit || ++num_deposits == sizeof (DWORD) * 8) - goto ExitCalcMinerals; + { // reached the maximum or the requested node + return num_deposits; + } } ++eptr; } while (--j); -ExitCalcMinerals: - return (num_deposits); + return num_deposits; } // Returns: @@ -90,15 +90,20 @@ // for whichLife<32 : the index of the last node (no known usage exists) // Sets the SysGenRNG to the required state first. COUNT -GenerateMineralDeposits (SYSTEM_INFO *SysInfoPtr, COUNT whichDeposit) +GenerateMineralDeposits (const SYSTEM_INFO *SysInfoPtr, COUNT whichDeposit, + NODE_INFO *info) { + NODE_INFO temp_info; + if (!info) // user not interested in info but we need space for it + info = &temp_info; RandomContext_SeedRandom (SysGenRNG, SysInfoPtr->PlanetInfo.ScanSeed[MINERAL_SCAN]); - return CalcMineralDeposits (SysInfoPtr, whichDeposit); + return CalcMineralDeposits (SysInfoPtr, whichDeposit, info); } static COUNT -CalcLifeForms (SYSTEM_INFO *SysInfoPtr, COUNT which_life) +CalcLifeForms (const SYSTEM_INFO *SysInfoPtr, COUNT which_life, + NODE_INFO *info) { COUNT num_life_forms; @@ -127,26 +132,28 @@ num_creatures = 1 + HIBYTE (rand_val) % 10; do { - GenerateRandomLocation (SysInfoPtr); - SysInfoPtr->PlanetInfo.CurType = index; + GenerateRandomLocation (&info->loc_pt); + info->type = index; + info->density = 0; if (num_life_forms >= which_life || ++num_life_forms == sizeof (DWORD) * 8) - { - num_types = 1; - break; + { // reached the maximum or the requested node + return num_life_forms; } } while (--num_creatures); } while (--num_types); } #ifdef DEBUG_SURFACE else + { log_add (log_Debug, "It's dead, Jim! (%d >= %d)", life_var, SysInfoPtr->PlanetInfo.LifeChance); + } #endif /* DEBUG_SURFACE */ } - return (num_life_forms); + return num_life_forms; } // Returns: @@ -154,23 +161,61 @@ // for whichLife<32 : the index of the last lifeform (no known usage exists) // Sets the SysGenRNG to the required state first. COUNT -GenerateLifeForms (SYSTEM_INFO *SysInfoPtr, COUNT whichLife) +GenerateLifeForms (const SYSTEM_INFO *SysInfoPtr, COUNT whichLife, + NODE_INFO *info) { + NODE_INFO temp_info; + if (!info) // user not interested in info but we need space for it + info = &temp_info; RandomContext_SeedRandom (SysGenRNG, SysInfoPtr->PlanetInfo.ScanSeed[BIOLOGICAL_SCAN]); - return CalcLifeForms (SysInfoPtr, whichLife); + return CalcLifeForms (SysInfoPtr, whichLife, info); } +// Returns: +// for whichLife==~0 : the number of lifeforms generated +// for whichLife<32 : the index of the last lifeform (no known usage exists) +// Sets the SysGenRNG to the required state first. +// lifeTypes[] is terminated with -1 +COUNT +GeneratePresetLife (const SYSTEM_INFO *SysInfoPtr, const SBYTE *lifeTypes, + COUNT whichLife, NODE_INFO *info) +{ + COUNT i; + NODE_INFO temp_info; + + if (!info) // user not interested in info but we need space for it + info = &temp_info; + + // This function may look unnecessarily complicated, but it must be + // kept this way to preserve the universe. That is done by preserving + // the order and number of Random() calls. + + RandomContext_SeedRandom (SysGenRNG, + SysInfoPtr->PlanetInfo.ScanSeed[BIOLOGICAL_SCAN]); + + for (i = 0; lifeTypes[i] >= 0; ++i) + { + GenerateRandomLocation (&info->loc_pt); + info->type = lifeTypes[i]; + // density is irrelevant for bio nodes + info->density = 0; + + if (i >= whichLife) + break; + } + + return i; +} + void -GenerateRandomLocation (SYSTEM_INFO *SysInfoPtr) +GenerateRandomLocation (POINT *loc) { UWORD rand_val; rand_val = RandomContext_Random (SysGenRNG); - SysInfoPtr->PlanetInfo.CurPt.x = - (LOBYTE (rand_val) % (MAP_WIDTH - (8 << 1))) + 8; - SysInfoPtr->PlanetInfo.CurPt.y = - (HIBYTE (rand_val) % (MAP_HEIGHT - (8 << 1))) + 8; + loc->x = 8 + LOBYTE (rand_val) % (MAP_WIDTH - (8 << 1)); + loc->y = 8 + HIBYTE (rand_val) % (MAP_HEIGHT - (8 << 1)); } // Returns: @@ -178,20 +223,25 @@ // for whichNode<32 : the index of the last node (no known usage exists) // Sets the SysGenRNG to the required state first. COUNT -GenerateRandomNodes (SYSTEM_INFO *SysInfoPtr, COUNT scan, COUNT numNodes, - COUNT type, COUNT whichNode) +GenerateRandomNodes (const SYSTEM_INFO *SysInfoPtr, COUNT scan, COUNT numNodes, + COUNT type, COUNT whichNode, NODE_INFO *info) { COUNT i; + NODE_INFO temp_info; - RandomContext_SeedRandom (SysGenRNG, SysInfoPtr->PlanetInfo.ScanSeed[scan]); + if (!info) // user not interested in info but we need space for it + info = &temp_info; + RandomContext_SeedRandom (SysGenRNG, + SysInfoPtr->PlanetInfo.ScanSeed[scan]); + for (i = 0; i < numNodes; ++i) { - GenerateRandomLocation (SysInfoPtr); - // CurType is irrelevant for energy nodes - SysInfoPtr->PlanetInfo.CurType = type; - // CurDensity is irrelevant for energy and bio nodes - SysInfoPtr->PlanetInfo.CurDensity = 0; + GenerateRandomLocation (&info->loc_pt); + // type is irrelevant for energy nodes + info->type = type; + // density is irrelevant for energy and bio nodes + info->density = 0; if (i >= whichNode) break; Modified: trunk/sc2/src/uqm/uqmdebug.c =================================================================== --- trunk/sc2/src/uqm/uqmdebug.c 2011-09-09 01:59:12 UTC (rev 3694) +++ trunk/sc2/src/uqm/uqmdebug.c 2011-09-09 21:36:34 UTC (rev 3695) @@ -973,8 +973,7 @@ void dumpPlanet (FILE *out, const PLANET_DESC *planet) { - (*pSolarSysState->genFuncs->generateName) ( - pSolarSysState, (PLANET_DESC *) planet); + (*pSolarSysState->genFuncs->generateName) (pSolarSysState, planet); fprintf (out, "- %-37s %s\n", GLOBAL_SIS (PlanetName), planetTypeString (planet->data_index & ~PLANET_SHIELDED)); dumpWorld (out, planet); @@ -1055,16 +1054,16 @@ assert (system->pOrbitalDesc == world); - numBio = callGenerateForScanType ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, ~0, BIOLOGICAL_SCAN); + numBio = callGenerateForScanType (system, world, GENERATE_ALL, + BIOLOGICAL_SCAN, NULL); result = 0; for (i = 0; i < numBio; i++) { - callGenerateForScanType ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, i, BIOLOGICAL_SCAN); - result += BIO_CREDIT_VALUE * LONIBBLE (CreatureData[ - system->SysInfo.PlanetInfo.CurType].ValueAndHitPoints); + NODE_INFO info; + callGenerateForScanType (system, world, i, BIOLOGICAL_SCAN, &info); + result += BIO_CREDIT_VALUE * + LONIBBLE (CreatureData[info.type].ValueAndHitPoints); } return result; } @@ -1078,17 +1077,17 @@ assert (system->pOrbitalDesc == world); - numBio = callGenerateForScanType ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, ~0, BIOLOGICAL_SCAN); + numBio = callGenerateForScanType (system, world, GENERATE_ALL, + BIOLOGICAL_SCAN, NULL); for (i = 0; i < NUM_CREATURE_TYPES + NUM_SPECIAL_CREATURE_TYPES; i++) bio[i] = 0; for (i = 0; i < numBio; i++) { - callGenerateForScanType ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, i, BIOLOGICAL_SCAN); - bio[system->SysInfo.PlanetInfo.CurType]++; + NODE_INFO info; + callGenerateForScanType (system, world, i, BIOLOGICAL_SCAN, &info); + bio[info.type]++; } } @@ -1101,17 +1100,16 @@ assert (system->pOrbitalDesc == world); - numDeposits = callGenerateForScanType ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, ~0, MINERAL_SCAN); + numDeposits = callGenerateForScanType (system, world, GENERATE_ALL, + MINERAL_SCAN, NULL); result = 0; for (i = 0; i < numDeposits; i++) { - callGenerateForScanType ((SOLARSYS_STATE *) system, - (PLANET_DESC *) world, i, MINERAL_SCAN); - result += HIBYTE (system->SysInfo.PlanetInfo.CurDensity) * - GLOBAL (ElementWorth[ElementCategory ( - system->SysInfo.PlanetInfo.CurType)]); + NODE_INFO info; + callGenerateForScanType (system, world, i, MINERAL_SCAN, &info); + result += HIBYTE (info.density) * + GLOBAL (ElementWorth[ElementCategory (info.type)]); } return result; } @@ -1125,18 +1123,17 @@ assert (system->pOrbitalDesc == world); - ... [truncated message content] |
From: <Mee...@us...> - 2012-01-29 15:44:01
|
Revision: 3757 http://sc2.svn.sourceforge.net/sc2/?rev=3757&view=rev Author: Meep-Eep Date: 2012-01-29 15:43:55 +0000 (Sun, 29 Jan 2012) Log Message: ----------- Generalised some functions. Modified Paths: -------------- trunk/sc2/src/uqm/build.c trunk/sc2/src/uqm/build.h Modified: trunk/sc2/src/uqm/build.c =================================================================== --- trunk/sc2/src/uqm/build.c 2012-01-28 21:10:41 UTC (rev 3756) +++ trunk/sc2/src/uqm/build.c 2012-01-29 15:43:55 UTC (rev 3757) @@ -271,18 +271,19 @@ } /* - * Returns true if and only if a ship of the specified race is among the + * Returns the number of ships of the specified race among the * escort ships. */ -BOOLEAN -HaveEscortShip (COUNT race) +COUNT +CountEscortShips (COUNT race) { HFLEETINFO hFleet; HSHIPFRAG hStarShip, hNextShip; + COUNT result = 0; hFleet = GetStarShipFromIndex (&GLOBAL (avail_race_q), race); if (!hFleet) - return FALSE; + return 0; for (hStarShip = GetHeadLink (&GLOBAL (built_ship_q)); hStarShip; hStarShip = hNextShip) @@ -296,12 +297,22 @@ UnlockShipFrag (&GLOBAL (built_ship_q), hStarShip); if (ship_type == race) - return TRUE; + result++; } - return FALSE; + return result; } /* + * Returns true if and only if a ship of the specified race is among the + * escort ships. + */ +BOOLEAN +HaveEscortShip (COUNT race) +{ + return (CountEscortShips (race) > 0); +} + +/* * Test if the SIS can have an escort of the specified race. * Returns 0 if 'race' is not available. * Otherwise, returns the number of ships that can be added. @@ -342,14 +353,18 @@ } /* - * Remove all escort ships of the specified race. + * Remove a number of escort ships of the specified race (if present). + * Returns the number of escort ships removed. */ -void -RemoveEscortShips (COUNT race) +COUNT +RemoveSomeEscortShips (COUNT race, COUNT count) { - HSHIPFRAG hStarShip, hNextShip; - BOOLEAN ShipRemoved = FALSE; + HSHIPFRAG hStarShip; + HSHIPFRAG hNextShip; + if (count == 0) + return 0; + for (hStarShip = GetHeadLink (&GLOBAL (built_ship_q)); hStarShip; hStarShip = hNextShip) { @@ -363,20 +378,34 @@ if (RemoveShip) { - ShipRemoved = TRUE; RemoveQueue (&GLOBAL (built_ship_q), hStarShip); FreeShipFrag (&GLOBAL (built_ship_q), hStarShip); + count--; + if (count == 0) + break; } } - if (ShipRemoved) + if (count > 0) { + // Update the display. LockMutex (GraphicsLock); DeltaSISGauges (UNDEFINED_DELTA, UNDEFINED_DELTA, UNDEFINED_DELTA); UnlockMutex (GraphicsLock); } + + return count; } +/* + * Remove all escort ships of the specified race. + */ +void +RemoveEscortShips (COUNT race) +{ + RemoveSomeEscortShips (race, (COUNT) -1); +} + COUNT GetIndexFromStarShip (QUEUE *pShipQ, HLINK hStarShip) { Modified: trunk/sc2/src/uqm/build.h =================================================================== --- trunk/sc2/src/uqm/build.h 2012-01-28 21:10:41 UTC (rev 3756) +++ trunk/sc2/src/uqm/build.h 2012-01-29 15:43:55 UTC (rev 3757) @@ -51,9 +51,11 @@ //extern COUNT GetRaceKnownSize (COUNT race); extern COUNT SetRaceAllied (COUNT race, BOOLEAN flag); extern COUNT StartSphereTracking (COUNT race); +extern COUNT CountEscortShips (COUNT race); extern BOOLEAN HaveEscortShip (COUNT race); extern COUNT EscortFeasibilityStudy (COUNT race); extern COUNT CheckAlliance (COUNT race); +extern COUNT RemoveSomeEscortShips (COUNT race, COUNT count); extern void RemoveEscortShips (COUNT race); extern RACE_DESC *load_ship (SPECIES_ID SpeciesID, BOOLEAN LoadBattleData); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Mee...@us...> - 2012-02-24 19:52:18
|
Revision: 3772 http://sc2.svn.sourceforge.net/sc2/?rev=3772&view=rev Author: Meep-Eep Date: 2012-02-24 19:52:10 +0000 (Fri, 24 Feb 2012) Log Message: ----------- Add setSegue(), getSegue(). Modified Paths: -------------- trunk/sc2/src/uqm/comm/arilou/arilouc.c trunk/sc2/src/uqm/comm/blackur/blackurc.c trunk/sc2/src/uqm/comm/chmmr/chmmrc.c trunk/sc2/src/uqm/comm/comandr/comandr.c trunk/sc2/src/uqm/comm/druuge/druugec.c trunk/sc2/src/uqm/comm/ilwrath/ilwrathc.c trunk/sc2/src/uqm/comm/melnorm/melnorm.c trunk/sc2/src/uqm/comm/mycon/myconc.c trunk/sc2/src/uqm/comm/orz/orzc.c trunk/sc2/src/uqm/comm/pkunk/pkunkc.c trunk/sc2/src/uqm/comm/rebel/rebel.c trunk/sc2/src/uqm/comm/shofixt/shofixt.c trunk/sc2/src/uqm/comm/slyhome/slyhome.c trunk/sc2/src/uqm/comm/slyland/slyland.c trunk/sc2/src/uqm/comm/spahome/spahome.c trunk/sc2/src/uqm/comm/spathi/spathic.c trunk/sc2/src/uqm/comm/starbas/starbas.c trunk/sc2/src/uqm/comm/supox/supoxc.c trunk/sc2/src/uqm/comm/syreen/syreenc.c trunk/sc2/src/uqm/comm/talkpet/talkpet.c trunk/sc2/src/uqm/comm/thradd/thraddc.c trunk/sc2/src/uqm/comm/umgah/umgahc.c trunk/sc2/src/uqm/comm/urquan/urquanc.c trunk/sc2/src/uqm/comm/utwig/utwigc.c trunk/sc2/src/uqm/comm/vux/vuxc.c trunk/sc2/src/uqm/comm/yehat/yehatc.c trunk/sc2/src/uqm/comm/zoqfot/zoqfotc.c trunk/sc2/src/uqm/commglue.c trunk/sc2/src/uqm/commglue.h Modified: trunk/sc2/src/uqm/comm/arilou/arilouc.c =================================================================== --- trunk/sc2/src/uqm/comm/arilou/arilouc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/arilou/arilouc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -230,7 +230,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, bye_angry_space)) NPCPhrase (GOODBYE_ANGRY_SPACE); @@ -644,7 +644,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } else if (!GET_GAME_STATE (MET_ARILOU)) @@ -691,7 +691,7 @@ } SET_GAME_STATE (ARILOU_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (Manner == 1) { @@ -801,7 +801,7 @@ { BYTE Manner; - if (GET_GAME_STATE (BATTLE_SEGUE) == 1 + if (getSegue () == Segue_hostile && (Manner = GET_GAME_STATE (ARILOU_MANNER)) != 2) { SET_GAME_STATE (ARILOU_MANNER, 1); @@ -843,11 +843,11 @@ || GET_GAME_STATE (ARILOU_MANNER) == 3 || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &arilou_desc; Modified: trunk/sc2/src/uqm/comm/blackur/blackurc.c =================================================================== --- trunk/sc2/src/uqm/comm/blackur/blackurc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/blackur/blackurc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -134,7 +134,7 @@ { BYTE NumVisits; - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, bye)) { @@ -447,7 +447,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -455,7 +455,7 @@ { NPCPhrase (GAME_OVER_DUDE); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -474,7 +474,7 @@ NPCPhrase (HELLO_SAMATRA); SET_GAME_STATE (AWARE_OF_SAMATRA, 1); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else { @@ -555,11 +555,11 @@ if (!GET_GAME_STATE (KOHR_AH_KILLED_ALL) && LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } retval = &blackurq_desc; Modified: trunk/sc2/src/uqm/comm/chmmr/chmmrc.c =================================================================== --- trunk/sc2/src/uqm/comm/chmmr/chmmrc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/chmmr/chmmrc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -120,7 +120,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, bye)) NPCPhrase (GOODBYE); @@ -634,7 +634,7 @@ chmmr_desc.AlienTextBaseline.y = 0; chmmr_desc.AlienTextWidth = SIS_TEXT_WIDTH - 16; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); retval = &chmmr_desc; return (retval); Modified: trunk/sc2/src/uqm/comm/comandr/comandr.c =================================================================== --- trunk/sc2/src/uqm/comm/comandr/comandr.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/comandr/comandr.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -687,7 +687,7 @@ commander_desc.AlienTextBaseline.x = 164; commander_desc.AlienTextBaseline.y = 20; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); retval = &commander_desc; return (retval); Modified: trunk/sc2/src/uqm/comm/druuge/druugec.c =================================================================== --- trunk/sc2/src/uqm/comm/druuge/druugec.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/druuge/druugec.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -166,7 +166,7 @@ { if (PLAYER_SAID (R, bye)) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { @@ -210,7 +210,7 @@ } else /* if (R == then_we_take_bomb) */ { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); NPCPhrase (FIGHT_FOR_BOMB); } @@ -683,7 +683,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -720,7 +720,7 @@ SET_GAME_STATE (DRUUGE_VISITS, NumVisits); } - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { @@ -814,7 +814,7 @@ } SET_GAME_STATE (DRUUGE_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else { @@ -850,7 +850,7 @@ } SET_GAME_STATE (DRUUGE_SALVAGE, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); AttemptedSalvage = TRUE; } else @@ -882,7 +882,7 @@ static void post_druuge_enc (void) { - if (GET_GAME_STATE (BATTLE_SEGUE) == 1 + if (getSegue () == Segue_hostile && !AttemptedSalvage && !GET_GAME_STATE (DRUUGE_MANNER)) { @@ -914,11 +914,11 @@ && (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))) || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &druuge_desc; Modified: trunk/sc2/src/uqm/comm/ilwrath/ilwrathc.c =================================================================== --- trunk/sc2/src/uqm/comm/ilwrath/ilwrathc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/ilwrath/ilwrathc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -102,7 +102,7 @@ static void CombatIsInevitable (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, you_are_weak)) NPCPhrase (STRENGTH_NOT_ALL); @@ -124,7 +124,7 @@ { NPCPhrase (GOODBYE_GODS); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } if (PLAYER_SAID (R, whats_up)) { @@ -586,7 +586,7 @@ else NPCPhrase (JUST_GRUNTS); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 4)) { @@ -596,7 +596,7 @@ } else { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH)) NPCPhrase (HAPPY_FIGHTING_THRADDASH); @@ -637,11 +637,11 @@ & ((1 << 4) | (1 << 5))) || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &ilwrath_desc; Modified: trunk/sc2/src/uqm/comm/melnorm/melnorm.c =================================================================== --- trunk/sc2/src/uqm/comm/melnorm/melnorm.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/melnorm/melnorm.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -766,14 +766,14 @@ NPCPhrase (YOU_GIVE_US_NO_CHOICE); SET_GAME_STATE (MELNORME_ANGER, 1); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, so_we_can_attack)) { NPCPhrase (DECEITFUL_HUMAN); SET_GAME_STATE (MELNORME_ANGER, 2); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, bye_melnorme_slightly_angry)) NPCPhrase (MELNORME_SLIGHTLY_ANGRY_GOODBYE); @@ -795,7 +795,7 @@ NPCPhrase (OK_FIGHT_SOME_MORE); SET_GAME_STATE (MELNORME_ANGER, 3); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, bye_melnorme_pissed_off)) NPCPhrase (MELNORME_PISSED_OFF_GOODBYE); @@ -803,7 +803,7 @@ { NPCPhrase (WE_FIGHT_AGAIN); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, you_hate_us_so_we_go_away)) NPCPhrase (HATE_YOU_GOODBYE); @@ -1847,7 +1847,7 @@ prevMsgMode = SMM_UNDEFINED; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); AskedToBuy = FALSE; retval = &melnorme_desc; Modified: trunk/sc2/src/uqm/comm/mycon/myconc.c =================================================================== --- trunk/sc2/src/uqm/comm/mycon/myconc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/mycon/myconc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -245,7 +245,7 @@ static void CombatIsInevitable (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, bye_space)) NPCPhrase (BYE_AND_DIE_SPACE); @@ -257,7 +257,7 @@ { NPCPhrase (GOODBYE_SUN_DEVICE); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { @@ -340,7 +340,7 @@ { NPCPhrase (WE_GO_TO_IMPLANT); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); SET_GAME_STATE (MYCON_FELL_FOR_AMBUSH, 1); AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_MYCON_MISSION); } @@ -505,13 +505,13 @@ } SET_GAME_STATE (MYCON_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (GET_GAME_STATE (MYCON_KNOW_AMBUSH)) { NPCPhrase (DIE_LIAR); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) { @@ -631,11 +631,11 @@ if (LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } retval = &mycon_desc; Modified: trunk/sc2/src/uqm/comm/orz/orzc.c =================================================================== --- trunk/sc2/src/uqm/comm/orz/orzc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/orz/orzc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -174,7 +174,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, bye_ally)) NPCPhrase (GOODBYE_ALLY); @@ -193,7 +193,7 @@ { NPCPhrase (HOSTILITY_IS_BAD_2); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, may_we_land)) { @@ -219,7 +219,7 @@ { NPCPhrase (NO_DEMAND); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, about_andro_3) || PLAYER_SAID (R, must_know_about_androsyn)) @@ -231,7 +231,7 @@ SET_GAME_STATE (ORZ_VISITS, 0); SET_GAME_STATE (ORZ_MANNER, 2); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, about_andro_3)) { SetRaceAllied (ORZ_SHIP, FALSE); @@ -257,13 +257,13 @@ break; case 2: NPCPhrase (INSULTED_3); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); break; case 7: --NumVisits; default: NPCPhrase (INSULTED_4); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); break; } SET_GAME_STATE (ORZ_PERSONAL_INFO, NumVisits); @@ -643,7 +643,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -669,7 +669,7 @@ } SET_GAME_STATE (ORZ_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) { @@ -857,7 +857,7 @@ { BYTE Manner; - if (GET_GAME_STATE (BATTLE_SEGUE) == 1 + if (getSegue () == Segue_hostile && (Manner = GET_GAME_STATE (ORZ_MANNER)) != 2) { SET_GAME_STATE (ORZ_MANNER, 1); @@ -886,11 +886,11 @@ if (GET_GAME_STATE (ORZ_MANNER) == 3 || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &orz_desc; Modified: trunk/sc2/src/uqm/comm/pkunk/pkunkc.c =================================================================== --- trunk/sc2/src/uqm/comm/pkunk/pkunkc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/pkunk/pkunkc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -132,7 +132,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, friendly_bye_space)) NPCPhrase (FRIENDLY_GOODBYE_SPACE); @@ -187,13 +187,13 @@ SET_GAME_STATE (PKUNK_MANNER, 2); } - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, die_idiot_fools)) { NPCPhrase (VERY_WELL); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, suit_yourself)) NPCPhrase (GOODBYE_MIGRATION); @@ -853,7 +853,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -880,7 +880,7 @@ } SET_GAME_STATE (PKUNK_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (Manner == 1) { @@ -1104,7 +1104,7 @@ { BYTE Manner; - if (GET_GAME_STATE (BATTLE_SEGUE) == 1 + if (getSegue () == Segue_hostile && (Manner = GET_GAME_STATE (PKUNK_MANNER)) != 2) { SET_GAME_STATE (PKUNK_MANNER, 1); @@ -1133,12 +1133,12 @@ || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { // Enter communications immediately. - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { // Ask the player whether to attack or talk. - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &pkunk_desc; Modified: trunk/sc2/src/uqm/comm/rebel/rebel.c =================================================================== --- trunk/sc2/src/uqm/comm/rebel/rebel.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/rebel/rebel.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -376,7 +376,7 @@ { BYTE NumVisits; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE) { NPCPhrase (YEHAT_CAVALRY); @@ -442,7 +442,7 @@ yehat_desc.AlienAltSongRes = REBEL_MUSIC; yehat_desc.AlienSongFlags |= LDASF_USE_ALTERNATE; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); retval = &yehat_desc; return (retval); Modified: trunk/sc2/src/uqm/comm/shofixt/shofixt.c =================================================================== --- trunk/sc2/src/uqm/comm/shofixt/shofixt.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/shofixt/shofixt.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -170,25 +170,25 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, bye0)) { NPCPhrase (GOODBYE); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, go_ahead)) { NPCPhrase (ON_SECOND_THOUGHT); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, need_you_for_duty)) { NPCPhrase (OK_WILL_BE_SENTRY); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, females) || PLAYER_SAID (R, nubiles) @@ -198,7 +198,7 @@ SET_GAME_STATE (SHOFIXTI_RECRUITED, 1); SET_GAME_STATE (MAIDENS_ON_SHIP, 0); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); AddEvent (RELATIVE_EVENT, 2, 0, 0, SHOFIXTI_RETURN_EVENT); } @@ -546,7 +546,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -644,7 +644,7 @@ shofixti_desc.AlienTextBaseline.y = 0; shofixti_desc.AlienTextWidth = SIS_TEXT_WIDTH; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); retval = &shofixti_desc; Modified: trunk/sc2/src/uqm/comm/slyhome/slyhome.c =================================================================== --- trunk/sc2/src/uqm/comm/slyhome/slyhome.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/slyhome/slyhome.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -175,7 +175,7 @@ ExitConversation (RESPONSE_REF R) { (void) R; // ignored - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); switch (GET_GAME_STATE (SLYLANDRO_HOME_VISITS)) { @@ -914,7 +914,7 @@ slylandro_desc.AlienTextBaseline.y = 0; slylandro_desc.AlienTextWidth = SIS_TEXT_WIDTH; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); retval = &slylandro_desc; return (retval); Modified: trunk/sc2/src/uqm/comm/slyland/slyland.c =================================================================== --- trunk/sc2/src/uqm/comm/slyland/slyland.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/slyland/slyland.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -314,8 +314,7 @@ else if (PLAYER_SAID (R, destruct_code)) { NPCPhrase (DESTRUCT_SEQUENCE); - instantVictory = TRUE; - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_victory); } else { @@ -443,7 +442,7 @@ NPCPhrase (HOSTILE); SET_GAME_STATE (PROBE_EXHIBITED_BUG, 1); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } } @@ -511,7 +510,7 @@ slylandro_desc.AlienTextBaseline.y = 0; slylandro_desc.AlienTextWidth = SIS_TEXT_WIDTH - 16; - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); retval = &slylandro_desc; return (retval); Modified: trunk/sc2/src/uqm/comm/spahome/spahome.c =================================================================== --- trunk/sc2/src/uqm/comm/spahome/spahome.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/spahome/spahome.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -186,24 +186,24 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, we_attack_again)) { NPCPhrase (WE_FIGHT_AGAIN); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, surrender_or_die)) { NPCPhrase (DEFEND_OURSELVES); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, we_are_vindicator0)) { NPCPhrase (NO_PASSWORD); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, gort_merenga) || PLAYER_SAID (R, guph_florp) @@ -212,13 +212,13 @@ { NPCPhrase (WRONG_PASSWORD); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, screw_password)) { NPCPhrase (NO_PASSWORD); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, bye_no_ally_offer)) NPCPhrase (GOODBYE_NO_ALLY_OFFER); @@ -906,7 +906,7 @@ if (Manner == 2) { NPCPhrase (HATE_YOU_FOREVER); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (Manner == 1 && GET_GAME_STATE (KNOW_SPATHI_PASSWORD) @@ -940,7 +940,7 @@ NPCPhrase (YOU_LIED_2); SET_GAME_STATE (SPATHI_MANNER, 2); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } } else if (GET_GAME_STATE (KNOW_SPATHI_QUEST)) @@ -974,7 +974,7 @@ { BYTE Manner; - if (GET_GAME_STATE (BATTLE_SEGUE) == 1 + if (getSegue () == Segue_hostile && (Manner = GET_GAME_STATE (SPATHI_MANNER)) != 2) { SET_GAME_STATE (SPATHI_MANNER, 1); @@ -1005,11 +1005,11 @@ if (GET_GAME_STATE (SPATHI_MANNER) == 3) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &spahome_desc; Modified: trunk/sc2/src/uqm/comm/spathi/spathic.c =================================================================== --- trunk/sc2/src/uqm/comm/spathi/spathic.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/spathi/spathic.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -147,7 +147,7 @@ static void ExitConversation (RESPONSE_REF Response) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (Response, bye_ally_space)) NPCPhrase (GOODBYE_ALLY_SPACE); @@ -165,13 +165,13 @@ { NPCPhrase (YIPES); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (Response, we_fight_again_space)) { NPCPhrase (OK_FIGHT_AGAIN_SPACE); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (Response, die_slugboy) || PLAYER_SAID (Response, we_fight_1) @@ -184,7 +184,7 @@ NPCPhrase (FAKE_COORDINATES); NPCPhrase (OK_WE_FIGHT_AT_PLUTO); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (Response, join_us)) { @@ -726,7 +726,7 @@ else if (Manner == 2) { NPCPhrase (HATE_YOU_FOREVER_SPACE); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (Manner == 1) { @@ -779,7 +779,7 @@ { SET_GAME_STATE (FOUND_PLUTO_SPATHI, 2); } - else if (GET_GAME_STATE (BATTLE_SEGUE) == 1 + else if (getSegue () == Segue_hostile && (Manner = GET_GAME_STATE (SPATHI_MANNER)) != 2) { SET_GAME_STATE (SPATHI_MANNER, 1); @@ -822,11 +822,11 @@ || GET_GAME_STATE (SPATHI_MANNER) == 3 || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &spathi_desc; Modified: trunk/sc2/src/uqm/comm/starbas/starbas.c =================================================================== --- trunk/sc2/src/uqm/comm/starbas/starbas.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/starbas/starbas.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -1954,7 +1954,7 @@ commander_desc.AlienSongFlags |= LDASF_USE_ALTERNATE; CurBulletinMask = 0; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); retval = &commander_desc; return (retval); Modified: trunk/sc2/src/uqm/comm/supox/supoxc.c =================================================================== --- trunk/sc2/src/uqm/comm/supox/supoxc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/supox/supoxc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -103,7 +103,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, bye_neutral)) NPCPhrase (GOODBYE_NEUTRAL); @@ -531,7 +531,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -550,7 +550,7 @@ } SET_GAME_STATE (SUPOX_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (CheckAlliance (SUPOX_SHIP) == GOOD_GUY) { @@ -696,11 +696,11 @@ if (!GET_GAME_STATE (SUPOX_HOSTILE) || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &supox_desc; Modified: trunk/sc2/src/uqm/comm/syreen/syreenc.c =================================================================== --- trunk/sc2/src/uqm/comm/syreen/syreenc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/syreen/syreenc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -193,7 +193,7 @@ static void FriendlyExit (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, bye)) NPCPhrase (GOODBYE); @@ -555,7 +555,7 @@ { NPCPhrase (HORRIBLE_TRUTH); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); SET_GAME_STATE (SYREEN_HOME_VISITS, 0); SET_GAME_STATE (SYREEN_KNOW_ABOUT_MYCON, 1); @@ -729,7 +729,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -871,7 +871,7 @@ syreen_desc.AlienTextBaseline.y = 0; syreen_desc.AlienTextWidth = SIS_TEXT_WIDTH - 16; - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); retval = &syreen_desc; return (retval); Modified: trunk/sc2/src/uqm/comm/talkpet/talkpet.c =================================================================== --- trunk/sc2/src/uqm/comm/talkpet/talkpet.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/talkpet/talkpet.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -213,7 +213,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); SET_GAME_STATE (SHIP_TO_COMPEL, 0); if (PLAYER_SAID (R, compel_urquan)) @@ -498,7 +498,7 @@ { NPCPhrase (CANT_COMPEL); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } return; @@ -649,14 +649,14 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } if (LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE) { SET_GAME_STATE (SHIP_TO_COMPEL, 0); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (!(GLOBAL (glob_flags) & CYBORG_ENABLED)) { NPCPhrase (HUMAN_PEP_TALK); @@ -679,13 +679,13 @@ else NPCPhrase (SOUP_UP_BOMB); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (GET_GAME_STATE (URQUAN_MESSED_UP)) { NPCPhrase (HELLO_AFTER_COMPEL_URQUAN); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { @@ -769,13 +769,13 @@ else if (!GET_GAME_STATE (TAALO_PROTECTOR_ON_SHIP)) { SET_GAME_STATE (PLAYER_HYPNOTIZED, 1); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { NPCPhrase (CANT_COMPEL); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } } else @@ -828,11 +828,11 @@ if (LOBYTE (GLOBAL (CurrentActivity)) != IN_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &talkpet_desc; Modified: trunk/sc2/src/uqm/comm/thradd/thraddc.c =================================================================== --- trunk/sc2/src/uqm/comm/thradd/thraddc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/thradd/thraddc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -239,7 +239,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, bye_hostile_2)) NPCPhrase (GOODBYE_HOSTILE_2); @@ -261,7 +261,7 @@ { NPCPhrase (GOOD_IDEA); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_THRADD_MISSION); SET_GAME_STATE (THRADD_STACK_1, 5); } @@ -289,14 +289,14 @@ break; } SET_GAME_STATE (THRADD_STACK_1, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, may_i_land)) { NPCPhrase (SURE_LAND); SET_GAME_STATE (HELIX_UNPROTECTED, 1); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, demand_to_land)) NPCPhrase (NO_DEMAND); @@ -330,7 +330,7 @@ } NPCPhrase (WORK_TO_DO); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } } @@ -700,7 +700,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -719,7 +719,7 @@ } SET_GAME_STATE (HELIX_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH)) { @@ -752,7 +752,7 @@ } SET_GAME_STATE (THRADD_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (GET_GAME_STATE (THRADD_MANNER)) { @@ -942,11 +942,11 @@ if (GET_GAME_STATE (THRADD_MANNER) || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &thradd_desc; Modified: trunk/sc2/src/uqm/comm/umgah/umgahc.c =================================================================== --- trunk/sc2/src/uqm/comm/umgah/umgahc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/umgah/umgahc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -198,13 +198,13 @@ static void CombatIsInevitable (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, bye_zombie)) { NPCPhrase (GOODBYE_ZOMBIE); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, bye_pre_zombie)) NPCPhrase (GOODBYE_PRE_ZOMBIE); @@ -235,7 +235,7 @@ { NPCPhrase (GOODBYE_UNKNOWN); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, bye_post_zombie)) { @@ -346,14 +346,14 @@ { NPCPhrase (NOT_GIVE_UP); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); return; } else if (PLAYER_SAID (R, arilou_told_us)) { NPCPhrase (THEN_DIE); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); SET_GAME_STATE (KNOW_UMGAH_ZOMBIES, 1); SET_GAME_STATE (UMGAH_VISITS, 0); return; @@ -541,7 +541,7 @@ } SET_GAME_STATE (UMGAH_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (GET_GAME_STATE (UMGAH_ZOMBIE_BLOBBIES)) { @@ -565,7 +565,7 @@ break; } - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (GET_GAME_STATE (KNOW_UMGAH_ZOMBIES)) { @@ -586,7 +586,7 @@ break; } - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else { @@ -681,7 +681,7 @@ } SET_GAME_STATE (UMGAH_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } } } @@ -717,11 +717,11 @@ if ((GET_GAME_STATE (TALKING_PET) && !GET_GAME_STATE (UMGAH_HOSTILE)) || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &umgah_desc; Modified: trunk/sc2/src/uqm/comm/urquan/urquanc.c =================================================================== --- trunk/sc2/src/uqm/comm/urquan/urquanc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/urquan/urquanc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -123,7 +123,7 @@ static void CombatIsInevitable (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, you_must_surrender)) NPCPhrase (NOPE); @@ -159,9 +159,7 @@ { NPCPhrase (GOOD_CHOICE); - SET_GAME_STATE (BATTLE_SEGUE, 0); - GLOBAL_SIS (CrewEnlisted) = (COUNT)~0; - GLOBAL (CurrentActivity) |= CHECK_RESTART; + setSegue (Segue_defeat); } else if (PLAYER_SAID (R, like_to_leave)) NPCPhrase (INDEPENDENCE_IS_BAD); @@ -169,7 +167,7 @@ { NPCPhrase (GOODBYE_WARS_OVER); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, bye_sub_hypno)) NPCPhrase (GOODBYE_AND_DIE_SUB_HYPNO); @@ -184,7 +182,7 @@ { NPCPhrase (BAD_NEWS); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); SET_GAME_STATE (URQUAN_HYPNO_VISITS, 1); } else if (PLAYER_SAID (R, falling_asleep) @@ -192,7 +190,7 @@ { NPCPhrase (SOUNDS_FAMILIAR); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); SET_GAME_STATE (URQUAN_HYPNO_VISITS, 1); } } @@ -415,7 +413,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -450,7 +448,7 @@ { NPCPhrase (CAUGHT_YA); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); return; } @@ -462,7 +460,7 @@ NPCPhrase (HELLO_SAMATRA); SET_GAME_STATE (AWARE_OF_SAMATRA, 1); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else { @@ -501,7 +499,7 @@ break; case 1: NPCPhrase (SUBSEQUENT_FLEE_HUMAN); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); --NumVisits; break; } @@ -545,11 +543,11 @@ && GLOBAL (BattleGroupRef) && GLOBAL (BattleGroupRef) == GrpOffs)) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &urquan_desc; Modified: trunk/sc2/src/uqm/comm/utwig/utwigc.c =================================================================== --- trunk/sc2/src/uqm/comm/utwig/utwigc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/utwig/utwigc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -200,7 +200,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, bye_neutral)) NPCPhrase (GOODBYE_NEUTRAL); @@ -216,7 +216,7 @@ { NPCPhrase (GUARDS_FIGHT); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, got_ultron) || PLAYER_SAID (R, hey_wait_got_ultron)) @@ -244,7 +244,7 @@ { NPCPhrase (TRICKED_US_1); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } break; case 1: @@ -254,7 +254,7 @@ { NPCPhrase (TRICKED_US_2); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } break; } @@ -497,7 +497,7 @@ { NPCPhrase (MOCK_OUR_PAIN); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); SET_GAME_STATE (UTWIG_STACK1, 4); SET_GAME_STATE (UTWIG_HOSTILE, 1); SET_GAME_STATE (UTWIG_INFO, 0); @@ -651,7 +651,7 @@ { NPCPhrase (GUARDS_FIGHT); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); SET_GAME_STATE (UTWIG_HOSTILE, 1); SET_GAME_STATE (UTWIG_INFO, 0); SET_GAME_STATE (UTWIG_HOME_VISITS, 0); @@ -745,7 +745,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -800,7 +800,7 @@ if (!GET_GAME_STATE (ULTRON_CONDITION) || (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6))) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else { @@ -984,11 +984,11 @@ if (GET_GAME_STATE (UTWIG_HAVE_ULTRON) || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &utwig_desc; Modified: trunk/sc2/src/uqm/comm/vux/vuxc.c =================================================================== --- trunk/sc2/src/uqm/comm/vux/vuxc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/vux/vuxc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -205,7 +205,7 @@ { BYTE NumVisits; - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, ok_take_beast)) { @@ -220,7 +220,7 @@ SET_GAME_STATE (VUX_BEAST_ON_SHIP, 0); SET_GAME_STATE (ZEX_IS_DEAD, 1); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else if (PLAYER_SAID (R, try_any_way)) { @@ -290,7 +290,7 @@ { NPCPhrase (GOODBYE_ZEX); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { @@ -376,13 +376,13 @@ { NPCPhrase (FIGHT_AGAIN); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, regardless)) { NPCPhrase (THEN_FIGHT); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); SET_GAME_STATE (ZEX_STACK_3, 2); SET_GAME_STATE (ZEX_VISITS, 0); } @@ -696,7 +696,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -784,11 +784,11 @@ if ((GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &vux_desc; Modified: trunk/sc2/src/uqm/comm/yehat/yehatc.c =================================================================== --- trunk/sc2/src/uqm/comm/yehat/yehatc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/yehat/yehatc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -194,7 +194,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); if (PLAYER_SAID (R, bye_homeworld)) NPCPhrase (GOODBYE_AND_DIE_HOMEWORLD); @@ -214,7 +214,7 @@ { NPCPhrase (GO_IN_PEACE); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } } else if (PLAYER_SAID (R, not_here) @@ -235,7 +235,7 @@ { NPCPhrase (WE_REVOLT); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); SET_GAME_STATE (YEHAT_CIVIL_WAR, 1); SET_GAME_STATE (YEHAT_VISITS, 0); SET_GAME_STATE (YEHAT_HOME_VISITS, 0); @@ -439,7 +439,7 @@ { NPCPhrase (WE_CANNOT_2); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); SET_GAME_STATE (NO_YEHAT_ALLY_SPACE, 2); return; @@ -565,7 +565,7 @@ { NPCPhrase (OUT_TAKES); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -673,11 +673,11 @@ if (LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } retval = &yehat_desc; Modified: trunk/sc2/src/uqm/comm/zoqfot/zoqfotc.c =================================================================== --- trunk/sc2/src/uqm/comm/zoqfot/zoqfotc.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/comm/zoqfot/zoqfotc.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -179,7 +179,7 @@ static void ExitConversation (RESPONSE_REF R) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); if (PLAYER_SAID (R, bye_homeworld)) { @@ -236,7 +236,7 @@ SET_GAME_STATE (ZOQFOT_HOSTILE, 1); SET_GAME_STATE (ZOQFOT_HOME_VISITS, 0); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (PLAYER_SAID (R, never)) { @@ -246,7 +246,7 @@ SET_GAME_STATE (ZOQFOT_HOME_VISITS, 0); SET_GAME_STATE (ZOQFOT_HOSTILE, 1); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } } @@ -777,7 +777,7 @@ NPCPhrase_cb (OUT_TAKES12, &SelectAlienZOQ); NPCPhrase_cb (OUT_TAKES13, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); return; } @@ -814,7 +814,7 @@ } SET_GAME_STATE (ZOQFOT_HOME_VISITS, NumVisits); - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } else if (!GET_GAME_STATE (MET_ZOQFOT)) { @@ -961,11 +961,11 @@ if (CheckAlliance (ZOQFOTPIK_SHIP) == GOOD_GUY || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { - SET_GAME_STATE (BATTLE_SEGUE, 0); + setSegue (Segue_peace); } else { - SET_GAME_STATE (BATTLE_SEGUE, 1); + setSegue (Segue_hostile); } retval = &zoqfot_desc; Modified: trunk/sc2/src/uqm/commglue.c =================================================================== --- trunk/sc2/src/uqm/commglue.c 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/commglue.c 2012-02-24 19:52:10 UTC (rev 3772) @@ -18,6 +18,8 @@ #include "commglue.h" +#include "battle.h" + // For instantVictory #include "races.h" #include <stdarg.h> @@ -310,6 +312,48 @@ } } +void +setSegue (Segue segue) +{ + switch (segue) + { + case Segue_peace: + SET_GAME_STATE (BATTLE_SEGUE, 0); + break; + case Segue_hostile: + SET_GAME_STATE (BATTLE_SEGUE, 1); + break; + case Segue_victory: + instantVictory = TRUE; + SET_GAME_STATE (BATTLE_SEGUE, 1); + break; + case Segue_defeat: + SET_GAME_STATE (BATTLE_SEGUE, 0); + GLOBAL_SIS(CrewEnlisted) = (COUNT)~0; + GLOBAL(CurrentActivity) |= CHECK_RESTART; + break; + } +} + +Segue +getSegue (void) +{ + if (GET_GAME_STATE(BATTLE_SEGUE) == 0) { + if (GLOBAL_SIS(CrewEnlisted) == (COUNT)~0 && + (GLOBAL(CurrentActivity) & CHECK_RESTART)) { + return Segue_defeat; + } else { + return Segue_peace; + } + } else /* GET_GAME_STATE(BATTLE_SEGUE) == 1) */ { + if (instantVictory) { + return Segue_victory; + } else { + return Segue_hostile; + } + } +} + LOCDATA* init_race (CONVERSATION comm_id) { Modified: trunk/sc2/src/uqm/commglue.h =================================================================== --- trunk/sc2/src/uqm/commglue.h 2012-02-18 20:26:58 UTC (rev 3771) +++ trunk/sc2/src/uqm/commglue.h 2012-02-24 19:52:10 UTC (rev 3772) @@ -102,6 +102,22 @@ extern void construct_response (UNICODE *buf, int R /* promoted from RESPONSE_REF */, ...); +typedef enum { + Segue_peace, + // When initiating a conversation, open comms directly. + // When terminating a conversation, depart in peace. + Segue_hostile, + // When initiating a conversation, offer the choice to attack. + // When terminating a conversation, go into battle. + Segue_victory, + // (when terminating a conversation) instant victory + Segue_defeat, + // (when terminating a conversation) game over +} Segue; + +void setSegue (Segue segue); +Segue getSegue (void); + extern LOCDATA* init_race (CONVERSATION comm_id); extern LOCDATA* init_arilou_comm (void); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Mee...@us...> - 2012-02-24 21:00:46
|
Revision: 3773 http://sc2.svn.sourceforge.net/sc2/?rev=3773&view=rev Author: Meep-Eep Date: 2012-02-24 21:00:39 +0000 (Fri, 24 Feb 2012) Log Message: ----------- Some functions for activities. Modified Paths: -------------- trunk/sc2/src/uqm/battle.c trunk/sc2/src/uqm/comm.c trunk/sc2/src/uqm/encount.c trunk/sc2/src/uqm/galaxy.c trunk/sc2/src/uqm/gameev.c trunk/sc2/src/uqm/globdata.c trunk/sc2/src/uqm/globdata.h trunk/sc2/src/uqm/init.c trunk/sc2/src/uqm/pickship.c trunk/sc2/src/uqm/planets/devices.c trunk/sc2/src/uqm/planets/pstarmap.c trunk/sc2/src/uqm/process.c trunk/sc2/src/uqm/save.c trunk/sc2/src/uqm/ship.c trunk/sc2/src/uqm/ships/sis_ship/sis_ship.c trunk/sc2/src/uqm/sis.c trunk/sc2/src/uqm/uqmdebug.c Modified: trunk/sc2/src/uqm/battle.c =================================================================== --- trunk/sc2/src/uqm/battle.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/battle.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -236,12 +236,12 @@ { if (BattleRef == 0) { - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) - BattleRef = LoadMusic (BATTLE_MUSIC); - else if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) + if (inHyperSpace ()) BattleRef = LoadMusic (HYPERSPACE_MUSIC); - else + else if (inQuasiSpace ()) BattleRef = LoadMusic (QUASISPACE_MUSIC); + else + BattleRef = LoadMusic (BATTLE_MUSIC); } if (DoPlay) @@ -463,8 +463,7 @@ #endif /* NETPLAY */ bs.InputFunc = DoBattle; bs.frame_cb = callback; - bs.first_time = (BOOLEAN)(LOBYTE (GLOBAL (CurrentActivity)) == - IN_HYPERSPACE); + bs.first_time = inHQSpace (); DoInput (&bs, FALSE); Modified: trunk/sc2/src/uqm/comm.c =================================================================== --- trunk/sc2/src/uqm/comm.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/comm.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -1327,7 +1327,7 @@ RepairSISBorder (); } DrawSISMessage (NULL); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) DrawHyperCoords (GLOBAL (ShipStamp.origin)); else if (GLOBAL (ip_planet) == 0) DrawHyperCoords (CurStarDescPtr->star_pt); @@ -1492,7 +1492,7 @@ SET_GAME_STATE (ESCAPE_COUNTER, ec); return; } - else if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + else if (inHQSpace ()) { ReinitQueue (&GLOBAL (npc_built_ship_q)); if (GET_GAME_STATE (ARILOU_SPACE_SIDE) >= 2) Modified: trunk/sc2/src/uqm/encount.c =================================================================== --- trunk/sc2/src/uqm/encount.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/encount.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -296,7 +296,7 @@ SetContextFont (MicroFont); SetContextForeGroundColor ( BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01)); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { t.pStr = GAME_STRING (ENCOUNTER_STRING_BASE + 0); // "ENCOUNTER IN" @@ -566,7 +566,7 @@ { DrawSISFrame (); DrawSISMessage (NULL); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) DrawHyperCoords (GLOBAL (ShipStamp.origin)); else if (GLOBAL (ip_planet) == 0) DrawHyperCoords (CurStarDescPtr->star_pt); Modified: trunk/sc2/src/uqm/galaxy.c =================================================================== --- trunk/sc2/src/uqm/galaxy.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/galaxy.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -268,7 +268,7 @@ else { SetPrimType (&DisplayArray[p], POINT_PRIM); - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) + if (!inHQSpace ()) SetPrimColor (&DisplayArray[p], BUILD_COLOR (MAKE_RGB15 (0x15, 0x15, 0x15), 0x07)); else if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) @@ -327,7 +327,7 @@ if (view_state == VIEW_CHANGE) { - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { for (iss = 0, pprim = DisplayArray; iss < 2; ++iss) { @@ -385,7 +385,7 @@ } } - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { for (i = BIG_STAR_COUNT + MED_STAR_COUNT, pprim = DisplayArray; i > 0; --i, ++pprim) @@ -406,7 +406,7 @@ WrapStarBlock (1, dx, dy); WrapStarBlock (0, dx, dy); - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) + if (!inHQSpace ()) { dx = SpaceOrg.x; dy = SpaceOrg.y; Modified: trunk/sc2/src/uqm/gameev.c =================================================================== --- trunk/sc2/src/uqm/gameev.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/gameev.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -60,8 +60,7 @@ break; case HYPERSPACE_ENCOUNTER_EVENT: check_race_growth (); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE - && GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) + if (inHyperSpace ()) check_hyperspace_encounter (); AddEvent (RELATIVE_EVENT, 0, 1, 0, HYPERSPACE_ENCOUNTER_EVENT); Modified: trunk/sc2/src/uqm/globdata.c =================================================================== --- trunk/sc2/src/uqm/globdata.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/globdata.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -32,6 +32,7 @@ #include "grpinfo.h" #include "gamestr.h" +#include <assert.h> #include <stdlib.h> #ifdef STATE_DEBUG # include "libs/log.h" @@ -424,4 +425,88 @@ } +BOOLEAN +inFullGame (void) +{ + ACTIVITY act = LOBYTE (GLOBAL (CurrentActivity)); + return (act == IN_LAST_BATTLE || act == IN_ENCOUNTER || + act == IN_HYPERSPACE || act == IN_INTERPLANETARY || + act == WON_LAST_BATTLE); +} +BOOLEAN +inSuperMelee (void) +{ + return (LOBYTE (GLOBAL (CurrentActivity)) == SUPER_MELEE); + // TODO: && !inMainMenu () +} + +#if 0 +BOOLEAN +inBattle (void) +{ + // TODO: IN_BATTLE is also set while in HyperSpace/QuasiSpace. + return ((GLOBAL (CurrentActivity) & IN_BATTLE) != 0); +} +#endif + +#if 0 +// Disabled for now as there are similar functions in uqm/planets/planets.h +// Pre: inFullGame() +BOOLEAN +inInterPlanetary (void) +{ + assert (inFullGame ()); + return (pSolarSysState != NULL); +} + +// Pre: inFullGame() +BOOLEAN +inSolarSystem (void) +{ + assert (inFullGame ()); + return (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY); +} + +// Pre: inFullGame() +BOOLEAN +inOrbit (void) +{ + assert (inFullGame ()); + return (pSolarSysState != NULL) && + (pSolarSysState->pOrbitalDesc != NULL); +} +#endif + +// In HyperSpace or QuasiSpace +// Pre: inFullGame() +BOOLEAN +inHQSpace (void) +{ + assert (inFullGame ()); + return (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE); + // IN_HYPERSPACE is also set for QuasiSpace +} + +// In HyperSpace +// Pre: inFullGame() +BOOLEAN +inHyperSpace (void) +{ + //assert (inFullGame ()); + return (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) && + (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1); + // IN_HYPERSPACE is also set for QuasiSpace +} + +// In QuasiSpace +// Pre: inFullGame() +BOOLEAN +inQuasiSpace (void) +{ + //assert (inFullGame ()); + return (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) && + (GET_GAME_STATE (ARILOU_SPACE_SIDE) > 1); + // IN_HYPERSPACE is also set for QuasiSpace +} + Modified: trunk/sc2/src/uqm/globdata.h =================================================================== --- trunk/sc2/src/uqm/globdata.h 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/globdata.h 2012-02-24 21:00:39 UTC (rev 3773) @@ -892,7 +892,7 @@ SUPER_MELEE = 0, /* Is also used while in the main menu */ IN_LAST_BATTLE, IN_ENCOUNTER, - IN_HYPERSPACE /* in Hyperspace or Quasispace */, + IN_HYPERSPACE /* in HyperSpace or QuasiSpace */, IN_INTERPLANETARY, WON_LAST_BATTLE, @@ -904,6 +904,7 @@ CHECK_PAUSE = MAKE_WORD (0, (1 << 0)), IN_BATTLE = MAKE_WORD (0, (1 << 1)), + /* Is also set while in HyperSpace/QuasiSpace */ START_ENCOUNTER = MAKE_WORD (0, (1 << 2)), START_INTERPLANETARY = MAKE_WORD (0, (1 << 3)), CHECK_LOAD = MAKE_WORD (0, (1 << 4)), @@ -1011,6 +1012,16 @@ extern void InitGlobData (void); +BOOLEAN inFullGame (void); +BOOLEAN inSuperMelee (void); +//BOOLEAN inBattle (void); +//BOOLEAN inInterPlanetary (void); +//BOOLEAN inSolarSystem (void); +//BOOLEAN inOrbit (void); +BOOLEAN inHQSpace (void); +BOOLEAN inHyperSpace (void); +BOOLEAN inQuasiSpace (void); + extern BOOLEAN InitGameStructures (void); extern void UninitGameStructures (void); Modified: trunk/sc2/src/uqm/init.c =================================================================== --- trunk/sc2/src/uqm/init.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/init.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -187,7 +187,7 @@ InitDisplayList (); InitGalaxy (); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { ReinitQueue (&race_q[0]); ReinitQueue (&race_q[1]); @@ -346,7 +346,7 @@ for (i = 0; i < NUM_PLAYERS; i++) ReinitQueue (&race_q[i]); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) FreeHyperspace (); } } Modified: trunk/sc2/src/uqm/pickship.c =================================================================== --- trunk/sc2/src/uqm/pickship.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/pickship.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -304,7 +304,7 @@ HSTARSHIP GetEncounterStarShip (STARSHIP *LastStarShipPtr, COUNT which_player) { - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { assert (which_player == RPG_PLAYER_NUM); // SIS for the Hyperspace flight Modified: trunk/sc2/src/uqm/planets/devices.c =================================================================== --- trunk/sc2/src/uqm/planets/devices.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/planets/devices.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -217,7 +217,7 @@ static BOOLEAN UseCaster (void) { - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) { @@ -372,7 +372,7 @@ NextActivity |= CHECK_LOAD; /* fake a load game */ GLOBAL (CurrentActivity) |= START_ENCOUNTER; SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 0); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { if (GetHeadEncounter ()) { @@ -443,8 +443,7 @@ break; case PORTAL_SPAWNER_DEVICE: #define PORTAL_FUEL_COST (10 * FUEL_TANK_SCALE) - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE - && GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1 + if (inHyperSpace () && GLOBAL_SIS (FuelOnBoard) >= PORTAL_FUEL_COST) { /* No DeltaSISGauges because the flagship picture Modified: trunk/sc2/src/uqm/planets/pstarmap.c =================================================================== --- trunk/sc2/src/uqm/planets/pstarmap.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/planets/pstarmap.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -161,7 +161,7 @@ cycle, delta; POINT pt; - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) + if (!inHQSpace ()) pt = CurStarDescPtr->star_pt; else { @@ -346,7 +346,7 @@ { Color OldColor; - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) + if (!inHQSpace ()) r.corner = CurStarDescPtr->star_pt; else { @@ -773,7 +773,7 @@ DWORD f; POINT pt; - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) + if (!inHQSpace ()) pt = CurStarDescPtr->star_pt; else { @@ -1223,7 +1223,7 @@ pMS->Initialized = TRUE; pMS->InputFunc = DoMoveCursor; - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) + if (!inHQSpace ()) universe = CurStarDescPtr->star_pt; else { @@ -1250,7 +1250,7 @@ { PlayMenuSound (MENU_SOUND_INVOKED); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { // Move to the new location immediately. doInstantMove (); @@ -1579,7 +1579,7 @@ mapOrigin.y = MAX_Y_UNIVERSE >> 1; StarMapFrame = SetAbsFrameIndex (MiscDataFrame, 48); - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) + if (!inHQSpace ()) universe = CurStarDescPtr->star_pt; else { Modified: trunk/sc2/src/uqm/process.c =================================================================== --- trunk/sc2/src/uqm/process.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/process.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -308,12 +308,11 @@ dy = -ORG_JUMP_Y; } - if ((dx || dy) && LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if ((dx || dy) && inHQSpace ()) MoveSIS (&dx, &dy); if (zoom_out == next_reduction) - view_state = dx == 0 && dy == 0 - && LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE + view_state = dx == 0 && dy == 0 && !inHQSpace () ? VIEW_STABLE : VIEW_SCROLL; else { Modified: trunk/sc2/src/uqm/save.c =================================================================== --- trunk/sc2/src/uqm/save.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/save.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -486,7 +486,7 @@ switch (SummPtr->Activity) { case IN_HYPERSPACE: - if (GET_GAME_STATE (ARILOU_SPACE_SIDE) > 1) + if (inQuasiSpace ()) SummPtr->Activity = IN_QUASISPACE; break; case IN_INTERPLANETARY: @@ -621,7 +621,7 @@ static void SaveFlagshipState (void) { - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { // Player is in HyperSpace or QuasiSpace. SaveSisHyperState (); Modified: trunk/sc2/src/uqm/ship.c =================================================================== --- trunk/sc2/src/uqm/ship.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/ship.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -454,7 +454,7 @@ else { StarShipPtr->ShipFacing = NORMALIZE_FACING (TFB_Random ()); - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { // Only one ship is ever spawned in HyperSpace -- flagship COUNT facing = GLOBAL (ShipFacing); // XXX: Solar system reentry test depends on ShipFacing != 0 Modified: trunk/sc2/src/uqm/ships/sis_ship/sis_ship.c =================================================================== --- trunk/sc2/src/uqm/ships/sis_ship/sis_ship.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/ships/sis_ship/sis_ship.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -891,7 +891,7 @@ new_sis_desc.uninit_func = uninit_sis; - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) + if (inHQSpace ()) { for (i = 0; i < NUM_VIEWS; ++i) { @@ -950,7 +950,7 @@ static void uninit_sis (RACE_DESC *pRaceDesc) { - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_HYPERSPACE) + if (!inHQSpace ()) { GLOBAL_SIS (CrewEnlisted) = pRaceDesc->ship_info.crew_level; if (pRaceDesc->ship_info.ship_flags & PLAYER_CAPTAIN) Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/sis.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -214,7 +214,7 @@ pStr = buf; break; case IN_HYPERSPACE: - if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) + if (inHyperSpace ()) { pStr = GAME_STRING (NAVIGATION_STRING_BASE); // "HyperSpace" Modified: trunk/sc2/src/uqm/uqmdebug.c =================================================================== --- trunk/sc2/src/uqm/uqmdebug.c 2012-02-24 19:52:10 UTC (rev 3772) +++ trunk/sc2/src/uqm/uqmdebug.c 2012-02-24 21:00:39 UTC (rev 3773) @@ -369,7 +369,7 @@ } // Make sure everything is redrawn: - if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE || + if (inHQSpace () || LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY) { DeltaSISGauges (UNDEFINED_DELTA, UNDEFINED_DELTA, UNDEFINED_DELTA); @@ -1508,7 +1508,7 @@ CONTEXT OldContext; if (!(GLOBAL (CurrentActivity) & IN_BATTLE) || - (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)) + (inHQSpace ())) return; StarShipPtr = findPlayerShip (RPG_PLAYER_NUM); @@ -1531,7 +1531,7 @@ CONTEXT OldContext; if (!(GLOBAL (CurrentActivity) & IN_BATTLE) || - (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)) + (inHQSpace ())) return; StarShipPtr = findPlayerShip (RPG_PLAYER_NUM); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2012-02-26 21:05:52
|
Revision: 3778 http://sc2.svn.sourceforge.net/sc2/?rev=3778&view=rev Author: avolkov Date: 2012-02-26 21:05:46 +0000 (Sun, 26 Feb 2012) Log Message: ----------- Make init_RACE()/uninit_RACE() calls symmetric; takes care of memory leaks from bug #1149; thanks to Louis Delacroix Modified Paths: -------------- trunk/sc2/src/uqm/init.c trunk/sc2/src/uqm/loadship.c trunk/sc2/src/uqm/tactrans.c Modified: trunk/sc2/src/uqm/init.c =================================================================== --- trunk/sc2/src/uqm/init.c 2012-02-26 20:32:22 UTC (rev 3777) +++ trunk/sc2/src/uqm/init.c 2012-02-26 21:05:46 UTC (rev 3778) @@ -311,9 +311,6 @@ crew_retrieved; } - if (StarShipPtr->RaceDescPtr->uninit_func != NULL) - (*StarShipPtr->RaceDescPtr->uninit_func) ( - StarShipPtr->RaceDescPtr); /* Record crew left after battle */ StarShipPtr->crew_level = StarShipPtr->RaceDescPtr->ship_info.crew_level; Modified: trunk/sc2/src/uqm/loadship.c =================================================================== --- trunk/sc2/src/uqm/loadship.c 2012-02-26 20:32:22 UTC (rev 3777) +++ trunk/sc2/src/uqm/loadship.c 2012-02-26 21:05:46 UTC (rev 3778) @@ -170,6 +170,9 @@ free_ship (RACE_DESC *raceDescPtr, BOOLEAN FreeIconData, BOOLEAN FreeBattleData) { + if (raceDescPtr->uninit_func != NULL) + (*raceDescPtr->uninit_func) (raceDescPtr); + if (FreeBattleData) { DATA_STUFF *shipData = &raceDescPtr->ship_data; Modified: trunk/sc2/src/uqm/tactrans.c =================================================================== --- trunk/sc2/src/uqm/tactrans.c 2012-02-26 20:32:22 UTC (rev 3777) +++ trunk/sc2/src/uqm/tactrans.c 2012-02-26 21:05:46 UTC (rev 3778) @@ -473,9 +473,6 @@ SetElementStarShip (DeadShipPtr, 0); RestartMusic = OpponentAlive (DeadStarShipPtr); - if (DeadStarShipPtr->RaceDescPtr->uninit_func != NULL) - (*DeadStarShipPtr->RaceDescPtr->uninit_func) ( - DeadStarShipPtr->RaceDescPtr); free_ship (DeadStarShipPtr->RaceDescPtr, TRUE, TRUE); DeadStarShipPtr->RaceDescPtr = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |