From: <Mee...@us...> - 2009-10-24 20:27:36
|
Revision: 3244 http://sc2.svn.sourceforge.net/sc2/?rev=3244&view=rev Author: Meep-Eep Date: 2009-10-24 20:07:03 +0000 (Sat, 24 Oct 2009) Log Message: ----------- Some more cleanups; move color definitions to colors.h. Modified Paths: -------------- trunk/sc2/src/uqm/colors.h trunk/sc2/src/uqm/menu.c Modified: trunk/sc2/src/uqm/colors.h =================================================================== --- trunk/sc2/src/uqm/colors.h 2009-10-24 19:36:24 UTC (rev 3243) +++ trunk/sc2/src/uqm/colors.h 2009-10-24 20:07:03 UTC (rev 3244) @@ -155,5 +155,37 @@ #define SHADOWBOX_DARK_COLOR \ BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F) + +// === PC Menus === + +// Background color of the PC-style menus. +#define PCMENU_BACKGROUND_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x15), 0x00) + +// Color of the top and left segments of the border around PC-style menus. +#define PCMENU_TOP_LEFT_BORDER_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0F, 0x0F, 0x0F), 0x00) + +// Color of the bottom and right segments of the border around PC-style menus. +#define PCMENU_BOTTOM_RIGHT_BORDER_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x06, 0x06, 0x06), 0x00) + +// Text color of an unselected menu item. +#define PCMENU_TEXT_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x15, 0x15), 0x00) + +// Text color of an selected menu item. +#define PCMENU_SELECTION_TEXT_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B) + +// Background color of a selected menu item. +#define PCMENU_SELECTION_BACKGROUND_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x09) + +// === 3DO menus === +#define THREEDOMENU_TEXT_COLOR \ + BUILD_COLOR (MAKE_RGB15 (0x00, 0x1F, 0x00), 0x00) + + #endif /* _COLORS_H */ Modified: trunk/sc2/src/uqm/menu.c =================================================================== --- trunk/sc2/src/uqm/menu.c 2009-10-24 19:36:24 UTC (rev 3243) +++ trunk/sc2/src/uqm/menu.c 2009-10-24 20:07:03 UTC (rev 3244) @@ -16,6 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include "colors.h" #include "commglue.h" #include "controls.h" #include "options.h" @@ -37,24 +38,32 @@ static BYTE ConvertAlternateMenu (BYTE BaseState, BYTE NewState); -/* Draw the blue background for PC Menu Text */ +/* Draw the blue background for PC Menu Text, with a border around it. + * The specified rectangle includes the border. */ static void DrawPCMenuFrame (RECT *r) { - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0F, 0x0F, 0x0F), 0x00)); + // Draw the top and left of the outer border. + // This actually draws a rectangle, but the bottom and right parts + // are drawn over in the next step. + SetContextForeGroundColor (PCMENU_TOP_LEFT_BORDER_COLOR); DrawRectangle (r); + + // Draw the right and bottom of the outer border. + // This actually draws a rectangle, with the top and left segments just + // within the total area, but these segments are drawn over in the next + // step. r->corner.x++; r->corner.y++; r->extent.height--; r->extent.width--; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x06, 0x06, 0x06), 0x00)); + SetContextForeGroundColor (PCMENU_BOTTOM_RIGHT_BORDER_COLOR); DrawRectangle (r); + + // Draw the background. r->extent.height--; r->extent.width--; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x15), 0x00)); + SetContextForeGroundColor (PCMENU_BACKGROUND_COLOR); DrawFilledRectangle (r); } @@ -95,31 +104,35 @@ t.CharCount = (COUNT)~0; r->corner.x++; r->extent.width -= 2; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x15, 0x15), 0x00)); for (i = beg_index; i <= end_index; i++) { - utf8StringCopy (buf, sizeof (buf), + utf8StringCopy (buf, sizeof buf, (i == PM_FUEL) ? pm_fuel_str : (i == PM_CREW) ? pm_crew_str : GAME_STRING (MAINMENU_STRING_BASE + i)); if (hilite && pos == i) { - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x1F), 0x00)); + // Currently selected menu option. + + // Draw the background of the selection. + SetContextForeGroundColor (PCMENU_SELECTION_BACKGROUND_COLOR); r->corner.y = t.baseline.y - PC_MENU_HEIGHT + 2; r->extent.height = PC_MENU_HEIGHT - 1; DrawFilledRectangle (r); - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x00)); + + // Draw the text of the selected item. + SetContextForeGroundColor (PCMENU_SELECTION_TEXT_COLOR); font_DrawText (&t); - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x15, 0x15), 0x00)); } else + { + // Draw the text of an unselected item. + SetContextForeGroundColor (PCMENU_TEXT_COLOR); font_DrawText (&t); + } t.baseline.y += PC_MENU_HEIGHT; } + SetContextFont (OldFont); } /* Determine the last text item to display */ @@ -178,19 +191,20 @@ { case PM_SOUND_ON: if (GLOBAL (glob_flags) & SOUND_DISABLED) - return (PM_SOUND_OFF); + return PM_SOUND_OFF; else - return (PM_SOUND_ON); + return PM_SOUND_ON; case PM_MUSIC_ON: if (GLOBAL (glob_flags) & MUSIC_DISABLED) - return (PM_MUSIC_OFF); + return PM_MUSIC_OFF; else - return (PM_MUSIC_ON); + return PM_MUSIC_ON; case PM_CYBORG_OFF: - return (PM_CYBORG_OFF + - ((BYTE)(GLOBAL (glob_flags) & COMBAT_SPEED_MASK) >> COMBAT_SPEED_SHIFT)); + return (PM_CYBORG_OFF + + ((BYTE)(GLOBAL (glob_flags) & COMBAT_SPEED_MASK) >> + COMBAT_SPEED_SHIFT)); } - return (BadState); + return BadState; } /* Choose the next menu to hilight in the 'forward' direction */ @@ -282,15 +296,15 @@ case ALT_MANIFEST: *BaseState = PM_ALT_SCAN + adj; *CurState = PM_ALT_MANIFEST - PM_ALT_SCAN - adj; - return (TRUE); + return TRUE; case ALT_EXIT_MENU0: *BaseState = PM_ALT_CARGO; *CurState = PM_ALT_EXITMENU0 - PM_ALT_CARGO; - return (TRUE); + return TRUE; } log_add (log_Error, "Unknown state combination: %d, %d", *BaseState, *CurState); - return (FALSE); + return FALSE; } else { @@ -299,57 +313,57 @@ case PM_SCAN: *BaseState = PM_ALT_SCAN; *CurState = PM_ALT_SCAN - PM_ALT_SCAN; - return (TRUE); + return TRUE; case PM_STARMAP: *BaseState = PM_ALT_SCAN + adj; *CurState = PM_ALT_STARMAP - PM_ALT_SCAN - adj; - return (TRUE); + return TRUE; case PM_DEVICES: *BaseState = PM_ALT_CARGO; *CurState = PM_ALT_DEVICES - PM_ALT_CARGO; - return (TRUE); + return TRUE; case PM_CARGO: *BaseState = PM_ALT_CARGO; *CurState = PM_ALT_CARGO - PM_ALT_CARGO; - return (TRUE); + return TRUE; case PM_ROSTER: *BaseState = PM_ALT_CARGO; *CurState = PM_ALT_ROSTER - PM_ALT_CARGO; - return (TRUE); + return TRUE; case PM_SAVE_LOAD0: *BaseState = PM_ALT_SCAN + adj; *CurState = PM_ALT_SAVE0 - PM_ALT_SCAN - adj; - return (TRUE); + return TRUE; case PM_NAVIGATE: *BaseState = PM_ALT_SCAN + adj; *CurState = PM_ALT_NAVIGATE - PM_ALT_SCAN - adj; - return (TRUE); + return TRUE; case PM_MIN_SCAN: *BaseState = PM_ALT_MSCAN; *CurState = PM_ALT_MSCAN - PM_ALT_MSCAN; - return (TRUE); + return TRUE; case PM_ENE_SCAN: *BaseState = PM_ALT_MSCAN; *CurState = PM_ALT_ESCAN - PM_ALT_MSCAN; - return (TRUE); + return TRUE; case PM_BIO_SCAN: *BaseState = PM_ALT_MSCAN; *CurState = PM_ALT_BSCAN - PM_ALT_MSCAN; - return (TRUE); + return TRUE; case PM_EXIT_MENU0: *BaseState = PM_ALT_MSCAN; *CurState = PM_ALT_EXITMENU1 - PM_ALT_MSCAN; - return (TRUE); + return TRUE; case PM_AUTO_SCAN: *BaseState = PM_ALT_MSCAN; *CurState = PM_ALT_ASCAN - PM_ALT_MSCAN; - return (TRUE); + return TRUE; case PM_LAUNCH_LANDER: *BaseState = PM_ALT_MSCAN; *CurState = PM_ALT_DISPATCH - PM_ALT_MSCAN; - return (TRUE); + return TRUE; } - return (FALSE); + return FALSE; } } @@ -396,56 +410,61 @@ BOOLEAN DoMenuChooser (MENU_STATE *pMS, BYTE BaseState) { + BYTE NewState = pMS->CurState; + BYTE OrigBase = BaseState; + BOOLEAN useAltMenu = FALSE; + if (optWhichMenu == OPT_PC) + useAltMenu = GetAlternateMenu (&BaseState, &NewState); + if (PulsedInputState.menu[KEY_MENU_LEFT] || + PulsedInputState.menu[KEY_MENU_UP]) + NewState = PreviousMenuState (BaseState, NewState); + else if (PulsedInputState.menu[KEY_MENU_RIGHT] || + PulsedInputState.menu[KEY_MENU_DOWN]) + NewState = NextMenuState (BaseState, NewState); + else if (useAltMenu && PulsedInputState.menu[KEY_MENU_SELECT]) { - - BYTE NewState = pMS->CurState; - BYTE OrigBase = BaseState; - BOOLEAN useAltMenu = FALSE; - if (optWhichMenu == OPT_PC) - useAltMenu = GetAlternateMenu (&BaseState, &NewState); - if (PulsedInputState.menu[KEY_MENU_LEFT] || PulsedInputState.menu[KEY_MENU_UP]) - NewState = PreviousMenuState (BaseState, NewState); - else if (PulsedInputState.menu[KEY_MENU_RIGHT] || PulsedInputState.menu[KEY_MENU_DOWN]) - NewState = NextMenuState (BaseState, NewState); - else if (useAltMenu && PulsedInputState.menu[KEY_MENU_SELECT]) + NewState = ConvertAlternateMenu (BaseState, NewState); + if (NewState == ALT_MANIFEST) { - NewState = ConvertAlternateMenu (BaseState, NewState); - if (NewState == ALT_MANIFEST) - { - DrawMenuStateStrings (PM_ALT_CARGO, 0); - pMS->CurState = PM_CARGO - PM_SCAN; - return (TRUE); - } - if (NewState == ALT_EXIT_MENU0) - { - if (OrigBase == PM_SCAN) - DrawMenuStateStrings (PM_ALT_SCAN, PM_ALT_MANIFEST - PM_ALT_SCAN); - else - DrawMenuStateStrings (PM_ALT_STARMAP, PM_ALT_MANIFEST - PM_ALT_STARMAP); - pMS->CurState = ALT_MANIFEST; - return (TRUE); - } - return (FALSE); + DrawMenuStateStrings (PM_ALT_CARGO, 0); + pMS->CurState = PM_CARGO - PM_SCAN; + return TRUE; } - else if ((optWhichMenu == OPT_PC) && PulsedInputState.menu[KEY_MENU_CANCEL] && - (BaseState == PM_ALT_CARGO)) + if (NewState == ALT_EXIT_MENU0) { if (OrigBase == PM_SCAN) - DrawMenuStateStrings (PM_ALT_SCAN, PM_ALT_MANIFEST - PM_ALT_SCAN); + DrawMenuStateStrings (PM_ALT_SCAN, + PM_ALT_MANIFEST - PM_ALT_SCAN); else - DrawMenuStateStrings (PM_ALT_STARMAP, PM_ALT_MANIFEST - PM_ALT_STARMAP); + DrawMenuStateStrings (PM_ALT_STARMAP, + PM_ALT_MANIFEST - PM_ALT_STARMAP); pMS->CurState = ALT_MANIFEST; - return (TRUE); + return TRUE; } + return FALSE; + } + else if ((optWhichMenu == OPT_PC) && + PulsedInputState.menu[KEY_MENU_CANCEL] && + (BaseState == PM_ALT_CARGO)) + { + if (OrigBase == PM_SCAN) + DrawMenuStateStrings (PM_ALT_SCAN, + PM_ALT_MANIFEST - PM_ALT_SCAN); else - return (FALSE); - DrawMenuStateStrings (BaseState, NewState); - if (useAltMenu) - NewState = ConvertAlternateMenu (BaseState, NewState); - pMS->CurState = NewState; - SleepThread (ONE_SECOND / 20); - return (TRUE); + DrawMenuStateStrings (PM_ALT_STARMAP, + PM_ALT_MANIFEST - PM_ALT_STARMAP); + pMS->CurState = ALT_MANIFEST; + return TRUE; } + else + return FALSE; + + DrawMenuStateStrings (BaseState, NewState); + if (useAltMenu) + NewState = ConvertAlternateMenu (BaseState, NewState); + pMS->CurState = NewState; + SleepThread (ONE_SECOND / 20); + return TRUE; } void @@ -460,7 +479,7 @@ if (NewState < 0) { - NewState = - NewState; + NewState = -NewState; hilite = 0; } @@ -489,15 +508,15 @@ r.extent.width = RADAR_WIDTH + 2; BatchGraphics (); SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x0A), 0x1D)); + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x0A), 0x08)); if (s.frame && optWhichMenu == OPT_PC) { if (beg_index == PM_CREW) - sprintf (pm_crew_str, "%s(%d)", + snprintf (pm_crew_str, sizeof pm_crew_str, "%s(%d)", GAME_STRING (MAINMENU_STRING_BASE + PM_CREW), GLOBAL (CrewCost)); if (beg_index == PM_FUEL) - sprintf (pm_fuel_str, "%s(%d)", + snprintf (pm_fuel_str, sizeof pm_fuel_str, "%s(%d)", GAME_STRING (MAINMENU_STRING_BASE + PM_FUEL), GLOBAL (FuelCost)); if (beg_index == PM_SOUND_ON) @@ -536,7 +555,7 @@ } else { - if(optWhichMenu == OPT_PC) + if (optWhichMenu == OPT_PC) { r.corner.x -= 1; r.extent.width += 1; @@ -560,10 +579,9 @@ t.align = ALIGN_RIGHT; t.CharCount = (COUNT)~0; t.pStr = buf; - sprintf (buf, "%u", GLOBAL (CrewCost)); + snprintf (buf, sizeof buf, "%u", GLOBAL (CrewCost)); SetContextFont (TinyFont); - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x1F, 0x00), 0x00)); + SetContextForeGroundColor (THREEDOMENU_TEXT_COLOR); font_DrawText (&t); break; case PM_FUEL: @@ -572,10 +590,9 @@ t.align = ALIGN_RIGHT; t.CharCount = (COUNT)~0; t.pStr = buf; - sprintf (buf, "%u", GLOBAL (FuelCost)); + snprintf (buf, sizeof buf, "%u", GLOBAL (FuelCost)); SetContextFont (TinyFont); - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x1F, 0x00), 0x00)); + SetContextForeGroundColor (THREEDOMENU_TEXT_COLOR); font_DrawText (&t); break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Mee...@us...> - 2009-10-25 01:11:48
|
Revision: 3249 http://sc2.svn.sourceforge.net/sc2/?rev=3249&view=rev Author: Meep-Eep Date: 2009-10-25 01:11:41 +0000 (Sun, 25 Oct 2009) Log Message: ----------- Improvements to flashing code. Overlays work right too, now. Modified Paths: -------------- trunk/sc2/src/uqm/flash.c trunk/sc2/src/uqm/flash.h trunk/sc2/src/uqm/pickmele.c Modified: trunk/sc2/src/uqm/flash.c =================================================================== --- trunk/sc2/src/uqm/flash.c 2009-10-25 01:01:45 UTC (rev 3248) +++ trunk/sc2/src/uqm/flash.c 2009-10-25 01:11:41 UTC (rev 3249) @@ -14,20 +14,28 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -// NOTE: A lot of this code is untested. Only highlite flash areas drawing -// directly to the screen, using a cache are currently in use. +// NOTE: A lot of this code is untested. Only highlite and overlay flash +// areas drawing directly to the screen, using a cache are +// currently in use. // TODO: // - Add Flash_setHighlight() to change the brightness as in // Flash_createHighlight(), for an already created flash area. -// - Add Flash_setOverlay() to change the overlay frame as in -// Flash_createOverlay(), 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 +// necessary to make a copy in this case. Instead, the original can be +// used. I had code to do this, but this doesn't work anymore with the +// addition of startNumer, endNumer, and denom. This code is still +// present, but disabled with BEGIN_AND_END_FRAME_EXCEPTIONS. - #define FLASH_INTERNAL #include "flash.h" #include "setup.h" + // For GraphicsLock. #include "libs/log.h" #include "libs/memlib.h" #include "libs/threadlib.h" @@ -66,6 +74,10 @@ context->original = 0; + context->startNumer = 0; + context->endNumer = 1; + context->denom = 1; + context->fadeInTime = Flash_DEFAULT_FADE_IN_TIME; context->onTime = Flash_DEFAULT_ON_TIME; context->fadeOutTime = Flash_DEFAULT_FADE_OUT_TIME; @@ -88,19 +100,18 @@ return context; } -// 'startNumer / denom' is the brightness in the start state of the flash. -// 'endNumer / denom' is the brightness in the end state of the flash. +// 'startNumer / denom' is the brightness in the start state of the sequence. +// '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, - int startNumer, int endNumer, int denom) +Flash_createHighlight (CONTEXT gfxContext, FRAME parent, const RECT *rect) { FlashContext *context = Flash_create (gfxContext, parent); if (rect == NULL) { - // No rectangle specified. Should be later with Flash_setRect() - // before calling Flash_start(). + // No rectangle specified. It should be specified later with + // Flash_setRect(), before calling Flash_start(). context->rect.corner.x = 0; context->rect.corner.y = 0; context->rect.extent.width = 0; @@ -110,10 +121,6 @@ context->rect = *rect; context->type = FlashType_highlight; - context->u.highlight.startNumer = startNumer; - context->u.highlight.endNumer = endNumer; - context->u.highlight.denom = denom; - return context; } @@ -138,18 +145,28 @@ const POINT *origin, FRAME overlay) { FlashContext *context = Flash_create (gfxContext, parent); - + context->type = FlashType_overlay; - context->u.overlay.frame = overlay; - GetFrameRect (overlay, &context->rect); - context->rect.corner = *origin; + if (origin == NULL || overlay == NULL) { + // No overlay specified. It should be specified later with + // Flash_setOverlay(), before calling Flash_start(). + context->u.overlay.frame = NULL; + context->rect.corner.x = 0; + context->rect.corner.y = 0; + context->rect.extent.width = 0; + context->rect.extent.height = 0; + } else + Flash_setOverlay (context, origin, overlay); return context; } +// Set the current state. 'timeSpentInState' determines how much time should +// be considered to be already spent in this state. void -Flash_setState (FlashContext *context, FlashState state) +Flash_setState (FlashContext *context, FlashState state, + TimeCount timeSpentInState) { TimeCount now; @@ -157,10 +174,12 @@ context->state = state; Flash_fixState (context); - Flash_drawCurrentFrame (context); - context->lastStateTime = now; + context->lastStateTime = now - timeSpentInState; context->lastFrameTime = now; + + if (context->started) + Flash_drawCurrentFrame (context); } void @@ -303,6 +322,43 @@ context->offTime = offTime; } +// Determines how the brightness of the flashing changes. +// For highlights: +// 'startNumer / denom' is the brightness, at the start state of the flash. +// 'endNumer / denom' is the brightness, at the end state of the flash. +// For overlays: +// 'startNumer / denom' is the brightness of the image to overlay, at +// the start state of the flash. +// 'endNumer / denom' is the brightness of the image to overlay, at +// the end state of the flash. +// For transitions: +// 'startNumer / denom' is the brightness of the second image, at +// the start state of the flash; '1 - startNumer / denom' is the +// brightness of the first image at the start state of the flash. +// 'endNumer / denom' is the brightness of the second image, at +// the end state of the flash; '1 - endNumer / denom' is the +// brightness of the first image at the end state of the flash. +// These numbers are relative to the brighness of each original image. +void +Flash_setMergeFactors(FlashContext *context, int startNumer, int endNumer, + int denom) { + if (context->started) + { + Flash_drawFrame (context, context->original); + Flash_clearCache (context); + } + + context->startNumer = startNumer; + context->endNumer = endNumer; + context->denom = denom; + + if (context->started) + { + Flash_grabOriginal (context); + Flash_drawCurrentFrame (context); + } +} + // Set the time between updates of the flash area. void Flash_setFrameTime (FlashContext *context, TimeCount frameTime) { @@ -339,6 +395,7 @@ { COUNT i; +#ifdef BEGIN_AND_END_FRAME_EXCEPTIONS if (context->type == FlashType_transition || context->type == FlashType_overlay) { @@ -352,6 +409,7 @@ // we shouldn't free it. context->cache[context->cacheSize - 1] = (FRAME) 0; } +#endif /* BEGIN_AND_END_FRMAE_EXCEPTIONS */ for (i = 0; i < context->cacheSize; i++) { @@ -366,6 +424,8 @@ void Flash_setRect (FlashContext *context, const RECT *rect) { + assert(context->type == FlashType_highlight); + if (context->started) { Flash_drawFrame (context, context->original); @@ -390,20 +450,49 @@ *rect = context->rect; } +void +Flash_setOverlay (FlashContext *context, const POINT *origin, + FRAME overlay) { + assert(context->type = FlashType_overlay); + + if (context->started) + { + Flash_drawFrame (context, context->original); + Flash_clearCache (context); + } + + context->u.overlay.frame = overlay; + GetFrameRect (overlay, &context->rect); + context->rect.corner.x += origin->x; + context->rect.corner.y += origin->y; + + if (context->started) + { + Flash_grabOriginal (context); + Flash_drawCurrentFrame (context); + } +} + // Call before you update the graphics in the currently flashing area. void Flash_preUpdate (FlashContext *context) { - Flash_drawFrame (context, context->original); - Flash_clearCache (context); + if (context->started) + { + Flash_drawFrame (context, context->original); + Flash_clearCache (context); + } } // Call after you update the graphics in the currently flashing area. void Flash_postUpdate (FlashContext *context) { - Flash_grabOriginal (context); - Flash_drawCurrentFrame (context); + if (context->started) + { + Flash_grabOriginal (context); + Flash_drawCurrentFrame (context); + } } // Pre: context->original has been initialised. @@ -482,16 +571,14 @@ // F1 = context->u.highlight.endNumer / context->u.highlight.denom // P = *numer / *denom // R = P * F1 + (1 - P) * F0 - // = numer * context->u.highlight.endNumer / - // (denom * context->u.highlight.denom) + - // (denom - numer) * u.highlight.startNumer / - // denom * context->u.highlight.denom + // = numer * context->endNumer / (denom * context->denom) + + // (denom - numer) * startNumer / denom * context->denom assert (numer >= 0 && numer <= denom); - *resNumer = numer * context->u.highlight.endNumer + - (denom - numer) * context->u.highlight.startNumer; - *resDenom = denom * context->u.highlight.denom; + *resNumer = numer * context->endNumer + + (denom - numer) * context->startNumer; + *resDenom = denom * context->denom; } static void @@ -499,18 +586,18 @@ int numer, int denom) { RECT orgRect; + int blendedNumer; + int blendedDenom; + orgRect.corner.x = 0; orgRect.corner.y = 0; orgRect.extent = context->rect.extent; + Flash_blendFraction (context, numer, denom, &blendedNumer, &blendedDenom); + switch (context->type) { case FlashType_highlight: { - int blendedNumer; - int blendedDenom; - - Flash_blendFraction (context, numer, denom, &blendedNumer, - &blendedDenom); arith_frame_blit (context->original, &orgRect, dest, destRect, blendedNumer, blendedDenom); break; @@ -528,21 +615,43 @@ final = context->original; arith_frame_blit (first, &orgRect, dest, destRect, - denom - numer, denom); + blendedDenom - blendedNumer, blendedDenom); arith_frame_blit (final, &orgRect, dest, destRect, - numer, -denom); + blendedNumer, -blendedDenom); 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; + } + + // 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, - denom, denom); - arith_frame_blit (context->u.overlay.frame, &orgRect, - dest, destRect, numer, -denom); + addOrSubtractNumer, addOrSubtractDenom); break; + } } } - // Prepare an entry in the cache. static inline void Flash_prepareCacheFrame (FlashContext *context, COUNT index) @@ -550,6 +659,7 @@ if (context->cache[index] != (FRAME) 0) return; +#ifdef BEGIN_AND_END_FRAME_EXCEPTIONS if (index == 0 && context->type == FlashType_overlay) context->cache[index] = context->original; else if (index == 0 && context->type == FlashType_transition) @@ -560,6 +670,7 @@ context->cache[index] = context->u.transition.final != (FRAME) 0 ? context->u.transition.final : context->original; else +#endif /* BEGIN_AND_END_FRMAE_EXCEPTIONS */ { context->cache[index] = CaptureDrawable (CreateDrawable (WANT_PIXMAP, context->rect.extent.width, context->rect.extent.height, 1)); @@ -606,6 +717,7 @@ static inline void Flash_drawUncachedFrame (FlashContext *context, int numer, int denom) { +#ifdef BEGIN_AND_END_FRAME_EXCEPTIONS // 'lastFrameIndex' is 0 for the first image, 1 for the final // image, and 2 otherwise. @@ -638,6 +750,7 @@ } context->lastFrameIndex = 2; +#endif /* BEGIN_AND_END_FRMAE_EXCEPTIONS */ if (context->parent == NULL) { Modified: trunk/sc2/src/uqm/flash.h =================================================================== --- trunk/sc2/src/uqm/flash.h 2009-10-25 01:01:45 UTC (rev 3248) +++ trunk/sc2/src/uqm/flash.h 2009-10-25 01:11:41 UTC (rev 3249) @@ -20,8 +20,7 @@ /* * This code can draw three kinds of flashing areas. * - a rectangular highlight area. The brightness of the area oscilates. - * - an overlay; an image is overlayed over an area, with oscilating - * brightness. + * - an overlay; an image is laid over an area, with oscilating brightness. * - a transition/cross-fade between two images. * * NB. The graphics lock should not be held when any of the Flash functions @@ -32,8 +31,11 @@ * * // We create the flash context; it is used to manipulate the flash * // rectangle while it exists. - * FlashContext *fc = Flash_createHighlight (context, (FRAME) 0, rect, - * 2, 3, 2); + * FlashContext *fc = Flash_createHighlight (context, (FRAME) 0, rect); + * + * // Specify how bright the flash is at the beginning and ending of the + * // sequence. + * Flash_setMergeFactors(context, 2, 3, 2); * * // We change the flashing speed from the defaults. * Flash_setSpeed (ONE_SECOND, ONE_SECOND, ONE_SECOND, ONE_SECOND); @@ -116,12 +118,6 @@ union { struct { - int startNumer; - // Numerator for the brightness for the on state. - int endNumer; - // Numerator for the brightness for the off state. - int denom; - // Denominator for the brightness. } highlight; struct { FRAME first; @@ -136,6 +132,13 @@ } overlay; } u; + int startNumer; + // Numerator for the merge factor for the on state. + int endNumer; + // Numerator for the merge factor for the off state. + int denom; + // Denominator for the merge factor. + TimeCount fadeInTime; TimeCount onTime; TimeCount fadeOutTime; @@ -173,13 +176,14 @@ FlashContext *Flash_createHighlight (CONTEXT gfxContext, FRAME parent, - const RECT *rect, int startNumer, int endNumer, int denom); + const RECT *rect); FlashContext *Flash_createTransition (CONTEXT gfxContext, FRAME parent, const POINT *origin, FRAME first, FRAME final); FlashContext *Flash_createOverlay (CONTEXT gfxContext, FRAME parent, const POINT *origin, FRAME overlay); -void Flash_setState (FlashContext *context, FlashState state); +void Flash_setState (FlashContext *context, FlashState state, + TimeCount timeSpentInState); void Flash_start (FlashContext *context); void Flash_terminate (FlashContext *context); void Flash_pause (FlashContext *context); @@ -187,10 +191,14 @@ void Flash_process (FlashContext *context); void Flash_setSpeed (FlashContext *context, TimeCount fadeInTime, TimeCount onTime, TimeCount fadeOutTime, TimeCount offTime); +void Flash_setMergeFactors(FlashContext *context, int startNumer, + int endNumer, int denom); void Flash_setFrameTime (FlashContext *context, TimeCount frameTime); TimeCount Flash_nextTime (FlashContext *context); void Flash_setRect (FlashContext *context, const RECT *rect); void Flash_getRect (FlashContext *context, RECT *rect); +void Flash_setOverlay(FlashContext *context, const POINT *origin, + FRAME overlay); void Flash_preUpdate (FlashContext *context); void Flash_postUpdate (FlashContext *context); void Flash_setCacheSize (FlashContext *context, COUNT size); Modified: trunk/sc2/src/uqm/pickmele.c =================================================================== --- trunk/sc2/src/uqm/pickmele.c 2009-10-25 01:01:45 UTC (rev 3248) +++ trunk/sc2/src/uqm/pickmele.c 2009-10-25 01:11:41 UTC (rev 3249) @@ -582,7 +582,8 @@ #endif gmstate.player[playerI].flashContext = - Flash_createHighlight (ScreenContext, (FRAME) 0, NULL, + Flash_createHighlight (ScreenContext, (FRAME) 0, NULL); + Flash_setMergeFactors (gmstate.player[playerI].flashContext, 2, 3, 2); Flash_setFrameTime (gmstate.player[playerI].flashContext, ONE_SECOND / 16); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Mee...@us...> - 2009-10-25 01:12:30
|
Revision: 3250 http://sc2.svn.sourceforge.net/sc2/?rev=3250&view=rev Author: Meep-Eep Date: 2009-10-25 01:12:19 +0000 (Sun, 25 Oct 2009) Log Message: ----------- Switch main menu to the new threadless flashing code. Modified Paths: -------------- trunk/sc2/src/uqm/menustat.h trunk/sc2/src/uqm/restart.c trunk/sc2/src/uqm/sis.c Modified: trunk/sc2/src/uqm/menustat.h =================================================================== --- trunk/sc2/src/uqm/menustat.h 2009-10-25 01:11:41 UTC (rev 3249) +++ trunk/sc2/src/uqm/menustat.h 2009-10-25 01:12:19 UTC (rev 3250) @@ -22,8 +22,8 @@ #include "libs/gfxlib.h" #include "libs/sndlib.h" #include "libs/tasklib.h" +#include "flash.h" - typedef struct menu_state { BOOLEAN (*InputFunc) (struct menu_state *pMS); @@ -41,6 +41,7 @@ Task flash_task; RECT flash_rect0, flash_rect1; FRAME flash_frame0, flash_frame1; + FlashContext *flashContext; MUSIC_REF hMusic; Modified: trunk/sc2/src/uqm/restart.c =================================================================== --- trunk/sc2/src/uqm/restart.c 2009-10-25 01:11:41 UTC (rev 3249) +++ trunk/sc2/src/uqm/restart.c 2009-10-25 01:12:19 UTC (rev 3250) @@ -89,30 +89,15 @@ } static void -DrawRestartMenu (BYTE OldState, BYTE NewState, FRAME f) +DrawRestartMenu (MENU_STATE *pMS, BYTE NewState, FRAME f) { - RECT r; - - LockMutex (GraphicsLock); - SetContext (ScreenContext); - - r.corner.x = 0; - r.corner.y = 0; - r.extent.width = 0; - r.extent.height = 0; - SetContextClipRect (&r); - - r.corner.x = 0; - r.corner.y = 0; - r.extent.width = SCREEN_WIDTH; - r.extent.height = SCREEN_HEIGHT; - SetFlashRect (&r, SetAbsFrameIndex (f, NewState + 1)); - - UnlockMutex (GraphicsLock); - (void) OldState; /* Satisfying compiler (unused parameter) */ + POINT origin; + origin.x = 0; + origin.y = 0; + Flash_setOverlay(pMS->flashContext, + &origin, SetAbsFrameIndex (f, NewState + 1)); } - static BOOLEAN DoRestart (MENU_STATE *pMS) { @@ -123,6 +108,9 @@ /* Cancel any presses of the Pause key. */ GamePaused = FALSE; + if (pMS->Initialized) + Flash_process(pMS->flashContext); + if (!pMS->Initialized) { if (pMS->hMusic) @@ -133,9 +121,17 @@ } pMS->hMusic = LoadMusic (MAINMENU_MUSIC); InactTimeOut = (pMS->hMusic ? 120 : 20) * ONE_SECOND; - + pMS->flashContext = Flash_createOverlay (ScreenContext, + NULL, NULL, NULL); + Flash_setMergeFactors (pMS->flashContext, -3, 3, 16); + Flash_setSpeed (pMS->flashContext, (6 * ONE_SECOND) / 16, 0, + (6 * ONE_SECOND) / 16, 0); + Flash_setFrameTime (pMS->flashContext, ONE_SECOND / 16); + Flash_setState(pMS->flashContext, FlashState_fadeIn, + (3 * ONE_SECOND) / 16); + DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame); + Flash_start (pMS->flashContext); PlayMusic (pMS->hMusic, TRUE, 1); - DrawRestartMenu ((BYTE)~0, pMS->CurState, pMS->CurFrame); pMS->Initialized = TRUE; { @@ -189,9 +185,9 @@ GLOBAL (CurrentActivity) = SUPER_MELEE; break; case SETUP_GAME: - LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); - UnlockMutex (GraphicsLock); + Flash_pause(pMS->flashContext); + Flash_setState(pMS->flashContext, FlashState_fadeIn, + (3 * ONE_SECOND) / 16); SetupMenu (); SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); @@ -199,8 +195,9 @@ SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); - DrawRestartMenu ((BYTE)~0, pMS->CurState, pMS->CurFrame); ScreenTransition (3, NULL); + DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame); + Flash_continue(pMS->flashContext); UnbatchGraphics (); return TRUE; case QUIT_GAME: @@ -212,11 +209,9 @@ break; } - LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); - UnlockMutex (GraphicsLock); + Flash_pause(pMS->flashContext); - return (FALSE); + return FALSE; } else { @@ -236,7 +231,7 @@ if (NewState != pMS->CurState) { BatchGraphics (); - DrawRestartMenu (pMS->CurState, NewState, pMS->CurFrame); + DrawRestartMenu (pMS, NewState, pMS->CurFrame); UnbatchGraphics (); pMS->CurState = NewState; } @@ -244,18 +239,17 @@ if (MouseButtonDown) { - LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); - UnlockMutex (GraphicsLock); + Flash_pause(pMS->flashContext); DoPopupWindow (GAME_STRING (MAINMENU_STRING_BASE + 54)); // Mouse not supported message SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); - DrawRestartMenu ((BYTE)~0, pMS->CurState, pMS->CurFrame); + DrawRestartMenu (pMS, pMS->CurState, pMS->CurFrame); ScreenTransition (3, NULL); UnbatchGraphics (); + Flash_continue(pMS->flashContext); } LastInputTime = GetTimeCounter (); @@ -330,9 +324,7 @@ pMS->hMusic = 0; } - LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); - UnlockMutex (GraphicsLock); + Flash_terminate (pMS->flashContext); DestroyDrawable (ReleaseDrawable (pMS->CurFrame)); if (GLOBAL (CurrentActivity) == (ACTIVITY)~0) Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2009-10-25 01:11:41 UTC (rev 3249) +++ trunk/sc2/src/uqm/sis.c 2009-10-25 01:12:19 UTC (rev 3250) @@ -1341,11 +1341,12 @@ // Wait for the flash_screen_frame to get initialized FlushGraphics (); GetFrameRect (flash_screen_frame, &screen_rect); - cached_screen_frame = CaptureDrawable (CreateDrawable (WANT_PIXMAP, - screen_rect.extent.width, screen_rect.extent.height, 1)); + cached_screen_frame = CaptureDrawable (CreateDrawable ( + WANT_PIXMAP, screen_rect.extent.width, + screen_rect.extent.height, 1)); screen_rect.corner.x = 0; screen_rect.corner.y = 0; - arith_frame_blit (flash_screen_frame, &screen_rect, + arith_frame_blit (flash_screen_frame, &screen_rect, cached_screen_frame, NULL, 0, 0); UnlockMutex (flash_mutex); if (cached_frame) @@ -1370,7 +1371,8 @@ #define MAX_F_STRENGTH 3 int num = 0, denom = 0; - if ((fstrength += incr) > MAX_F_STRENGTH) + fstrength += incr; + if (fstrength > MAX_F_STRENGTH) { fstrength = MAX_F_STRENGTH - 1; incr = -1; @@ -1387,8 +1389,9 @@ RECT tmp_rect = framesize_rect; pStamp = &cached_stamp[fstrength - MIN_F_STRENGTH]; cached[fstrength - MIN_F_STRENGTH] = 1; - pStamp->frame = CaptureDrawable (CreateDrawable (WANT_PIXMAP, - framesize_rect.extent.width, framesize_rect.extent.height, 1)); + pStamp->frame = CaptureDrawable (CreateDrawable ( + WANT_PIXMAP, framesize_rect.extent.width, + framesize_rect.extent.height, 1)); pStamp->origin.x = framesize_rect.corner.x; pStamp->origin.y = framesize_rect.corner.y; tmp_rect.corner.x = 0; @@ -1396,7 +1399,8 @@ if (fstrength != NORMAL_F_STRENGTH) { - arith_frame_blit (cached_frame, &tmp_rect, pStamp->frame, NULL, + arith_frame_blit (cached_frame, &tmp_rect, + pStamp->frame, NULL, fstrength > 0 ? fstrength : -fstrength, 16); if (fstrength < 0) @@ -1413,15 +1417,16 @@ } } - arith_frame_blit (cached_screen_frame, &framesize_rect, pStamp->frame, - &tmp_rect, num, denom); + arith_frame_blit (cached_screen_frame, &framesize_rect, + pStamp->frame, &tmp_rect, num, denom); } } else { #define MIN_STRENGTH 4 #define MAX_STRENGTH 6 - if ((strength += 2) > MAX_STRENGTH) + strength += 2; + if (strength > MAX_STRENGTH) strength = MIN_STRENGTH; if (cached[strength - MIN_STRENGTH]) pStamp = &cached_stamp[strength - MIN_STRENGTH]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-10-26 18:26:04
|
Revision: 3253 http://sc2.svn.sourceforge.net/sc2/?rev=3253&view=rev Author: avolkov Date: 2009-10-26 18:25:56 +0000 (Mon, 26 Oct 2009) Log Message: ----------- Do not make alien comm code play each track individually when there are events interspersed, it causes subtitle blinking, and there is no need for this Modified Paths: -------------- trunk/sc2/src/uqm/comm/starbas/starbas.c trunk/sc2/src/uqm/comm/syreen/syreenc.c trunk/sc2/src/uqm/comm.c Modified: trunk/sc2/src/uqm/comm/starbas/starbas.c =================================================================== --- trunk/sc2/src/uqm/comm/starbas/starbas.c 2009-10-25 22:21:08 UTC (rev 3252) +++ trunk/sc2/src/uqm/comm/starbas/starbas.c 2009-10-26 18:25:56 UTC (rev 3253) @@ -1288,11 +1288,13 @@ if (VuxBeastIndex) { - for (i = 1; i < VuxBeastIndex; ++i) - AlienTalkSegue (i); + // Run all tracks upto the Vux Beast scientist's report + AlienTalkSegue (VuxBeastIndex - 1); + // Disable Commander's speech animation and run the report i = CommData.AlienTalkDesc.NumFrames; CommData.AlienTalkDesc.NumFrames = 0; AlienTalkSegue (VuxBeastIndex); + // Enable Commander's speech animation and run the rest CommData.AlienTalkDesc.NumFrames = i; AlienTalkSegue ((COUNT)~0); } Modified: trunk/sc2/src/uqm/comm/syreen/syreenc.c =================================================================== --- trunk/sc2/src/uqm/comm/syreen/syreenc.c 2009-10-25 22:21:08 UTC (rev 3252) +++ trunk/sc2/src/uqm/comm/syreen/syreenc.c 2009-10-26 18:25:56 UTC (rev 3253) @@ -218,7 +218,6 @@ NPCPhrase (LATER); NPCPhrase (SEX_GOODBYE); - AlienTalkSegue (1); AlienTalkSegue (2); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 0) Modified: trunk/sc2/src/uqm/comm.c =================================================================== --- trunk/sc2/src/uqm/comm.c 2009-10-25 22:21:08 UTC (rev 3252) +++ trunk/sc2/src/uqm/comm.c 2009-10-26 18:25:56 UTC (rev 3253) @@ -569,19 +569,16 @@ which_track = PlayingTrack (); if (which_track == 0 && !rewind) - { - // initial start of player - if (wait_track == 1 || wait_track == (COUNT)~0) + { // initial start of player + UnlockMutex (GraphicsLock); + PlayTrack (); + // wait for the trackplayer to start playing + do { - UnlockMutex (GraphicsLock); - PlayTrack (); - do - { - TaskSwitch (); - which_track = PlayingTrack (); - } while (!which_track); - LockMutex (GraphicsLock); - } + TaskSwitch (); + which_track = PlayingTrack (); + } while (!which_track); + LockMutex (GraphicsLock); } else if (which_track <= wait_track) { // XXX: I don't know why this is here, but it is not harmful. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-10-29 22:32:28
|
Revision: 3263 http://sc2.svn.sourceforge.net/sc2/?rev=3263&view=rev Author: avolkov Date: 2009-10-29 22:32:22 +0000 (Thu, 29 Oct 2009) Log Message: ----------- Battle & ship code cleanup: Removed the now invariant var CyborgDescPtr Modified Paths: -------------- trunk/sc2/src/uqm/battle.c trunk/sc2/src/uqm/cyborg.c trunk/sc2/src/uqm/intel.h trunk/sc2/src/uqm/ship.c Modified: trunk/sc2/src/uqm/battle.c =================================================================== --- trunk/sc2/src/uqm/battle.c 2009-10-29 00:40:35 UTC (rev 3262) +++ trunk/sc2/src/uqm/battle.c 2009-10-29 22:32:22 UTC (rev 3263) @@ -99,7 +99,7 @@ BUILD_COLOR (MAKE_RGB15 (0x0B, 0x00, 0x00), 0x2E)); SetPrimType (&DisplayArray[ElementPtr->PrimIndex], STAMPFILL_PRIM); - CyborgDescPtr->ship_input_state = 0; + StarShipPtr->ship_input_state = 0; } UnlockElement (StarShipPtr->hShip); } @@ -170,8 +170,6 @@ if (StarShipPtr->hShip) { - CyborgDescPtr = StarShipPtr; - InputState = PlayerInput[cur_player]->handlers->frameInput ( PlayerInput[cur_player], StarShipPtr); @@ -192,19 +190,19 @@ } #endif - CyborgDescPtr->ship_input_state = 0; - if (CyborgDescPtr->RaceDescPtr->ship_info.crew_level) + StarShipPtr->ship_input_state = 0; + if (StarShipPtr->RaceDescPtr->ship_info.crew_level) { if (InputState & BATTLE_LEFT) - CyborgDescPtr->ship_input_state |= LEFT; + StarShipPtr->ship_input_state |= LEFT; else if (InputState & BATTLE_RIGHT) - CyborgDescPtr->ship_input_state |= RIGHT; + StarShipPtr->ship_input_state |= RIGHT; if (InputState & BATTLE_THRUST) - CyborgDescPtr->ship_input_state |= THRUST; + StarShipPtr->ship_input_state |= THRUST; if (InputState & BATTLE_WEAPON) - CyborgDescPtr->ship_input_state |= WEAPON; + StarShipPtr->ship_input_state |= WEAPON; if (InputState & BATTLE_SPECIAL) - CyborgDescPtr->ship_input_state |= SPECIAL; + StarShipPtr->ship_input_state |= SPECIAL; if (CanRunAway && cur_player == 0 && (InputState & BATTLE_ESCAPE)) Modified: trunk/sc2/src/uqm/cyborg.c =================================================================== --- trunk/sc2/src/uqm/cyborg.c 2009-10-29 00:40:35 UTC (rev 3262) +++ trunk/sc2/src/uqm/cyborg.c 2009-10-29 22:32:22 UTC (rev 3263) @@ -288,8 +288,6 @@ return (0); } -STARSHIP *CyborgDescPtr; - static void InitCyborg (STARSHIP *StarShipPtr) { Modified: trunk/sc2/src/uqm/intel.h =================================================================== --- trunk/sc2/src/uqm/intel.h 2009-10-29 00:40:35 UTC (rev 3262) +++ trunk/sc2/src/uqm/intel.h 2009-10-29 22:32:22 UTC (rev 3263) @@ -44,7 +44,6 @@ FIRST_EMPTY_INDEX }; -extern STARSHIP *CyborgDescPtr; extern SIZE cur_player; extern BATTLE_INPUT_STATE computer_intelligence ( Modified: trunk/sc2/src/uqm/ship.c =================================================================== --- trunk/sc2/src/uqm/ship.c 2009-10-29 00:40:35 UTC (rev 3262) +++ trunk/sc2/src/uqm/ship.c 2009-10-29 22:32:22 UTC (rev 3263) @@ -503,7 +503,6 @@ HSTARSHIP hBattleShip; cur_player = which_side; - CyborgDescPtr = 0; hBattleShip = GetEncounterStarShip (LastStarShipPtr, which_side); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-10-30 19:27:53
|
Revision: 3264 http://sc2.svn.sourceforge.net/sc2/?rev=3264&view=rev Author: avolkov Date: 2009-10-30 19:27:41 +0000 (Fri, 30 Oct 2009) Log Message: ----------- Battle & ship code cleanup: Removed the global var cur_player; control flags propagated forward Modified Paths: -------------- trunk/sc2/src/uqm/battle.c trunk/sc2/src/uqm/cyborg.c trunk/sc2/src/uqm/encount.c trunk/sc2/src/uqm/init.c trunk/sc2/src/uqm/intel.c trunk/sc2/src/uqm/intel.h trunk/sc2/src/uqm/melee.c trunk/sc2/src/uqm/pickmele.c trunk/sc2/src/uqm/pickship.c trunk/sc2/src/uqm/races.h trunk/sc2/src/uqm/setup.h trunk/sc2/src/uqm/ship.c trunk/sc2/src/uqm/ships/zoqfot/zoqfot.c Modified: trunk/sc2/src/uqm/battle.c =================================================================== --- trunk/sc2/src/uqm/battle.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/battle.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -156,9 +156,8 @@ for (sideI = 0; sideI < NUM_SIDES; sideI++) { HSTARSHIP hBattleShip, hNextShip; + size_t cur_player = battleInputOrder[sideI]; - cur_player = battleInputOrder[sideI]; - for (hBattleShip = GetHeadLink (&race_q[cur_player]); hBattleShip != 0; hBattleShip = hNextShip) { @@ -170,6 +169,10 @@ if (StarShipPtr->hShip) { + // TODO: review and see if we have to do this every frame, or + // if we can do this once somewhere + StarShipPtr->control = PlayerControl[cur_player]; + InputState = PlayerInput[cur_player]->handlers->frameInput ( PlayerInput[cur_player], StarShipPtr); Modified: trunk/sc2/src/uqm/cyborg.c =================================================================== --- trunk/sc2/src/uqm/cyborg.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/cyborg.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -435,11 +435,11 @@ ShipFired = FALSE; } - if (PlayerControl[cur_player] & AWESOME_RATING) + if (StarShipPtr->control & AWESOME_RATING) margin_of_error = 0; - else if (PlayerControl[cur_player] & GOOD_RATING) + else if (StarShipPtr->control & GOOD_RATING) margin_of_error = DISPLAY_TO_WORLD (20); - else /* if (PlayerControl[cur_player] & STANDARD_RATING) */ + else /* if (StarShipPtr->control & STANDARD_RATING) */ margin_of_error = DISPLAY_TO_WORLD (40); ObjectsOfConcern += ConcernCounter; @@ -464,7 +464,7 @@ || (ConcernCounter == ENEMY_WEAPON_INDEX && ObjectsOfConcern->MoveState != AVOID #ifdef NEVER - && !(PlayerControl[cur_player] & STANDARD_RATING) + && !(StarShipPtr->control & STANDARD_RATING) #endif /* NEVER */ ))) { @@ -1035,7 +1035,7 @@ ShipMoved = TRUE; /* Disable ship's special completely for the Standard AI */ - if (PlayerControl[context->playerNr] & STANDARD_RATING) + if (StarShipPtr->control & STANDARD_RATING) ++StarShipPtr->special_counter; #ifdef DEBUG_CYBORG @@ -1259,7 +1259,7 @@ ed.which_turn = 0; } } - else if (!(PlayerControl[context->playerNr] & AWESOME_RATING)) + else if (!(StarShipPtr->control & AWESOME_RATING)) ed.which_turn = 0; else { Modified: trunk/sc2/src/uqm/encount.c =================================================================== --- trunk/sc2/src/uqm/encount.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/encount.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -142,6 +142,7 @@ BuiltShipPtr = LockStarShip (&race_q[which_player], hBuiltShip); BuiltShipPtr->captains_name_index = FragPtr->captains_name_index; BuiltShipPtr->which_side = 1 << which_player; + BuiltShipPtr->playerNr = which_player; if (FragPtr->crew_level != INFINITE_FLEET) BuiltShipPtr->crew_level = FragPtr->crew_level; else /* if infinite ships */ @@ -165,6 +166,7 @@ BuiltShipPtr = LockStarShip (&race_q[0], hBuiltShip); BuiltShipPtr->captains_name_index = 0; BuiltShipPtr->which_side = GOOD_GUY; + BuiltShipPtr->playerNr = 0; BuiltShipPtr->crew_level = 0; BuiltShipPtr->max_crew = 0; // Crew will be copied directly from Modified: trunk/sc2/src/uqm/init.c =================================================================== --- trunk/sc2/src/uqm/init.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/init.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -166,6 +166,7 @@ return 0; StarShipPtr = LockStarShip (&race_q[0], hStarShip); StarShipPtr->which_side = GOOD_GUY; + StarShipPtr->playerNr = 0; StarShipPtr->captains_name_index = 0; UnlockStarShip (&race_q[0], hStarShip); Modified: trunk/sc2/src/uqm/intel.c =================================================================== --- trunk/sc2/src/uqm/intel.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/intel.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -27,8 +27,6 @@ #include <stdio.h> -SIZE cur_player; - BATTLE_INPUT_STATE computer_intelligence (ComputerInputContext *context, STARSHIP *StarShipPtr) { @@ -40,7 +38,7 @@ if (StarShipPtr) { // Selecting the next action for in battle. - if (PlayerControl[context->playerNr] & CYBORG_CONTROL) + if (StarShipPtr->control & CYBORG_CONTROL) { InputState = tactical_intelligence (context, StarShipPtr); Modified: trunk/sc2/src/uqm/intel.h =================================================================== --- trunk/sc2/src/uqm/intel.h 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/intel.h 2009-10-30 19:27:41 UTC (rev 3264) @@ -44,8 +44,6 @@ FIRST_EMPTY_INDEX }; -extern SIZE cur_player; - extern BATTLE_INPUT_STATE computer_intelligence ( ComputerInputContext *context, STARSHIP *StarShipPtr); extern BATTLE_INPUT_STATE tactical_intelligence ( Modified: trunk/sc2/src/uqm/melee.c =================================================================== --- trunk/sc2/src/uqm/melee.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/melee.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -1688,6 +1688,7 @@ BuiltShipPtr->index = index; BuiltShipPtr->ship_cost = ship_cost; BuiltShipPtr->which_side = 1 << side; + BuiltShipPtr->playerNr = side; BuiltShipPtr->captains_name_index = captains_name_index; // The next ones are not used in Melee BuiltShipPtr->crew_level = 0; Modified: trunk/sc2/src/uqm/pickmele.c =================================================================== --- trunk/sc2/src/uqm/pickmele.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/pickmele.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -47,8 +47,6 @@ #endif // Returns the <index>th ship in the queue, or 0 if it is not available. -// For all the ships in the queue, the ShipFacing field contains the -// index in the queue. static HSTARSHIP MeleeShipByQueueIndex (const QUEUE *queue, COUNT index) { Modified: trunk/sc2/src/uqm/pickship.c =================================================================== --- trunk/sc2/src/uqm/pickship.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/pickship.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -404,6 +404,7 @@ * the maximum, instead of the normal level */ SPtr->crew_level = FragPtr->max_crew; SPtr->which_side = 1 << which_player; + SPtr->playerNr = which_player; SPtr->captains_name_index = PickCaptainName (); battle_counter[1]++; Modified: trunk/sc2/src/uqm/races.h =================================================================== --- trunk/sc2/src/uqm/races.h 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/races.h 2009-10-30 19:27:41 UTC (rev 3264) @@ -273,6 +273,11 @@ HELEMENT hShip; COUNT ShipFacing; + + COUNT playerNr; + // 0: bottom player; In full-game: the human player + BYTE control; + // HUMAN, COMPUTER or NETWORK control flags, see intel.h }; static inline STARSHIP * Modified: trunk/sc2/src/uqm/setup.h =================================================================== --- trunk/sc2/src/uqm/setup.h 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/setup.h 2009-10-30 19:27:41 UTC (rev 3264) @@ -55,7 +55,6 @@ extern ACTIVITY LastActivity; extern BYTE PlayerControl[]; -extern SIZE cur_player; BOOLEAN InitContexts (void); void UninitPlayerInput (void); Modified: trunk/sc2/src/uqm/ship.c =================================================================== --- trunk/sc2/src/uqm/ship.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/ship.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -502,9 +502,6 @@ { HSTARSHIP hBattleShip; - cur_player = which_side; - - hBattleShip = GetEncounterStarShip (LastStarShipPtr, which_side); if (hBattleShip) { @@ -564,10 +561,11 @@ } else { - COUNT num_ships = NUM_PLAYERS; - while (num_ships--) + int i; + + for (i = NUM_PLAYERS; i > 0; --i) { - if (!GetNextStarShip (NULL, num_ships == 1)) + if (!GetNextStarShip (NULL, i - 1)) return FALSE; } return TRUE; Modified: trunk/sc2/src/uqm/ships/zoqfot/zoqfot.c =================================================================== --- trunk/sc2/src/uqm/ships/zoqfot/zoqfot.c 2009-10-29 22:32:22 UTC (rev 3263) +++ trunk/sc2/src/uqm/ships/zoqfot/zoqfot.c 2009-10-30 19:27:41 UTC (rev 3264) @@ -316,7 +316,7 @@ || (ConcernCounter == ENEMY_WEAPON_INDEX && ObjectsOfConcern->MoveState != AVOID #ifdef NEVER - && !(PlayerControl[cur_player] & STANDARD_RATING) + && !(StarShipPtr->control & STANDARD_RATING) #endif /* NEVER */ )) && ship_weapons (ShipPtr, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-10-30 22:33:24
|
Revision: 3265 http://sc2.svn.sourceforge.net/sc2/?rev=3265&view=rev Author: avolkov Date: 2009-10-30 22:33:09 +0000 (Fri, 30 Oct 2009) Log Message: ----------- Battle & ship code cleanup: Destruction of WHICH_SIDE(); removal of turn_wait abuse in new_ship() Modified Paths: -------------- trunk/sc2/src/uqm/element.h trunk/sc2/src/uqm/init.c trunk/sc2/src/uqm/netplay/checksum.c trunk/sc2/src/uqm/ships/androsyn/androsyn.c trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c trunk/sc2/src/uqm/ships/umgah/umgah.c trunk/sc2/src/uqm/tactrans.c trunk/sc2/src/uqm/weapon.c Modified: trunk/sc2/src/uqm/element.h =================================================================== --- trunk/sc2/src/uqm/element.h 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/element.h 2009-10-30 22:33:09 UTC (rev 3265) @@ -166,13 +166,6 @@ #define GRAVITY_MASS(m) ((m) > MAX_SHIP_MASS * 10) #define GRAVITY_THRESHOLD (COUNT)255 -static inline BYTE -ElementFlagsSide (ELEMENT_FLAGS flags) -{ - return (BYTE) ((flags & BAD_GUY) >> 1); -} -#define WHICH_SIDE(flags) ElementFlagsSide (flags) - #define OBJECT_CLOAKED(eptr) \ (GetPrimType (&GLOBAL (DisplayArray[(eptr)->PrimIndex])) >= NUM_PRIMS \ || (GetPrimType (&GLOBAL (DisplayArray[(eptr)->PrimIndex])) == STAMPFILL_PRIM \ Modified: trunk/sc2/src/uqm/init.c =================================================================== --- trunk/sc2/src/uqm/init.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/init.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -316,7 +316,7 @@ /* Record crew left after battle */ StarShipPtr->crew_level = StarShipPtr->RaceDescPtr->ship_info.crew_level; - SPtr[WHICH_SIDE (ElementPtr->state_flags)] = StarShipPtr; + SPtr[StarShipPtr->playerNr] = StarShipPtr; free_ship (StarShipPtr->RaceDescPtr, TRUE, TRUE); StarShipPtr->RaceDescPtr = 0; } Modified: trunk/sc2/src/uqm/netplay/checksum.c =================================================================== --- trunk/sc2/src/uqm/netplay/checksum.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/netplay/checksum.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -28,8 +28,6 @@ // for DUMP_CRC_OPS #include "netconnection.h" #include "netmelee.h" -#include "../tactrans.h" - // for new_ship #include "libs/log.h" #include "libs/mathlib.h" @@ -121,19 +119,7 @@ crc_processCOUNT(state, val->life_span); crc_processCOUNT(state, val->crew_level); crc_processBYTE(state, val->mass_points); - - // HACK: when a ship is being destroyed, turn_wait is abused to store - // the side this ship is on. This must be excluded from the checksum - // as this does not have to be the same for both sides. - { - BYTE turn_wait = val->turn_wait; - - if (val->preprocess_func == new_ship) - turn_wait = 0; - - crc_processBYTE(state, turn_wait); - } - + crc_processBYTE(state, val->turn_wait); crc_processBYTE(state, val->thrust_wait); crc_processVELOCITY_DESC(state, &val->velocity); crc_processSTATE(state, &val->current); Modified: trunk/sc2/src/uqm/ships/androsyn/androsyn.c =================================================================== --- trunk/sc2/src/uqm/ships/androsyn/androsyn.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/ships/androsyn/androsyn.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -20,6 +20,8 @@ #include "resinst.h" #include "libs/mathlib.h" +#include "uqm/init.h" + // for NUM_PLAYERS #define MAX_CREW 20 @@ -322,7 +324,7 @@ } } -static CollisionFunc *ship_collision_func[2]; +static CollisionFunc *ship_collision_func[NUM_PLAYERS]; #define BLAZER_TURN_WAIT 1 @@ -355,7 +357,7 @@ ElementPtr->mass_points = BLAZER_MASS; StarShipPtr->RaceDescPtr->characteristics.turn_wait = BLAZER_TURN_WAIT; - ship_collision_func[WHICH_SIDE(ElementPtr->state_flags)] + ship_collision_func[StarShipPtr->playerNr] = ElementPtr->collision_func; ElementPtr->collision_func = blazer_collision; } @@ -424,7 +426,7 @@ StarShipPtr->RaceDescPtr->characteristics.special_wait; StarShipPtr->RaceDescPtr->characteristics.energy_regeneration = ENERGY_REGENERATION; ElementPtr->mass_points = SHIP_MASS; - ElementPtr->collision_func = ship_collision_func[WHICH_SIDE(ElementPtr->state_flags)]; + ElementPtr->collision_func = ship_collision_func[StarShipPtr->playerNr]; ElementPtr->next.image.farray = StarShipPtr->RaceDescPtr->ship_data.ship; ElementPtr->next.image.frame = Modified: trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c =================================================================== --- trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -20,6 +20,7 @@ #include "resinst.h" #include "uqm/init.h" + // for NUM_PLAYERS #define MAX_CREW 20 @@ -50,7 +51,7 @@ #define MMRNMHRM_OFFSET 16 #define LASER_RANGE DISPLAY_TO_WORLD (125 + MMRNMHRM_OFFSET) -static CHARACTERISTIC_STUFF otherwing_desc[NUM_SIDES]; +static CHARACTERISTIC_STUFF otherwing_desc[NUM_PLAYERS]; static RACE_DESC mmrnmhrm_desc = { @@ -372,8 +373,8 @@ StarShipPtr->weapon_counter = 0; - t = otherwing_desc[WHICH_SIDE(ElementPtr->state_flags)]; - otherwing_desc[WHICH_SIDE(ElementPtr->state_flags)] = StarShipPtr->RaceDescPtr->characteristics; + t = otherwing_desc[StarShipPtr->playerNr]; + otherwing_desc[StarShipPtr->playerNr] = StarShipPtr->RaceDescPtr->characteristics; StarShipPtr->RaceDescPtr->characteristics = t; StarShipPtr->RaceDescPtr->cyborg_control.ManeuverabilityIndex = 0; @@ -407,11 +408,14 @@ static void mmrnmhrm_preprocess (ELEMENT *ElementPtr) { + STARSHIP *StarShipPtr; + + GetElementStarShip (ElementPtr, &StarShipPtr); + if (ElementPtr->state_flags & APPEARING) { - COUNT i; - - i = WHICH_SIDE (ElementPtr->state_flags); + // Set here because playerNr is unknown during init() + COUNT i = StarShipPtr->playerNr; otherwing_desc[i].max_thrust = YWING_MAX_THRUST; otherwing_desc[i].thrust_increment = YWING_THRUST_INCREMENT; otherwing_desc[i].energy_regeneration = YWING_ENERGY_REGENERATION; @@ -426,9 +430,6 @@ } else { - STARSHIP *StarShipPtr; - - GetElementStarShip (ElementPtr, &StarShipPtr); if ((StarShipPtr->cur_status_flags & SPECIAL) && StarShipPtr->special_counter == 0) { Modified: trunk/sc2/src/uqm/ships/umgah/umgah.c =================================================================== --- trunk/sc2/src/uqm/ships/umgah/umgah.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/ships/umgah/umgah.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -20,6 +20,8 @@ #include "resinst.h" #include "libs/mathlib.h" +#include "uqm/init.h" + // for NUM_PLAYERS #define MAX_CREW 10 @@ -37,7 +39,7 @@ #define SHIP_MASS 1 -static FRAME LastShipFrame[2]; +static FRAME LastShipFrame[NUM_PLAYERS]; static RACE_DESC umgah_desc = { @@ -254,6 +256,7 @@ if (!(StarShipPtr->ship_input_state & SPECIAL)) StarShipPtr->RaceDescPtr->characteristics.special_wait = 0xFF; } + static COUNT initialize_cone (ELEMENT *ShipPtr, HELEMENT ConeArray[]) { @@ -281,9 +284,11 @@ MissileBlock.preprocess_func = cone_preprocess; MissileBlock.blast_offs = MISSILE_OFFSET; - if (ShipPtr->next.image.frame != LastShipFrame[WHICH_SIDE(ShipPtr->state_flags)]) + // This func is called every frame while the player is holding down WEAPON + // Don't reset the cone FRAME to the first image every time + if (ShipPtr->next.image.frame != LastShipFrame[StarShipPtr->playerNr]) { - LastShipFrame[WHICH_SIDE(ShipPtr->state_flags)] = ShipPtr->next.image.frame; + LastShipFrame[StarShipPtr->playerNr] = ShipPtr->next.image.frame; StarShipPtr->RaceDescPtr->ship_data.special[0] = SetAbsFrameIndex ( @@ -330,13 +335,18 @@ static void umgah_preprocess (ELEMENT *ElementPtr) { + STARSHIP *StarShipPtr; + + GetElementStarShip (ElementPtr, &StarShipPtr); + if (ElementPtr->state_flags & APPEARING) - LastShipFrame[WHICH_SIDE(ElementPtr->state_flags)] = 0; + { + // Reset prevously set value, if any. It could only have been + // set by another ship of the same player, though. + LastShipFrame[StarShipPtr->playerNr] = 0; + } else { - STARSHIP *StarShipPtr; - - GetElementStarShip (ElementPtr, &StarShipPtr); if (ElementPtr->thrust_wait == 0 && (StarShipPtr->cur_status_flags & SPECIAL) && DeltaEnergy (ElementPtr, -SPECIAL_ENERGY_COST)) Modified: trunk/sc2/src/uqm/tactrans.c =================================================================== --- trunk/sc2/src/uqm/tactrans.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/tactrans.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -289,12 +289,11 @@ } MusicStarted = FALSE; - DeadShipPtr->turn_wait = (BYTE)( - DeadShipPtr->state_flags & (GOOD_GUY | BAD_GUY)); - // DeadShipPtr->turn_wait is abused to store which - // side this element is for, because this information - // will be lost from state_flags when the element is - // set up for deletion below. + // XXX: Set to 0 to be vaguely checksum-compatible with previous + // Netplay builds which abused turn_wait to store the ship's side. + // The value is irrelevant at this point. + DeadShipPtr->turn_wait = 0; + for (hElement = GetHeadElement (); hElement; hElement = hSuccElement) { ELEMENT *ElementPtr; @@ -348,7 +347,7 @@ } if (DeadShipPtr->life_span || !readyForBattleEnd ( - WHICH_SIDE (DeadShipPtr->turn_wait))) + DeadStarShipPtr->playerNr)) { DeadShipPtr->state_flags &= ~DISAPPEARING; ++DeadShipPtr->life_span; @@ -369,7 +368,10 @@ DeadStarShipPtr->RaceDescPtr); free_ship (DeadStarShipPtr->RaceDescPtr, TRUE, TRUE); DeadStarShipPtr->RaceDescPtr = 0; -UnbatchGraphics (); + + // Graphics are batched while the draw queue is processed, + // but we are going to draw the ship selection box now + UnbatchGraphics (); #ifdef NETPLAY initBattleStateDataConnections (); @@ -389,8 +391,7 @@ } #endif /* NETPLAY */ - if (GetNextStarShip (DeadStarShipPtr, - WHICH_SIDE (DeadShipPtr->turn_wait))) + if (GetNextStarShip (DeadStarShipPtr, DeadStarShipPtr->playerNr)) { #ifdef NETPLAY { @@ -420,18 +421,7 @@ GLOBAL (CurrentActivity) |= CHECK_ABORT; } #endif - -#ifdef NETPLAY - // Turn_wait was abused to store the side this element was on. - // We don't want this included in checksums, as it can be different - // for both sides of a connection. - // While preprocess_func == new_ship, turn_wait isn't included in - // the checksum at all all, but now that new_ship is done, - // it would be. As the value is irrelevant at this point, we can - // just set it to the same value on either side. - DeadShipPtr->turn_wait = 0; -#endif -BatchGraphics (); + BatchGraphics (); } } @@ -520,10 +510,13 @@ StopMusic (); + GetElementStarShip (ShipPtr, &StarShipPtr); + if (ShipPtr->mass_points <= MAX_SHIP_MASS) - { - COUNT side = ElementFlagsSide (ShipPtr->state_flags); - battle_counter[side]--; + { // Not running away and not reincarnating (Pkunk) + // When a ship tries to run away, it is (dis)counted in DoRunAway(), + // so when it dies while running away, we will not count it again + battle_counter[StarShipPtr->playerNr]--; } VictoriousStarShipPtr = 0; @@ -548,7 +541,6 @@ UnlockElement (hElement); } - GetElementStarShip (ShipPtr, &StarShipPtr); StarShipPtr->cur_status_flags &= ~PLAY_VICTORY_DITTY; DeltaEnergy (ShipPtr, Modified: trunk/sc2/src/uqm/weapon.c =================================================================== --- trunk/sc2/src/uqm/weapon.c 2009-10-30 19:27:41 UTC (rev 3264) +++ trunk/sc2/src/uqm/weapon.c 2009-10-30 22:33:09 UTC (rev 3265) @@ -279,8 +279,8 @@ } ObjectIntersect.IntersectStamp.origin.y += - (WHICH_SIDE (ElementPtr->state_flags) - ? BAD_GUY_YOFFS : GOOD_GUY_YOFFS); + (ElementPtr->state_flags & GOOD_GUY) ? + GOOD_GUY_YOFFS : BAD_GUY_YOFFS; if (modify_flags & MODIFY_SWAP) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-10-31 00:57:19
|
Revision: 3266 http://sc2.svn.sourceforge.net/sc2/?rev=3266&view=rev Author: avolkov Date: 2009-10-31 00:57:09 +0000 (Sat, 31 Oct 2009) Log Message: ----------- Battle & ship code cleanup: Switch to playerNr instead of GOOD_GUY/BAD_GUY in ship status code Modified Paths: -------------- trunk/sc2/src/uqm/melee.c trunk/sc2/src/uqm/setup.c trunk/sc2/src/uqm/ship.c trunk/sc2/src/uqm/shipstat.c trunk/sc2/src/uqm/status.c trunk/sc2/src/uqm/status.h trunk/sc2/src/uqm/weapon.c Modified: trunk/sc2/src/uqm/melee.c =================================================================== --- trunk/sc2/src/uqm/melee.c 2009-10-30 22:33:09 UTC (rev 3265) +++ trunk/sc2/src/uqm/melee.c 2009-10-31 00:57:09 UTC (rev 3266) @@ -894,7 +894,7 @@ RECT r; TEXT t; - ClearShipStatus (BAD_GUY_YOFFS); + ClearShipStatus (0); SetContextFont (StarConFont); r.corner.x = 3; r.corner.y = 4; @@ -931,7 +931,7 @@ hMasterShip = GetStarShipFromIndex (&master_q, NewStarShip); MasterPtr = LockMasterShip (&master_q, hMasterShip); - InitShipStatus (&MasterPtr->ShipInfo, ~0, NULL); + InitShipStatus (&MasterPtr->ShipInfo, NULL, NULL); UnlockMasterShip (&master_q, hMasterShip); } Modified: trunk/sc2/src/uqm/setup.c =================================================================== --- trunk/sc2/src/uqm/setup.c 2009-10-30 22:33:09 UTC (rev 3265) +++ trunk/sc2/src/uqm/setup.c 2009-10-31 00:57:09 UTC (rev 3266) @@ -27,6 +27,7 @@ #endif #include "init.h" #include "intel.h" +#include "status.h" #include "resinst.h" #include "sounds.h" #include "libs/compiler.h" @@ -219,6 +220,7 @@ if (MenuSounds == 0) return FALSE; + InitStatusOffsets (); InitSpace (); return TRUE; Modified: trunk/sc2/src/uqm/ship.c =================================================================== --- trunk/sc2/src/uqm/ship.c 2009-10-30 22:33:09 UTC (rev 3265) +++ trunk/sc2/src/uqm/ship.c 2009-10-31 00:57:09 UTC (rev 3266) @@ -160,10 +160,12 @@ StarShipPtr->cur_status_flags & ~(LEFT | RIGHT | THRUST | WEAPON | SPECIAL); if (!(ElementPtr->state_flags & APPEARING)) + { cur_status_flags |= StarShipPtr->ship_input_state & (LEFT | RIGHT | THRUST | WEAPON | SPECIAL); + } else - { + { // Preprocessing for the first time ElementPtr->crew_level = RDPtr->ship_info.crew_level; if ((ElementPtr->state_flags & BAD_GUY) @@ -184,8 +186,7 @@ { CONTEXT OldContext; - InitShipStatus (&RDPtr->ship_info, - StarShipPtr->captains_name_index, NULL); + InitShipStatus (&RDPtr->ship_info, StarShipPtr, NULL); OldContext = SetContext (StatusContext); DrawCaptainsWindow (StarShipPtr); SetContext (OldContext); Modified: trunk/sc2/src/uqm/shipstat.c =================================================================== --- trunk/sc2/src/uqm/shipstat.c 2009-10-30 22:33:09 UTC (rev 3265) +++ trunk/sc2/src/uqm/shipstat.c 2009-10-31 00:57:09 UTC (rev 3266) @@ -133,18 +133,17 @@ } void -InitShipStatus (SHIP_INFO *SIPtr, BYTE captains_name_index, RECT *pClipRect) +InitShipStatus (SHIP_INFO *SIPtr, STARSHIP *StarShipPtr, RECT *pClipRect) { RECT r; - COORD y, y_stat; + COORD y = 0; // default, for Melee menu STAMP Stamp; CONTEXT OldContext; - y_stat = (SIPtr->ship_flags & GOOD_GUY) ? - GOOD_GUY_YOFFS : BAD_GUY_YOFFS; + if (StarShipPtr) // set during battle + y = status_y_offsets[StarShipPtr->playerNr]; OldContext = SetContext (StatusContext); - y = y_stat; if (pClipRect) { GetContextClipRect (&r); @@ -225,8 +224,9 @@ DrawFilledRectangle (&r); } - if (captains_name_index) - { + if (!StarShipPtr || StarShipPtr->captains_name_index) + { // Any regular ship. SIS and Sa-Matra are separate. + // This includes Melee menu. STRING locString; DrawCrewFuelString (y, 0); @@ -234,7 +234,7 @@ locString = SetAbsStringTableIndex (SIPtr->race_strings, 1); DrawShipNameString ( (UNICODE *)GetStringAddress (locString), - GetStringLength (locString),y); + GetStringLength (locString), y); { UNICODE buf[30]; @@ -243,8 +243,8 @@ OldFont = SetContextFont (TinyFont); - if (!(GLOBAL (CurrentActivity) & IN_BATTLE)) - { + if (!StarShipPtr) + { // In Melee menu sprintf (buf, "%d", SIPtr->ship_cost); Text.pStr = buf; Text.CharCount = (COUNT)~0; @@ -252,7 +252,7 @@ else { locString = SetAbsStringTableIndex (SIPtr->race_strings, - captains_name_index); + StarShipPtr->captains_name_index); Text.pStr = (UNICODE *)GetStringAddress (locString); Text.CharCount = GetStringLength (locString); } @@ -267,13 +267,10 @@ SetContextFont (OldFont); } } - else /* if (captains_name_index == 0) */ - { /* Only SIS or Sa-Matra */ - if (SIPtr->ship_flags & GOOD_GUY) - { - DrawCrewFuelString (y, 0); - DrawShipNameString (GLOBAL_SIS (ShipName), (COUNT)~0, y); - } + else if (StarShipPtr->playerNr == 0) + { // This is SIS + DrawCrewFuelString (y, 0); + DrawShipNameString (GLOBAL_SIS (ShipName), (COUNT)~0, y); } { @@ -281,8 +278,10 @@ crew_delta = SIPtr->crew_level; energy_delta = SIPtr->energy_level; - SIPtr->crew_level = SIPtr->energy_level = 0; - DeltaStatistics (SIPtr, crew_delta, energy_delta); + // DeltaStatistics() below will add specified values to these + SIPtr->crew_level = 0; + SIPtr->energy_level = 0; + DeltaStatistics (SIPtr, y, crew_delta, energy_delta); } UnbatchGraphics (); @@ -303,7 +302,8 @@ // Pre: -crew_delta <= ShipInfoPtr->crew_level // crew_delta <= ShipInfoPtr->max_crew - ShipInfoPtr->crew_level void -DeltaStatistics (SHIP_INFO *ShipInfoPtr, SIZE crew_delta, SIZE energy_delta) +DeltaStatistics (SHIP_INFO *ShipInfoPtr, COORD y_offs, + SIZE crew_delta, SIZE energy_delta) { COORD x, y; RECT r; @@ -312,8 +312,7 @@ return; x = 0; - y = GAUGE_YOFFS + ((ShipInfoPtr->ship_flags & GOOD_GUY) ? - GOOD_GUY_YOFFS : BAD_GUY_YOFFS); + y = GAUGE_YOFFS + y_offs; r.extent.width = UNIT_WIDTH; r.extent.height = UNIT_HEIGHT; @@ -388,7 +387,7 @@ { // All crew doesn't fit in the graphics; print a number. // Always print a number for the SIS in the full game. - DrawBattleCrewAmount (ShipInfoPtr); + DrawBattleCrewAmount (ShipInfoPtr, y_offs); } } Modified: trunk/sc2/src/uqm/status.c =================================================================== --- trunk/sc2/src/uqm/status.c 2009-10-30 22:33:09 UTC (rev 3265) +++ trunk/sc2/src/uqm/status.c 2009-10-31 00:57:09 UTC (rev 3266) @@ -23,10 +23,25 @@ #include "ship.h" #include "setup.h" #include "options.h" +#include "init.h" + // for NUM_PLAYERS #include <stdio.h> #include <string.h> + +COORD status_y_offsets[NUM_PLAYERS]; + + +void +InitStatusOffsets (void) +{ + // XXX: We have to jump through these hoops because GOOD_GUY_YOFFS is + // not a constant, contrary to what its' name suggests. + status_y_offsets[0] = GOOD_GUY_YOFFS; // bottom player + status_y_offsets[1] = BAD_GUY_YOFFS; // top player +} + static void CaptainsWindow (CAPTAIN_STUFF *CSPtr, COORD y, STATUS_FLAGS delta_status_flags, STATUS_FLAGS cur_status_flags, @@ -115,7 +130,7 @@ } void -DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr) +DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr, COORD y_offs) { #define MAX_CREW_DIGITS 3 RECT r; @@ -125,9 +140,7 @@ t.baseline.x = BATTLE_CREW_X + 2; if (optWhichMenu == OPT_PC) t.baseline.x -= 8; - t.baseline.y = BATTLE_CREW_Y + - ((ShipInfoPtr->ship_flags & GOOD_GUY) ? - GOOD_GUY_YOFFS : BAD_GUY_YOFFS); + t.baseline.y = BATTLE_CREW_Y + y_offs; t.align = ALIGN_LEFT; t.pStr = buf; t.CharCount = (COUNT)~0; @@ -150,7 +163,8 @@ void DrawCaptainsWindow (STARSHIP *StarShipPtr) { - COORD y, y_offs; + COORD y; + COORD y_offs; RECT r; STAMP s; FRAME Frame; @@ -174,23 +188,20 @@ BatchGraphics (); - y_offs = CAPTAIN_YOFFS - + ((RDPtr->ship_info.ship_flags & GOOD_GUY) ? - GOOD_GUY_YOFFS : BAD_GUY_YOFFS); + y_offs = status_y_offsets[StarShipPtr->playerNr]; + r.corner.x = CAPTAIN_XOFFS - 2; - r.corner.y = y_offs - 4; + r.corner.y = y_offs + SHIP_INFO_HEIGHT; r.extent.width = STATUS_WIDTH - CAPTAIN_XOFFS; r.extent.height = SHIP_STATUS_HEIGHT - CAPTAIN_YOFFS + 2; SetContextForeGroundColor ( BUILD_COLOR (MAKE_RGB15 (0x0A, 0x0A, 0x0A), 0x08)); DrawFilledRectangle (&r); - y = y_offs - CAPTAIN_YOFFS; - SetContextForeGroundColor ( BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F)); r.corner.x = 1; - r.corner.y = SHIP_INFO_HEIGHT + y; + r.corner.y = y_offs + SHIP_INFO_HEIGHT; r.extent.width = 1; r.extent.height = (SHIP_STATUS_HEIGHT - SHIP_INFO_HEIGHT - 2); DrawFilledRectangle (&r); @@ -201,7 +212,7 @@ SetContextForeGroundColor ( BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19)); r.corner.x = STATUS_WIDTH - 1; - r.corner.y = SHIP_INFO_HEIGHT + y; + r.corner.y = y_offs + SHIP_INFO_HEIGHT; r.extent.width = 1; r.extent.height = SHIP_STATUS_HEIGHT - SHIP_INFO_HEIGHT; DrawFilledRectangle (&r); @@ -209,7 +220,7 @@ DrawFilledRectangle (&r); r.corner.x = 1; r.extent.width = STATUS_WIDTH - 2; - r.corner.y = (SHIP_STATUS_HEIGHT - 2) + y; + r.corner.y = y_offs + (SHIP_STATUS_HEIGHT - 2); r.extent.height = 1; DrawFilledRectangle (&r); r.corner.x = 0; @@ -217,63 +228,59 @@ ++r.corner.y; DrawFilledRectangle (&r); - { - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F)); - r.corner.x = 59; - r.corner.y = y_offs; - r.extent.width = 1; - r.extent.height = 30; - DrawFilledRectangle (&r); - r.corner.x = 3; - r.corner.y += 30; - r.extent.width = 57; - r.extent.height = 1; - DrawFilledRectangle (&r); + y = y_offs + CAPTAIN_YOFFS; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19)); - r.corner.x = 3; - r.extent.width = 57; - r.corner.y = y_offs - 1; - r.extent.height = 1; - DrawFilledRectangle (&r); - r.corner.x = 3; - r.extent.width = 1; - r.corner.y = y_offs; - r.extent.height = 30; - DrawFilledRectangle (&r); + SetContextForeGroundColor ( + BUILD_COLOR (MAKE_RGB15 (0x08, 0x08, 0x08), 0x1F)); + r.corner.x = 59; + r.corner.y = y; + r.extent.width = 1; + r.extent.height = 30; + DrawFilledRectangle (&r); + r.corner.x = 3; + r.corner.y += 30; + r.extent.width = 57; + r.extent.height = 1; + DrawFilledRectangle (&r); - s.frame = RDPtr->ship_data.captain_control.background; - s.origin.x = CAPTAIN_XOFFS; - s.origin.y = y_offs; - DrawStamp (&s); - } + SetContextForeGroundColor ( + BUILD_COLOR (MAKE_RGB15 (0x10, 0x10, 0x10), 0x19)); + r.corner.x = 3; + r.extent.width = 57; + r.corner.y = y - 1; + r.extent.height = 1; + DrawFilledRectangle (&r); + r.corner.x = 3; + r.extent.width = 1; + r.corner.y = y; + r.extent.height = 30; + DrawFilledRectangle (&r); - if (StarShipPtr->captains_name_index == 0) - { - if (RDPtr->ship_info.ship_flags & GOOD_GUY) - { - // SIS - TEXT t; + s.frame = RDPtr->ship_data.captain_control.background; + s.origin.x = CAPTAIN_XOFFS; + s.origin.y = y; + DrawStamp (&s); - t.baseline.x = STATUS_WIDTH >> 1; - t.baseline.y = y_offs + 6; - t.align = ALIGN_CENTER; - t.pStr = GLOBAL_SIS (CommanderName); - t.CharCount = (COUNT)~0; - SetContextForeGroundColor ( - BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02)); - SetContextFont (TinyFont); - font_DrawText (&t); - } + if (StarShipPtr->captains_name_index == 0 && StarShipPtr->playerNr == 0) + { // This is SIS + TEXT t; + + t.baseline.x = STATUS_WIDTH >> 1; + t.baseline.y = y + 6; + t.align = ALIGN_CENTER; + t.pStr = GLOBAL_SIS (CommanderName); + t.CharCount = (COUNT)~0; + SetContextForeGroundColor ( + BUILD_COLOR (MAKE_RGB15 (0x00, 0x14, 0x00), 0x02)); + SetContextFont (TinyFont); + font_DrawText (&t); } if (RDPtr->ship_info.max_crew > MAX_CREW_SIZE || RDPtr->ship_info.ship_flags & PLAYER_CAPTAIN) { // All crew doesn't fit in the graphics; print a number. // Always print a number for the SIS in the full game. - DrawBattleCrewAmount (&RDPtr->ship_info); + DrawBattleCrewAmount (&RDPtr->ship_info, y_offs); } UnbatchGraphics (); @@ -313,7 +320,8 @@ StarShipPtr->energy_counter = StarShipPtr->RaceDescPtr->characteristics.energy_wait; - DeltaStatistics (ShipInfoPtr, 0, energy_delta); + DeltaStatistics (ShipInfoPtr, status_y_offsets[StarShipPtr->playerNr], + 0, energy_delta); } return (retval); @@ -354,7 +362,8 @@ } } - DeltaStatistics (ShipInfoPtr, crew_delta, 0); + DeltaStatistics (ShipInfoPtr, status_y_offsets[StarShipPtr->playerNr], + crew_delta, 0); return (retval); } @@ -365,9 +374,8 @@ STARSHIP *StarShipPtr; GetElementStarShip (ShipPtr, &StarShipPtr); - if (StarShipPtr->captains_name_index - || (StarShipPtr->RaceDescPtr->ship_info.ship_flags & GOOD_GUY)) - { + if (StarShipPtr->captains_name_index || StarShipPtr->playerNr == 0) + { // All except Sa-Matra, no captain's window there STATUS_FLAGS old_status_flags, cur_status_flags; CAPTAIN_STUFF *CSPtr; @@ -379,9 +387,7 @@ old_status_flags &= (LEFT | RIGHT | THRUST | WEAPON | SPECIAL); if (old_status_flags) { - CaptainsWindow (CSPtr, - (StarShipPtr->RaceDescPtr->ship_info.ship_flags & GOOD_GUY) ? - GOOD_GUY_YOFFS : BAD_GUY_YOFFS, + CaptainsWindow (CSPtr, status_y_offsets[StarShipPtr->playerNr], old_status_flags, cur_status_flags, 1); } } @@ -393,16 +399,14 @@ STARSHIP *StarShipPtr; GetElementStarShip (ShipPtr, &StarShipPtr); - if (StarShipPtr->captains_name_index - || (StarShipPtr->RaceDescPtr->ship_info.ship_flags & GOOD_GUY)) - { + if (StarShipPtr->captains_name_index || StarShipPtr->playerNr == 0) + { // All except Sa-Matra, no captain's window there COORD y; STATUS_FLAGS cur_status_flags, old_status_flags; cur_status_flags = StarShipPtr->cur_status_flags; - y = (StarShipPtr->RaceDescPtr->ship_info.ship_flags & GOOD_GUY) ? - GOOD_GUY_YOFFS : BAD_GUY_YOFFS; + y = status_y_offsets[StarShipPtr->playerNr]; if (ShipPtr->crew_level == 0) { Modified: trunk/sc2/src/uqm/status.h =================================================================== --- trunk/sc2/src/uqm/status.h 2009-10-30 22:33:09 UTC (rev 3265) +++ trunk/sc2/src/uqm/status.h 2009-10-31 00:57:09 UTC (rev 3266) @@ -43,14 +43,19 @@ #define BATTLE_CREW_X 10 #define BATTLE_CREW_Y (64 - SAFE_Y) +extern COORD status_y_offsets[]; + +extern void InitStatusOffsets (void); + extern void DrawCrewFuelString (COORD y, SIZE state); extern void ClearShipStatus (COORD y); extern void OutlineShipStatus (COORD y); -extern void InitShipStatus (SHIP_INFO *ShipInfoPtr, BYTE captains_name_index, +extern void InitShipStatus (SHIP_INFO *ShipInfoPtr, STARSHIP *StarShipPtr, RECT *pClipRect); -extern void DeltaStatistics (SHIP_INFO *ShipInfoPtr, SIZE crew_delta, - SIZE energy_delta); -extern void DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr); + // StarShipPtr or pClipRect can be NULL +extern void DeltaStatistics (SHIP_INFO *ShipInfoPtr, COORD y_offs, + SIZE crew_delta, SIZE energy_delta); +extern void DrawBattleCrewAmount (SHIP_INFO *ShipInfoPtr, COORD y_offs); extern void DrawCaptainsWindow (STARSHIP *StarShipPtr); extern BOOLEAN DeltaEnergy (ELEMENT *ElementPtr, SIZE energy_delta); Modified: trunk/sc2/src/uqm/weapon.c =================================================================== --- trunk/sc2/src/uqm/weapon.c 2009-10-30 22:33:09 UTC (rev 3265) +++ trunk/sc2/src/uqm/weapon.c 2009-10-31 00:57:09 UTC (rev 3266) @@ -287,7 +287,7 @@ or.corner.x += ObjectIntersect.IntersectStamp.origin.x; or.corner.y += ObjectIntersect.IntersectStamp.origin.y; InitShipStatus (&StarShipPtr->RaceDescPtr->ship_info, - StarShipPtr->captains_name_index, &or); + StarShipPtr, &or); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-10-31 01:18:01
|
Revision: 3267 http://sc2.svn.sourceforge.net/sc2/?rev=3267&view=rev Author: avolkov Date: 2009-10-31 01:17:53 +0000 (Sat, 31 Oct 2009) Log Message: ----------- Battle & ship code cleanup: better name 'allied_state' for FLEET_INFO.ship_flags Modified Paths: -------------- trunk/sc2/src/uqm/build.c trunk/sc2/src/uqm/gameev.c trunk/sc2/src/uqm/globdata.c trunk/sc2/src/uqm/load.c trunk/sc2/src/uqm/races.h trunk/sc2/src/uqm/save.c trunk/sc2/src/uqm/shipyard.c trunk/sc2/src/uqm/uqmdebug.c Modified: trunk/sc2/src/uqm/build.c =================================================================== --- trunk/sc2/src/uqm/build.c 2009-10-31 00:57:09 UTC (rev 3266) +++ trunk/sc2/src/uqm/build.c 2009-10-31 01:17:53 UTC (rev 3267) @@ -123,7 +123,7 @@ which_ship = FleetPtr->known_strength; else if (FleetPtr->actual_strength == 0) { - if (!(FleetPtr->ship_flags & (GOOD_GUY | BAD_GUY))) + if (!(FleetPtr->allied_state & (GOOD_GUY | BAD_GUY))) which_ship = 0; } else if (FleetPtr->known_strength == 0 @@ -185,7 +185,7 @@ COUNT flags; FLEET_INFO *FleetPtr = LockFleetInfo (&GLOBAL (avail_race_q), hFleet); - flags = FleetPtr->ship_flags & (GOOD_GUY | BAD_GUY); + flags = FleetPtr->allied_state & (GOOD_GUY | BAD_GUY); UnlockFleetInfo (&GLOBAL (avail_race_q), hFleet); return flags; } @@ -195,17 +195,17 @@ FLEET_INFO *FleetPtr = LockFleetInfo (&GLOBAL (avail_race_q), hFleet); - if (!(FleetPtr->ship_flags & (GOOD_GUY | BAD_GUY))) + if (!(FleetPtr->allied_state & (GOOD_GUY | BAD_GUY))) { /* Strange request, silently ignore it */ UnlockFleetInfo (&GLOBAL (avail_race_q), hFleet); break; } - FleetPtr->ship_flags &= ~(GOOD_GUY | BAD_GUY); + FleetPtr->allied_state &= ~(GOOD_GUY | BAD_GUY); if (state == SET_ALLIED) - FleetPtr->ship_flags |= GOOD_GUY; + FleetPtr->allied_state |= GOOD_GUY; else - FleetPtr->ship_flags |= BAD_GUY; + FleetPtr->allied_state |= BAD_GUY; UnlockFleetInfo (&GLOBAL (avail_race_q), hFleet); break; @@ -381,7 +381,7 @@ SHIP_FRAGMENT *ShipFragPtr; ShipFragPtr = LockShipFrag (pDstQueue, hBuiltShip); - ShipFragPtr->which_side = TemplatePtr->ship_flags & + ShipFragPtr->which_side = TemplatePtr->allied_state & (GOOD_GUY | BAD_GUY); ShipFragPtr->captains_name_index = captains_name_index; ShipFragPtr->race_strings = TemplatePtr->race_strings; Modified: trunk/sc2/src/uqm/gameev.c =================================================================== --- trunk/sc2/src/uqm/gameev.c 2009-10-31 00:57:09 UTC (rev 3266) +++ trunk/sc2/src/uqm/gameev.c 2009-10-31 01:17:53 UTC (rev 3267) @@ -112,7 +112,7 @@ ZOQFOTPIK_SHIP); ZoqFotPtr = LockFleetInfo (&GLOBAL (avail_race_q), hZoqFot); ZoqFotPtr->actual_strength = 0; - ZoqFotPtr->ship_flags &= ~(GOOD_GUY | BAD_GUY); + ZoqFotPtr->allied_state &= ~(GOOD_GUY | BAD_GUY); UnlockFleetInfo (&GLOBAL (avail_race_q), hZoqFot); SET_GAME_STATE (ZOQFOT_DISTRESS, 2); @@ -283,7 +283,7 @@ if (delta_strength <= 0) { delta_strength = 0; - FleetPtr->ship_flags &= ~(GOOD_GUY | BAD_GUY); + FleetPtr->allied_state &= ~(GOOD_GUY | BAD_GUY); } else if (delta_strength > MAX_FLEET_STRENGTH) delta_strength = MAX_FLEET_STRENGTH; @@ -342,7 +342,7 @@ if (dx == 0 && dy == 0) { // Arrived at the victim's home world. Cleanse it. - FleetPtr->ship_flags &= ~(GOOD_GUY | BAD_GUY); + FleetPtr->allied_state &= ~(GOOD_GUY | BAD_GUY); FleetPtr->actual_strength = 0; } else if (FleetPtr->actual_strength) @@ -437,7 +437,7 @@ if (PkunkPtr->actual_strength == 0) { SET_GAME_STATE (YEHAT_ABSORBED_PKUNK, 1); - PkunkPtr->ship_flags &= ~(GOOD_GUY | BAD_GUY); + PkunkPtr->allied_state &= ~(GOOD_GUY | BAD_GUY); ActivateStarShip (YEHAT_SHIP, SPHERE_TRACKING); } else @@ -540,8 +540,8 @@ { IlwrathPtr->actual_strength = 0; ThraddPtr->actual_strength = 0; - IlwrathPtr->ship_flags &= ~(GOOD_GUY | BAD_GUY); - ThraddPtr->ship_flags &= ~(GOOD_GUY | BAD_GUY); + IlwrathPtr->allied_state &= ~(GOOD_GUY | BAD_GUY); + ThraddPtr->allied_state &= ~(GOOD_GUY | BAD_GUY); } else if (IlwrathPtr->actual_strength) { @@ -575,7 +575,7 @@ (BYTE)(((strength_loss % MADD_LENGTH) << 8) / MADD_LENGTH); SET_GAME_STATE (THRADD_VISITS, 0); - if (ThraddPtr->ship_flags & GOOD_GUY) + if (ThraddPtr->allied_state & GOOD_GUY) ActivateStarShip (THRADDASH_SHIP, SET_NOT_ALLIED); } Modified: trunk/sc2/src/uqm/globdata.c =================================================================== --- trunk/sc2/src/uqm/globdata.c 2009-10-31 00:57:09 UTC (rev 3266) +++ trunk/sc2/src/uqm/globdata.c 2009-10-31 01:17:53 UTC (rev 3267) @@ -245,7 +245,7 @@ } } - FleetPtr->ship_flags = BAD_GUY; + FleetPtr->allied_state = BAD_GUY; FleetPtr->known_strength = 0; FleetPtr->loc = FleetPtr->known_loc; // XXX: Hack: Rebel special case Modified: trunk/sc2/src/uqm/load.c =================================================================== --- trunk/sc2/src/uqm/load.c 2009-10-31 00:57:09 UTC (rev 3266) +++ trunk/sc2/src/uqm/load.c 2009-10-31 01:17:53 UTC (rev 3267) @@ -210,7 +210,7 @@ FleetPtr = LockFleetInfo (pQueue, hStarShip); // Read FLEET_INFO elements - cread_16 (fh, &FleetPtr->ship_flags); + cread_16 (fh, &FleetPtr->allied_state); cread_8 (fh, &FleetPtr->days_left); cread_8 (fh, &FleetPtr->growth_fract); cread_8 (fh, &tmpb); Modified: trunk/sc2/src/uqm/races.h =================================================================== --- trunk/sc2/src/uqm/races.h 2009-10-31 00:57:09 UTC (rev 3266) +++ trunk/sc2/src/uqm/races.h 2009-10-31 01:17:53 UTC (rev 3267) @@ -339,7 +339,7 @@ SPECIES_ID SpeciesID; - UWORD ship_flags; /* 0, GOOD_GUY, or BAD_GUY */ + UWORD allied_state; /* 0, GOOD_GUY, or BAD_GUY */ BYTE days_left; /* Days left before the fleet reachers 'dest_loc'. */ BYTE growth_fract; COUNT crew_level; Modified: trunk/sc2/src/uqm/save.c =================================================================== --- trunk/sc2/src/uqm/save.c 2009-10-31 00:57:09 UTC (rev 3266) +++ trunk/sc2/src/uqm/save.c 2009-10-31 01:17:53 UTC (rev 3267) @@ -190,7 +190,7 @@ cwrite_16 (fh, Index); // Write FLEET_INFO elements - cwrite_16 (fh, FleetPtr->ship_flags); + cwrite_16 (fh, FleetPtr->allied_state); cwrite_8 (fh, FleetPtr->days_left); cwrite_8 (fh, FleetPtr->growth_fract); cwrite_8 (fh, FleetPtr->crew_level); Modified: trunk/sc2/src/uqm/shipyard.c =================================================================== --- trunk/sc2/src/uqm/shipyard.c 2009-10-31 00:57:09 UTC (rev 3266) +++ trunk/sc2/src/uqm/shipyard.c 2009-10-31 01:17:53 UTC (rev 3267) @@ -156,7 +156,7 @@ FLEET_INFO *FleetPtr; FleetPtr = LockFleetInfo (&GLOBAL (avail_race_q), hStarShip); - if (FleetPtr->ship_flags & GOOD_GUY) + if (FleetPtr->allied_state & GOOD_GUY) ++Index; hNextShip = _GetSuccLink (FleetPtr); @@ -177,7 +177,7 @@ FLEET_INFO *FleetPtr; FleetPtr = LockFleetInfo (&GLOBAL (avail_race_q), hStarShip); - if ((FleetPtr->ship_flags & GOOD_GUY) && Index-- == 0) + if ((FleetPtr->allied_state & GOOD_GUY) && Index-- == 0) { UnlockFleetInfo (&GLOBAL (avail_race_q), hStarShip); return hStarShip; Modified: trunk/sc2/src/uqm/uqmdebug.c =================================================================== --- trunk/sc2/src/uqm/uqmdebug.c 2009-10-31 00:57:09 UTC (rev 3266) +++ trunk/sc2/src/uqm/uqmdebug.c 2009-10-31 01:17:53 UTC (rev 3267) @@ -541,8 +541,8 @@ if (FleetPtr->icons != NULL) // Skip the Ur-Quan probe. { - FleetPtr->ship_flags &= ~(GOOD_GUY | BAD_GUY); - FleetPtr->ship_flags |= GOOD_GUY; + FleetPtr->allied_state &= ~(GOOD_GUY | BAD_GUY); + FleetPtr->allied_state |= GOOD_GUY; } UnlockFleetInfo (&GLOBAL (avail_race_q), hStarShip); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Mee...@us...> - 2009-10-31 14:42:10
|
Revision: 3268 http://sc2.svn.sourceforge.net/sc2/?rev=3268&view=rev Author: Meep-Eep Date: 2009-10-31 14:42:02 +0000 (Sat, 31 Oct 2009) Log Message: ----------- Cleanups. Modified Paths: -------------- trunk/sc2/src/uqm/planets/planets.h trunk/sc2/src/uqm/planets/solarsys.c trunk/sc2/src/uqm/sis.c trunk/sc2/src/uqm/status.c Modified: trunk/sc2/src/uqm/planets/planets.h =================================================================== --- trunk/sc2/src/uqm/planets/planets.h 2009-10-31 01:17:53 UTC (rev 3267) +++ trunk/sc2/src/uqm/planets/planets.h 2009-10-31 14:42:02 UTC (rev 3268) @@ -220,6 +220,10 @@ extern SOLARSYS_STATE *pSolarSysState; extern MUSIC_REF SpaceMusic; +bool currentWorldIsPlanet (void); +bool currentPlanetIndex (void); +bool currentMoonIndex (void); + extern void LoadPlanet (FRAME SurfDefFrame); extern void DrawPlanet (int x, int y, int dy, unsigned int rgb); extern void FreePlanet (void); Modified: trunk/sc2/src/uqm/planets/solarsys.c =================================================================== --- trunk/sc2/src/uqm/planets/solarsys.c 2009-10-31 01:17:53 UTC (rev 3267) +++ trunk/sc2/src/uqm/planets/solarsys.c 2009-10-31 14:42:02 UTC (rev 3268) @@ -64,6 +64,26 @@ BYTE draw_sys_flags = DRAW_STARS | DRAW_PLANETS | DRAW_ORBITS | DRAW_HYPER_COORDS | GRAB_BKGND; + +bool +currentWorldIsPlanet (void) { + return pSolarSysState->pOrbitalDesc->pPrevDesc == pSolarSysState->SunDesc; +} + +bool +currentPlanetIndex (void) { + return (currentWorldIsPlanet ()) ? + (pSolarSysState->pOrbitalDesc - pSolarSysState->PlanetDesc) : + pSolarSysState->pOrbitalDesc->pPrevDesc - + pSolarSysState->PlanetDesc; +} + +bool +currentMoonIndex (void) { + assert (!currentWorldIsPlanet ()); + return (pSolarSysState->pOrbitalDesc - pSolarSysState->MoonDesc); +} + // NB. This function modifies the RNG state. static void GeneratePlanets (SOLARSYS_STATE *system) @@ -207,7 +227,79 @@ SpaceMusic = LoadMusic (IP_MUSIC); } } + +static void +sortPlanetPositions (void) +{ + COUNT i; + SIZE sort_array[MAX_PLANETS + 1]; + + // When this part is done, sort_array will contain the indices to + // all planets, sorted on their y position. + // The sun itself, which has its data located at + // pSolarSysState->PlanetDesc[-1], is included in this array. + // Very ugly stuff, but it's correct. + + // Initialise sort_array. + for (i = 0; i <= pSolarSysState->SunDesc[0].NumPlanets; ++i) + sort_array[i] = i - 1; + + // Sort sort_array, based on the positions of the planets/sun. + for (i = 0; i <= pSolarSysState->SunDesc[0].NumPlanets; ++i) + { + COUNT j; + + for (j = pSolarSysState->SunDesc[0].NumPlanets; j > i; --j) + { + SIZE real_i, real_j; + + real_i = sort_array[i]; + real_j = sort_array[j]; + if (pSolarSysState->PlanetDesc[real_i].image.origin.y > + pSolarSysState->PlanetDesc[real_j].image.origin.y) + { + SIZE temp; + + temp = sort_array[i]; + sort_array[i] = sort_array[j]; + sort_array[j] = temp; + } + } + } + + // Put the results of the sorting in the solar system structure. + pSolarSysState->FirstPlanetIndex = sort_array[0]; + pSolarSysState->LastPlanetIndex = + sort_array[pSolarSysState->SunDesc[0].NumPlanets]; + for (i = 0; i <= pSolarSysState->SunDesc[0].NumPlanets; ++i) { + PLANET_DESC *planet = &pSolarSysState->PlanetDesc[sort_array[i]]; + planet->NextIndex = sort_array[i + 1]; + } +} + +static void +initSolarSysSISCharacteristics (void) +{ + BYTE i, num_thrusters; + + num_thrusters = 0; + for (i = 0; i < NUM_DRIVE_SLOTS; ++i) + { + if (GLOBAL_SIS (DriveSlots[i]) == FUSION_THRUSTER) + ++num_thrusters; + } + pSolarSysState->max_ship_speed = (BYTE)( + (num_thrusters + 5) * IP_SHIP_THRUST_INCREMENT); + + pSolarSysState->turn_wait = IP_SHIP_TURN_WAIT; + for (i = 0; i < NUM_JET_SLOTS; ++i) + { + if (GLOBAL_SIS (JetSlots[i]) == TURNING_JETS) + pSolarSysState->turn_wait -= IP_SHIP_TURN_DECREMENT; + } +} + void LoadSolarSys (void) { @@ -279,53 +371,14 @@ } } - { - SIZE sort_array[MAX_PLANETS + 1]; + sortPlanetPositions (); - // When this part is done, sort_array will contain the indices to - // all planets, sorted on their y position. - // The sun itself, which has its data located at - // pSolarSysState->PlanetDesc[-1], is included in this array. - // Very ugly stuff, but it's correct. - - for (i = 0; i <= pSolarSysState->SunDesc[0].NumPlanets; ++i) - sort_array[i] = i - 1; - - for (i = 0; i <= pSolarSysState->SunDesc[0].NumPlanets; ++i) - { - COUNT j; - - for (j = pSolarSysState->SunDesc[0].NumPlanets; j > i; --j) - { - SIZE real_i, real_j; - - real_i = sort_array[i]; - real_j = sort_array[j]; - if (pSolarSysState->PlanetDesc[real_i].image.origin.y > - pSolarSysState->PlanetDesc[real_j].image.origin.y) - { - SIZE temp; - - temp = sort_array[i]; - sort_array[i] = sort_array[j]; - sort_array[j] = temp; - } - } - } - - pSolarSysState->FirstPlanetIndex = sort_array[0]; - pSolarSysState->LastPlanetIndex = sort_array[ - pSolarSysState->SunDesc[0].NumPlanets - ]; - for (i = 0; i <= pSolarSysState->SunDesc[0].NumPlanets; ++i) - pSolarSysState->PlanetDesc[sort_array[i]].NextIndex = - sort_array[i + 1]; - } - i = GLOBAL (ip_planet); if (i == 0) - pSolarSysState->pBaseDesc = - pSolarSysState->pOrbitalDesc = pSolarSysState->PlanetDesc; + { + pSolarSysState->pBaseDesc = pSolarSysState->PlanetDesc; + pSolarSysState->pOrbitalDesc = pSolarSysState->PlanetDesc; + } else { pSolarSysState->pOrbitalDesc = 0; @@ -336,26 +389,8 @@ SET_GAME_STATE (PLANETARY_LANDING, 0); } - { - BYTE i, num_thrusters; + initSolarSysSISCharacteristics (); - num_thrusters = 0; - for (i = 0; i < NUM_DRIVE_SLOTS; ++i) - { - if (GLOBAL_SIS (DriveSlots[i]) == FUSION_THRUSTER) - ++num_thrusters; - } - pSolarSysState->max_ship_speed = (BYTE)( - (num_thrusters + 5) * IP_SHIP_THRUST_INCREMENT); - - pSolarSysState->turn_wait = IP_SHIP_TURN_WAIT; - for (i = 0; i < NUM_JET_SLOTS; ++i) - { - if (GLOBAL_SIS (JetSlots[i]) == TURNING_JETS) - pSolarSysState->turn_wait -= IP_SHIP_TURN_DECREMENT; - } - } - i = pSolarSysState->MenuState.Initialized; if (i) { @@ -378,6 +413,7 @@ GLOBAL (ShipStamp.frame) = SetAbsFrameIndex (SISIPFrame, i - 1); } + // Restore RNG state: TFB_SeedRandom (old_seed); } @@ -515,8 +551,7 @@ return; else if (pSolarSysState->WaitIntersect == NewWaitPlanet) continue; - else if (pSolarSysState->pBaseDesc == - pSolarSysState->MoonDesc) + else if (pSolarSysState->pBaseDesc == pSolarSysState->MoonDesc) goto ShowPlanet; else if (!just_checking) /* pBaseDesc == PlanetDesc */ { @@ -710,12 +745,13 @@ pSolarSysState->SunDesc[0].radius); XFormIPLoc (&GLOBAL (ip_location), &GLOBAL (ShipStamp.origin), TRUE); - + + delta_x = GLOBAL (ShipStamp.origin.x) - + pSolarSysState->MenuState.flash_rect0.corner.x; + delta_y = GLOBAL (ShipStamp.origin.y) - + pSolarSysState->MenuState.flash_rect0.corner.y; } while (radius - && (delta_x = GLOBAL (ShipStamp.origin.x) - - pSolarSysState->MenuState.flash_rect0.corner.x) >= 0 - && (delta_y = GLOBAL (ShipStamp.origin.y) - - pSolarSysState->MenuState.flash_rect0.corner.y) >= 0 + && delta_x >= 0 && delta_y >= 0 && delta_x < pSolarSysState->MenuState.flash_rect0.extent.width && delta_y < pSolarSysState->MenuState.flash_rect0.extent.height); } @@ -879,10 +915,12 @@ || GLOBAL (ShipStamp.origin.y) < 0 || GLOBAL (ShipStamp.origin.y) >= SIS_SCREEN_HEIGHT) { + // The ship leaves the screen. if (pSolarSysState->pBaseDesc == pSolarSysState->PlanetDesc) { if (radius == MAX_ZOOM_RADIUS) { + // The ship leaves IP. GLOBAL (CurrentActivity) |= END_INTERPLANETARY; return; } @@ -904,42 +942,41 @@ radius = MAX_ZOOM_RADIUS << 1; } + delta_x = GLOBAL (ShipStamp.origin.x) - + pSolarSysState->MenuState.flash_rect0.corner.x; + delta_y = GLOBAL (ShipStamp.origin.y) - + pSolarSysState->MenuState.flash_rect0.corner.y; if (pSolarSysState->pBaseDesc == pSolarSysState->PlanetDesc && (radius > MAX_ZOOM_RADIUS - || ((delta_x = GLOBAL (ShipStamp.origin.x) - - pSolarSysState->MenuState.flash_rect0.corner.x) >= 0 - && (delta_y = GLOBAL (ShipStamp.origin.y) - - pSolarSysState->MenuState.flash_rect0.corner.y) >= 0 + || (delta_x >= 0 && delta_y >= 0 && delta_x < pSolarSysState->MenuState.flash_rect0.extent.width && delta_y < pSolarSysState->MenuState.flash_rect0.extent.height))) { old_radius = pSolarSysState->SunDesc[0].radius; pSolarSysState->SunDesc[0].radius = radius; FindRadius (); - if (old_radius == (MAX_ZOOM_RADIUS << 1) - || old_radius == pSolarSysState->SunDesc[0].radius - || LeavingInnerSystem) + if (old_radius != (MAX_ZOOM_RADIUS << 1) + && old_radius != pSolarSysState->SunDesc[0].radius + && !LeavingInnerSystem) + return; + + old_radius = 0; + if (LeavingInnerSystem) + SetGraphicGrabOther (1); + DrawSystem (pSolarSysState->SunDesc[0].radius, FALSE); + if (LeavingInnerSystem) { - old_radius = 0; - if (LeavingInnerSystem) - SetGraphicGrabOther (1); - DrawSystem (pSolarSysState->SunDesc[0].radius, FALSE); - if (LeavingInnerSystem) + COUNT OldWI; + + SetGraphicGrabOther (0); + OldWI = pSolarSysState->WaitIntersect; + CheckIntersect (TRUE); + if (pSolarSysState->WaitIntersect != OldWI) { - COUNT OldWI; - - SetGraphicGrabOther (0); - OldWI = pSolarSysState->WaitIntersect; - CheckIntersect (TRUE); - if (pSolarSysState->WaitIntersect != OldWI) - { - pSolarSysState->WaitIntersect = (COUNT)~0; - return; - } + pSolarSysState->WaitIntersect = (COUNT)~0; + return; } } - else - return; } if (GLOBAL (autopilot.x) == ~0 && GLOBAL (autopilot.y) == ~0) @@ -991,7 +1028,8 @@ do { - if ((err -= d) <= 0) + err -= d; + if (err <= 0) { pSolarSysState->SunDesc[0].radius += step; @@ -1518,7 +1556,26 @@ } } -void +static void +endInterPlanetary (void) +{ + GLOBAL (CurrentActivity) &= ~END_INTERPLANETARY; + + if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) + { + // These are game state changing ops and so cannot be + // called once another game has been loaded! + (*pSolarSysState->GenFunc) (UNINIT_NPCS); + SET_GAME_STATE (USED_BROADCASTER, 0); + } +} + +static PLANET_DESC * +closestPlanetInterPlanetary (void) { + +} + +static void UninitSolarSys (void) { FreeSolarSys (); @@ -1528,19 +1585,15 @@ if (GLOBAL (CurrentActivity) & END_INTERPLANETARY) { - GLOBAL (CurrentActivity) &= ~END_INTERPLANETARY; - - if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) - { // These are game state changing ops and so cannot be - // called once another game has been loaded! - (*pSolarSysState->GenFunc) (UNINIT_NPCS); - SET_GAME_STATE (USED_BROADCASTER, 0); - } + endInterPlanetary (); + return; } - else if ((GLOBAL (CurrentActivity) & START_ENCOUNTER) && EncounterGroup) + + if ((GLOBAL (CurrentActivity) & START_ENCOUNTER) && EncounterGroup) { GetGroupInfo (GLOBAL (BattleGroupRef), EncounterGroup); // Generate the encounter location name based on the closest planet + if (GLOBAL (ip_planet) == 0) { BYTE i; @@ -1570,12 +1623,40 @@ } } +static void +GenerateOrbital (void) { + COUNT i; + DWORD rand_val; + +#ifdef DEBUG_SOLARSYS + if (currentWorldIsPlanet ()) + { + log_add (log_Debug, "Planet index = %d", currentPlanetIndex ()); + } + else + { + log_add (log_Debug, "Planet index = %d, Moon index = %d", + currentPlanetIndex (), currentMoonIndex ()); + } +#endif /* DEBUG_SOLARSYS */ + rand_val = DoPlanetaryAnalysis (&pSolarSysState->SysInfo, + pSolarSysState->pOrbitalDesc); + + pSolarSysState->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN] = rand_val; + i = (COUNT)~0; + rand_val = GenerateLifeForms (&pSolarSysState->SysInfo, &i); + + pSolarSysState->SysInfo.PlanetInfo.ScanSeed[MINERAL_SCAN] = rand_val; + i = (COUNT)~0; + GenerateMineralDeposits (&pSolarSysState->SysInfo, &i); + + pSolarSysState->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN] = rand_val; + LoadPlanet (NULL); +} + void GenerateRandomIP (BYTE control) { - COUNT i; - DWORD rand_val; - switch (control) { case INIT_NPCS: @@ -1606,40 +1687,12 @@ break; case GENERATE_ORBITAL: { -#ifdef DEBUG_SOLARSYS - if (pSolarSysState->pOrbitalDesc->pPrevDesc == - pSolarSysState->SunDesc) - log_add (log_Debug, "Planet index = %d", - pSolarSysState->pOrbitalDesc - - pSolarSysState->PlanetDesc); - else - log_add (log_Debug, "Planet index = %d, Moon index = %d", - pSolarSysState->pOrbitalDesc->pPrevDesc - - pSolarSysState->PlanetDesc, - pSolarSysState->pOrbitalDesc - - pSolarSysState->MoonDesc); -#endif /* DEBUG_SOLARSYS */ - rand_val = DoPlanetaryAnalysis (&pSolarSysState->SysInfo, - pSolarSysState->pOrbitalDesc); - - pSolarSysState->SysInfo.PlanetInfo.ScanSeed[BIOLOGICAL_SCAN] = - rand_val; - i = (COUNT)~0; - rand_val = GenerateLifeForms (&pSolarSysState->SysInfo, &i); - - pSolarSysState->SysInfo.PlanetInfo.ScanSeed[MINERAL_SCAN] = - rand_val; - i = (COUNT)~0; - GenerateMineralDeposits (&pSolarSysState->SysInfo, &i); - - pSolarSysState->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN] = - rand_val; - LoadPlanet (NULL); + GenerateOrbital (); break; } case GENERATE_NAME: { - i = pSolarSysState->pBaseDesc - pSolarSysState->PlanetDesc; + COUNT i = pSolarSysState->pBaseDesc - pSolarSysState->PlanetDesc; utf8StringCopy (GLOBAL_SIS (PlanetName), sizeof (GLOBAL_SIS (PlanetName)), GAME_STRING (PLANET_NUMBER_BASE + (9 + 7) + i)); @@ -2044,3 +2097,4 @@ buf[bufsize - 1] = '\0'; } } + Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2009-10-31 01:17:53 UTC (rev 3267) +++ trunk/sc2/src/uqm/sis.c 2009-10-31 14:42:02 UTC (rev 3268) @@ -1634,8 +1634,7 @@ { GLOBAL (ip_planet) = pSolarSysState->pBaseDesc->pPrevDesc - pSolarSysState->PlanetDesc + 1; - GLOBAL (ip_location) = - pSolarSysState->SunDesc[0].location; + GLOBAL (ip_location) = pSolarSysState->SunDesc[0].location; } } else Modified: trunk/sc2/src/uqm/status.c =================================================================== --- trunk/sc2/src/uqm/status.c 2009-10-31 01:17:53 UTC (rev 3267) +++ trunk/sc2/src/uqm/status.c 2009-10-31 14:42:02 UTC (rev 3268) @@ -37,7 +37,7 @@ InitStatusOffsets (void) { // XXX: We have to jump through these hoops because GOOD_GUY_YOFFS is - // not a constant, contrary to what its' name suggests. + // not a constant, contrary to what its name suggests. status_y_offsets[0] = GOOD_GUY_YOFFS; // bottom player status_y_offsets[1] = BAD_GUY_YOFFS; // top player } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Mee...@us...> - 2009-10-31 15:37:55
|
Revision: 3269 http://sc2.svn.sourceforge.net/sc2/?rev=3269&view=rev Author: Meep-Eep Date: 2009-10-31 15:37:46 +0000 (Sat, 31 Oct 2009) Log Message: ----------- Second argument of SetFlashRect is now always 0. This commit removes that argument. Also some small cleanups. Modified Paths: -------------- trunk/sc2/src/uqm/encount.c trunk/sc2/src/uqm/gameopt.c trunk/sc2/src/uqm/hyper.c trunk/sc2/src/uqm/menu.c trunk/sc2/src/uqm/outfit.c trunk/sc2/src/uqm/pickship.c trunk/sc2/src/uqm/planets/pstarmap.c trunk/sc2/src/uqm/planets/roster.c trunk/sc2/src/uqm/planets/scan.c trunk/sc2/src/uqm/planets/solarsys.c trunk/sc2/src/uqm/shipyard.c trunk/sc2/src/uqm/sis.c trunk/sc2/src/uqm/sis.h trunk/sc2/src/uqm/starbase.c trunk/sc2/src/uqm/starcon.c Modified: trunk/sc2/src/uqm/encount.c =================================================================== --- trunk/sc2/src/uqm/encount.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/encount.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -75,7 +75,7 @@ { DrawMenuStateStrings (PM_CONVERSE, pMS->CurState); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); } return ((BOOLEAN)pMS->Initialized); @@ -331,13 +331,13 @@ DrawMenuStateStrings (PM_CONVERSE, MenuState.CurState = HAIL); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); DoInput (&MenuState, TRUE); LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); return (MenuState.CurState); Modified: trunk/sc2/src/uqm/gameopt.c =================================================================== --- trunk/sc2/src/uqm/gameopt.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/gameopt.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -237,7 +237,7 @@ if (!(state & DDSHS_EDIT)) { // normal state - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); if (pMS->InputFunc == DoNaming) { @@ -318,7 +318,7 @@ SetContextForeGroundColor (ForeGround); font_DrawText (&lf); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); } UnlockMutex (GraphicsLock); @@ -892,7 +892,7 @@ else if (PulsedInputState.menu[KEY_MENU_CANCEL]) { LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); pMS->ModuleFrame = 0; pMS->CurState = (BYTE)pMS->delta_item; @@ -933,7 +933,7 @@ } else { - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); DrawStamp (&MsgStamp); DestroyDrawable (ReleaseDrawable (MsgStamp.frame)); UnlockMutex (GraphicsLock); @@ -965,7 +965,7 @@ if (LoadGame ((COUNT)pMS->CurState, NULL)) GLOBAL (CurrentActivity) |= CHECK_LOAD; } - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); pMS->ModuleFrame = 0; @@ -1121,7 +1121,7 @@ } UnbatchGraphics (); } - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); } Modified: trunk/sc2/src/uqm/hyper.c =================================================================== --- trunk/sc2/src/uqm/hyper.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/hyper.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -1596,14 +1596,14 @@ DrawMenuStateStrings (PM_STARMAP, STARMAP); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); DoInput (&MenuState, TRUE); LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); SetContext (SpaceContext); Modified: trunk/sc2/src/uqm/menu.c =================================================================== --- trunk/sc2/src/uqm/menu.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/menu.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -603,7 +603,7 @@ && flash_rect.corner.y == RADAR_Y && flash_rect.extent.width == RADAR_WIDTH && flash_rect.extent.height == RADAR_HEIGHT) - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); SetContext (OldContext); UnlockMutex (GraphicsLock); } Modified: trunk/sc2/src/uqm/outfit.c =================================================================== --- trunk/sc2/src/uqm/outfit.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/outfit.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -237,7 +237,7 @@ SetContext (SpaceContext); ClearSISRect (CLEAR_SIS_RADAR); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); goto InitFlash; } else if (select || cancel) @@ -298,7 +298,7 @@ LockMutex (GraphicsLock); SetContext (SpaceContext); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); if (select) { @@ -382,7 +382,7 @@ UnlockMutex (GraphicsLock); DrawMenuStateStrings (PM_FUEL, pMS->CurState = OUTFIT_MODULES); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); pMS->InputFunc = DoOutfit; ClearSISRect (DRAW_SIS_DISPLAY); @@ -444,7 +444,7 @@ pMS->CurState = NewItem; DrawModuleStrings (pMS, NewItem); // flash with PC menus too - SetFlashRect (SFR_MENU_ANY, (FRAME)0); + SetFlashRect (SFR_MENU_ANY); } } else if (NewItem != pMS->delta_item || NewState != pMS->CurState) @@ -532,9 +532,9 @@ DrawModuleStrings (pMS, new_slot_piece); if (pMS->CurState < EMPTY_SLOT) // flash with PC menus too - SetFlashRect (SFR_MENU_ANY, (FRAME)0); + SetFlashRect (SFR_MENU_ANY); else - SetFlashRect (&pMS->flash_rect0, (FRAME)0); + SetFlashRect (&pMS->flash_rect0); } UnlockMutex (GraphicsLock); } @@ -571,7 +571,7 @@ DeltaSISGauges (0, FUEL_TANK_SCALE, -GLOBAL (FuelCost)); SetContext (StatusContext); GetGaugeRect (&r, FALSE); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); } else { // no more room for fuel or not enough RUs @@ -603,7 +603,7 @@ } SetContext (StatusContext); GetGaugeRect (&r, FALSE); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); UnlockMutex (GraphicsLock); } } @@ -713,7 +713,7 @@ UnbatchGraphics (); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); GLOBAL_SIS (FuelOnBoard) = @@ -732,7 +732,7 @@ { pMS->CurState = OUTFIT_FUEL; LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); } else @@ -758,14 +758,14 @@ LockMutex (GraphicsLock); SetContext (StatusContext); GetGaugeRect (&r, FALSE); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); UnlockMutex (GraphicsLock); break; } case OUTFIT_DOFUEL: pMS->CurState = OUTFIT_FUEL; LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); break; case OUTFIT_MODULES: @@ -783,7 +783,7 @@ goto ExitOutfit; DrawMenuStateStrings (PM_FUEL, pMS->CurState); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); break; } Modified: trunk/sc2/src/uqm/pickship.c =================================================================== --- trunk/sc2/src/uqm/pickship.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/pickship.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -236,8 +236,8 @@ font_DrawText (&t); } - SetFlashRect (NULL, (FRAME)0); - SetFlashRect (&pMS->flash_rect0, (FRAME)0); + SetFlashRect (NULL); + SetFlashRect (&pMS->flash_rect0); UnlockMutex (GraphicsLock); } } @@ -284,7 +284,7 @@ pMenuState = 0; LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); hBattleShip = (HSTARSHIP)MenuState.CurFrame; } Modified: trunk/sc2/src/uqm/planets/pstarmap.c =================================================================== --- trunk/sc2/src/uqm/planets/pstarmap.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/planets/pstarmap.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -1724,7 +1724,7 @@ if (NewState != SCAN + 1 && NewState != (GAME_MENU) + 1) { LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); } @@ -1793,7 +1793,7 @@ --pMS->Initialized; pSolarSysState->PauseRotate = 0; LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); break; } @@ -1829,7 +1829,7 @@ else if (pMS->CurState) { LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); if (select) { @@ -1842,7 +1842,7 @@ else { LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); DrawMenuStateStrings (PM_STARMAP, -NAVIGATION); } Modified: trunk/sc2/src/uqm/planets/roster.c =================================================================== --- trunk/sc2/src/uqm/planets/roster.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/planets/roster.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -137,7 +137,7 @@ r.extent.width = STATUS_MESSAGE_WIDTH; r.extent.height = STATUS_MESSAGE_HEIGHT; SetContext (StatusContext); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); } ret = TRUE; } @@ -232,7 +232,7 @@ else if (cancel && !(pMS->CurState & SHIP_TOGGLE)) { LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); RosterCleanup (pMS); pMS->CurFrame = 0; DrawStatusMessage (NULL); @@ -245,7 +245,7 @@ LockMutex (GraphicsLock); pMS->CurState ^= SHIP_TOGGLE; if (!(pMS->CurState & SHIP_TOGGLE)) - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); else { RosterCleanup (pMS); @@ -255,7 +255,7 @@ r.extent.width = STATUS_MESSAGE_WIDTH; r.extent.height = STATUS_MESSAGE_HEIGHT; SetContext (StatusContext); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); } UnlockMutex (GraphicsLock); } Modified: trunk/sc2/src/uqm/planets/scan.c =================================================================== --- trunk/sc2/src/uqm/planets/scan.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/planets/scan.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -623,7 +623,7 @@ r.extent.height = FLASH_HEIGHT; LoadDisplayPixmap (&r, pMenuState->flash_frame0); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); InitLander (0); @@ -720,7 +720,7 @@ DrawMenuStateStrings (PM_MIN_SCAN, DISPATCH_SHUTTLE); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); ExitPlanetSide: @@ -732,15 +732,20 @@ } else { - SIZE dx = 0, dy = 0; + SIZE dx = 0; + SIZE dy = 0; POINT new_pt; new_pt = pSolarSysState->MenuState.first_item; - if (PulsedInputState.menu[KEY_MENU_LEFT]) dx = -1; - if (PulsedInputState.menu[KEY_MENU_RIGHT]) dx = 1; - if (PulsedInputState.menu[KEY_MENU_UP]) dy = -1; - if (PulsedInputState.menu[KEY_MENU_DOWN]) dy = 1; + if (PulsedInputState.menu[KEY_MENU_LEFT]) + dx = -1; + if (PulsedInputState.menu[KEY_MENU_RIGHT]) + dx = 1; + if (PulsedInputState.menu[KEY_MENU_UP]) + dy = -1; + if (PulsedInputState.menu[KEY_MENU_DOWN]) + dy = 1; dx = dx << MAG_SHIFT; if (dx) Modified: trunk/sc2/src/uqm/planets/solarsys.c =================================================================== --- trunk/sc2/src/uqm/planets/solarsys.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/planets/solarsys.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -1281,7 +1281,7 @@ pSolarSysState->MenuState.CurState = STARMAP + 1; IP_input_state = 0; } - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); FlushInput (); UnlockMutex (GraphicsLock); } @@ -1418,7 +1418,6 @@ GLOBAL (ShipStamp.origin.x) = SIS_SCREEN_WIDTH >> 1; GLOBAL (ShipStamp.origin.y) = SIS_SCREEN_HEIGHT >> 1; } - } GetPlanetInfo (); @@ -1446,7 +1445,7 @@ DrawMenuStateStrings (PM_SCAN, SCAN); LockMutex (GraphicsLock); pSolarSysState->MenuState.CurState = SCAN + 1; - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); FlushInput (); UnlockMutex (GraphicsLock); } Modified: trunk/sc2/src/uqm/shipyard.c =================================================================== --- trunk/sc2/src/uqm/shipyard.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/shipyard.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -257,7 +257,7 @@ SetContext (OldContext); // Flash the ship purchase menu even when optMenu == OPT_PC - SetFlashRect (SFR_MENU_ANY, (FRAME)0); + SetFlashRect (SFR_MENU_ANY); UnlockMutex (GraphicsLock); } @@ -693,7 +693,7 @@ UnlockShipFrag (&GLOBAL (built_ship_q), hStarShip); } - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); // Do not call EndHangarAnim() with GraphicsLock held! UnlockMutex (GraphicsLock); EndHangarAnim (pMS); @@ -719,7 +719,7 @@ flash_r.corner.y = RADAR_Y - flash_r.corner.y; flash_r.extent.width = RADAR_WIDTH; flash_r.extent.height = RADAR_HEIGHT; - SetFlashRect (&flash_r, (FRAME)0); + SetFlashRect (&flash_r); } } else @@ -736,7 +736,7 @@ { COUNT Index; -// SetFlashRect (NULL, (FRAME)0); +// SetFlashRect (NULL); UnlockMutex (GraphicsLock); if (!(pMS->delta_item & MODIFY_CREW_FLAG)) { @@ -748,7 +748,7 @@ { pMS->delta_item ^= MODIFY_CREW_FLAG; LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); DrawMenuStateStrings (PM_CREW, SHIPYARD_CREW); SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); @@ -767,7 +767,7 @@ (SHIP_FRAGMENT*)0); //Reset flash rectangle LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); DrawMenuStateStrings (PM_CREW, SHIPYARD_CREW); @@ -780,7 +780,7 @@ r.extent.width = SHIP_WIN_WIDTH; r.extent.height = 5; SetContext (SpaceContext); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); UnlockMutex (GraphicsLock); } else @@ -827,7 +827,7 @@ hStarShip); if (StarShipPtr->crew_level == 0) { - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); ShowCombatShip ((COUNT)pMS->CurState, StarShipPtr); @@ -845,7 +845,7 @@ r.extent.width = SHIP_WIN_WIDTH; r.extent.height = SHIP_WIN_HEIGHT; SetContext (SpaceContext); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); } else { @@ -862,7 +862,7 @@ { SetContext (StatusContext); GetGaugeRect (&r, TRUE); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); SetContext (SpaceContext); SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT | MENU_SOUND_CANCEL); @@ -875,7 +875,7 @@ r.extent.width = SHIP_WIN_WIDTH; r.extent.height = 5; SetContext (SpaceContext); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT | MENU_SOUND_CANCEL); } @@ -907,7 +907,7 @@ SetContext (StatusContext); GetGaugeRect (&r, TRUE); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); SetContext (SpaceContext); } else @@ -946,7 +946,7 @@ r.extent.width = SHIP_WIN_WIDTH; r.extent.height = 5; SetContext (SpaceContext); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); } else { // at capacity or not enough RUs @@ -976,7 +976,7 @@ SetContext (StatusContext); GetGaugeRect (&r, TRUE); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); SetContext (SpaceContext); } else @@ -1009,7 +1009,7 @@ r.extent.width = SHIP_WIN_WIDTH; r.extent.height = 5; SetContext (SpaceContext); - SetFlashRect (&r, (FRAME)0); + SetFlashRect (&r); } } @@ -1032,7 +1032,7 @@ pMS->CurState = SHIPYARD_CREW; DrawMenuStateStrings (PM_CREW, pMS->CurState); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); return TRUE; @@ -1058,7 +1058,7 @@ pMS->flash_rect0.extent.width = SHIP_WIN_WIDTH; pMS->flash_rect0.extent.height = SHIP_WIN_HEIGHT; } - SetFlashRect (&pMS->flash_rect0, (FRAME)0); + SetFlashRect (&pMS->flash_rect0); } UnlockMutex (GraphicsLock); } @@ -1298,7 +1298,7 @@ ShowCombatShip ((COUNT)~0, (SHIP_FRAGMENT*)0); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); } @@ -1332,7 +1332,7 @@ goto ExitShipyard; DrawMenuStateStrings (PM_CREW, pMS->CurState); LockMutex (GraphicsLock); - SetFlashRect (SFR_MENU_3DO, (FRAME)0); + SetFlashRect (SFR_MENU_3DO); BeginHangarAnim (pMS); UnlockMutex (GraphicsLock); } Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/sis.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -227,9 +227,7 @@ SetContextFont (TinyFont); if (flags & DSME_CLEARFR) - { - SetFlashRect (NULL, (FRAME)0); - } + SetFlashRect (NULL); if (CurPos < 0 && ExPos < 0) { // normal state @@ -321,8 +319,9 @@ if (flags & DSME_SETFR) { - r.corner.x = r.corner.y = 0; - SetFlashRect (&r, (FRAME)0); + r.corner.x = 0; + r.corner.y = 0; + SetFlashRect (&r); } UnbatchGraphics (); @@ -1290,7 +1289,6 @@ Task flash_task = 0; RECT flash_rect; -static FRAME flash_frame; static FRAME flash_screen_frame = 0; static int flash_changed; Mutex flash_mutex = 0; @@ -1308,7 +1306,6 @@ DWORD TimeIn, WaitTime; SIZE strength, fstrength, incr; RECT cached_rect, framesize_rect; - FRAME cached_frame = 0; FRAME cached_screen_frame = 0; Task task = (Task)data; int cached[CACHE_SIZE]; @@ -1334,7 +1331,6 @@ { RECT screen_rect; cached_rect = flash_rect; - cached_frame = flash_frame; if (cached_screen_frame) DestroyDrawable (ReleaseDrawable (cached_screen_frame)); flash_changed = 0; @@ -1349,8 +1345,6 @@ arith_frame_blit (flash_screen_frame, &screen_rect, cached_screen_frame, NULL, 0, 0); UnlockMutex (flash_mutex); - if (cached_frame) - GetFrameRect (cached_frame, &framesize_rect); for (i = 0; i < CACHE_SIZE; i++) { cached[i] = 0; @@ -1365,89 +1359,31 @@ if (cached_rect.extent.width) { STAMP *pStamp; - if (cached_frame) - { -#define MIN_F_STRENGTH -3 -#define MAX_F_STRENGTH 3 - int num = 0, denom = 0; - - fstrength += incr; - if (fstrength > MAX_F_STRENGTH) - { - fstrength = MAX_F_STRENGTH - 1; - incr = -1; - } - else if (fstrength < MIN_F_STRENGTH) - { - fstrength = MIN_F_STRENGTH + 1; - incr = 1; - } - if (cached[fstrength - MIN_F_STRENGTH]) - pStamp = &cached_stamp[fstrength - MIN_F_STRENGTH]; - else - { - RECT tmp_rect = framesize_rect; - pStamp = &cached_stamp[fstrength - MIN_F_STRENGTH]; - cached[fstrength - MIN_F_STRENGTH] = 1; - pStamp->frame = CaptureDrawable (CreateDrawable ( - WANT_PIXMAP, framesize_rect.extent.width, - framesize_rect.extent.height, 1)); - pStamp->origin.x = framesize_rect.corner.x; - pStamp->origin.y = framesize_rect.corner.y; - tmp_rect.corner.x = 0; - tmp_rect.corner.y = 0; - - if (fstrength != NORMAL_F_STRENGTH) - { - arith_frame_blit (cached_frame, &tmp_rect, - pStamp->frame, NULL, - fstrength > 0 ? fstrength : -fstrength, 16); - - if (fstrength < 0) - { - // Subtractive blit. - num = -8; - denom = 8; - } - else - { - // Additive blit. - num = 8; - denom = -8; - } - } - - arith_frame_blit (cached_screen_frame, &framesize_rect, - pStamp->frame, &tmp_rect, num, denom); - } - } - else - { #define MIN_STRENGTH 4 #define MAX_STRENGTH 6 - strength += 2; - if (strength > MAX_STRENGTH) - strength = MIN_STRENGTH; - if (cached[strength - MIN_STRENGTH]) - pStamp = &cached_stamp[strength - MIN_STRENGTH]; - else - { - RECT tmp_rect = cached_rect; - pStamp = &cached_stamp[strength - MIN_STRENGTH]; - cached[strength - MIN_STRENGTH] = 1; - pStamp->frame = CaptureDrawable (CreateDrawable (WANT_PIXMAP, - cached_rect.extent.width, cached_rect.extent.height, 1)); - pStamp->origin.x = 0; - pStamp->origin.y = 0; - tmp_rect.corner.x = 0; - tmp_rect.corner.y = 0; + strength += 2; + if (strength > MAX_STRENGTH) + strength = MIN_STRENGTH; + if (cached[strength - MIN_STRENGTH]) + pStamp = &cached_stamp[strength - MIN_STRENGTH]; + else + { + RECT tmp_rect = cached_rect; + pStamp = &cached_stamp[strength - MIN_STRENGTH]; + cached[strength - MIN_STRENGTH] = 1; + pStamp->frame = CaptureDrawable (CreateDrawable (WANT_PIXMAP, + cached_rect.extent.width, cached_rect.extent.height, + 1)); + pStamp->origin.x = 0; + pStamp->origin.y = 0; + tmp_rect.corner.x = 0; + tmp_rect.corner.y = 0; - arith_frame_blit (cached_screen_frame, &tmp_rect, pStamp->frame, - &tmp_rect, 4, 4); - if (strength != 4) - arith_frame_blit (cached_screen_frame, &tmp_rect, pStamp->frame, - &tmp_rect, strength, 4); - } + arith_frame_blit (cached_screen_frame, &tmp_rect, + pStamp->frame, &tmp_rect, 4, 4); + if (strength != 4) + arith_frame_blit (cached_screen_frame, &tmp_rect, + pStamp->frame, &tmp_rect, strength, 4); } LockMutex (GraphicsLock); OldContext = SetContext (ScreenContext); @@ -1482,18 +1418,17 @@ } void -SetFlashRect (RECT *pRect, FRAME f) +SetFlashRect (RECT *pRect) { RECT clip_r, temp_r, flash_rect1, old_r; CONTEXT OldContext; - FRAME old_f; int create_flash = 0; if (! flash_mutex) - flash_mutex = CreateMutex ("FlashRect Lock", SYNC_CLASS_TOPLEVEL | SYNC_CLASS_VIDEO); + flash_mutex = CreateMutex ("FlashRect Lock", + SYNC_CLASS_TOPLEVEL | SYNC_CLASS_VIDEO); old_r = flash_rect; - old_f = flash_frame; flash_rect1 = flash_rect; if (pRect != SFR_MENU_3DO && pRect != SFR_MENU_ANY) @@ -1541,15 +1476,13 @@ } LockMutex (flash_mutex); - flash_frame = f; flash_rect = flash_rect1; if (old_r.extent.width && (old_r.extent.width != flash_rect.extent.width || old_r.extent.height != flash_rect.extent.height || old_r.corner.x != flash_rect.corner.x - || old_r.corner.y != flash_rect.corner.y - || old_f != flash_frame)) + || old_r.corner.y != flash_rect.corner.y)) { if (flash_screen_frame) { @@ -1660,4 +1593,3 @@ } } - Modified: trunk/sc2/src/uqm/sis.h =================================================================== --- trunk/sc2/src/uqm/sis.h 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/sis.h 2009-10-31 15:37:46 UTC (rev 3269) @@ -261,7 +261,7 @@ extern void InitSISContexts (void); extern void DrawSISFrame (void); extern void ClearSISRect (BYTE ClearFlags); -extern void SetFlashRect (RECT *pRect, FRAME f); +extern void SetFlashRect (RECT *pRect); #define SFR_MENU_3DO ((RECT*)~0L) #define SFR_MENU_ANY ((RECT*)~1L) extern void DrawHyperCoords (POINT puniverse); Modified: trunk/sc2/src/uqm/starbase.c =================================================================== --- trunk/sc2/src/uqm/starbase.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/starbase.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -303,7 +303,7 @@ pMS->InputFunc = DoStarBase; LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); if (pMS->hMusic) { Modified: trunk/sc2/src/uqm/starcon.c =================================================================== --- trunk/sc2/src/uqm/starcon.c 2009-10-31 14:42:02 UTC (rev 3268) +++ trunk/sc2/src/uqm/starcon.c 2009-10-31 15:37:46 UTC (rev 3269) @@ -274,7 +274,7 @@ } LockMutex (GraphicsLock); - SetFlashRect (NULL, (FRAME)0); + SetFlashRect (NULL); UnlockMutex (GraphicsLock); LastActivity = GLOBAL (CurrentActivity); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-02 05:23:15
|
Revision: 3271 http://sc2.svn.sourceforge.net/sc2/?rev=3271&view=rev Author: avolkov Date: 2009-11-02 05:23:06 +0000 (Mon, 02 Nov 2009) Log Message: ----------- Cleanup of IP display code: GOOD_GUY/BAD_GUY removed; several bugs removed (some previously fixed); special-case hack code moved where it belongs; some comments Modified Paths: -------------- trunk/sc2/src/uqm/encount.h trunk/sc2/src/uqm/ipdisp.c trunk/sc2/src/uqm/ipdisp.h trunk/sc2/src/uqm/planets/gendru.c trunk/sc2/src/uqm/planets/genilw.c trunk/sc2/src/uqm/planets/genmyc.c trunk/sc2/src/uqm/planets/genorz.c trunk/sc2/src/uqm/planets/genpet.c trunk/sc2/src/uqm/planets/genpku.c trunk/sc2/src/uqm/planets/gensam.c trunk/sc2/src/uqm/planets/genshof.c trunk/sc2/src/uqm/planets/gensol.c trunk/sc2/src/uqm/planets/genspa.c trunk/sc2/src/uqm/planets/gensup.c trunk/sc2/src/uqm/planets/genthrad.c trunk/sc2/src/uqm/planets/genutw.c trunk/sc2/src/uqm/planets/genvux.c trunk/sc2/src/uqm/planets/genyeh.c trunk/sc2/src/uqm/planets/genzoq.c trunk/sc2/src/uqm/planets/solarsys.c Modified: trunk/sc2/src/uqm/encount.h =================================================================== --- trunk/sc2/src/uqm/encount.h 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/encount.h 2009-11-02 05:23:06 UTC (rev 3271) @@ -178,6 +178,9 @@ extern void GenerateRainbow (BYTE control); extern void GenerateIlwrath (BYTE control); +// Last race the player battled with, or -1 if no battle took place. +// Set to -1 by some funcs to inhibit IP groups from intercepting +// the flagship. extern SIZE EncounterRace; extern BYTE EncounterGroup; Modified: trunk/sc2/src/uqm/ipdisp.c =================================================================== --- trunk/sc2/src/uqm/ipdisp.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/ipdisp.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -33,6 +33,8 @@ { HSHIPFRAG hGroup, hNextGroup; + // NOTE: "Others" includes the group causing the notification too. + for (hGroup = GetHeadLink (&GLOBAL (ip_group_q)); hGroup; hGroup = hNextGroup) { @@ -41,44 +43,52 @@ GroupPtr = LockIpGroup (&GLOBAL (ip_group_q), hGroup); hNextGroup = _GetSuccLink (GroupPtr); - if (GroupPtr->race_id == which_race) + if (GroupPtr->race_id != which_race) { - BYTE task; + UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); + continue; + } - task = GroupPtr->task | IGNORE_FLAGSHIP; - - if (target_loc == 0) - { - task &= ~IGNORE_FLAGSHIP; - // XXX: orbit_pos is abused here to store the previous + if (target_loc == IPNL_INTERCEPT_PLAYER) + { + GroupPtr->task &= ~IGNORE_FLAGSHIP; + // XXX: orbit_pos is abused here to store the previous + // group destination, before the intercept task. + // Returned to dest_loc below. + GroupPtr->orbit_pos = GroupPtr->dest_loc; + GroupPtr->dest_loc = IPNL_INTERCEPT_PLAYER; + } + else if (target_loc == IPNL_ALL_CLEAR) + { + GroupPtr->task |= IGNORE_FLAGSHIP; + + if (GroupPtr->dest_loc == IPNL_INTERCEPT_PLAYER) + { // The group was intercepting, so send it back where it came + // XXX: orbit_pos was abused to store the previous // group destination, before the intercept task. - // Returned to dest_loc below. - GroupPtr->orbit_pos = GroupPtr->dest_loc; -/* task = FLEE | IGNORE_FLAGSHIP; */ - } - else if ((target_loc = GroupPtr->dest_loc) == 0) - { - // XXX: orbit_pos is abused to store the previous - // group destination, before the intercept task. - target_loc = GroupPtr->orbit_pos; + GroupPtr->dest_loc = GroupPtr->orbit_pos; GroupPtr->orbit_pos = NORMALIZE_FACING (TFB_Random ()); #ifdef OLD - target_loc = (BYTE)(( - (COUNT)TFB_Random () + GroupPtr->dest_loc = (BYTE)(((COUNT)TFB_Random () % pSolarSysState->SunDesc[0].NumPlanets) + 1); #endif /* OLD */ - if (!(task & REFORM_GROUP)) - { - if ((task & ~IGNORE_FLAGSHIP) != EXPLORE) - GroupPtr->group_counter = 0; - else - GroupPtr->group_counter = - ((COUNT) TFB_Random () % MAX_REVOLUTIONS) - << FACING_SHIFT; - } } + // If the group wasn't intercepting, it will just continue + // going about its business. - GroupPtr->task = task; + if (!(GroupPtr->task & REFORM_GROUP)) + { + if ((GroupPtr->task & ~IGNORE_FLAGSHIP) != EXPLORE) + GroupPtr->group_counter = 0; + else + GroupPtr->group_counter = ((COUNT) TFB_Random () + % MAX_REVOLUTIONS) << FACING_SHIFT; + } + } + else + { // Send the group to the location. + // XXX: There is currently no use of such notify that I know of. + GroupPtr->task |= IGNORE_FLAGSHIP; GroupPtr->dest_loc = target_loc; } @@ -99,14 +109,11 @@ IP_GROUP *GroupPtr; EPtr = ElementPtr; - EPtr->state_flags &= - ~(DISAPPEARING | NONSOLID); /* "I'm not quite dead." */ - ++EPtr->life_span; /* so that it will 'die' - * again next time. - */ + EPtr->state_flags &= ~(DISAPPEARING | NONSOLID); // "I'm not quite dead" + ++EPtr->life_span; // so that it will 'die' again next time + GetElementStarShip (EPtr, &GroupPtr); - group_loc = GroupPtr->sys_loc; - /* save old location */ + group_loc = GroupPtr->sys_loc; // save old location DisplayArray[EPtr->PrimIndex].Object.Point = GroupPtr->loc; if (group_loc != 0) @@ -140,7 +147,7 @@ goto ExitIPProcess; if ((task & REFORM_GROUP) && --GroupPtr->group_counter == 0) - { + { // Finished reforming the group task &= ~REFORM_GROUP; GroupPtr->task = task; if ((task & ~IGNORE_FLAGSHIP) != EXPLORE) @@ -150,26 +157,17 @@ % MAX_REVOLUTIONS) << FACING_SHIFT; } - if (!(task & REFORM_GROUP)) - { - if ((task & ~(IGNORE_FLAGSHIP | REFORM_GROUP)) != FLEE) - { - if (EPtr->state_flags & BAD_GUY) - EPtr->state_flags &= ~GOOD_GUY; - else - EPtr->state_flags |= BAD_GUY; - } - else if (!(task & IGNORE_FLAGSHIP) - && !(EPtr->state_flags & (GOOD_GUY | BAD_GUY))) - { // fleeing yehat ship collisions after menu fix - EPtr->state_flags |= BAD_GUY; - } + // If fleeing *and* ignoring flagship + if ((task & ~(IGNORE_FLAGSHIP | REFORM_GROUP)) == FLEE + && (task & IGNORE_FLAGSHIP)) + { // Make fleeing groups non-collidable + EPtr->state_flags |= NONSOLID; } target_loc = GroupPtr->dest_loc; if (!(task & (IGNORE_FLAGSHIP | REFORM_GROUP))) { - if (target_loc == 0 && task != FLEE) + if (target_loc == IPNL_INTERCEPT_PLAYER && task != FLEE) { /* if intercepting flagship */ target_loc = flagship_loc; @@ -198,9 +196,10 @@ EPtr->thrust_wait = 0; ZeroVelocityComponents (&EPtr->velocity); - NotifyOthers (GroupPtr->race_id, 0); + NotifyOthers (GroupPtr->race_id, IPNL_INTERCEPT_PLAYER); task = GroupPtr->task; - if ((target_loc = GroupPtr->dest_loc) == 0) + target_loc = GroupPtr->dest_loc; + if (target_loc == IPNL_INTERCEPT_PLAYER) target_loc = flagship_loc; } } @@ -209,10 +208,10 @@ GetCurrentVelocityComponents (&EPtr->velocity, &vdx, &vdy); task &= ~IGNORE_FLAGSHIP; - if (task <= ON_STATION) #ifdef NEVER - if (task <= FLEE || (task == ON_STATION - && GroupPtr->dest_loc == 0)) + if (task <= FLEE || (task == ON_STATION && GroupPtr->dest_loc == 0)) +#else + if (task <= ON_STATION) #endif /* NEVER */ { BOOLEAN Transition; @@ -226,12 +225,14 @@ dest_pt.x = GroupPtr->loc.x << 1; dest_pt.y = GroupPtr->loc.y << 1; } - else if (((task != ON_STATION || GroupPtr->dest_loc == 0) + else if (((task != ON_STATION || + GroupPtr->dest_loc == IPNL_INTERCEPT_PLAYER) && group_loc == target_loc) - || (task == ON_STATION && GroupPtr->dest_loc + || (task == ON_STATION && + GroupPtr->dest_loc != IPNL_INTERCEPT_PLAYER && group_loc == 0)) { - if (GroupPtr->dest_loc == 0) + if (GroupPtr->dest_loc == IPNL_INTERCEPT_PLAYER) dest_pt = GLOBAL (ip_location); else { @@ -312,7 +313,8 @@ { SIZE speed; - if (EPtr->thrust_wait && GroupPtr->dest_loc != 0) + if (EPtr->thrust_wait && + GroupPtr->dest_loc != IPNL_INTERCEPT_PLAYER) { #define ORBIT_SPEED 60 speed = ORBIT_SPEED; @@ -476,6 +478,8 @@ + (COORD)(LOG_SPACE_HEIGHT >> 1) - (LOG_SPACE_HEIGHT >> (MAX_REDUCTION + 1)); + // Don't draw the group if it's not at flagship location, + // or flash the group while it's reforming if (group_loc != flagship_loc || ((task & REFORM_GROUP) && (GroupPtr->group_counter & 1))) @@ -497,15 +501,16 @@ flag_ship_collision (ELEMENT *ElementPtr0, POINT *pPt0, ELEMENT *ElementPtr1, POINT *pPt1) { - if ((GLOBAL (CurrentActivity) & START_ENCOUNTER) - || pSolarSysState->MenuState.CurState - || (ElementPtr1->state_flags & GOOD_GUY)) - return; + if (GLOBAL (CurrentActivity) & START_ENCOUNTER) + return; // ignore the rest of the collisions - if (!(ElementPtr1->state_flags & COLLISION)) /* not processed yet */ + if (!(ElementPtr1->state_flags & COLLISION)) + { // The other element's collision has not been processed yet + // Defer starting the encounter until it is. ElementPtr0->state_flags |= COLLISION | NONSOLID; + } else - { + { // Both element's collisions have now been processed ElementPtr1->state_flags &= ~COLLISION; GLOBAL (CurrentActivity) |= START_ENCOUNTER; } @@ -518,52 +523,49 @@ ELEMENT *ElementPtr1, POINT *pPt1) { IP_GROUP *GroupPtr; + void *OtherPtr; - if ((GLOBAL (CurrentActivity) & START_ENCOUNTER) - || pSolarSysState->MenuState.CurState - || (ElementPtr0->state_flags & GOOD_GUY)) - { - ElementPtr0->state_flags &= ~BAD_GUY; - return; - } + if (GLOBAL (CurrentActivity) & START_ENCOUNTER) + return; // ignore the rest of the collisions GetElementStarShip (ElementPtr0, &GroupPtr); - if (ElementPtr0->state_flags & ElementPtr1->state_flags & BAD_GUY) - { + GetElementStarShip (ElementPtr1, &OtherPtr); + if (OtherPtr) + { // Collision with another group + // Prevent the groups from coalescing into a single ship icon if ((ElementPtr0->state_flags & COLLISION) || (ElementPtr1->current.location.x == ElementPtr1->next.location.x && ElementPtr1->current.location.y == ElementPtr1->next.location.y)) + { ElementPtr0->state_flags &= ~COLLISION; + } else { ElementPtr1->state_flags |= COLLISION; - GroupPtr->loc = - DisplayArray[ElementPtr0->PrimIndex].Object.Point; + GroupPtr->loc = DisplayArray[ElementPtr0->PrimIndex].Object.Point; ElementPtr0->next.location = ElementPtr0->current.location; InitIntersectEndPoint (ElementPtr0); } } - else - { + else // if (!OtherPtr) + { // Collision with a flagship EncounterGroup = GroupPtr->group_id; - if (GroupPtr->race_id == URQUAN_DRONE_SHIP) - { - GroupPtr->task = FLEE | IGNORE_FLAGSHIP; - GroupPtr->dest_loc = 0; - } - else - { - GroupPtr->task |= REFORM_GROUP; - GroupPtr->group_counter = 100; - NotifyOthers (GroupPtr->race_id, (BYTE)~0); - } + GroupPtr->task |= REFORM_GROUP; + GroupPtr->group_counter = 100; + // Send "all clear" for the time being. After the encounter, if + // the player battles the group, the "intercept" notify will be + // resent. + NotifyOthers (GroupPtr->race_id, IPNL_ALL_CLEAR); - if (!(ElementPtr1->state_flags & COLLISION)) /* not processed yet */ + if (!(ElementPtr1->state_flags & COLLISION)) + { // The other element's collision has not been processed yet + // Defer starting the encounter until it is. ElementPtr0->state_flags |= COLLISION | NONSOLID; + } else - { + { // Both element's collisions have now been processed ElementPtr1->state_flags &= ~COLLISION; GLOBAL (CurrentActivity) |= START_ENCOUNTER; } @@ -580,7 +582,6 @@ hIPSHIPElement = AllocElement (); if (hIPSHIPElement) { - BYTE task; ELEMENT *IPSHIPElementPtr; LockElement (hIPSHIPElement, &IPSHIPElementPtr); @@ -591,21 +592,6 @@ IPSHIPElementPtr->state_flags = CHANGING | FINITE_LIFE | IGNORE_VELOCITY; - task = GroupPtr->task; - if (!(task & IGNORE_FLAGSHIP)) - IPSHIPElementPtr->state_flags |= BAD_GUY; - else - { - IPSHIPElementPtr->state_flags |= GOOD_GUY; - // XXX: Hack: Yehat revolution start, fleeing groups - if (GroupPtr->race_id == YEHAT_SHIP - && GET_GAME_STATE (YEHAT_CIVIL_WAR)) - { - GroupPtr->task = FLEE | (task & REFORM_GROUP); - GroupPtr->dest_loc = 0; - } - } - SetPrimType (&DisplayArray[IPSHIPElementPtr->PrimIndex], STAMP_PRIM); // XXX: Hack: farray points to FRAME[3] and given FRAME IPSHIPElementPtr->current.image.farray = &GroupPtr->melee_icon; @@ -790,8 +776,7 @@ FlagShipElementPtr->sys_loc = (BYTE)(pSolarSysState->pBaseDesc->pPrevDesc - pSolarSysState->PlanetDesc + 2); - FlagShipElementPtr->state_flags = - APPEARING | GOOD_GUY | IGNORE_VELOCITY; + FlagShipElementPtr->state_flags = APPEARING | IGNORE_VELOCITY; if (GET_GAME_STATE (ESCAPE_COUNTER)) FlagShipElementPtr->state_flags |= NONSOLID; FlagShipElementPtr->life_span = NORMAL_LIFE; @@ -827,8 +812,8 @@ spawn_flag_ship (); if (EncounterRace >= 0) - { - NotifyOthers (EncounterRace, 0); + { // There was a battle. Call in reinforcements. + NotifyOthers (EncounterRace, IPNL_INTERCEPT_PLAYER); EncounterRace = -1; } Modified: trunk/sc2/src/uqm/ipdisp.h =================================================================== --- trunk/sc2/src/uqm/ipdisp.h 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/ipdisp.h 2009-11-02 05:23:06 UTC (rev 3271) @@ -20,6 +20,10 @@ #include "libs/compiler.h" extern void NotifyOthers (COUNT which_race, BYTE target_loc); +// Special target locations for NotifyOthers() +#define IPNL_INTERCEPT_PLAYER 0 +#define IPNL_ALL_CLEAR ((BYTE)-1) + extern void DoMissions (void); #endif /* UQM_IPDISP_H_INCL_ */ Modified: trunk/sc2/src/uqm/planets/gendru.c =================================================================== --- trunk/sc2/src/uqm/planets/gendru.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/gendru.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -111,7 +111,7 @@ { if (ActivateStarShip (DRUUGE_SHIP, SPHERE_TRACKING)) { - NotifyOthers (DRUUGE_SHIP, (BYTE)~0); + NotifyOthers (DRUUGE_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genilw.c =================================================================== --- trunk/sc2/src/uqm/planets/genilw.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genilw.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -84,7 +84,7 @@ { if (ActivateStarShip (ILWRATH_SHIP, SPHERE_TRACKING)) { - NotifyOthers (ILWRATH_SHIP, (BYTE)~0); + NotifyOthers (ILWRATH_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genmyc.c =================================================================== --- trunk/sc2/src/uqm/planets/genmyc.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genmyc.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -131,7 +131,7 @@ if (CurStarDescPtr->Index == MYCON_DEFINED || !GET_GAME_STATE (SUN_DEVICE_UNGUARDED)) { - NotifyOthers (MYCON_SHIP, (BYTE)~0); + NotifyOthers (MYCON_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genorz.c =================================================================== --- trunk/sc2/src/uqm/planets/genorz.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genorz.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -288,7 +288,7 @@ || !GET_GAME_STATE (TAALO_UNPROTECTED)) && ActivateStarShip (ORZ_SHIP, SPHERE_TRACKING)) { - NotifyOthers (ORZ_SHIP, (BYTE)~0); + NotifyOthers (ORZ_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genpet.c =================================================================== --- trunk/sc2/src/uqm/planets/genpet.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genpet.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -166,7 +166,7 @@ || !GET_GAME_STATE (TALKING_PET) || ActivateStarShip (UMGAH_SHIP, SPHERE_TRACKING))) { - NotifyOthers (UMGAH_SHIP, (BYTE)~0); + NotifyOthers (UMGAH_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genpku.c =================================================================== --- trunk/sc2/src/uqm/planets/genpku.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genpku.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -103,7 +103,7 @@ { if (ActivateStarShip (PKUNK_SHIP, SPHERE_TRACKING)) { - NotifyOthers (PKUNK_SHIP, (BYTE)~0); + NotifyOthers (PKUNK_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/gensam.c =================================================================== --- trunk/sc2/src/uqm/planets/gensam.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/gensam.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -151,6 +151,8 @@ } else if (GroupPtr->task & REFORM_GROUP) { + // REFORM_GROUP was set in ipdisp.c:ip_group_collision + // during a collision with the flagship. GroupPtr->task &= ~REFORM_GROUP; GroupPtr->group_counter = 0; Modified: trunk/sc2/src/uqm/planets/genshof.c =================================================================== --- trunk/sc2/src/uqm/planets/genshof.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genshof.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -26,21 +26,26 @@ check_old_shofixti (void) { HIPGROUP hGroup; + IP_GROUP *GroupPtr; - if (GLOBAL (BattleGroupRef) - && (hGroup = GetHeadLink (&GLOBAL (ip_group_q))) + if (!GLOBAL (BattleGroupRef)) + return; // nothing to check + + hGroup = GetHeadLink (&GLOBAL (ip_group_q)); + if (!hGroup) + return; // still nothing to check + + GroupPtr = LockIpGroup (&GLOBAL (ip_group_q), hGroup); + // REFORM_GROUP was set in ipdisp.c:ip_group_collision() + // during a collision with the flagship. + if (GroupPtr->race_id == SHOFIXTI_SHIP + && (GroupPtr->task & REFORM_GROUP) && GET_GAME_STATE (SHOFIXTI_RECRUITED)) { - IP_GROUP *GroupPtr; - - GroupPtr = LockIpGroup (&GLOBAL (ip_group_q), hGroup); - - GroupPtr->task &= REFORM_GROUP; - GroupPtr->task |= FLEE | IGNORE_FLAGSHIP; + GroupPtr->task = FLEE | IGNORE_FLAGSHIP | REFORM_GROUP; GroupPtr->dest_loc = 0; - - UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); } + UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); } void Modified: trunk/sc2/src/uqm/planets/gensol.c =================================================================== --- trunk/sc2/src/uqm/planets/gensol.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/gensol.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -55,6 +55,33 @@ } static void +check_probe (void) +{ + HIPGROUP hGroup; + IP_GROUP *GroupPtr; + + if (!GLOBAL (BattleGroupRef)) + return; // nothing to check + + hGroup = GetHeadLink (&GLOBAL (ip_group_q)); + if (!hGroup) + return; // still nothing to check + + GroupPtr = LockIpGroup (&GLOBAL (ip_group_q), hGroup); + // REFORM_GROUP was set in ipdisp.c:ip_group_collision() + // during a collision with the flagship. + if (GroupPtr->race_id == URQUAN_DRONE_SHIP + && (GroupPtr->task & REFORM_GROUP)) + { + // We just want the probe to take off as fast as possible, + // so clear out REFORM_GROUP + GroupPtr->task = FLEE | IGNORE_FLAGSHIP; + GroupPtr->dest_loc = 0; + } + UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); +} + +static void generate_energy_nodes (void) { /* Pluto */ @@ -422,7 +449,10 @@ break; case REINIT_NPCS: if (GET_GAME_STATE (CHMMR_BOMB_STATE) != 3) + { GenerateRandomIP (REINIT_NPCS); + check_probe (); + } else { GLOBAL (BattleGroupRef) = 0; Modified: trunk/sc2/src/uqm/planets/genspa.c =================================================================== --- trunk/sc2/src/uqm/planets/genspa.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genspa.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -156,7 +156,7 @@ if (!GET_GAME_STATE (SPATHI_SHIELDED_SELVES) && ActivateStarShip (SPATHI_SHIP, SPHERE_TRACKING)) { - NotifyOthers (SPATHI_SHIP, (BYTE)~0); + NotifyOthers (SPATHI_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/gensup.c =================================================================== --- trunk/sc2/src/uqm/planets/gensup.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/gensup.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -101,7 +101,7 @@ { if (ActivateStarShip (SUPOX_SHIP, SPHERE_TRACKING)) { - NotifyOthers (SUPOX_SHIP, (BYTE)~0); + NotifyOthers (SUPOX_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genthrad.c =================================================================== --- trunk/sc2/src/uqm/planets/genthrad.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genthrad.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -142,7 +142,7 @@ || (!GET_GAME_STATE (HELIX_UNPROTECTED) && (BYTE)(GET_GAME_STATE (THRADD_MISSION) - 1) >= 3))) { - NotifyOthers (THRADDASH_SHIP, (BYTE)~0); + NotifyOthers (THRADDASH_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genutw.c =================================================================== --- trunk/sc2/src/uqm/planets/genutw.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genutw.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -146,7 +146,7 @@ || !GET_GAME_STATE (UTWIG_HAVE_ULTRON)) && ActivateStarShip (UTWIG_SHIP, SPHERE_TRACKING)) { - NotifyOthers (UTWIG_SHIP, (BYTE)~0); + NotifyOthers (UTWIG_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genvux.c =================================================================== --- trunk/sc2/src/uqm/planets/genvux.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genvux.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -156,7 +156,7 @@ && !GET_GAME_STATE (ZEX_IS_DEAD)))) && ActivateStarShip (VUX_SHIP, SPHERE_TRACKING)) { - NotifyOthers (VUX_SHIP, (BYTE)~0); + NotifyOthers (VUX_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genyeh.c =================================================================== --- trunk/sc2/src/uqm/planets/genyeh.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genyeh.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -85,7 +85,7 @@ { if (ActivateStarShip (YEHAT_SHIP, SPHERE_TRACKING)) { - NotifyOthers (YEHAT_SHIP, (BYTE)~0); + NotifyOthers (YEHAT_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); Modified: trunk/sc2/src/uqm/planets/genzoq.c =================================================================== --- trunk/sc2/src/uqm/planets/genzoq.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/genzoq.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -28,22 +28,25 @@ check_scout (void) { HIPGROUP hGroup; + IP_GROUP *GroupPtr; - if (GLOBAL (BattleGroupRef) - && (hGroup = GetHeadLink (&GLOBAL (ip_group_q)))) - { - IP_GROUP *GroupPtr; + if (!GLOBAL (BattleGroupRef)) + return; // nothing to check - GroupPtr = LockIpGroup (&GLOBAL (ip_group_q), hGroup); + hGroup = GetHeadLink (&GLOBAL (ip_group_q)); + if (!hGroup) + return; // still nothing to check - if (GroupPtr->task & REFORM_GROUP) - { - GroupPtr->task = FLEE | IGNORE_FLAGSHIP | REFORM_GROUP; - GroupPtr->dest_loc = 0; - } - - UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); + GroupPtr = LockIpGroup (&GLOBAL (ip_group_q), hGroup); + // REFORM_GROUP was set in ipdisp.c:ip_group_collision() + // during a collision with the flagship. + if (GroupPtr->race_id == ZOQFOTPIK_SHIP + && (GroupPtr->task & REFORM_GROUP)) + { + GroupPtr->task = FLEE | IGNORE_FLAGSHIP | REFORM_GROUP; + GroupPtr->dest_loc = 0; } + UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); } static void Modified: trunk/sc2/src/uqm/planets/solarsys.c =================================================================== --- trunk/sc2/src/uqm/planets/solarsys.c 2009-10-31 15:51:31 UTC (rev 3270) +++ trunk/sc2/src/uqm/planets/solarsys.c 2009-11-02 05:23:06 UTC (rev 3271) @@ -27,6 +27,7 @@ #include "../resinst.h" #include "../settings.h" #include "../ipdisp.h" +#include "../grpinfo.h" #include "../process.h" #include "../load.h" #include "../setup.h" @@ -1653,6 +1654,42 @@ LoadPlanet (NULL); } +static void +check_yehat_rebellion (void) +{ + HIPGROUP hGroup, hNextGroup; + + // XXX: Is there a better way to do this? I could not find one. + // When you talk to a Yehat ship (YEHAT_SHIP) and start the rebellion, + // there is no battle following the comm. There is *never* a battle in + // an encounter with Rebels, but the group race_id (YEHAT_REBEL_SHIP) + // is different from Royalists (YEHAT_SHIP). There is *always* a battle + // in an encounter with Royalists. + // TRANSLATION: "If the civil war has not started yet, or the player + // battled a ship -- bail." + if (!GET_GAME_STATE (YEHAT_CIVIL_WAR) || EncounterRace >= 0) + return; // not this time + + // Send Yehat groups to flee the system, but only if the player + // has actually talked to a ship. + for (hGroup = GetHeadLink (&GLOBAL (ip_group_q)); hGroup; + hGroup = hNextGroup) + { + IP_GROUP *GroupPtr = LockIpGroup (&GLOBAL (ip_group_q), hGroup); + hNextGroup = _GetSuccLink (GroupPtr); + // IGNORE_FLAGSHIP was set in ipdisp.c:ip_group_collision() + // during a collision with the flagship. + if (GroupPtr->race_id == YEHAT_SHIP + && (GroupPtr->task & IGNORE_FLAGSHIP)) + { + GroupPtr->task &= REFORM_GROUP; + GroupPtr->task |= FLEE | IGNORE_FLAGSHIP; + GroupPtr->dest_loc = 0; + } + UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); + } +} + void GenerateRandomIP (BYTE control) { @@ -1667,6 +1704,11 @@ break; case REINIT_NPCS: GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); + // This is not a great place to do the Yehat rebellion check, but + // since you can start the rebellion in any star system (not just + // the Homeworld), I could not find a better place for it. + // At least it is better than where it was originally. + check_yehat_rebellion (); break; case UNINIT_NPCS: PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-02 08:05:03
|
Revision: 3272 http://sc2.svn.sourceforge.net/sc2/?rev=3272&view=rev Author: avolkov Date: 2009-11-02 08:04:51 +0000 (Mon, 02 Nov 2009) Log Message: ----------- Cleanup of lander: ELEMENT.playerNr introduced; GOOD_GUY/BAD_GUY removed Modified Paths: -------------- trunk/sc2/src/uqm/element.h trunk/sc2/src/uqm/planets/lander.c trunk/sc2/src/uqm/planets/lander.h trunk/sc2/src/uqm/planets/scan.c Modified: trunk/sc2/src/uqm/element.h =================================================================== --- trunk/sc2/src/uqm/element.h 2009-11-02 05:23:06 UTC (rev 3271) +++ trunk/sc2/src/uqm/element.h 2009-11-02 08:04:51 UTC (rev 3272) @@ -107,6 +107,10 @@ CollisionFunc *collision_func; void (*death_func) (struct element *ElementPtr); + // Player this element belongs to + // 0: Bottom player in Melee; The Player in full-game + COUNT playerNr; + ELEMENT_FLAGS state_flags; union { Modified: trunk/sc2/src/uqm/planets/lander.c =================================================================== --- trunk/sc2/src/uqm/planets/lander.c 2009-11-02 05:23:06 UTC (rev 3271) +++ trunk/sc2/src/uqm/planets/lander.c 2009-11-02 08:04:51 UTC (rev 3272) @@ -596,7 +596,7 @@ } if (&DisplayArray[ElementPtr->PrimIndex] != pPrim - || !(ElementPtr->state_flags & BAD_GUY)) + || ElementPtr->playerNr != PS_NON_PLAYER) { UnlockElement (hElement); continue; @@ -950,7 +950,8 @@ LockElement (hLightningElement, &LightningElementPtr); - LightningElementPtr->state_flags = FINITE_LIFE | BAD_GUY; + LightningElementPtr->playerNr = PS_NON_PLAYER; + LightningElementPtr->state_flags = FINITE_LIFE; LightningElementPtr->preprocess_func = lightning_process; if ((BYTE)TFB_Random () >= (256 >> 2)) LightningElementPtr->mass_points = 0; /* harmless */ @@ -1002,7 +1003,8 @@ pPrim = &DisplayArray[GroundDisasterElementPtr->PrimIndex]; GroundDisasterElementPtr->mass_points = which_disaster; - GroundDisasterElementPtr->state_flags = FINITE_LIFE | BAD_GUY; + GroundDisasterElementPtr->playerNr = PS_NON_PLAYER; + GroundDisasterElementPtr->state_flags = FINITE_LIFE; GroundDisasterElementPtr->preprocess_func = object_animation; rand_val = TFB_Random (); @@ -1115,7 +1117,7 @@ ElementPtr->next.location.x += dx; ElementPtr->next.location.y += dy; /* if not lander's shot */ - if (ElementPtr->state_flags != (FINITE_LIFE | GOOD_GUY)) + if (ElementPtr->playerNr != PS_HUMAN_PLAYER) { if (ElementPtr->next.location.y < 0) ElementPtr->next.location.y = 0; @@ -1673,8 +1675,9 @@ LockElement (hExplosionElement, &ExplosionElementPtr); + ExplosionElementPtr->playerNr = PS_HUMAN_PLAYER; ExplosionElementPtr->mass_points = DEATH_EXPLOSION; - ExplosionElementPtr->state_flags = FINITE_LIFE | GOOD_GUY; + ExplosionElementPtr->state_flags = FINITE_LIFE; ExplosionElementPtr->next.location = pSolarSysState->MenuState.first_item; ExplosionElementPtr->preprocess_func = object_animation; @@ -1781,9 +1784,10 @@ LockElement (hWeaponElement, &WeaponElementPtr); + WeaponElementPtr->playerNr = PS_HUMAN_PLAYER; WeaponElementPtr->mass_points = 1; WeaponElementPtr->life_span = 12; - WeaponElementPtr->state_flags = FINITE_LIFE | GOOD_GUY; + WeaponElementPtr->state_flags = FINITE_LIFE; WeaponElementPtr->next.location = pSolarSysState->MenuState.first_item; WeaponElementPtr->current.location.x = Modified: trunk/sc2/src/uqm/planets/lander.h =================================================================== --- trunk/sc2/src/uqm/planets/lander.h 2009-11-02 05:23:06 UTC (rev 3271) +++ trunk/sc2/src/uqm/planets/lander.h 2009-11-02 08:04:51 UTC (rev 3272) @@ -61,6 +61,12 @@ extern void object_animation (ELEMENT *ElementPtr); +// ELEMENT.playerNr constants +enum +{ + PS_HUMAN_PLAYER, + PS_NON_PLAYER, +}; #endif /* _LANDER_H */ Modified: trunk/sc2/src/uqm/planets/scan.c =================================================================== --- trunk/sc2/src/uqm/planets/scan.c 2009-11-02 05:23:06 UTC (rev 3271) +++ trunk/sc2/src/uqm/planets/scan.c 2009-11-02 08:04:51 UTC (rev 3272) @@ -1232,7 +1232,7 @@ (*pSolarSysState->GenFunc) ((BYTE)(scan + GENERATE_MINERAL)); NodeElementPtr->scan_node = MAKE_WORD (scan, num_nodes + 1); - NodeElementPtr->state_flags = BAD_GUY; + NodeElementPtr->playerNr = PS_NON_PLAYER; NodeElementPtr->current.location.x = pSolarSysState->SysInfo.PlanetInfo.CurPt.x; NodeElementPtr->current.location.y = This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-04 21:42:47
|
Revision: 3273 http://sc2.svn.sourceforge.net/sc2/?rev=3273&view=rev Author: avolkov Date: 2009-11-04 21:42:39 +0000 (Wed, 04 Nov 2009) Log Message: ----------- Battle & ship code cleanup: GOOD_GUY/BAD_GUY flags replaced with playerNr; these flags are not set in SHIP_INFO anymore; STARSHIP.which_side removed (fully replaced by playerNr) Modified Paths: -------------- trunk/sc2/src/uqm/comm.c trunk/sc2/src/uqm/cyborg.c trunk/sc2/src/uqm/element.h trunk/sc2/src/uqm/encount.c trunk/sc2/src/uqm/hyper.c trunk/sc2/src/uqm/init.c trunk/sc2/src/uqm/intel.c trunk/sc2/src/uqm/melee.c trunk/sc2/src/uqm/misc.c trunk/sc2/src/uqm/netplay/checksum.h trunk/sc2/src/uqm/pickship.c trunk/sc2/src/uqm/process.c trunk/sc2/src/uqm/races.h trunk/sc2/src/uqm/ship.c trunk/sc2/src/uqm/ships/androsyn/androsyn.c trunk/sc2/src/uqm/ships/arilou/arilou.c trunk/sc2/src/uqm/ships/blackurq/blackurq.c trunk/sc2/src/uqm/ships/chenjesu/chenjesu.c trunk/sc2/src/uqm/ships/chmmr/chmmr.c trunk/sc2/src/uqm/ships/druuge/druuge.c trunk/sc2/src/uqm/ships/human/human.c trunk/sc2/src/uqm/ships/ilwrath/ilwrath.c trunk/sc2/src/uqm/ships/lastbat/lastbat.c trunk/sc2/src/uqm/ships/melnorme/melnorme.c trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c trunk/sc2/src/uqm/ships/mycon/mycon.c trunk/sc2/src/uqm/ships/orz/orz.c trunk/sc2/src/uqm/ships/pkunk/pkunk.c trunk/sc2/src/uqm/ships/shofixti/shofixti.c trunk/sc2/src/uqm/ships/sis_ship/sis_ship.c trunk/sc2/src/uqm/ships/slylandr/slylandr.c trunk/sc2/src/uqm/ships/spathi/spathi.c trunk/sc2/src/uqm/ships/supox/supox.c trunk/sc2/src/uqm/ships/syreen/syreen.c trunk/sc2/src/uqm/ships/thradd/thradd.c trunk/sc2/src/uqm/ships/umgah/umgah.c trunk/sc2/src/uqm/ships/urquan/urquan.c trunk/sc2/src/uqm/ships/utwig/utwig.c trunk/sc2/src/uqm/ships/vux/vux.c trunk/sc2/src/uqm/ships/yehat/yehat.c trunk/sc2/src/uqm/ships/zoqfot/zoqfot.c trunk/sc2/src/uqm/shipstat.c trunk/sc2/src/uqm/status.c trunk/sc2/src/uqm/tactrans.c trunk/sc2/src/uqm/uqmdebug.c trunk/sc2/src/uqm/uqmdebug.h trunk/sc2/src/uqm/weapon.c trunk/sc2/src/uqm/weapon.h Modified: trunk/sc2/src/uqm/comm.c =================================================================== --- trunk/sc2/src/uqm/comm.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/comm.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -1436,7 +1436,7 @@ || (which_comm != CHMMR_CONVERSATION && which_comm != SYREEN_CONVERSATION ))//&& (ActivateStarShip (status, CHECK_ALLIANCE) & BAD_GUY))) - BuildBattle (1); + BuildBattle (NPC_PLAYER_NUM); } LocDataPtr = init_race ( @@ -1495,7 +1495,7 @@ if (status) { // Start combat - BuildBattle (0); + BuildBattle (RPG_PLAYER_NUM); EncounterBattle (); } else Modified: trunk/sc2/src/uqm/cyborg.c =================================================================== --- trunk/sc2/src/uqm/cyborg.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/cyborg.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -603,8 +603,7 @@ maneuver_state |= LEFT | RIGHT; if (ShipPtr->thrust_wait == 0 && ((OtherObjPtr->state_flags & PLAYER_SHIP) - || ((OtherObjPtr->state_flags & (GOOD_GUY | BAD_GUY)) == - (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))) + || elementsOfSamePlayer (OtherObjPtr, ShipPtr) || OtherObjPtr->preprocess_func == crew_preprocess)) maneuver_state |= THRUST; @@ -1213,8 +1212,7 @@ } } } - else if ((ed.ObjectPtr->state_flags & (GOOD_GUY | BAD_GUY)) != - (Ship.state_flags & (GOOD_GUY | BAD_GUY)) + else if (!elementsOfSamePlayer (ed.ObjectPtr, &Ship) && ed.ObjectPtr->preprocess_func != crew_preprocess && ObjectsOfConcern[ENEMY_WEAPON_INDEX].which_turn > 1 && ed.ObjectPtr->life_span > 0) @@ -1286,8 +1284,7 @@ } else if ((ed.ObjectPtr->state_flags & CREW_OBJECT) && ((!(ed.ObjectPtr->state_flags & IGNORE_SIMILAR) - && (ed.ObjectPtr->state_flags & (GOOD_GUY | BAD_GUY)) == - (Ship.state_flags & (GOOD_GUY | BAD_GUY))) + && elementsOfSamePlayer (ed.ObjectPtr, &Ship)) || ed.ObjectPtr->preprocess_func == crew_preprocess) && ObjectsOfConcern[CREW_OBJECT_INDEX].which_turn > 1) { Modified: trunk/sc2/src/uqm/element.h =================================================================== --- trunk/sc2/src/uqm/element.h 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/element.h 2009-11-04 21:42:39 UTC (rev 3273) @@ -108,8 +108,10 @@ void (*death_func) (struct element *ElementPtr); // Player this element belongs to - // 0: Bottom player in Melee; The Player in full-game - COUNT playerNr; + // -1: neutral (planets, asteroids, crew, etc.) + // 0: Melee: bottom player; Full-game: the human player + // 1: Melee: top player; Full-game: the NPC opponent + SIZE playerNr; ELEMENT_FLAGS state_flags; union @@ -147,6 +149,14 @@ HELEMENT hTarget; }; +#define NEUTRAL_PLAYER_NUM -1 + +static inline BOOLEAN +elementsOfSamePlayer (ELEMENT *ElementPtr0, ELEMENT *ElementPtr1) +{ + return ElementPtr0->playerNr == ElementPtr1->playerNr; +} + extern QUEUE disp_q; // The maximum number of elements is chosen to provide a slight margin. // Currently, it is maximum *known used* in Melee + 30 Modified: trunk/sc2/src/uqm/encount.c =================================================================== --- trunk/sc2/src/uqm/encount.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/encount.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -104,7 +104,7 @@ return; } - if (which_player == 0) + if (which_player == RPG_PLAYER_NUM) pQueue = &GLOBAL (built_ship_q); else { @@ -141,7 +141,6 @@ { BuiltShipPtr = LockStarShip (&race_q[which_player], hBuiltShip); BuiltShipPtr->captains_name_index = FragPtr->captains_name_index; - BuiltShipPtr->which_side = 1 << which_player; BuiltShipPtr->playerNr = which_player; if (FragPtr->crew_level != INFINITE_FLEET) BuiltShipPtr->crew_level = FragPtr->crew_level; @@ -160,13 +159,12 @@ UnlockShipFrag (pQueue, hStarShip); } - if (which_player == 0 + if (which_player == RPG_PLAYER_NUM && (hBuiltShip = Build (&race_q[0], SIS_SHIP_ID))) { BuiltShipPtr = LockStarShip (&race_q[0], hBuiltShip); BuiltShipPtr->captains_name_index = 0; - BuiltShipPtr->which_side = GOOD_GUY; - BuiltShipPtr->playerNr = 0; + BuiltShipPtr->playerNr = RPG_PLAYER_NUM; BuiltShipPtr->crew_level = 0; BuiltShipPtr->max_crew = 0; // Crew will be copied directly from Modified: trunk/sc2/src/uqm/hyper.c =================================================================== --- trunk/sc2/src/uqm/hyper.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/hyper.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -751,6 +751,7 @@ ELEMENT *HyperSpaceElementPtr; LockElement (hHyperSpaceElement, &HyperSpaceElementPtr); + HyperSpaceElementPtr->playerNr = NEUTRAL_PLAYER_NUM; HyperSpaceElementPtr->state_flags = CHANGING | FINITE_LIFE; HyperSpaceElementPtr->life_span = 1; HyperSpaceElementPtr->mass_points = 1; @@ -792,6 +793,7 @@ ELEMENT *HyperSpaceElementPtr; LockElement (hHyperSpaceElement, &HyperSpaceElementPtr); + HyperSpaceElementPtr->playerNr = NEUTRAL_PLAYER_NUM; HyperSpaceElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID; SetPrimType (&DisplayArray[HyperSpaceElementPtr->PrimIndex], STAMP_PRIM); Modified: trunk/sc2/src/uqm/init.c =================================================================== --- trunk/sc2/src/uqm/init.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/init.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -165,8 +165,7 @@ if (!hStarShip) return 0; StarShipPtr = LockStarShip (&race_q[0], hStarShip); - StarShipPtr->which_side = GOOD_GUY; - StarShipPtr->playerNr = 0; + StarShipPtr->playerNr = RPG_PLAYER_NUM; StarShipPtr->captains_name_index = 0; UnlockStarShip (&race_q[0], hStarShip); Modified: trunk/sc2/src/uqm/intel.c =================================================================== --- trunk/sc2/src/uqm/intel.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/intel.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -43,7 +43,7 @@ InputState = tactical_intelligence (context, StarShipPtr); // Allow a player to warp-escape in cyborg mode - if (context->playerNr == 0) + if (StarShipPtr->playerNr == RPG_PLAYER_NUM) InputState |= CurrentInputToBattleInput ( context->playerNr) & BATTLE_ESCAPE; } Modified: trunk/sc2/src/uqm/melee.c =================================================================== --- trunk/sc2/src/uqm/melee.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/melee.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -1687,7 +1687,6 @@ BuiltShipPtr = LockStarShip (&race_q[side], hBuiltShip); BuiltShipPtr->index = index; BuiltShipPtr->ship_cost = ship_cost; - BuiltShipPtr->which_side = 1 << side; BuiltShipPtr->playerNr = side; BuiltShipPtr->captains_name_index = captains_name_index; // The next ones are not used in Melee Modified: trunk/sc2/src/uqm/misc.c =================================================================== --- trunk/sc2/src/uqm/misc.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/misc.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -39,6 +39,7 @@ extern FRAME planet[]; LockElement (hPlanetElement, &PlanetElementPtr); + PlanetElementPtr->playerNr = NEUTRAL_PLAYER_NUM; PlanetElementPtr->hit_points = 200; PlanetElementPtr->state_flags = APPEARING; PlanetElementPtr->life_span = NORMAL_LIFE + 1; @@ -79,6 +80,7 @@ PutElement (hRubbleElement); LockElement (hRubbleElement, &RubbleElementPtr); + RubbleElementPtr->playerNr = AsteroidElementPtr->playerNr; RubbleElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID; RubbleElementPtr->life_span = 5; RubbleElementPtr->turn_wait = RubbleElementPtr->next_turn = 0; @@ -136,6 +138,7 @@ COUNT val; LockElement (hAsteroidElement, &AsteroidElementPtr); + AsteroidElementPtr->playerNr = NEUTRAL_PLAYER_NUM; AsteroidElementPtr->hit_points = 1; AsteroidElementPtr->mass_points = 3; AsteroidElementPtr->state_flags = APPEARING; @@ -327,9 +330,9 @@ PutElement (hCrew); LockElement (hCrew, &CrewPtr); + CrewPtr->playerNr = NEUTRAL_PLAYER_NUM; CrewPtr->hit_points = 1; - CrewPtr->state_flags = - APPEARING | FINITE_LIFE | CREW_OBJECT; + CrewPtr->state_flags = APPEARING | FINITE_LIFE | CREW_OBJECT; CrewPtr->life_span = CREW_LIFE; SetPrimType (&DisplayArray[CrewPtr->PrimIndex], POINT_PRIM); SetPrimColor (&DisplayArray[CrewPtr->PrimIndex], Modified: trunk/sc2/src/uqm/netplay/checksum.h =================================================================== --- trunk/sc2/src/uqm/netplay/checksum.h 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/netplay/checksum.h 2009-11-04 21:42:39 UTC (rev 3273) @@ -36,9 +36,7 @@ static inline void crc_processELEMENT_FLAGS(crc_State *state, ELEMENT_FLAGS val) { - crc_processUint16(state, (uint16) (val & ~(GOOD_GUY | BAD_GUY))); - // Excluding the element side, as this does not have to - // be the same for both players over a network. + crc_processUint16(state, (uint16) val); } static inline void Modified: trunk/sc2/src/uqm/pickship.c =================================================================== --- trunk/sc2/src/uqm/pickship.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/pickship.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -403,7 +403,6 @@ * fight, all Syreen ships there would be crewed to * the maximum, instead of the normal level */ SPtr->crew_level = FragPtr->max_crew; - SPtr->which_side = 1 << which_player; SPtr->playerNr = which_player; SPtr->captains_name_index = PickCaptainName (); Modified: trunk/sc2/src/uqm/process.c =================================================================== --- trunk/sc2/src/uqm/process.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/process.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -684,7 +684,7 @@ dy = DISPLAY_ALIGN (ElementPtr->next.location.y) - Origin.y; dy = WRAP_DELTA_Y (dy); - if (sides_active <= 2 || !(ElementPtr->state_flags & BAD_GUY)) + if (sides_active <= 2 || ElementPtr->playerNr == 0) { Origin.x = DISPLAY_ALIGN (Origin.x + (dx >> 1)); Origin.y = DISPLAY_ALIGN (Origin.y + (dy >> 1)); Modified: trunk/sc2/src/uqm/races.h =================================================================== --- trunk/sc2/src/uqm/races.h 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/races.h 2009-11-04 21:42:39 UTC (rev 3273) @@ -36,10 +36,7 @@ #define MAX_SHIPS_PER_SIDE 14 /* SHIP_INFO.ship_flags - ship specific flags */ -/* -#define GOOD_GUY (1 << 0) -#define BAD_GUY (1 << 1) -*/ +/* bits 0 and 1 are now available */ #define SEEKING_WEAPON (1 << 2) #define SEEKING_SPECIAL (1 << 3) #define POINT_DEFENSE (1 << 4) @@ -245,8 +242,6 @@ RACE_DESC *RaceDescPtr; // Ship information - UWORD which_side; - // In race_q: side the ship is on COUNT crew_level; // In full-game battles: crew left // In SuperMelee: irrelevant @@ -274,12 +269,17 @@ HELEMENT hShip; COUNT ShipFacing; - COUNT playerNr; - // 0: bottom player; In full-game: the human player + SIZE playerNr; + // 0: bottom player; In full-game: the human player (RPG) + // 1: top player; In full-game: the NPC opponent + // -1: neutral; this should currently never happen (asserts) BYTE control; // HUMAN, COMPUTER or NETWORK control flags, see intel.h }; +#define RPG_PLAYER_NUM 0 +#define NPC_PLAYER_NUM 1 + static inline STARSHIP * LockStarShip (const QUEUE *pq, HSTARSHIP h) { Modified: trunk/sc2/src/uqm/ship.c =================================================================== --- trunk/sc2/src/uqm/ship.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ship.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -168,9 +168,9 @@ { // Preprocessing for the first time ElementPtr->crew_level = RDPtr->ship_info.crew_level; - if ((ElementPtr->state_flags & BAD_GUY) + if (ElementPtr->playerNr == NPC_PLAYER_NUM && LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE) - { + { // Sa-Matra STAMP s; CONTEXT OldContext; @@ -388,7 +388,6 @@ if (!RDPtr) return FALSE; - RDPtr->ship_info.ship_flags |= StarShipPtr->which_side; StarShipPtr->RaceDescPtr = RDPtr; StarShipPtr->ship_input_state = 0; @@ -430,10 +429,10 @@ LockElement (hShip, &ShipElementPtr); + ShipElementPtr->playerNr = StarShipPtr->playerNr; ShipElementPtr->crew_level = 0; ShipElementPtr->mass_points = RDPtr->characteristics.ship_mass; - ShipElementPtr->state_flags = APPEARING | PLAYER_SHIP | IGNORE_SIMILAR - | (RDPtr->ship_info.ship_flags & (GOOD_GUY | BAD_GUY)); + ShipElementPtr->state_flags = APPEARING | PLAYER_SHIP | IGNORE_SIMILAR; ShipElementPtr->turn_wait = 0; ShipElementPtr->thrust_wait = 0; ShipElementPtr->life_span = NORMAL_LIFE; @@ -441,7 +440,7 @@ SetPrimType (&DisplayArray[ShipElementPtr->PrimIndex], STAMP_PRIM); ShipElementPtr->current.image.farray = RDPtr->ship_data.ship; - if ((ShipElementPtr->state_flags & BAD_GUY) + if (ShipElementPtr->playerNr == NPC_PLAYER_NUM && LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE) { // This is the Sa-Matra Modified: trunk/sc2/src/uqm/ships/androsyn/androsyn.c =================================================================== --- trunk/sc2/src/uqm/ships/androsyn/androsyn.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/androsyn/androsyn.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -200,8 +200,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = 0; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = ANDROSYNTH_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/arilou/arilou.c =================================================================== --- trunk/sc2/src/uqm/ships/arilou/arilou.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/arilou/arilou.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -127,8 +127,8 @@ LaserBlock.cy = ShipPtr->next.location.y; LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE); LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE); - LaserBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + LaserBlock.sender = ShipPtr->playerNr; + LaserBlock.flags = IGNORE_SIMILAR; LaserBlock.pixoffs = ARILOU_OFFSET; LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x0A), 0x0E); LaserArray[0] = initialize_laser (&LaserBlock); Modified: trunk/sc2/src/uqm/ships/blackurq/blackurq.c =================================================================== --- trunk/sc2/src/uqm/ships/blackurq/blackurq.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/blackurq/blackurq.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -322,8 +322,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = 0; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = KOHR_AH_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -392,8 +392,7 @@ if (!(BuzzSawPtr->state_flags & NONSOLID) && BuzzSawPtr->next.image.farray == StarShipPtr->RaceDescPtr->ship_data.weapon && BuzzSawPtr->life_span > MISSILE_LIFE * 3 / 4 - && (BuzzSawPtr->state_flags & (GOOD_GUY | BAD_GUY)) == - (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))) + && elementsOfSamePlayer (BuzzSawPtr, ShipPtr)) { { //COUNT which_turn; @@ -479,9 +478,8 @@ MissileBlock.cy = ElementPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special; MissileBlock.index = 0; - MissileBlock.sender = - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ElementPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = 20; MissileBlock.speed = GAS_SPEED; MissileBlock.hit_points = GAS_HITS; Modified: trunk/sc2/src/uqm/ships/chenjesu/chenjesu.c =================================================================== --- trunk/sc2/src/uqm/ships/chenjesu/chenjesu.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/chenjesu/chenjesu.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -133,9 +133,8 @@ MissileBlock.cy = ElementPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.index = 1; - MissileBlock.sender = - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ElementPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = 0; MissileBlock.speed = FRAGMENT_SPEED; MissileBlock.hit_points = FRAGMENT_HITS; @@ -316,10 +315,7 @@ #define ENERGY_DRAIN 10 collision (ElementPtr0, pPt0, ElementPtr1, pPt1); if ((ElementPtr1->state_flags & PLAYER_SHIP) - && (ElementPtr0->state_flags - & (GOOD_GUY | BAD_GUY)) != - (ElementPtr1->state_flags - & (GOOD_GUY | BAD_GUY))) + && !elementsOfSamePlayer (ElementPtr0, ElementPtr1)) { STARSHIP *StarShipPtr; @@ -357,8 +353,8 @@ DoggyElementPtr->hit_points = 3; DoggyElementPtr->mass_points = 4; DoggyElementPtr->thrust_wait = 0; - DoggyElementPtr->state_flags = APPEARING - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + DoggyElementPtr->playerNr = ElementPtr->playerNr; + DoggyElementPtr->state_flags = APPEARING; DoggyElementPtr->life_span = NORMAL_LIFE; SetPrimType (&(GLOBAL (DisplayArray))[DoggyElementPtr->PrimIndex], STAMP_PRIM); @@ -446,8 +442,7 @@ && CrystalPtr->next.image.farray == StarShipPtr->RaceDescPtr->ship_data.weapon && CrystalPtr->preprocess_func && CrystalPtr->life_span > 0 - && (CrystalPtr->state_flags & (GOOD_GUY | BAD_GUY)) == - (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY))) + && elementsOfSamePlayer (CrystalPtr, ShipPtr)) { if (ObjectsOfConcern[ENEMY_SHIP_INDEX].ObjectPtr) { @@ -514,8 +509,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = 0; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = CHENJESU_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/chmmr/chmmr.c =================================================================== --- trunk/sc2/src/uqm/ships/chmmr/chmmr.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/chmmr/chmmr.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -157,9 +157,9 @@ ELEMENT *IonSpotsPtr; LockElement (hIonSpots, &IonSpotsPtr); - IonSpotsPtr->state_flags = - FINITE_LIFE | NONSOLID | IGNORE_SIMILAR | APPEARING - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + IonSpotsPtr->playerNr = ElementPtr->playerNr; + IonSpotsPtr->state_flags = FINITE_LIFE | NONSOLID + | IGNORE_SIMILAR | APPEARING; IonSpotsPtr->turn_wait = IonSpotsPtr->next_turn = 0; IonSpotsPtr->life_span = 9; @@ -223,8 +223,8 @@ + DISPLAY_TO_WORLD (r.corner.y); LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE); LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE); - LaserBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + LaserBlock.sender = ShipPtr->playerNr; + LaserBlock.flags = IGNORE_SIMILAR; LaserBlock.pixoffs = 0; LaserBlock.color = cycle_array[StarShipPtr->special_counter]; LaserArray[0] = initialize_laser (&LaserBlock); @@ -284,8 +284,7 @@ LockElement (GetTailElement (), &MuzzleFlashPtr); if (MuzzleFlashPtr != ElementPtr - && (MuzzleFlashPtr->state_flags & (GOOD_GUY | BAD_GUY)) == - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) + && elementsOfSamePlayer (MuzzleFlashPtr, ElementPtr) && (MuzzleFlashPtr->state_flags & APPEARING) && GetPrimType (&(GLOBAL (DisplayArray))[ MuzzleFlashPtr->PrimIndex @@ -294,9 +293,9 @@ && (hMuzzleFlash = AllocElement ())) { LockElement (hMuzzleFlash, &MuzzleFlashPtr); - MuzzleFlashPtr->state_flags = - FINITE_LIFE | NONSOLID | IGNORE_SIMILAR | APPEARING - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + MuzzleFlashPtr->playerNr = ElementPtr->playerNr; + MuzzleFlashPtr->state_flags = FINITE_LIFE | NONSOLID + | IGNORE_SIMILAR | APPEARING; MuzzleFlashPtr->life_span = 1; MuzzleFlashPtr->current = ElementPtr->next; @@ -407,10 +406,9 @@ ELEMENT *ShadowElementPtr; LockElement (hShadow, &ShadowElementPtr); - - ShadowElementPtr->state_flags = - FINITE_LIFE | NONSOLID | IGNORE_SIMILAR | POST_PROCESS - | (ShipElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + ShadowElementPtr->playerNr = ShipElementPtr->playerNr; + ShadowElementPtr->state_flags = FINITE_LIFE | NONSOLID + | IGNORE_SIMILAR | POST_PROCESS; ShadowElementPtr->life_span = 1; ShadowElementPtr->current = ShipElementPtr->next; @@ -522,8 +520,8 @@ { LockElement (hObject, &ObjectPtr); hNextObject = GetPredElement (ObjectPtr); - if (((ObjectPtr->state_flags | ShipPtr->state_flags) - & (GOOD_GUY | BAD_GUY)) == (GOOD_GUY | BAD_GUY) + if (!elementsOfSamePlayer (ObjectPtr, ShipPtr) + && ObjectPtr->playerNr != NEUTRAL_PLAYER_NUM && CollisionPossible (ObjectPtr, ShipPtr) && !OBJECT_CLOAKED (ObjectPtr)) { @@ -572,9 +570,8 @@ - SattPtr->next.location.x; LaserBlock.ey = ObjectPtr->next.location.y - SattPtr->next.location.y; - LaserBlock.sender = - (SattPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + LaserBlock.sender = SattPtr->playerNr; + LaserBlock.flags = IGNORE_SIMILAR; LaserBlock.pixoffs = 0; LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x00, 0x01, 0x1F), 0x4D); hPointDefense = initialize_laser (&LaserBlock); @@ -618,8 +615,8 @@ PutElement (hDefense); LockElement (hDefense, &DefensePtr); - DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + DefensePtr->playerNr = ElementPtr->playerNr; + DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE; { ELEMENT *SuccPtr; @@ -693,9 +690,9 @@ ELEMENT *SattPtr; LockElement (hSatellite, &SattPtr); - SattPtr->state_flags = - IGNORE_SIMILAR | APPEARING | FINITE_LIFE - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + SattPtr->playerNr = ElementPtr->playerNr; + SattPtr->state_flags = IGNORE_SIMILAR | APPEARING + | FINITE_LIFE; SattPtr->life_span = NORMAL_LIFE + 1; SattPtr->hit_points = 10; SattPtr->mass_points = 10; @@ -747,9 +744,9 @@ STARSHIP *StarShipPtr; LockElement (hSatellite, &SattPtr); - SattPtr->state_flags = - FINITE_LIFE | NONSOLID | IGNORE_SIMILAR | APPEARING - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + SattPtr->playerNr = ElementPtr->playerNr; + SattPtr->state_flags = FINITE_LIFE | NONSOLID | IGNORE_SIMILAR + | APPEARING; SattPtr->life_span = HYPERJUMP_LIFE + 1; SattPtr->death_func = spawn_satellites; Modified: trunk/sc2/src/uqm/ships/druuge/druuge.c =================================================================== --- trunk/sc2/src/uqm/ships/druuge/druuge.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/druuge/druuge.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -164,8 +164,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = MissileBlock.face; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = DRUUGE_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/human/human.c =================================================================== --- trunk/sc2/src/uqm/ships/human/human.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/human/human.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -165,11 +165,10 @@ ELEMENT *DefensePtr; LockElement (hDefense, &DefensePtr); - DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE | - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); - { - DefensePtr->death_func = spawn_point_defense; - } + DefensePtr->playerNr = ElementPtr->playerNr; + DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE; + DefensePtr->death_func = spawn_point_defense; + GetElementStarShip (ElementPtr, &StarShipPtr); SetElementStarShip (DefensePtr, StarShipPtr); UnlockElement (hDefense); @@ -237,8 +236,8 @@ - ShipPtr->next.location.x; LaserBlock.ey = ObjectPtr->next.location.y - ShipPtr->next.location.y; - LaserBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + LaserBlock.sender = ShipPtr->playerNr; + LaserBlock.flags = IGNORE_SIMILAR; LaserBlock.pixoffs = 0; LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x1F), 0x0F); hPointDefense = initialize_laser (&LaserBlock); @@ -276,7 +275,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = ShipPtr->state_flags & (GOOD_GUY | BAD_GUY); + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = 0; MissileBlock.pixoffs = HUMAN_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/ilwrath/ilwrath.c =================================================================== --- trunk/sc2/src/uqm/ships/ilwrath/ilwrath.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/ilwrath/ilwrath.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -190,8 +190,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = 0; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = ILWRATH_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/lastbat/lastbat.c =================================================================== --- trunk/sc2/src/uqm/ships/lastbat/lastbat.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/lastbat/lastbat.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -157,7 +157,7 @@ comet_collision (ELEMENT *ElementPtr0, POINT *pPt0, ELEMENT *ElementPtr1, POINT *pPt1) { - if (ElementPtr1->state_flags & GOOD_GUY) + if (ElementPtr1->playerNr == RPG_PLAYER_NUM) { BYTE old_hits; COUNT old_life; @@ -211,7 +211,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = 0; MissileBlock.index = 24; - MissileBlock.sender = BAD_GUY | IGNORE_SIMILAR; + MissileBlock.sender = ElementPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = 0; MissileBlock.speed = 0; MissileBlock.hit_points = COMET_HITS; @@ -293,7 +294,7 @@ gate_collision (ELEMENT *ElementPtr0, POINT *pPt0, ELEMENT *ElementPtr1, POINT *pPt1) { - if (ElementPtr1->state_flags & GOOD_GUY) + if (ElementPtr1->playerNr == RPG_PLAYER_NUM) { STARSHIP *StarShipPtr; @@ -591,7 +592,7 @@ COUNT angle; STARSHIP *StarShipPtr; - if (ElementPtr1->state_flags & BAD_GUY) + if (ElementPtr1->playerNr == NPC_PLAYER_NUM) { if (ElementPtr0->preprocess_func == ElementPtr1->preprocess_func && !(ElementPtr0->state_flags & DEFY_PHYSICS) @@ -718,7 +719,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = 0; MissileBlock.index = 0; - MissileBlock.sender = BAD_GUY; + MissileBlock.sender = ElementPtr->playerNr; + MissileBlock.flags = 0; MissileBlock.pixoffs = 0; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -789,8 +791,8 @@ GeneratorPtr->hit_points = GENERATOR_HITS; GeneratorPtr->mass_points = MAX_SHIP_MASS * 10; GeneratorPtr->life_span = NORMAL_LIFE; - GeneratorPtr->state_flags = - APPEARING | BAD_GUY | IGNORE_SIMILAR; + GeneratorPtr->playerNr = ElementPtr->playerNr; + GeneratorPtr->state_flags = APPEARING | IGNORE_SIMILAR; SetPrimType ( &GLOBAL (DisplayArray[GeneratorPtr->PrimIndex]), STAMP_PRIM @@ -833,8 +835,8 @@ LockElement (hTurret, &TurretPtr); TurretPtr->hit_points = 1; TurretPtr->life_span = NORMAL_LIFE; - TurretPtr->state_flags = - APPEARING | BAD_GUY | IGNORE_SIMILAR | NONSOLID; + TurretPtr->playerNr = ElementPtr->playerNr; + TurretPtr->state_flags = APPEARING | IGNORE_SIMILAR | NONSOLID; SetPrimType ( &GLOBAL (DisplayArray[TurretPtr->PrimIndex]), STAMP_PRIM @@ -869,8 +871,9 @@ GatePtr->hit_points = GATE_HITS; GatePtr->mass_points = GATE_DAMAGE; GatePtr->life_span = 2; - GatePtr->state_flags = - APPEARING | FINITE_LIFE | BAD_GUY | IGNORE_SIMILAR; + GatePtr->playerNr = ElementPtr->playerNr; + GatePtr->state_flags = APPEARING | FINITE_LIFE + | IGNORE_SIMILAR; SetPrimType ( &GLOBAL (DisplayArray[GatePtr->PrimIndex]), STAMP_PRIM Modified: trunk/sc2/src/uqm/ships/melnorme/melnorme.c =================================================================== --- trunk/sc2/src/uqm/ships/melnorme/melnorme.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/melnorme/melnorme.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -312,8 +312,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = 0; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = MELNORME_OFFSET; MissileBlock.speed = DISPLAY_TO_WORLD (MELNORME_OFFSET); MissileBlock.hit_points = PUMPUP_DAMAGE; @@ -380,9 +380,8 @@ if (hEffect) { LockElement (hEffect, &eptr); - - eptr->state_flags = FINITE_LIFE | NONSOLID | CHANGING - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + eptr->playerNr = ElementPtr->playerNr; + eptr->state_flags = FINITE_LIFE | NONSOLID | CHANGING; eptr->life_span = 1; eptr->current = eptr->next = ElementPtr->next; eptr->preprocess_func = confuse_preprocess; @@ -417,8 +416,7 @@ hConfusionElement; hConfusionElement = hNextElement) { LockElement (hConfusionElement, &ConfusionPtr); - if ((ConfusionPtr->state_flags & (GOOD_GUY | BAD_GUY)) == - (ElementPtr0->state_flags & (GOOD_GUY | BAD_GUY)) + if (elementsOfSamePlayer (ConfusionPtr, ElementPtr0) && ConfusionPtr->current.image.farray == StarShipPtr->RaceDescPtr->ship_data.special && (ConfusionPtr->state_flags & NONSOLID)) @@ -443,8 +441,8 @@ ConfusionPtr->current.image.frame, 8 ); ConfusionPtr->next = ConfusionPtr->current; - ConfusionPtr->state_flags = FINITE_LIFE | NONSOLID | CHANGING - | (ElementPtr0->state_flags & (GOOD_GUY | BAD_GUY)); + ConfusionPtr->playerNr = ElementPtr0->playerNr; + ConfusionPtr->state_flags = FINITE_LIFE | NONSOLID | CHANGING; ConfusionPtr->preprocess_func = confuse_preprocess; SetPrimType ( &(GLOBAL (DisplayArray))[ConfusionPtr->PrimIndex], @@ -488,8 +486,8 @@ ConfusionBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special; ConfusionBlock.index = 0; ConfusionBlock.face = StarShipPtr->ShipFacing; - ConfusionBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + ConfusionBlock.sender = ShipPtr->playerNr; + ConfusionBlock.flags = IGNORE_SIMILAR; ConfusionBlock.pixoffs = MELNORME_OFFSET; ConfusionBlock.speed = CMISSILE_SPEED; ConfusionBlock.hit_points = CMISSILE_HITS; @@ -524,8 +522,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = 0; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = MELNORME_OFFSET; MissileBlock.speed = PUMPUP_SPEED; MissileBlock.hit_points = PUMPUP_DAMAGE; Modified: trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c =================================================================== --- trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -248,8 +248,7 @@ ELEMENT *ElementPtr1, POINT *pPt1) { if (!(ElementPtr1->state_flags & PLAYER_SHIP) - || !(ElementPtr0->state_flags & ElementPtr1->state_flags - & (GOOD_GUY | BAD_GUY))) + || !elementsOfSamePlayer (ElementPtr0, ElementPtr1)) weapon_collision (ElementPtr0, pPt0, ElementPtr1, pPt1); } @@ -275,7 +274,8 @@ LASER_BLOCK LaserBlock; ELEMENT *LaserPtr; - LaserBlock.sender = ShipPtr->state_flags & (GOOD_GUY | BAD_GUY); + LaserBlock.sender = ShipPtr->playerNr; + LaserBlock.flags = 0; LaserBlock.pixoffs = 0; LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x0A, 0x0A), 0x0C); LaserBlock.face = facing; @@ -318,8 +318,8 @@ ELEMENT *TorpPtr; TorpBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; - TorpBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + TorpBlock.sender = ShipPtr->playerNr; + TorpBlock.flags = IGNORE_SIMILAR; TorpBlock.pixoffs = 0; TorpBlock.speed = MISSILE_SPEED; TorpBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/mycon/mycon.c =================================================================== --- trunk/sc2/src/uqm/ships/mycon/mycon.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/mycon/mycon.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -306,7 +306,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = 0; - MissileBlock.sender = ShipPtr->state_flags & (GOOD_GUY | BAD_GUY); + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = 0; MissileBlock.pixoffs = MYCON_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_DAMAGE; Modified: trunk/sc2/src/uqm/ships/orz/orz.c =================================================================== --- trunk/sc2/src/uqm/ships/orz/orz.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/orz/orz.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -116,8 +116,7 @@ howitzer_collision (ELEMENT *ElementPtr0, POINT *pPt0, ELEMENT *ElementPtr1, POINT *pPt1) { - if ((ElementPtr0->state_flags & (GOOD_GUY | BAD_GUY)) - != (ElementPtr1->state_flags & (GOOD_GUY | BAD_GUY))) + if (!elementsOfSamePlayer (ElementPtr0, ElementPtr1)) weapon_collision (ElementPtr0, pPt0, ElementPtr1, pPt1); } @@ -156,8 +155,8 @@ + TurretPtr->thrust_wait); UnlockElement (GetSuccElement (ShipPtr)); - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = TURRET_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -387,8 +386,7 @@ { LockElement (hElement, &ShipPtr); if ((ShipPtr->state_flags & PLAYER_SHIP) - && (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - != (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))) + && !elementsOfSamePlayer (ShipPtr, ElementPtr)) { STAMP s; @@ -542,8 +540,7 @@ && ObjectPtr->crew_level && !OBJECT_CLOAKED (ObjectPtr)) { - if ((ObjectPtr->state_flags & (GOOD_GUY | BAD_GUY)) != - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY))) + if (!elementsOfSamePlayer (ObjectPtr, ElementPtr)) { if (ElementPtr->state_flags & IGNORE_SIMILAR) hTarget = hObject; @@ -588,8 +585,7 @@ COUNT num_frames; VELOCITY_DESC ShipVelocity; - if ((ObjectPtr->state_flags & (GOOD_GUY | BAD_GUY)) == - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) + if (elementsOfSamePlayer (ObjectPtr, ElementPtr) && (ElementPtr->state_flags & IGNORE_SIMILAR)) { ElementPtr->next.image.frame = SetAbsFrameIndex ( @@ -684,6 +680,7 @@ InsertElement (hIonElement, GetHeadElement ()); LockElement (hIonElement, &IonElementPtr); + IonElementPtr->playerNr = NEUTRAL_PLAYER_NUM; IonElementPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID; IonElementPtr->life_span = @@ -731,8 +728,7 @@ && !(ElementPtr0->state_flags & (NONSOLID | COLLISION)) && !(ElementPtr1->state_flags & FINITE_LIFE)) { - if ((ElementPtr0->state_flags & (GOOD_GUY | BAD_GUY)) - != (ElementPtr1->state_flags & (GOOD_GUY | BAD_GUY))) + if (!elementsOfSamePlayer (ElementPtr0, ElementPtr1)) { ElementPtr0->turn_wait = MAKE_BYTE (5, HINIBBLE (ElementPtr0->turn_wait)); @@ -847,10 +843,10 @@ ELEMENT *TurretPtr; LockElement (hTurret, &TurretPtr); - TurretPtr->state_flags = - FINITE_LIFE | NONSOLID | IGNORE_SIMILAR - | CHANGING | PRE_PROCESS | POST_PROCESS - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + TurretPtr->playerNr = ElementPtr->playerNr; + TurretPtr->state_flags = FINITE_LIFE | NONSOLID + | IGNORE_SIMILAR | CHANGING | PRE_PROCESS + | POST_PROCESS; TurretPtr->life_span = 1; TurretPtr->current.image = ElementPtr->current.image; TurretPtr->current.location = ShipPtr->next.location; @@ -886,9 +882,7 @@ LockElement (GetTailElement (), &TurretEffectPtr); if (TurretEffectPtr != ElementPtr - && (TurretEffectPtr->state_flags & - (GOOD_GUY | BAD_GUY)) == - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) + && elementsOfSamePlayer (TurretEffectPtr, ElementPtr) && (TurretEffectPtr->state_flags & APPEARING) && GetPrimType (&(GLOBAL (DisplayArray))[ TurretEffectPtr->PrimIndex @@ -901,10 +895,9 @@ SINE (facing, DISPLAY_TO_WORLD (2)); LockElement (hTurretEffect, &TurretEffectPtr); + TurretEffectPtr->playerNr = ElementPtr->playerNr; TurretEffectPtr->state_flags = FINITE_LIFE - | NONSOLID | IGNORE_SIMILAR | APPEARING - | (ElementPtr->state_flags & - (GOOD_GUY | BAD_GUY)); + | NONSOLID | IGNORE_SIMILAR | APPEARING; TurretEffectPtr->life_span = 4; TurretEffectPtr->current.location.x = @@ -964,9 +957,9 @@ ELEMENT *SpaceMarinePtr; LockElement (hSpaceMarine, &SpaceMarinePtr); - SpaceMarinePtr->state_flags = - IGNORE_SIMILAR | APPEARING | CREW_OBJECT - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + SpaceMarinePtr->playerNr = ElementPtr->playerNr; + SpaceMarinePtr->state_flags = IGNORE_SIMILAR | APPEARING + | CREW_OBJECT; SpaceMarinePtr->life_span = NORMAL_LIFE; SpaceMarinePtr->hit_points = 3; SpaceMarinePtr->mass_points = 1; @@ -1044,9 +1037,8 @@ ELEMENT *TurretPtr; LockElement (hTurret, &TurretPtr); - TurretPtr->state_flags = - FINITE_LIFE | NONSOLID | IGNORE_SIMILAR - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + TurretPtr->playerNr = ElementPtr->playerNr; + TurretPtr->state_flags = FINITE_LIFE | NONSOLID | IGNORE_SIMILAR; TurretPtr->life_span = 1; TurretPtr->current.image.farray = StarShipPtr->RaceDescPtr->ship_data.special; TurretPtr->current.image.frame = Modified: trunk/sc2/src/uqm/ships/pkunk/pkunk.c =================================================================== --- trunk/sc2/src/uqm/ships/pkunk/pkunk.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/pkunk/pkunk.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -141,8 +141,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.index = 0; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = PKUNK_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -224,9 +224,7 @@ } else { - ElementPtr->state_flags = APPEARING | PLAYER_SHIP | IGNORE_SIMILAR - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); - + ElementPtr->state_flags = APPEARING | PLAYER_SHIP | IGNORE_SIMILAR; ElementPtr->mass_points = SHIP_MASS; ElementPtr->preprocess_func = StarShipPtr->RaceDescPtr->preprocess_func; ElementPtr->postprocess_func = StarShipPtr->RaceDescPtr->postprocess_func; @@ -387,6 +385,7 @@ PutElement (hShipImage); LockElement (hShipImage, &ShipImagePtr); + ShipImagePtr->playerNr = NEUTRAL_PLAYER_NUM; ShipImagePtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID; ShipImagePtr->life_span = TRANSITION_LIFE; SetPrimType (&(GLOBAL (DisplayArray))[ShipImagePtr->PrimIndex], @@ -450,9 +449,8 @@ { LockElement (hPhoenix, &PhoenixPtr); - PhoenixPtr->state_flags = - FINITE_LIFE | NONSOLID | IGNORE_SIMILAR - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + PhoenixPtr->playerNr = ElementPtr->playerNr; + PhoenixPtr->state_flags = FINITE_LIFE | NONSOLID | IGNORE_SIMILAR; PhoenixPtr->life_span = 1; PhoenixPtr->death_func = intercept_pkunk_death; Modified: trunk/sc2/src/uqm/ships/shofixti/shofixti.c =================================================================== --- trunk/sc2/src/uqm/ships/shofixti/shofixti.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/shofixti/shofixti.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -125,8 +125,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = SHOFIXTI_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -187,6 +187,7 @@ LockElement (hDestruct, &DestructPtr); SetElementStarShip (DestructPtr, StarShipPtr); DestructPtr->hit_points = DestructPtr->mass_points = 0; + DestructPtr->playerNr = NEUTRAL_PLAYER_NUM; DestructPtr->state_flags = APPEARING | FINITE_LIFE | NONSOLID; DestructPtr->life_span = (NUM_EXPLOSION_FRAMES - 3) - 1; SetPrimType ( @@ -234,8 +235,8 @@ ELEMENT *DestructPtr; LockElement (hDestruct, &DestructPtr); - DestructPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE | - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + DestructPtr->playerNr = ElementPtr->playerNr; + DestructPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE; DestructPtr->next.location = ElementPtr->next.location; DestructPtr->life_span = 0; DestructPtr->pParent = ElementPtr->pParent; Modified: trunk/sc2/src/uqm/ships/sis_ship/sis_ship.c =================================================================== --- trunk/sc2/src/uqm/ships/sis_ship/sis_ship.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/sis_ship/sis_ship.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -314,11 +314,10 @@ ELEMENT *DefensePtr; LockElement (hDefense, &DefensePtr); - DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE | - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); - { - DefensePtr->death_func = spawn_point_defense; - } + DefensePtr->playerNr = ElementPtr->playerNr; + DefensePtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE; + DefensePtr->death_func = spawn_point_defense; + GetElementStarShip (ElementPtr, &StarShipPtr); SetElementStarShip (DefensePtr, StarShipPtr); UnlockElement (hDefense); @@ -403,8 +402,8 @@ - ShipPtr->next.location.x; LaserBlock.ey = ObjectPtr->next.location.y - ShipPtr->next.location.y; - LaserBlock.sender = (ShipPtr->state_flags & - (GOOD_GUY | BAD_GUY)) | IGNORE_SIMILAR; + LaserBlock.sender = ShipPtr->playerNr; + LaserBlock.flags = IGNORE_SIMILAR; LaserBlock.pixoffs = 0; LaserBlock.color = LaserColor; hPointDefense = initialize_laser (&LaserBlock); @@ -571,8 +570,8 @@ lpMB->cx = ShipPtr->next.location.x; lpMB->cy = ShipPtr->next.location.y; lpMB->farray = StarShipPtr->RaceDescPtr->ship_data.weapon; - lpMB->sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + lpMB->sender = ShipPtr->playerNr; + lpMB->flags = IGNORE_SIMILAR; lpMB->blast_offs = BLASTER_OFFSET; lpMB->speed = BLASTER_SPEED; lpMB->preprocess_func = blaster_preprocess; Modified: trunk/sc2/src/uqm/ships/slylandr/slylandr.c =================================================================== --- trunk/sc2/src/uqm/ships/slylandr/slylandr.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/slylandr/slylandr.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -152,8 +152,8 @@ LaserBlock.ex = 0; LaserBlock.ey = 0; - LaserBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + LaserBlock.sender = ElementPtr->playerNr; + LaserBlock.flags = IGNORE_SIMILAR; LaserBlock.face = 0; LaserBlock.pixoffs = 0; LaserArray[0] = initialize_laser (&LaserBlock); @@ -306,9 +306,8 @@ LockElement (hElement, &ObjPtr); hNextElement = GetSuccElement (ObjPtr); - if (!(ObjPtr->state_flags - & (APPEARING | GOOD_GUY | BAD_GUY - | PLAYER_SHIP | FINITE_LIFE)) + if (!(ObjPtr->state_flags & (APPEARING | PLAYER_SHIP | FINITE_LIFE)) + && ObjPtr->playerNr == NEUTRAL_PLAYER_NUM && !GRAVITY_MASS (ObjPtr->mass_points) && CollisionPossible (ObjPtr, ElementPtr)) { Modified: trunk/sc2/src/uqm/ships/spathi/spathi.c =================================================================== --- trunk/sc2/src/uqm/ships/spathi/spathi.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/spathi/spathi.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -154,7 +154,8 @@ ButtMissileBlock.face = ButtMissileBlock.index = NORMALIZE_FACING (StarShipPtr->ShipFacing + ANGLE_TO_FACING (HALF_CIRCLE)); - ButtMissileBlock.sender = ShipPtr->state_flags & (GOOD_GUY | BAD_GUY); + ButtMissileBlock.sender = ShipPtr->playerNr; + ButtMissileBlock.flags = 0; ButtMissileBlock.pixoffs = SPATHI_REAR_OFFSET; ButtMissileBlock.speed = DISCRIMINATOR_SPEED; ButtMissileBlock.hit_points = DISCRIMINATOR_HITS; @@ -248,8 +249,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = SPATHI_FORWARD_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/supox/supox.c =================================================================== --- trunk/sc2/src/uqm/ships/supox/supox.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/supox/supox.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -189,8 +189,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = SUPOX_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/syreen/syreen.c =================================================================== --- trunk/sc2/src/uqm/ships/syreen/syreen.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/syreen/syreen.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -125,8 +125,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = SYREEN_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -153,8 +153,8 @@ LockElement (hCrew, &CrewPtr); CrewPtr->next.location = ElementPtr->next.location; - CrewPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + CrewPtr->playerNr = ElementPtr->playerNr; + CrewPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE; CrewPtr->life_span = 0; CrewPtr->death_func = spawn_crew; CrewPtr->pParent = ElementPtr->pParent; @@ -177,8 +177,7 @@ hNextElement = GetSuccElement (ObjPtr); if ((ObjPtr->state_flags & PLAYER_SHIP) - && (ObjPtr->state_flags & (GOOD_GUY | BAD_GUY)) != - (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) + && !elementsOfSamePlayer (ObjPtr, ElementPtr) && ObjPtr->crew_level > 1) { SIZE dx, dy; Modified: trunk/sc2/src/uqm/ships/thradd/thradd.c =================================================================== --- trunk/sc2/src/uqm/ships/thradd/thradd.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/thradd/thradd.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -254,8 +254,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = THRADDASH_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -328,8 +328,8 @@ MissileBlock.index = GetFrameCount ( StarShipPtr->RaceDescPtr->ship_data.special[0] ) - 1; - MissileBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ElementPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = 0; MissileBlock.speed = 0; MissileBlock.hit_points = NAPALM_HITS; Modified: trunk/sc2/src/uqm/ships/umgah/umgah.c =================================================================== --- trunk/sc2/src/uqm/ships/umgah/umgah.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/umgah/umgah.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -274,8 +274,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special; MissileBlock.face = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = UMGAH_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; Modified: trunk/sc2/src/uqm/ships/urquan/urquan.c =================================================================== --- trunk/sc2/src/uqm/ships/urquan/urquan.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/urquan/urquan.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -126,8 +126,8 @@ MissileBlock.cy = ShipPtr->next.location.y; MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = URQUAN_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -162,8 +162,8 @@ LaserBlock.face = ElementPtr->thrust_wait; LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE); LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE); - LaserBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + LaserBlock.sender = ElementPtr->playerNr; + LaserBlock.flags = IGNORE_SIMILAR; LaserBlock.pixoffs = FIGHTER_OFFSET; LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x1F, 0x0A), 0x0E); Laser = initialize_laser (&LaserBlock); @@ -415,9 +415,9 @@ FighterElementPtr->hit_points = 1; FighterElementPtr->mass_points = 0; FighterElementPtr->thrust_wait = TRACK_THRESHOLD + 1; - FighterElementPtr->state_flags = APPEARING - | FINITE_LIFE | CREW_OBJECT | IGNORE_SIMILAR - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + FighterElementPtr->playerNr = ElementPtr->playerNr; + FighterElementPtr->state_flags = APPEARING | FINITE_LIFE + | CREW_OBJECT | IGNORE_SIMILAR; FighterElementPtr->life_span = FIGHTER_LIFE; SetPrimType (&(GLOBAL (DisplayArray))[FighterElementPtr->PrimIndex], STAMP_PRIM); Modified: trunk/sc2/src/uqm/ships/utwig/utwig.c =================================================================== --- trunk/sc2/src/uqm/ships/utwig/utwig.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/utwig/utwig.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -130,8 +130,8 @@ GetElementStarShip (ShipPtr, &StarShipPtr); MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; MissileBlock.damage = MISSILE_DAMAGE; Modified: trunk/sc2/src/uqm/ships/vux/vux.c =================================================================== --- trunk/sc2/src/uqm/ships/vux/vux.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/vux/vux.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -203,8 +203,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special; MissileBlock.face = StarShipPtr->ShipFacing + HALF_CIRCLE; MissileBlock.index = 0; - MissileBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ElementPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = LIMPET_OFFSET; MissileBlock.speed = LIMPET_SPEED; MissileBlock.hit_points = LIMPET_HITS; @@ -241,8 +241,8 @@ LaserBlock.cy = ShipPtr->next.location.y; LaserBlock.ex = COSINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE); LaserBlock.ey = SINE (FACING_TO_ANGLE (LaserBlock.face), LASER_RANGE); - LaserBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + LaserBlock.sender = ShipPtr->playerNr; + LaserBlock.flags = IGNORE_SIMILAR; LaserBlock.pixoffs = VUX_OFFSET; LaserBlock.color = BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x0A), 0x0A); LaserArray[0] = initialize_laser (&LaserBlock); Modified: trunk/sc2/src/uqm/ships/yehat/yehat.c =================================================================== --- trunk/sc2/src/uqm/ships/yehat/yehat.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/yehat/yehat.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -124,8 +124,8 @@ GetElementStarShip (ShipPtr, &StarShipPtr); MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = MissileBlock.index = StarShipPtr->ShipFacing; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = YEHAT_OFFSET; MissileBlock.speed = MISSILE_SPEED; MissileBlock.hit_points = MISSILE_HITS; @@ -265,12 +265,11 @@ InsertElement (hShipElement, GetSuccElement (ElementPtr)); LockElement (hShipElement, &ShipElementPtr); - + ShipElementPtr->playerNr = ElementPtr->playerNr; ShipElementPtr->state_flags = /* in place of APPEARING */ (CHANGING | PRE_PROCESS | POST_PROCESS) - | FINITE_LIFE | NONSOLID - | (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)); + | FINITE_LIFE | NONSOLID; SetPrimType ( &(GLOBAL (DisplayArray))[ShipElementPtr->PrimIndex], STAMP_PRIM Modified: trunk/sc2/src/uqm/ships/zoqfot/zoqfot.c =================================================================== --- trunk/sc2/src/uqm/ships/zoqfot/zoqfot.c 2009-11-02 08:04:51 UTC (rev 3272) +++ trunk/sc2/src/uqm/ships/zoqfot/zoqfot.c 2009-11-04 21:42:39 UTC (rev 3273) @@ -154,8 +154,8 @@ MissileBlock.farray = StarShipPtr->RaceDescPtr->ship_data.weapon; MissileBlock.face = StarShipPtr->ShipFacing; MissileBlock.index = 0; - MissileBlock.sender = (ShipPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + MissileBlock.sender = ShipPtr->playerNr; + MissileBlock.flags = IGNORE_SIMILAR; MissileBlock.pixoffs = ZOQFOTPIK_OFFSET; MissileBlock.speed = DISPLAY_TO_WORLD ( GetFrameCount (StarShipPtr->RaceDescPtr->ship_data.weapon[0])) << 1; @@ -210,8 +210,8 @@ TongueBlock.cy = ElementPtr->next.location.y; TongueBlock.farray = StarShipPtr->RaceDescPtr->ship_data.special; TongueBlock.face = TongueBlock.index = StarShipPtr->ShipFacing; - TongueBlock.sender = (ElementPtr->state_flags & (GOOD_GUY | BAD_GUY)) - | IGNORE_SIMILAR; + TongueBlock.sender = ElementPtr->pl... [truncated message content] |
From: <av...@us...> - 2009-11-04 23:51:35
|
Revision: 3274 http://sc2.svn.sourceforge.net/sc2/?rev=3274&view=rev Author: avolkov Date: 2009-11-04 23:51:26 +0000 (Wed, 04 Nov 2009) Log Message: ----------- Battle & ship code cleanup: GOOD_GUY/BAD_GUY flags removed from Hyperspace; some comments Modified Paths: -------------- trunk/sc2/src/uqm/comm.c trunk/sc2/src/uqm/hyper.c Modified: trunk/sc2/src/uqm/comm.c =================================================================== --- trunk/sc2/src/uqm/comm.c 2009-11-04 21:42:39 UTC (rev 3273) +++ trunk/sc2/src/uqm/comm.c 2009-11-04 23:51:26 UTC (rev 3274) @@ -1575,14 +1575,14 @@ COUNT NumShips; ENCOUNTER *EncounterPtr; + // The encounter globe that the flagship collided with is moved + // to the head of the queue in hyper.c:cleanup_hyperspace() hEncounter = GetHeadEncounter (); LockEncounter (hEncounter, &EncounterPtr); NumShips = LONIBBLE (EncounterPtr->SD.Index); for (i = 0; i < NumShips; ++i) { - // XXX: Bug 996 lives here: crew is set to default (0) - // None of ship info is actually used! CloneShipFragment (EncounterPtr->SD.Type, &GLOBAL (npc_built_ship_q), EncounterPtr->ShipList[i].crew_level); Modified: trunk/sc2/src/uqm/hyper.c =================================================================== --- trunk/sc2/src/uqm/hyper.c 2009-11-04 21:42:39 UTC (rev 3273) +++ trunk/sc2/src/uqm/hyper.c 2009-11-04 23:51:26 UTC (rev 3274) @@ -404,8 +404,10 @@ LockElement (EncounterPtr->hElement, &ElementPtr); - if (ElementPtr->state_flags & BAD_GUY) - { + if (ElementPtr->hTarget) + { // This is the encounter that collided with flagship + // Move the encounter to the head of the queue so that + // comm.c:RaceCommunication() gets the right one. RemoveEncounter (hEncounter); InsertEncounter (hEncounter, GetHeadEncounter ()); } @@ -861,6 +863,24 @@ } } +static HELEMENT +getSisElement (void) +{ + HSTARSHIP hSis; + HELEMENT hShip; + STARSHIP *StarShipPtr; + + hSis = GetHeadLink (&race_q[RPG_PLAYER_NUM]); + if (!hSis) + return NULL; + + StarShipPtr = LockStarShip (&race_q[RPG_PLAYER_NUM], hSis); + hShip = StarShipPtr->hShip; + UnlockStarShip (&race_q[RPG_PLAYER_NUM], hSis); + + return hShip; +} + static void encounter_collision (ELEMENT *ElementPtr0, POINT *pPt0, ELEMENT *ElementPtr1, POINT *pPt1) @@ -893,7 +913,10 @@ UnlockEncounter (hEncounter); } - ElementPtr0->state_flags |= BAD_GUY; + // Mark this element as collided with flagship + // XXX: We could simply set hTarget to 1 or to ElementPtr1, + // but that would be too hacky ;) + ElementPtr0->hTarget = getSisElement (); ZeroVelocityComponents (&ElementPtr0->velocity); } (void) pPt0; /* Satisfying compiler (unused parameter) */ @@ -1162,8 +1185,9 @@ &delta_x, &delta_y, 1); if (ElementPtr->thrust_wait) --ElementPtr->thrust_wait; - else if (!(ElementPtr->state_flags & BAD_GUY)) - { + else if (!ElementPtr->hTarget) + { // This is an encounter that did not collide with flagship + // The colliding encounter does not move COUNT cur_facing, delta_facing; cur_facing = ANGLE_TO_FACING ( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-05 04:10:02
|
Revision: 3277 http://sc2.svn.sourceforge.net/sc2/?rev=3277&view=rev Author: avolkov Date: 2009-11-05 04:09:55 +0000 (Thu, 05 Nov 2009) Log Message: ----------- Fixes Pkunk crash bug due to a static variable; also moves the static data to owning STARSHIP Modified Paths: -------------- trunk/sc2/src/uqm/races.h trunk/sc2/src/uqm/ships/pkunk/pkunk.c Modified: trunk/sc2/src/uqm/races.h =================================================================== --- trunk/sc2/src/uqm/races.h 2009-11-05 04:02:50 UTC (rev 3276) +++ trunk/sc2/src/uqm/races.h 2009-11-05 04:09:55 UTC (rev 3277) @@ -19,6 +19,7 @@ #ifndef _RACES_H #define _RACES_H +#include "types.h" #include "libs/compiler.h" #include "units.h" #include "displist.h" @@ -275,6 +276,8 @@ // -1: neutral; this should currently never happen (asserts) BYTE control; // HUMAN, COMPUTER or NETWORK control flags, see intel.h + + intptr_t data; // private ship data, ship code owns this }; #define RPG_PLAYER_NUM 0 Modified: trunk/sc2/src/uqm/ships/pkunk/pkunk.c =================================================================== --- trunk/sc2/src/uqm/ships/pkunk/pkunk.c 2009-11-05 04:02:50 UTC (rev 3276) +++ trunk/sc2/src/uqm/ships/pkunk/pkunk.c 2009-11-05 04:09:55 UTC (rev 3277) @@ -179,20 +179,20 @@ return (3); } -static HELEMENT hPhoenix = 0; - static void pkunk_intelligence (ELEMENT *ShipPtr, EVALUATE_DESC *ObjectsOfConcern, COUNT ConcernCounter) { STARSHIP *StarShipPtr; + HELEMENT hPhoenix; GetElementStarShip (ShipPtr, &StarShipPtr); - if (hPhoenix && StarShipPtr->special_counter) + hPhoenix = (HELEMENT) StarShipPtr->data; + if (hPhoenix && (StarShipPtr->control & STANDARD_RATING)) { RemoveElement (hPhoenix); FreeElement (hPhoenix); - hPhoenix = 0; + StarShipPtr->data = 0; } if (StarShipPtr->RaceDescPtr->ship_info.energy_level < @@ -442,11 +442,14 @@ GetElementStarShip (ElementPtr, &StarShipPtr); if (ElementPtr->state_flags & APPEARING) { - ELEMENT *PhoenixPtr; + HELEMENT hPhoenix = 0; - if (((BYTE)TFB_Random () & 1) - && (hPhoenix = AllocElement ())) + if ((BYTE)TFB_Random () & 1) + hPhoenix = AllocElement (); + + if (hPhoenix) { + ELEMENT *PhoenixPtr; LockElement (hPhoenix, &PhoenixPtr); PhoenixPtr->playerNr = ElementPtr->playerNr; @@ -460,6 +463,7 @@ UnlockElement (hPhoenix); InsertElement (hPhoenix, GetHeadElement ()); } + StarShipPtr->data = (intptr_t) hPhoenix; if (ElementPtr->hTarget == 0) StarShipPtr->RaceDescPtr->preprocess_func = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-05 06:12:41
|
Revision: 3278 http://sc2.svn.sourceforge.net/sc2/?rev=3278&view=rev Author: avolkov Date: 2009-11-05 06:12:33 +0000 (Thu, 05 Nov 2009) Log Message: ----------- Moved static ship variables to per-instance RACE_DESC Modified Paths: -------------- trunk/sc2/src/uqm/races.h trunk/sc2/src/uqm/ships/androsyn/androsyn.c trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c trunk/sc2/src/uqm/ships/pkunk/pkunk.c trunk/sc2/src/uqm/ships/umgah/umgah.c Modified: trunk/sc2/src/uqm/races.h =================================================================== --- trunk/sc2/src/uqm/races.h 2009-11-05 04:09:55 UTC (rev 3277) +++ trunk/sc2/src/uqm/races.h 2009-11-05 06:12:33 UTC (rev 3278) @@ -217,6 +217,8 @@ POSTPROCESS_FUNC *postprocess_func; INIT_WEAPON_FUNC *init_weapon_func; + intptr_t data; // private ship data, ship code owns this + void *CodeRef; }; @@ -276,8 +278,6 @@ // -1: neutral; this should currently never happen (asserts) BYTE control; // HUMAN, COMPUTER or NETWORK control flags, see intel.h - - intptr_t data; // private ship data, ship code owns this }; #define RPG_PLAYER_NUM 0 Modified: trunk/sc2/src/uqm/ships/androsyn/androsyn.c =================================================================== --- trunk/sc2/src/uqm/ships/androsyn/androsyn.c 2009-11-05 04:09:55 UTC (rev 3277) +++ trunk/sc2/src/uqm/ships/androsyn/androsyn.c 2009-11-05 06:12:33 UTC (rev 3278) @@ -20,8 +20,6 @@ #include "resinst.h" #include "libs/mathlib.h" -#include "uqm/init.h" - // for NUM_PLAYERS #define MAX_CREW 20 @@ -324,8 +322,6 @@ } } -static CollisionFunc *ship_collision_func[NUM_PLAYERS]; - #define BLAZER_TURN_WAIT 1 static void @@ -357,8 +353,10 @@ ElementPtr->mass_points = BLAZER_MASS; StarShipPtr->RaceDescPtr->characteristics.turn_wait = BLAZER_TURN_WAIT; - ship_collision_func[StarShipPtr->playerNr] - = ElementPtr->collision_func; + /* Save the current collision func because we were not the + * ones who set it */ + StarShipPtr->RaceDescPtr->data = (intptr_t) + ElementPtr->collision_func; ElementPtr->collision_func = blazer_collision; } } @@ -426,7 +424,8 @@ StarShipPtr->RaceDescPtr->characteristics.special_wait; StarShipPtr->RaceDescPtr->characteristics.energy_regeneration = ENERGY_REGENERATION; ElementPtr->mass_points = SHIP_MASS; - ElementPtr->collision_func = ship_collision_func[StarShipPtr->playerNr]; + ElementPtr->collision_func = (CollisionFunc *) + StarShipPtr->RaceDescPtr->data; ElementPtr->next.image.farray = StarShipPtr->RaceDescPtr->ship_data.ship; ElementPtr->next.image.frame = Modified: trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c =================================================================== --- trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c 2009-11-05 04:09:55 UTC (rev 3277) +++ trunk/sc2/src/uqm/ships/mmrnmhrm/mmrnmhrm.c 2009-11-05 06:12:33 UTC (rev 3278) @@ -19,10 +19,7 @@ #include "../ship.h" #include "resinst.h" -#include "uqm/init.h" - // for NUM_PLAYERS - #define MAX_CREW 20 #define MAX_ENERGY 10 #define ENERGY_REGENERATION 2 @@ -51,7 +48,6 @@ #define MMRNMHRM_OFFSET 16 #define LASER_RANGE DISPLAY_TO_WORLD (125 + MMRNMHRM_OFFSET) -static CHARACTERISTIC_STUFF otherwing_desc[NUM_PLAYERS]; static RACE_DESC mmrnmhrm_desc = { @@ -366,6 +362,7 @@ if (ElementPtr->next.image.farray != ElementPtr->current.image.farray) { CHARACTERISTIC_STUFF t; + CHARACTERISTIC_STUFF *otherwing_desc; ProcessSound (SetAbsSoundIndex ( /* TRANSFORM */ @@ -373,8 +370,11 @@ StarShipPtr->weapon_counter = 0; - t = otherwing_desc[StarShipPtr->playerNr]; - otherwing_desc[StarShipPtr->playerNr] = StarShipPtr->RaceDescPtr->characteristics; + /* Swap characteristics descriptors around */ + otherwing_desc = (CHARACTERISTIC_STUFF *) + StarShipPtr->RaceDescPtr->data; + t = *otherwing_desc; + *otherwing_desc = StarShipPtr->RaceDescPtr->characteristics; StarShipPtr->RaceDescPtr->characteristics = t; StarShipPtr->RaceDescPtr->cyborg_control.ManeuverabilityIndex = 0; @@ -412,24 +412,8 @@ GetElementStarShip (ElementPtr, &StarShipPtr); - if (ElementPtr->state_flags & APPEARING) + if (!(ElementPtr->state_flags & APPEARING)) { - // Set here because playerNr is unknown during init() - COUNT i = StarShipPtr->playerNr; - otherwing_desc[i].max_thrust = YWING_MAX_THRUST; - otherwing_desc[i].thrust_increment = YWING_THRUST_INCREMENT; - otherwing_desc[i].energy_regeneration = YWING_ENERGY_REGENERATION; - otherwing_desc[i].weapon_energy_cost = YWING_WEAPON_ENERGY_COST; - otherwing_desc[i].special_energy_cost = YWING_SPECIAL_ENERGY_COST; - otherwing_desc[i].energy_wait = YWING_ENERGY_WAIT; - otherwing_desc[i].turn_wait = YWING_TURN_WAIT; - otherwing_desc[i].thrust_wait = YWING_THRUST_WAIT; - otherwing_desc[i].weapon_wait = YWING_WEAPON_WAIT; - otherwing_desc[i].special_wait = YWING_SPECIAL_WAIT; - otherwing_desc[i].ship_mass = SHIP_MASS; - } - else - { if ((StarShipPtr->cur_status_flags & SPECIAL) && StarShipPtr->special_counter == 0) { @@ -455,18 +439,46 @@ } } +static void +uninit_mmrnmhrm (RACE_DESC *pRaceDesc) +{ + HFree ((void *)pRaceDesc->data); + pRaceDesc->data = 0; +} + RACE_DESC* init_mmrnmhrm (void) { RACE_DESC *RaceDescPtr; + static RACE_DESC new_mmrnmhrm_desc; + CHARACTERISTIC_STUFF *otherwing_desc; + + mmrnmhrm_desc.uninit_func = uninit_mmrnmhrm; mmrnmhrm_desc.preprocess_func = mmrnmhrm_preprocess; mmrnmhrm_desc.postprocess_func = mmrnmhrm_postprocess; mmrnmhrm_desc.init_weapon_func = initialize_dual_weapons; mmrnmhrm_desc.cyborg_control.intelligence_func = mmrnmhrm_intelligence; - RaceDescPtr = &mmrnmhrm_desc; + new_mmrnmhrm_desc = mmrnmhrm_desc; + otherwing_desc = HMalloc (sizeof (*otherwing_desc)); + otherwing_desc->max_thrust = YWING_MAX_THRUST; + otherwing_desc->thrust_increment = YWING_THRUST_INCREMENT; + otherwing_desc->energy_regeneration = YWING_ENERGY_REGENERATION; + otherwing_desc->weapon_energy_cost = YWING_WEAPON_ENERGY_COST; + otherwing_desc->special_energy_cost = YWING_SPECIAL_ENERGY_COST; + otherwing_desc->energy_wait = YWING_ENERGY_WAIT; + otherwing_desc->turn_wait = YWING_TURN_WAIT; + otherwing_desc->thrust_wait = YWING_THRUST_WAIT; + otherwing_desc->weapon_wait = YWING_WEAPON_WAIT; + otherwing_desc->special_wait = YWING_SPECIAL_WAIT; + otherwing_desc->ship_mass = SHIP_MASS; + + new_mmrnmhrm_desc.data = (intptr_t) otherwing_desc; + + RaceDescPtr = &new_mmrnmhrm_desc; + return (RaceDescPtr); } Modified: trunk/sc2/src/uqm/ships/pkunk/pkunk.c =================================================================== --- trunk/sc2/src/uqm/ships/pkunk/pkunk.c 2009-11-05 04:09:55 UTC (rev 3277) +++ trunk/sc2/src/uqm/ships/pkunk/pkunk.c 2009-11-05 06:12:33 UTC (rev 3278) @@ -187,12 +187,12 @@ HELEMENT hPhoenix; GetElementStarShip (ShipPtr, &StarShipPtr); - hPhoenix = (HELEMENT) StarShipPtr->data; + hPhoenix = (HELEMENT) StarShipPtr->RaceDescPtr->data; if (hPhoenix && (StarShipPtr->control & STANDARD_RATING)) { RemoveElement (hPhoenix); FreeElement (hPhoenix); - StarShipPtr->data = 0; + StarShipPtr->RaceDescPtr->data = 0; } if (StarShipPtr->RaceDescPtr->ship_info.energy_level < @@ -463,7 +463,7 @@ UnlockElement (hPhoenix); InsertElement (hPhoenix, GetHeadElement ()); } - StarShipPtr->data = (intptr_t) hPhoenix; + StarShipPtr->RaceDescPtr->data = (intptr_t) hPhoenix; if (ElementPtr->hTarget == 0) StarShipPtr->RaceDescPtr->preprocess_func = 0; Modified: trunk/sc2/src/uqm/ships/umgah/umgah.c =================================================================== --- trunk/sc2/src/uqm/ships/umgah/umgah.c 2009-11-05 04:09:55 UTC (rev 3277) +++ trunk/sc2/src/uqm/ships/umgah/umgah.c 2009-11-05 06:12:33 UTC (rev 3278) @@ -20,8 +20,6 @@ #include "resinst.h" #include "libs/mathlib.h" -#include "uqm/init.h" - // for NUM_PLAYERS #define MAX_CREW 10 @@ -39,7 +37,6 @@ #define SHIP_MASS 1 -static FRAME LastShipFrame[NUM_PLAYERS]; static RACE_DESC umgah_desc = { @@ -286,9 +283,9 @@ // This func is called every frame while the player is holding down WEAPON // Don't reset the cone FRAME to the first image every time - if (ShipPtr->next.image.frame != LastShipFrame[StarShipPtr->playerNr]) + if (ShipPtr->next.image.frame != (FRAME) StarShipPtr->RaceDescPtr->data) { - LastShipFrame[StarShipPtr->playerNr] = ShipPtr->next.image.frame; + StarShipPtr->RaceDescPtr->data = (intptr_t) ShipPtr->next.image.frame; StarShipPtr->RaceDescPtr->ship_data.special[0] = SetAbsFrameIndex ( @@ -341,9 +338,8 @@ if (ElementPtr->state_flags & APPEARING) { - // Reset prevously set value, if any. It could only have been - // set by another ship of the same player, though. - LastShipFrame[StarShipPtr->playerNr] = 0; + // Reset the value just in case + StarShipPtr->RaceDescPtr->data = 0; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-07 01:05:21
|
Revision: 3285 http://sc2.svn.sourceforge.net/sc2/?rev=3285&view=rev Author: avolkov Date: 2009-11-07 01:05:08 +0000 (Sat, 07 Nov 2009) Log Message: ----------- Added Battle frame callback; Moved blinking AUTO-PILOT message out of the game clock task Modified Paths: -------------- trunk/sc2/src/uqm/battle.c trunk/sc2/src/uqm/battle.h trunk/sc2/src/uqm/clock.c trunk/sc2/src/uqm/encount.c trunk/sc2/src/uqm/melee.c trunk/sc2/src/uqm/planets/solarsys.c trunk/sc2/src/uqm/sis.c trunk/sc2/src/uqm/sis.h trunk/sc2/src/uqm/starcon.c Modified: trunk/sc2/src/uqm/battle.c =================================================================== --- trunk/sc2/src/uqm/battle.c 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/battle.c 2009-11-07 01:05:08 UTC (rev 3285) @@ -331,6 +331,10 @@ return FALSE; } + // Call the callback function, if set + if (bs->frame_cb) + bs->frame_cb (); + battle_speed = HIBYTE (nth_frame); if (battle_speed == (BYTE)~0) { // maximum speed, nothing rendered at all @@ -393,7 +397,7 @@ } BOOLEAN -Battle (void) +Battle (BattleFrameCallback *callback) { SIZE num_ships; @@ -463,6 +467,7 @@ } #endif /* NETPLAY */ bs.InputFunc = DoBattle; + bs.frame_cb = callback; bs.first_time = (BOOLEAN)(LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE); Modified: trunk/sc2/src/uqm/battle.h =================================================================== --- trunk/sc2/src/uqm/battle.h 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/battle.h 2009-11-07 01:05:08 UTC (rev 3285) @@ -26,11 +26,16 @@ #include "init.h" // For NUM_SIDES +// The callback function is called on every battle frame +// with GraphicsLock *not* held +typedef void (BattleFrameCallback) (void); + typedef struct battlestate_struct { BOOLEAN (*InputFunc) (struct battlestate_struct *pInputState); COUNT MenuRepeatDelay; BOOLEAN first_time; DWORD NextTime; + BattleFrameCallback *frame_cb; } BATTLE_STATE; extern BYTE battle_counter[NUM_SIDES]; @@ -45,7 +50,7 @@ # define GetPlayerOrder(i) (i) #endif -BOOLEAN Battle (void); +BOOLEAN Battle (BattleFrameCallback *); #define BATTLE_FRAME_RATE (ONE_SECOND / 24) Modified: trunk/sc2/src/uqm/clock.c =================================================================== --- trunk/sc2/src/uqm/clock.c 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/clock.c 2009-11-07 01:05:08 UTC (rev 3285) @@ -61,32 +61,13 @@ static int clock_task_func(void* data) { - BOOLEAN LastPilot; - DWORD LastTime; - DWORD cycle_index, delay_count; - static const COLOR cycle_tab[] = - { - BUILD_COLOR (MAKE_RGB15 (0x0A, 0x14, 0x18), 0x5B), - BUILD_COLOR (MAKE_RGB15 (0x06, 0x10, 0x16), 0x5C), - BUILD_COLOR (MAKE_RGB15 (0x03, 0x0E, 0x14), 0x5D), - BUILD_COLOR (MAKE_RGB15 (0x02, 0x0C, 0x11), 0x5E), - BUILD_COLOR (MAKE_RGB15 (0x01, 0x0B, 0x0F), 0x5F), - BUILD_COLOR (MAKE_RGB15 (0x01, 0x09, 0x0D), 0x60), - BUILD_COLOR (MAKE_RGB15 (0x00, 0x07, 0x0B), 0x61), - }; -#define NUM_CYCLES (sizeof (cycle_tab) / sizeof (cycle_tab[0])) -#define NUM_DELAYS (ONE_SECOND * 3 / 40) // 9 @ 120 ticks/second Task task = (Task) data; - LastPilot = FALSE; - LastTime = 0; - cycle_index = delay_count = 0; while (GLOBAL (GameClock).day_in_ticks == 0 && !Task_ReadState (task, TASK_EXIT)) TaskSwitch (); while (!Task_ReadState (task, TASK_EXIT)) { - BOOLEAN OnAutoPilot; DWORD TimeIn; /* use semaphore so that time passage @@ -140,53 +121,6 @@ UnlockMutex (GraphicsLock); } - OnAutoPilot = (BOOLEAN)( - (GLOBAL (autopilot.x) != ~0 - && GLOBAL (autopilot.y) != ~0) - || GLOBAL_SIS (FuelOnBoard) == 0 - ); - if (OnAutoPilot || OnAutoPilot != LastPilot) - { - DWORD num_ticks; - - LockMutex (GraphicsLock); - num_ticks = GetTimeCounter () - LastTime; - if (!OnAutoPilot) - { - DrawSISMessage (NULL); - cycle_index = delay_count = 0; - } - else if (delay_count > num_ticks) - { - delay_count -= num_ticks; - } - else - { - if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT)) - && GLOBAL_SIS (CrewEnlisted) != (COUNT)~0) - { - // 2002/11/30 this additional 'if' fixes autopilot indicator blinking on combat/starmap - // TODO: is there a better (more exact) way of determining if player is in starmap menu or not? - if (LOBYTE (GLOBAL (CurrentActivity)) != IN_ENCOUNTER && - (!pMenuState || (pMenuState && pMenuState->InputFunc == DoFlagshipCommands))) - { - CONTEXT OldContext; - - OldContext = SetContext (OffScreenContext); - SetContextForeGroundColor (cycle_tab[cycle_index]); - DrawSISMessage ((UNICODE *)~0L); - SetContext (OldContext); - } - } - - cycle_index = (cycle_index + 1) % NUM_CYCLES; - delay_count = NUM_DELAYS; - } - UnlockMutex (GraphicsLock); - - LastPilot = OnAutoPilot; - LastTime += num_ticks; - } ClearSemaphore (GLOBAL (GameClock.clock_sem)); SleepThreadUntil (TimeIn + ONE_SECOND / 120); Modified: trunk/sc2/src/uqm/encount.c =================================================================== --- trunk/sc2/src/uqm/encount.c 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/encount.c 2009-11-07 01:05:08 UTC (rev 3285) @@ -767,7 +767,7 @@ GameSounds = CaptureSound (LoadSound (GAME_SOUNDS)); UnlockMutex (GraphicsLock); - Battle (); + Battle (NULL); LockMutex (GraphicsLock); DestroySound (ReleaseSound (GameSounds)); Modified: trunk/sc2/src/uqm/melee.c =================================================================== --- trunk/sc2/src/uqm/melee.c 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/melee.c 2009-11-07 01:05:08 UTC (rev 3285) @@ -1730,7 +1730,7 @@ load_gravity_well ((BYTE)((COUNT)TFB_Random () % NUMBER_OF_PLANET_TYPES)); - Battle (); + Battle (NULL); free_gravity_well (); ClearPlayerInputAll (); Modified: trunk/sc2/src/uqm/planets/solarsys.c =================================================================== --- trunk/sc2/src/uqm/planets/solarsys.c 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/planets/solarsys.c 2009-11-07 01:05:08 UTC (rev 3285) @@ -1089,6 +1089,8 @@ void IP_reset (void) { + DrawAutoPilotMessage (TRUE); + if (LastActivity != CHECK_LOAD) { IP_input_state = 0; @@ -1222,6 +1224,8 @@ UnbatchGraphics (); } + DrawAutoPilotMessage (FALSE); + UnbatchGraphics (); if (draw_sys_flags & UNBATCH_SYS) Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/sis.c 2009-11-07 01:05:08 UTC (rev 3285) @@ -185,53 +185,38 @@ SetContextBackGroundColor ( BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x14), 0x01)); - if (pStr == (UNICODE *)~0L) + if (pStr == 0) { - if (GLOBAL_SIS (FuelOnBoard) == 0) + switch (LOBYTE (GLOBAL (CurrentActivity))) { - pStr = GAME_STRING (NAVIGATION_STRING_BASE + 2); - // "OUT OF FUEL" + default: + case IN_ENCOUNTER: + pStr = ""; + break; + case IN_LAST_BATTLE: + case IN_INTERPLANETARY: + GetClusterName (CurStarDescPtr, buf); + pStr = buf; + break; + case IN_HYPERSPACE: + if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) + { + pStr = GAME_STRING (NAVIGATION_STRING_BASE); + // "HyperSpace" + } + else + { + pStr = GAME_STRING (NAVIGATION_STRING_BASE + 1); + // "QuasiSpace" + } + break; } - else - { - pStr = GAME_STRING (NAVIGATION_STRING_BASE + 3); - // "AUTO-PILOT" - } + } - else - { - if (pStr == 0) - { - switch (LOBYTE (GLOBAL (CurrentActivity))) - { - default: - case IN_ENCOUNTER: - pStr = ""; - break; - case IN_LAST_BATTLE: - case IN_INTERPLANETARY: - GetClusterName (CurStarDescPtr, buf); - pStr = buf; - break; - case IN_HYPERSPACE: - if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) - { - pStr = GAME_STRING (NAVIGATION_STRING_BASE); - // "HyperSpace" - } - else - { - pStr = GAME_STRING (NAVIGATION_STRING_BASE + 1); - // "QuasiSpace" - } - break; - } - } - + if (!(flags & DSME_MYCOLOR)) SetContextForeGroundColor ( BUILD_COLOR (MAKE_RGB15 (0x1B, 0x00, 0x1B), 0x33)); - } t.baseline.y = SIS_MESSAGE_HEIGHT - 2; t.pStr = pStr; @@ -1299,6 +1284,75 @@ return (num_pieces); } +void +DrawAutoPilotMessage (BOOLEAN Reset) +{ + static BOOLEAN LastPilot = FALSE; + static TimeCount NextTime = 0; + static DWORD cycle_index = 0; + BOOLEAN OnAutoPilot; + + static const COLOR cycle_tab[] = + { + BUILD_COLOR (MAKE_RGB15 (0x0A, 0x14, 0x18), 0x5B), + BUILD_COLOR (MAKE_RGB15 (0x06, 0x10, 0x16), 0x5C), + BUILD_COLOR (MAKE_RGB15 (0x03, 0x0E, 0x14), 0x5D), + BUILD_COLOR (MAKE_RGB15 (0x02, 0x0C, 0x11), 0x5E), + BUILD_COLOR (MAKE_RGB15 (0x01, 0x0B, 0x0F), 0x5F), + BUILD_COLOR (MAKE_RGB15 (0x01, 0x09, 0x0D), 0x60), + BUILD_COLOR (MAKE_RGB15 (0x00, 0x07, 0x0B), 0x61), + }; +#define NUM_CYCLES (sizeof (cycle_tab) / sizeof (cycle_tab[0])) +#define BLINK_RATE (ONE_SECOND * 3 / 40) // 9 @ 120 ticks/second + + + if (Reset) + { // Just a reset, not drawing + LastPilot = FALSE; + return; + } + + OnAutoPilot = (GLOBAL (autopilot.x) != ~0 && GLOBAL (autopilot.y) != ~0) + || GLOBAL_SIS (FuelOnBoard) == 0; + + if (OnAutoPilot || LastPilot) + { + if (!OnAutoPilot) + { // AutiPilot aborted -- clear the AUTO-PILOT message + DrawSISMessage (NULL); + cycle_index = 0; + } + else if (GetTimeCounter () >= NextTime) + { + if (!(GLOBAL (CurrentActivity) & CHECK_ABORT) + && GLOBAL_SIS (CrewEnlisted) != (COUNT)~0) + { + CONTEXT OldContext; + + OldContext = SetContext (OffScreenContext); + SetContextForeGroundColor (cycle_tab[cycle_index]); + if (GLOBAL_SIS (FuelOnBoard) == 0) + { + DrawSISMessageEx (GAME_STRING (NAVIGATION_STRING_BASE + 2), + -1, -1, DSME_MYCOLOR); // "OUT OF FUEL" + } + else + { + DrawSISMessageEx (GAME_STRING (NAVIGATION_STRING_BASE + 3), + -1, -1, DSME_MYCOLOR); // "AUTO-PILOT" + } + SetContext (OldContext); + } + + cycle_index = (cycle_index + 1) % NUM_CYCLES; + NextTime = GetTimeCounter () + BLINK_RATE; + } + + LastPilot = OnAutoPilot; + } +} + + Task flash_task = 0; RECT flash_rect; static FRAME flash_screen_frame = 0; Modified: trunk/sc2/src/uqm/sis.h =================================================================== --- trunk/sc2/src/uqm/sis.h 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/sis.h 2009-11-07 01:05:08 UTC (rev 3285) @@ -272,6 +272,7 @@ #define DSME_SETFR (1 << 0) #define DSME_CLEARFR (1 << 1) #define DSME_BLOCKCUR (1 << 2) +#define DSME_MYCOLOR (1 << 3) extern void DrawSISMessage (const UNICODE *pStr); extern void DrawGameDate (void); extern void DateToString (unsigned char *buf, size_t bufLen, @@ -282,6 +283,7 @@ extern void GetGaugeRect (RECT *pRect, BOOLEAN IsCrewRect); extern void DrawFlagshipStats (void); extern void SaveFlagshipState (void); +void DrawAutoPilotMessage (BOOLEAN Reset); extern void DeltaSISGauges (SIZE crew_delta, SIZE fuel_delta, int resunit_delta); Modified: trunk/sc2/src/uqm/starcon.c =================================================================== --- trunk/sc2/src/uqm/starcon.c 2009-11-05 23:53:43 UTC (rev 3284) +++ trunk/sc2/src/uqm/starcon.c 2009-11-07 01:05:08 UTC (rev 3285) @@ -87,6 +87,14 @@ } static void +on_battle_frame (void) +{ + LockMutex (GraphicsLock); + DrawAutoPilotMessage (FALSE); + UnlockMutex (GraphicsLock); +} + +static void BackgroundInitKernel (DWORD TimeOut) { LoadMasterShipList (TaskSwitch); @@ -269,7 +277,8 @@ TaskSwitch (); - Battle (); + DrawAutoPilotMessage (TRUE); + Battle (&on_battle_frame); if (ArilouTask) Task_SetState (ArilouTask, TASK_EXIT); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-07 06:05:53
|
Revision: 3286 http://sc2.svn.sourceforge.net/sc2/?rev=3286&view=rev Author: avolkov Date: 2009-11-07 06:05:45 +0000 (Sat, 07 Nov 2009) Log Message: ----------- Game clock task retired; clock advances via a tick function and the game events are handled immediately Modified Paths: -------------- trunk/sc2/src/uqm/battle.c trunk/sc2/src/uqm/battle.h trunk/sc2/src/uqm/clock.c trunk/sc2/src/uqm/clock.h trunk/sc2/src/uqm/confirm.c trunk/sc2/src/uqm/globdata.c trunk/sc2/src/uqm/hyper.c trunk/sc2/src/uqm/load.c trunk/sc2/src/uqm/planets/genpet.c trunk/sc2/src/uqm/planets/pstarmap.c trunk/sc2/src/uqm/planets/solarsys.c trunk/sc2/src/uqm/save.c trunk/sc2/src/uqm/ship.c trunk/sc2/src/uqm/starbase.c trunk/sc2/src/uqm/starcon.c trunk/sc2/src/uqm/uqmdebug.c trunk/sc2/src/uqm/util.c Modified: trunk/sc2/src/uqm/battle.c =================================================================== --- trunk/sc2/src/uqm/battle.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/battle.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -313,9 +313,11 @@ SetTransitionSource (&r); } BatchGraphics (); - if ((LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) && - !(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) - SeedUniverse (); + + // Call the callback function, if set + if (bs->frame_cb) + bs->frame_cb (); + RedrawQueue (TRUE); if (bs->first_time) @@ -331,10 +333,6 @@ return FALSE; } - // Call the callback function, if set - if (bs->frame_cb) - bs->frame_cb (); - battle_speed = HIBYTE (nth_frame); if (battle_speed == (BYTE)~0) { // maximum speed, nothing rendered at all Modified: trunk/sc2/src/uqm/battle.h =================================================================== --- trunk/sc2/src/uqm/battle.h 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/battle.h 2009-11-07 06:05:45 UTC (rev 3286) @@ -27,7 +27,8 @@ // For NUM_SIDES // The callback function is called on every battle frame -// with GraphicsLock *not* held +// with GraphicsLock held, just before the display queue +// is drawn typedef void (BattleFrameCallback) (void); typedef struct battlestate_struct { Modified: trunk/sc2/src/uqm/clock.c =================================================================== --- trunk/sc2/src/uqm/clock.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/clock.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -32,8 +32,11 @@ // and is hard-coded to the original 24 fps #define CLOCK_BASE_FRAMERATE 24 -static int clock_task_func(void* data); - +// WARNING: Most of clock functions are only meant to be called by the +// Starcon2Main thread! If you need access from other threads, examine +// the locking system! +// XXX: This mutex is only necessary because debugging functions +// may access the clock and event data from a different thread static Mutex clock_mutex; static BOOLEAN @@ -58,75 +61,51 @@ return days_in_month[month - 1]; } -static int -clock_task_func(void* data) +static void +nextClockDay (void) { - Task task = (Task) data; - - while (GLOBAL (GameClock).day_in_ticks == 0 && !Task_ReadState (task, TASK_EXIT)) - TaskSwitch (); - - while (!Task_ReadState (task, TASK_EXIT)) + ++GLOBAL (GameClock.day_index); + if (GLOBAL (GameClock.day_index) > DaysInMonth ( + GLOBAL (GameClock.month_index), + GLOBAL (GameClock.year_index))) { - DWORD TimeIn; + GLOBAL (GameClock.day_index) = 1; + ++GLOBAL (GameClock.month_index); + if (GLOBAL (GameClock.month_index) > 12) + { + GLOBAL (GameClock.month_index) = 1; + ++GLOBAL (GameClock.year_index); + } + } - /* use semaphore so that time passage - * can be halted. (e.g. during battle - * or communications) - */ - SetSemaphore (GLOBAL (GameClock.clock_sem)); - TimeIn = GetTimeCounter (); + // update the date on screen + DrawStatusMessage (NULL); +} - if (GLOBAL (GameClock).tick_count <= 0 - && (GLOBAL (GameClock).tick_count = GLOBAL (GameClock).day_in_ticks) > 0) - { - /* next day -- move the calendar */ - if (++GLOBAL (GameClock).day_index > DaysInMonth ( - GLOBAL (GameClock).month_index, - GLOBAL (GameClock).year_index)) - { - GLOBAL (GameClock).day_index = 1; - if (++GLOBAL (GameClock).month_index > 12) - { - GLOBAL (GameClock).month_index = 1; - ++GLOBAL (GameClock).year_index; - } - } +static void +processClockDayEvents (void) +{ + HEVENT hEvent; - LockMutex (GraphicsLock); - DrawStatusMessage (NULL); - { - HEVENT hEvent; + while ((hEvent = GetHeadEvent ())) + { + EVENT *EventPtr; - while ((hEvent = GetHeadEvent ())) - { - EVENT *EventPtr; + LockEvent (hEvent, &EventPtr); - LockEvent (hEvent, &EventPtr); - - if (GLOBAL (GameClock).day_index != EventPtr->day_index - || GLOBAL (GameClock).month_index != EventPtr->month_index - || GLOBAL (GameClock).year_index != EventPtr->year_index) - { - UnlockEvent (hEvent); - break; - } - RemoveEvent (hEvent); - EventHandler (EventPtr->func_index); - - UnlockEvent (hEvent); - FreeEvent (hEvent); - } - } - UnlockMutex (GraphicsLock); + if (GLOBAL (GameClock.day_index) != EventPtr->day_index + || GLOBAL (GameClock.month_index) != EventPtr->month_index + || GLOBAL (GameClock.year_index) != EventPtr->year_index) + { + UnlockEvent (hEvent); + break; } + RemoveEvent (hEvent); + EventHandler (EventPtr->func_index); - - ClearSemaphore (GLOBAL (GameClock.clock_sem)); - SleepThreadUntil (TimeIn + ONE_SECOND / 120); + UnlockEvent (hEvent); + FreeEvent (hEvent); } - FinishTask (task); - return(0); } BOOLEAN @@ -138,12 +117,8 @@ GLOBAL (GameClock.month_index) = 2; GLOBAL (GameClock.day_index) = 17; GLOBAL (GameClock.year_index) = START_YEAR; /* Feb 17, START_YEAR */ - GLOBAL (GameClock).tick_count = GLOBAL (GameClock).day_in_ticks = 0; - SuspendGameClock (); - if ((GLOBAL (GameClock.clock_task) = - AssignTask (clock_task_func, 2048, - "game clock")) == 0) - return (FALSE); + GLOBAL (GameClock.tick_count) = 0; + GLOBAL (GameClock.day_in_ticks) = 0; return (TRUE); } @@ -151,14 +126,6 @@ BOOLEAN UninitGameClock (void) { - if (GLOBAL (GameClock.clock_task)) - { - ResumeGameClock (); - - ConcludeTask (GLOBAL (GameClock.clock_task)); - - GLOBAL (GameClock.clock_task) = 0; - } DestroyMutex (clock_mutex); clock_mutex = NULL; @@ -167,52 +134,43 @@ return (TRUE); } +// For debugging use only void -SuspendGameClock (void) +LockGameClock (void) { - if (!clock_mutex) - { - log_add (log_Fatal, "BUG: " - "Attempted to suspend non-existent game clock"); -#ifdef DEBUG - explode (); -#endif - return; - } - LockMutex (clock_mutex); - if (GameClockRunning ()) - { - SetSemaphore (GLOBAL (GameClock.clock_sem)); - GLOBAL (GameClock.TimeCounter) = 0; - } - UnlockMutex (clock_mutex); + // Block the GameClockTick() for executing + if (clock_mutex) + LockMutex (clock_mutex); } +// For debugging use only void -ResumeGameClock (void) +UnlockGameClock (void) { - if (!clock_mutex) - { - log_add (log_Fatal, "BUG: " - "Attempted to resume non-existent game clock\n"); -#ifdef DEBUG - explode (); -#endif - return; - } - LockMutex (clock_mutex); - if (!GameClockRunning ()) - { - GLOBAL (GameClock.TimeCounter) = GetTimeCounter (); - ClearSemaphore (GLOBAL (GameClock.clock_sem)); - } - UnlockMutex (clock_mutex); + if (clock_mutex) + UnlockMutex (clock_mutex); } +// For debugging use only BOOLEAN GameClockRunning (void) { - return ((BOOLEAN)(GLOBAL (GameClock.TimeCounter) != 0)); + SIZE prev_tick, cur_tick; + + if (!clock_mutex) + return FALSE; + + LockMutex (clock_mutex); + prev_tick = GLOBAL (GameClock.tick_count); + UnlockMutex (clock_mutex); + + SleepThread (ONE_SECOND / 5); + + LockMutex (clock_mutex); + cur_tick = GLOBAL (GameClock.tick_count); + UnlockMutex (clock_mutex); + + return cur_tick != prev_tick; } void @@ -220,7 +178,6 @@ { SIZE new_day_in_ticks, new_tick_count; - SetSemaphore (GLOBAL (GameClock.clock_sem)); new_day_in_ticks = (SIZE)(seconds_per_day * CLOCK_BASE_FRAMERATE); if (GLOBAL (GameClock.day_in_ticks) == 0) new_tick_count = new_day_in_ticks; @@ -231,7 +188,6 @@ new_tick_count = 1; GLOBAL (GameClock.day_in_ticks) = new_day_in_ticks; GLOBAL (GameClock.tick_count) = new_tick_count; - ClearSemaphore (GLOBAL (GameClock.clock_sem)); } BOOLEAN @@ -324,9 +280,41 @@ return (0); } -SIZE -ClockTick (void) +// This function must be called with GraphicsLock held. +void +GameClockTick (void) { - return (--GLOBAL (GameClock.tick_count)); + // XXX: This mutex is only necessary because debugging functions + // may access the clock and event data from a different thread + LockMutex (clock_mutex); + + --GLOBAL (GameClock.tick_count); + if (GLOBAL (GameClock.tick_count) <= 0) + { // next day -- move the calendar + GLOBAL (GameClock.tick_count) = GLOBAL (GameClock.day_in_ticks); + // Do not do anything until the clock is inited + if (GLOBAL (GameClock.day_in_ticks) > 0) + { + nextClockDay (); + processClockDayEvents (); + } + } + + UnlockMutex (clock_mutex); } +// This function must be called with GraphicsLock held. +void +MoveGameClockDays (COUNT days) +{ + // XXX: This should theoretically hold the clock_mutex, but if + // someone manages to hit the debug button while this function + // runs, it's their own fault :-P + + for ( ; days > 0; --days) + { + nextClockDay (); + processClockDayEvents (); + } + GLOBAL (GameClock.tick_count) = GLOBAL (GameClock.day_in_ticks); +} Modified: trunk/sc2/src/uqm/clock.h =================================================================== --- trunk/sc2/src/uqm/clock.h 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/clock.h 2009-11-07 06:05:45 UTC (rev 3286) @@ -34,9 +34,6 @@ BYTE day_index, month_index; COUNT year_index; SIZE tick_count, day_in_ticks; - Semaphore clock_sem; - Task clock_task; - DWORD TimeCounter; QUEUE event_q; /* Queue element is EVENT */ @@ -74,22 +71,34 @@ #define ForAllEvents(callback, arg) ForAllLinks(&GLOBAL (GameClock.event_q), \ (void (*)(LINK *, void *)) (callback), (arg)) - /* rates are in seconds per game day */ +// Rates are in seconds per game day #define HYPERSPACE_CLOCK_RATE 5 +// XXX: the IP rate is based on 24 ticks/second (see SetGameClockRate), +// however, IP runs at 30 fps right now. So in reality, the IP clock +// rate is closer to 23 seconds per game day. The clock is faster, but +// the flagship also moves faster. #define INTERPLANETARY_CLOCK_RATE 30 extern BOOLEAN InitGameClock (void); extern BOOLEAN UninitGameClock (void); -extern void SuspendGameClock (void); -extern void ResumeGameClock (void); -extern BOOLEAN GameClockRunning (void); + extern void SetGameClockRate (COUNT seconds_per_day); extern BOOLEAN ValidateEvent (EVENT_TYPE type, COUNT *pmonth_index, COUNT *pday_index, COUNT *pyear_index); extern HEVENT AddEvent (EVENT_TYPE type, COUNT month_index, COUNT day_index, COUNT year_index, BYTE func_index); extern void EventHandler (BYTE selector); -extern SIZE ClockTick (void); +extern void GameClockTick (void); +extern void MoveGameClockDays (COUNT days); +// The lock/unlock/running functions are for debugging use only +// Locking will block the GameClockTick() function and thus +// the thread moving the clock. +extern void LockGameClock (void); +extern void UnlockGameClock (void); +// A weak indicator of the clock moving. Suitable for debugging, +// but not much else +extern BOOLEAN GameClockRunning (void); + #endif /* _CLOCK_H */ Modified: trunk/sc2/src/uqm/confirm.c =================================================================== --- trunk/sc2/src/uqm/confirm.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/confirm.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -83,10 +83,6 @@ { BOOLEAN result; - if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE && - LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE && - !(LastActivity & CHECK_RESTART)) - SuspendGameClock (); if (CommData.ConversationPhrases && PlayingTrack ()) PauseTrack (); @@ -174,10 +170,6 @@ } UnlockMutex (GraphicsLock); - if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE && - LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE && - !(LastActivity & CHECK_RESTART)) - ResumeGameClock (); if (CommData.ConversationPhrases && PlayingTrack ()) ResumeTrack (); Modified: trunk/sc2/src/uqm/globdata.c =================================================================== --- trunk/sc2/src/uqm/globdata.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/globdata.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -418,12 +418,6 @@ GLOBAL (glob_flags) = (BYTE)i; GLOBAL (DisplayArray) = DisplayArray; - // The clock semaphore was initially initialized as '1' - // but it is always cleared before set, so it toggled between - // 2 and 1, which doesn't actually do anything. - - GLOBAL (GameClock.clock_sem) = - CreateSemaphore(0, "Clock", SYNC_CLASS_TOPLEVEL); } Modified: trunk/sc2/src/uqm/hyper.c =================================================================== --- trunk/sc2/src/uqm/hyper.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/hyper.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -357,10 +357,6 @@ BOOLEAN FreeHyperspace (void) { - UnlockMutex (GraphicsLock); - SuspendGameClock (); - LockMutex (GraphicsLock); - { FRAME F; @@ -1337,8 +1333,6 @@ HELEMENT hHyperSpaceElement; ELEMENT *HyperSpaceElementPtr; - ClockTick (); - universe.x = LOGX_TO_UNIVERSE (GLOBAL_SIS (log_x)); universe.y = LOGY_TO_UNIVERSE (GLOBAL_SIS (log_y)); @@ -1613,7 +1607,6 @@ OldColor = SetContextBackGroundColor (BLACK_COLOR); UnlockMutex (GraphicsLock); - SuspendGameClock (); memset (&MenuState, 0, sizeof (MenuState)); MenuState.InputFunc = DoFlagshipCommands; @@ -1638,7 +1631,6 @@ ClearSISRect (CLEAR_SIS_RADAR); UnlockMutex (GraphicsLock); WaitForNoInput (ONE_SECOND / 2); - ResumeGameClock (); LockMutex (GraphicsLock); } Modified: trunk/sc2/src/uqm/load.c =================================================================== --- trunk/sc2/src/uqm/load.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/load.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -371,7 +371,7 @@ cread_16 (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, &ClockPtr->TimeCounter); /* theoretically useless */ + cread_32 (fh, NULL); /* not loading; DWORD TimeCounter */ DummyLoadQueue (&ClockPtr->event_q, fh); } @@ -566,14 +566,6 @@ NextActivity = GLOBAL (CurrentActivity); GLOBAL (CurrentActivity) = Activity; - // It shouldn't be possible to ever save with TimeCounter != 0 - // But if it does happen, it needs to be reset to 0, since on load - // the clock semaphore is gauranteed to be 0 - if (GLOBAL (GameClock.TimeCounter) != 0) - log_add (log_Warning, "Warning: Game clock wasn't stopped during " - "save, Savegame may be corrupt!\n"); - GLOBAL (GameClock.TimeCounter) = 0; - LoadRaceQueue (fh, &GLOBAL (avail_race_q)); // START_INTERPLANETARY is only set when saving from Homeworld // encounter screen. When the game is loaded, GENERATE_ORBITAL will Modified: trunk/sc2/src/uqm/planets/genpet.c =================================================================== --- trunk/sc2/src/uqm/planets/genpet.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/planets/genpet.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -67,19 +67,12 @@ { #define LOST_DAYS 15 - COUNT i; BYTE black_buf[] = {FadeAllToBlack}; SleepThreadUntil (XFormColorMap ((COLORMAPPTR)black_buf, ONE_SECOND * 2)); - for (i = 0; i < LOST_DAYS; ++i) - { - while (ClockTick () > 0) - ; - - ResumeGameClock (); - SleepThread (ONE_SECOND / 60); - SuspendGameClock (); - } + LockMutex (GraphicsLock); + MoveGameClockDays (LOST_DAYS); + UnlockMutex (GraphicsLock); } GLOBAL (CurrentActivity) = MAKE_WORD (IN_HYPERSPACE, 0) | START_ENCOUNTER; Modified: trunk/sc2/src/uqm/planets/pstarmap.c =================================================================== --- trunk/sc2/src/uqm/planets/pstarmap.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/planets/pstarmap.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -1805,7 +1805,6 @@ if (pMS->Initialized <= 1) { pMS->Initialized = 1; - ResumeGameClock (); } else if (pMS->flash_task) { Modified: trunk/sc2/src/uqm/planets/solarsys.c =================================================================== --- trunk/sc2/src/uqm/planets/solarsys.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/planets/solarsys.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -854,8 +854,6 @@ COUNT index; SIZE delta_x, delta_y; - ClockTick (); - if (CurrentInputState.key[PlayerControls[0]][KEY_UP]) delta_y = -1; else @@ -1165,7 +1163,10 @@ } if (!(draw_sys_flags & DRAW_REFRESH)) + { + GameClockTick (); ProcessShipControls (); + } UndrawShip (); if (pSolarSysState->MenuState.Initialized != 1) { @@ -1270,8 +1271,6 @@ } else { - SuspendGameClock (); - LockMutex (GraphicsLock); DrawStatusMessage (NULL); if (LastActivity == CHECK_LOAD) @@ -1403,7 +1402,6 @@ } } - ResumeGameClock (); SetGameClockRate (INTERPLANETARY_CLOCK_RATE); } } @@ -1411,7 +1409,6 @@ { if (pSolarSysState->MenuState.flash_task) { - SuspendGameClock (); FreeSolarSys (); if (pSolarSysState->pOrbitalDesc->pPrevDesc != Modified: trunk/sc2/src/uqm/save.c =================================================================== --- trunk/sc2/src/uqm/save.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/save.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -341,7 +341,7 @@ cwrite_16 (fh, ClockPtr->day_in_ticks); cwrite_ptr (fh); /* useless ptr; Semaphore clock_sem */ cwrite_ptr (fh); /* useless ptr; Task clock_task */ - cwrite_32 (fh, ClockPtr->TimeCounter); /* theoretically useless */ + cwrite_32 (fh, 0); /* useless value; DWORD TimeCounter */ DummySaveQueue (&ClockPtr->event_q, fh); } Modified: trunk/sc2/src/uqm/ship.c =================================================================== --- trunk/sc2/src/uqm/ship.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/ship.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -213,11 +213,6 @@ InitIntersectStartPoint (ElementPtr); InitIntersectEndPoint (ElementPtr); - UnlockMutex (GraphicsLock); - ResumeGameClock (); - SetGameClockRate (HYPERSPACE_CLOCK_RATE); - LockMutex (GraphicsLock); - if (hyper_transition (ElementPtr)) return; } Modified: trunk/sc2/src/uqm/starbase.c =================================================================== --- trunk/sc2/src/uqm/starbase.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/starbase.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -443,20 +443,13 @@ DoTimePassage (void) { #define LOST_DAYS 14 - COUNT i; BYTE clut_buf[1]; clut_buf[0] = FadeAllToBlack; SleepThreadUntil (XFormColorMap ((COLORMAPPTR)clut_buf, ONE_SECOND * 2)); - for (i = 0; i < LOST_DAYS; ++i) - { - while (ClockTick () > 0) - ; - - ResumeGameClock (); - SleepThread (ONE_SECOND / 60); - SuspendGameClock (); - } + LockMutex (GraphicsLock); + MoveGameClockDays (LOST_DAYS); + UnlockMutex (GraphicsLock); } void Modified: trunk/sc2/src/uqm/starcon.c =================================================================== --- trunk/sc2/src/uqm/starcon.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/starcon.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -60,8 +60,7 @@ counter = GET_GAME_STATE (ARILOU_SPACE_COUNTER); while (!Task_ReadState (task, TASK_EXIT)) { - SetSemaphore (GLOBAL (GameClock.clock_sem)); - + LockGameClock (); if (GET_GAME_STATE (ARILOU_SPACE) == OPENING) { if (++counter == 10) @@ -72,12 +71,12 @@ if (counter-- == 0) counter = 0; } + UnlockGameClock (); LockMutex (GraphicsLock); SET_GAME_STATE (ARILOU_SPACE_COUNTER, counter); UnlockMutex (GraphicsLock); - ClearSemaphore (GLOBAL (GameClock.clock_sem)); SleepThreadUntil (TimeIn + BATTLE_FRAME_RATE); TimeIn = GetTimeCounter (); } @@ -86,12 +85,17 @@ return 0; } +// Battle frame callback function. +// Called with GraphicsLock held static void on_battle_frame (void) { - LockMutex (GraphicsLock); + GameClockTick (); + + if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) + SeedUniverse (); + DrawAutoPilotMessage (FALSE); - UnlockMutex (GraphicsLock); } static void @@ -212,8 +216,6 @@ do { - SuspendGameClock (); - #ifdef DEBUG if (debugHook != NULL) { @@ -278,6 +280,7 @@ TaskSwitch (); DrawAutoPilotMessage (TRUE); + SetGameClockRate (HYPERSPACE_CLOCK_RATE); Battle (&on_battle_frame); if (ArilouTask) Task_SetState (ArilouTask, TASK_EXIT); Modified: trunk/sc2/src/uqm/uqmdebug.c =================================================================== --- trunk/sc2/src/uqm/uqmdebug.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/uqmdebug.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -138,7 +138,10 @@ if (!GameClockRunning ()) return; - SuspendGameClock (); + // Must hold GraphicsLock for MoveGameClockDays() + // Must acquire GraphicsLock *before* the game clock lock + LockMutex (GraphicsLock); + LockGameClock (); done = !skipHEE; do { @@ -161,16 +164,12 @@ GLOBAL (GameClock.day_index) >= day)))) break; - while (ClockTick () > 0) - ; - - ResumeGameClock (); - SleepThread (ONE_SECOND / 60); - SuspendGameClock (); + MoveGameClockDays (1); } } while (!done); - ResumeGameClock (); + UnlockGameClock (); + UnlockMutex (GraphicsLock); } const char * @@ -239,15 +238,9 @@ void dumpEvents (FILE *out) { - BOOLEAN restartClock = FALSE; - - if (GameClockRunning ()) { - SuspendGameClock (); - restartClock = TRUE; - } + LockGameClock (); ForAllEvents (dumpEventCallback, out); - if (restartClock) - ResumeGameClock (); + UnlockGameClock (); } //////////////////////////////////////////////////////////////////////////// @@ -592,7 +585,6 @@ void UniverseRecurse (UniverseRecurseArg *universeRecurseArg) { - BOOLEAN clockRunning; ACTIVITY savedActivity; if (universeRecurseArg->systemFuncPre == NULL @@ -602,9 +594,7 @@ && universeRecurseArg->moonFunc == NULL) return; - clockRunning = GameClockRunning (); - if (clockRunning) - SuspendGameClock (); + LockGameClock (); //TFB_DEBUG_HALT = 1; savedActivity = GLOBAL (CurrentActivity); disableInteractivity = TRUE; @@ -613,8 +603,7 @@ disableInteractivity = FALSE; GLOBAL (CurrentActivity) = savedActivity; - if (clockRunning) - ResumeGameClock (); + UnlockGameClock (); } static void Modified: trunk/sc2/src/uqm/util.c =================================================================== --- trunk/sc2/src/uqm/util.c 2009-11-07 01:05:08 UTC (rev 3285) +++ trunk/sc2/src/uqm/util.c 2009-11-07 06:05:45 UTC (rev 3286) @@ -161,9 +161,6 @@ GLOBAL (CurrentActivity) |= CHECK_PAUSE; - if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE && - LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE) - SuspendGameClock (); if (CommData.ConversationPhrases && PlayingTrack ()) PauseTrack (); @@ -221,9 +218,6 @@ WaitForNoInput (ONE_SECOND / 4); FlushInput (); - if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE && - LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE) - ResumeGameClock (); if (CommData.ConversationPhrases && PlayingTrack ()) ResumeTrack (); @@ -263,9 +257,6 @@ log_add (log_Debug, "Game is going to sleep"); - if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE && - LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE) - SuspendGameClock (); if (CommData.ConversationPhrases && PlayingTrack ()) PauseTrack (); PauseMusic (); @@ -282,9 +273,6 @@ ResumeMusic (); - if (LOBYTE (GLOBAL (CurrentActivity)) != SUPER_MELEE && - LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE) - ResumeGameClock (); if (CommData.ConversationPhrases && PlayingTrack ()) ResumeTrack (); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-08 20:02:33
|
Revision: 3295 http://sc2.svn.sourceforge.net/sc2/?rev=3295&view=rev Author: avolkov Date: 2009-11-08 20:02:26 +0000 (Sun, 08 Nov 2009) Log Message: ----------- Hangar power lines animation task retired; some cleanups Modified Paths: -------------- trunk/sc2/src/uqm/outfit.c trunk/sc2/src/uqm/shipyard.c trunk/sc2/src/uqm/starbase.c trunk/sc2/src/uqm/starbase.h Modified: trunk/sc2/src/uqm/outfit.c =================================================================== --- trunk/sc2/src/uqm/outfit.c 2009-11-08 08:07:45 UTC (rev 3294) +++ trunk/sc2/src/uqm/outfit.c 2009-11-08 20:02:26 UTC (rev 3295) @@ -347,7 +347,8 @@ DisplayLanders (pMS); else { - DrawShipPiece (pMS, new_slot_piece, pMS->delta_item, FALSE); + DrawShipPiece (pMS->ModuleFrame, new_slot_piece, + pMS->delta_item, FALSE); if (new_slot_piece > TURNING_JETS && old_slot_piece > TURNING_JETS) @@ -651,7 +652,8 @@ which_piece = GLOBAL_SIS (DriveSlots[num_frames]); if (which_piece < EMPTY_SLOT) - DrawShipPiece (pMS, which_piece, num_frames, FALSE); + DrawShipPiece (pMS->ModuleFrame, which_piece, + num_frames, FALSE); } for (num_frames = 0; num_frames < NUM_JET_SLOTS; ++num_frames) { @@ -659,7 +661,8 @@ which_piece = GLOBAL_SIS (JetSlots[num_frames]); if (which_piece < EMPTY_SLOT) - DrawShipPiece (pMS, which_piece, num_frames, FALSE); + DrawShipPiece (pMS->ModuleFrame, which_piece, + num_frames, FALSE); } for (num_frames = 0; num_frames < NUM_MODULE_SLOTS; ++num_frames) { @@ -667,7 +670,8 @@ which_piece = GLOBAL_SIS (ModuleSlots[num_frames]); if (which_piece < EMPTY_SLOT) - DrawShipPiece (pMS, which_piece, num_frames, FALSE); + DrawShipPiece (pMS->ModuleFrame, which_piece, + num_frames, FALSE); } RedistributeFuel (); DisplayLanders (pMS); Modified: trunk/sc2/src/uqm/shipyard.c =================================================================== --- trunk/sc2/src/uqm/shipyard.c 2009-11-08 08:07:45 UTC (rev 3294) +++ trunk/sc2/src/uqm/shipyard.c 2009-11-08 20:02:26 UTC (rev 3295) @@ -37,8 +37,6 @@ #include "libs/graphics/gfx_common.h" #include "libs/inplib.h" -static void BeginHangarAnim (MENU_STATE *pMS); -static void EndHangarAnim (MENU_STATE *pMS); #ifdef USE_3DO_HANGAR // 3DO 4x3 hangar layout @@ -61,8 +59,6 @@ { 0, 38, 76, 131, 169, 207 }; - -# define WANT_HANGAR_ANIMATION #endif // USE_3DO_HANGAR #define HANGAR_SHIPS 12 @@ -76,50 +72,31 @@ SHIPYARD_EXIT }; -static int -hangar_anim_func (void *data) +static void +animatePowerLines (MENU_STATE *pMS) { - DWORD TimeIn; - STAMP s; - Task task = (Task) data; - COLORMAP ColorMap; - RECT ClipRect; - - if (!pMenuState->CurString) - { - FinishTask (task); - return -1; + static STAMP s; + static COLORMAP ColorMap; + static TimeCount NextTime = 0; + TimeCount Now = GetTimeCounter (); + + if (pMS) + { // Init animation + s.origin.x = 0; + s.origin.y = 0; + s.frame = SetAbsFrameIndex (pMS->ModuleFrame, 24); + ColorMap = SetAbsColorMapIndex (pMS->CurString, 0); } - s.origin.x = s.origin.y = 0; - s.frame = SetAbsFrameIndex (pMenuState->CurFrame, 24); - ClipRect = pMenuState->flash_rect1; - ColorMap = SetAbsColorMapIndex (pMenuState->CurString, 0); - - TimeIn = GetTimeCounter (); - while (!Task_ReadState (task, TASK_EXIT)) + + if (Now >= NextTime || pMS) { - CONTEXT OldContext; - RECT OldClipRect; + NextTime = Now + (ONE_SECOND / HANGAR_ANIM_RATE); - LockMutex (GraphicsLock); - OldContext = SetContext (ScreenContext); - GetContextClipRect (&OldClipRect); - SetContextClipRect (&ClipRect); - - ColorMap = SetRelColorMapIndex (ColorMap, 1); SetColorMap (GetColorMapAddress (ColorMap)); DrawStamp (&s); - - SetContextClipRect (&OldClipRect); - SetContext (OldContext); - UnlockMutex (GraphicsLock); - - SleepThreadUntil (TimeIn + ONE_SECOND / HANGAR_ANIM_RATE); - TimeIn = GetTimeCounter (); + // Advance colomap cycle + ColorMap = SetRelColorMapIndex (ColorMap, 1); } - - FinishTask (task); - return 0; } #ifdef WANT_SHIP_SPINS @@ -329,8 +306,8 @@ pship_win_info->lfdoor_s.origin.x = -(SHIP_WIN_WIDTH >> 1); pship_win_info->rtdoor_s.origin.x = (SHIP_WIN_WIDTH >> 1); - pship_win_info->lfdoor_s.origin.y = - pship_win_info->rtdoor_s.origin.y = 0; + pship_win_info->lfdoor_s.origin.y = 0; + pship_win_info->rtdoor_s.origin.y = 0; pship_win_info->lfdoor_s.frame = IncFrameIndex (pMenuState->ModuleFrame); pship_win_info->rtdoor_s.frame = @@ -390,8 +367,8 @@ pship_win_info->lfdoor_s.origin.x = -1; pship_win_info->rtdoor_s.origin.x = 1; - pship_win_info->lfdoor_s.origin.y = - pship_win_info->rtdoor_s.origin.y = 0; + pship_win_info->lfdoor_s.origin.y = 0; + pship_win_info->rtdoor_s.origin.y = 0; pship_win_info->lfdoor_s.frame = IncFrameIndex (pMenuState->ModuleFrame); pship_win_info->rtdoor_s.frame = @@ -419,9 +396,9 @@ DWORD TimeIn; RECT r; CONTEXT OldContext; + RECT OldClipRect; int j; - AllDoorsFinished = FALSE; r.corner.x = r.corner.y = 0; r.extent.width = SHIP_WIN_WIDTH; @@ -436,22 +413,22 @@ if (AnyButtonPress (FALSE)) { if (YankedStarShipPtr != 0) - { + { // Fully close the doors ship_win_info[0].lfdoor_s.origin.x = 0; ship_win_info[0].rtdoor_s.origin.x = 0; } AllDoorsFinished = TRUE; } + LockMutex (GraphicsLock); - OldContext = SetContext (OffScreenContext); - SetContextFGFrame (Screen); + OldContext = SetContext (SpaceContext); + GetContextClipRect (&OldClipRect); SetContextBackGroundColor (BLACK_COLOR); BatchGraphics (); pship_win_info = &ship_win_info[0]; for (i = 0; i < num_ships; ++i) { - { RECT ClipRect; @@ -471,12 +448,12 @@ DrawStamp (&pship_win_info->lfdoor_s); DrawStamp (&pship_win_info->rtdoor_s); if (YankedStarShipPtr) - { + { // Close the doors ++pship_win_info->lfdoor_s.origin.x; --pship_win_info->rtdoor_s.origin.x; } else - { + { // Open the doors --pship_win_info->lfdoor_s.origin.x; ++pship_win_info->rtdoor_s.origin.x; } @@ -485,8 +462,11 @@ ++pship_win_info; } + SetContextClipRect (&OldClipRect); +#ifndef USE_3DO_HANGAR + animatePowerLines (NULL); +#endif UnbatchGraphics (); - SetContextClipRect (NULL); SetContext (OldContext); UnlockMutex (GraphicsLock); } @@ -553,9 +533,6 @@ DoModifyShips (MENU_STATE *pMS) { #define MODIFY_CREW_FLAG (1 << 8) - RECT r; - HSHIPFRAG hStarShip, hNextShip; - SHIP_FRAGMENT *StarShipPtr; BOOLEAN select, cancel; #ifdef WANT_SHIP_SPINS BOOLEAN special; @@ -638,6 +615,10 @@ || NewState != pMS->CurState || ((pMS->delta_item & MODIFY_CREW_FLAG) && (dx || dy))) { + HSHIPFRAG hStarShip, hNextShip; + SHIP_FRAGMENT *StarShipPtr; + RECT r; + for (hStarShip = GetHeadLink (&GLOBAL (built_ship_q)); hStarShip; hStarShip = hNextShip) { @@ -682,7 +663,6 @@ { CONTEXT OldContext; RECT OldClipRect; - RECT flash_r; if (!hSpinShip) { /* Get fleet info from selected escort */ @@ -694,10 +674,6 @@ } SetFlashRect (NULL); - // Do not call EndHangarAnim() with GraphicsLock held! - UnlockMutex (GraphicsLock); - EndHangarAnim (pMS); - LockMutex (GraphicsLock); OldContext = SetContext (ScreenContext); GetContextClipRect (&OldClipRect); @@ -707,19 +683,10 @@ SetContextClipRect (&OldClipRect); SetContext (OldContext); - BeginHangarAnim (pMS); - SetContext (SpaceContext); - if (hStarShip) goto ChangeFlashRect; - GetContextClipRect (&flash_r); - GetContextClipRect (&flash_r); - flash_r.corner.x = RADAR_X - flash_r.corner.x; - flash_r.corner.y = RADAR_Y - flash_r.corner.y; - flash_r.extent.width = RADAR_WIDTH; - flash_r.extent.height = RADAR_HEIGHT; - SetFlashRect (&flash_r); + SetFlashRect (SFR_MENU_3DO); } } else @@ -763,8 +730,7 @@ && CloneShipFragment (Index, &GLOBAL (built_ship_q), 1)) { - ShowCombatShip ((COUNT)pMS->CurState, - (SHIP_FRAGMENT*)0); + ShowCombatShip (pMS->CurState, NULL); //Reset flash rectangle LockMutex (GraphicsLock); SetFlashRect (SFR_MENU_3DO); @@ -829,8 +795,7 @@ { SetFlashRect (NULL); UnlockMutex (GraphicsLock); - ShowCombatShip ((COUNT)pMS->CurState, - StarShipPtr); + ShowCombatShip (pMS->CurState, StarShipPtr); LockMutex (GraphicsLock); UnlockShipFrag (&GLOBAL (built_ship_q), hStarShip); @@ -1062,6 +1027,13 @@ } UnlockMutex (GraphicsLock); } + +#ifndef USE_3DO_HANGAR + LockMutex (GraphicsLock); + SetContext (SpaceContext); + animatePowerLines (NULL); + UnlockMutex (GraphicsLock); +#endif } SleepThread (ONE_SECOND / 30); @@ -1074,30 +1046,25 @@ { COUNT num_frames; STAMP s; + FRAME ModuleFrame; - LockMutex (GraphicsLock); - SetContext (SpaceContext); + ModuleFrame = CaptureDrawable (LoadGraphic (SISBLU_MASK_ANIM)); - pMS->ModuleFrame = CaptureDrawable ( - LoadGraphic (SISBLU_MASK_ANIM) - ); - - BatchGraphics (); - - s.origin.x = s.origin.y = 0; - s.frame = DecFrameIndex (pMS->ModuleFrame); + s.origin.x = 0; + s.origin.y = 0; + s.frame = DecFrameIndex (ModuleFrame); SetContextForeGroundColor ( BUILD_COLOR (MAKE_RGB15 (0x00, 0x00, 0x16), 0x01)); DrawFilledStamp (&s); for (num_frames = 0; num_frames < NUM_DRIVE_SLOTS; ++num_frames) { - DrawShipPiece (pMS, GLOBAL_SIS (DriveSlots[num_frames]), + DrawShipPiece (ModuleFrame, GLOBAL_SIS (DriveSlots[num_frames]), num_frames, TRUE); } for (num_frames = 0; num_frames < NUM_JET_SLOTS; ++num_frames) { - DrawShipPiece (pMS, GLOBAL_SIS (JetSlots[num_frames]), + DrawShipPiece (ModuleFrame, GLOBAL_SIS (JetSlots[num_frames]), num_frames, TRUE); } for (num_frames = 0; num_frames < NUM_MODULE_SLOTS; ++num_frames) @@ -1107,7 +1074,7 @@ which_piece = GLOBAL_SIS (ModuleSlots[num_frames]); if (!(pMS->CurState == SHIPYARD && which_piece == CREW_POD)) - DrawShipPiece (pMS, which_piece, num_frames, TRUE); + DrawShipPiece (ModuleFrame, which_piece, num_frames, TRUE); } SetContextForeGroundColor ( @@ -1118,7 +1085,7 @@ which_piece = GLOBAL_SIS (ModuleSlots[num_frames]); if (pMS->CurState == SHIPYARD && which_piece == CREW_POD) - DrawShipPiece (pMS, which_piece, num_frames, TRUE); + DrawShipPiece (ModuleFrame, which_piece, num_frames, TRUE); } { @@ -1184,46 +1151,9 @@ } } - UnbatchGraphics (); - - DestroyDrawable (ReleaseDrawable (pMS->ModuleFrame)); - pMS->ModuleFrame = 0; - - UnlockMutex (GraphicsLock); + DestroyDrawable (ReleaseDrawable (ModuleFrame)); } -static void -BeginHangarAnim (MENU_STATE *pMS) -{ -#ifdef WANT_HANGAR_ANIMATION - CONTEXT OldContext; - RECT ClipRect; - - OldContext = SetContext (SpaceContext); - GetContextClipRect (&ClipRect); - - // start hangar power-lines animation - GetContextClipRect (&ClipRect); - pMS->flash_rect1 = ClipRect; - pMS->CurFrame = pMS->ModuleFrame; - pMS->flash_task = AssignTask (hangar_anim_func, 4096, - "hangar pal-rot animation"); - - SetContext (OldContext); -#endif -} - -// Pre: GraphicsLock is NOT held (or risk a deadlock) -static void -EndHangarAnim (MENU_STATE *pMS) -{ - if (pMS->flash_task) - { - ConcludeTask (pMS->flash_task); - pMS->flash_task = 0; - } -} - BOOLEAN DoShipyard (MENU_STATE *pMS) { @@ -1243,7 +1173,8 @@ STAMP s; RECT r, old_r; - s.frame = CaptureDrawable (LoadGraphic (SHIPYARD_PMAP_ANIM)); + pMS->ModuleFrame = CaptureDrawable ( + LoadGraphic (SHIPYARD_PMAP_ANIM)); pMS->CurString = CaptureColorMap ( LoadColorMap (HANGAR_COLOR_TAB)); @@ -1256,15 +1187,18 @@ DrawSISFrame (); DrawSISMessage (GAME_STRING (STARBASE_STRING_BASE + 3)); DrawSISTitle (GAME_STRING (STARBASE_STRING_BASE)); - UnlockMutex (GraphicsLock); + SetContext (SpaceContext); DrawBluePrint (pMS); - pMS->ModuleFrame = s.frame; + UnlockMutex (GraphicsLock); - DrawMenuStateStrings (PM_CREW, pMS->CurState = SHIPYARD_CREW); + pMS->CurState = SHIPYARD_CREW; + DrawMenuStateStrings (PM_CREW, pMS->CurState); LockMutex (GraphicsLock); SetContext (SpaceContext); - s.origin.x = s.origin.y = 0; + s.origin.x = 0; + s.origin.y = 0; + s.frame = SetAbsFrameIndex (pMS->ModuleFrame, 0); #ifdef USE_3DO_HANGAR DrawStamp (&s); #else // PC hangar @@ -1278,6 +1212,7 @@ SetContextClipRect (&r); DrawStamp (&s); SetContextClipRect (&old_r); + animatePowerLines (pMS); #endif // USE_3DO_HANGAR SetContextFont (TinyFont); @@ -1291,12 +1226,12 @@ r.extent.height = SCREEN_HEIGHT; ScreenTransition (3, &r); } - PlayMusic (pMS->hMusic, TRUE, 1); UnbatchGraphics (); - BeginHangarAnim (pMS); UnlockMutex (GraphicsLock); - ShowCombatShip ((COUNT)~0, (SHIP_FRAGMENT*)0); + PlayMusic (pMS->hMusic, TRUE, 1); + + ShowCombatShip ((COUNT)~0, NULL); LockMutex (GraphicsLock); SetFlashRect (SFR_MENU_3DO); UnlockMutex (GraphicsLock); @@ -1307,11 +1242,9 @@ else if (cancel || (select && pMS->CurState == SHIPYARD_EXIT)) { ExitShipyard: - EndHangarAnim (pMS); LockMutex (GraphicsLock); DestroyDrawable (ReleaseDrawable (pMS->ModuleFrame)); pMS->ModuleFrame = 0; - pMS->CurFrame = 0; DestroyColorMap (ReleaseColorMap (pMS->CurString)); pMS->CurString = 0; UnlockMutex (GraphicsLock); @@ -1327,18 +1260,23 @@ } else { - EndHangarAnim (pMS); if (GameOptions () == 0) goto ExitShipyard; DrawMenuStateStrings (PM_CREW, pMS->CurState); LockMutex (GraphicsLock); SetFlashRect (SFR_MENU_3DO); - BeginHangarAnim (pMS); UnlockMutex (GraphicsLock); } } else + { + LockMutex (GraphicsLock); + SetContext (SpaceContext); + animatePowerLines (NULL); + UnlockMutex (GraphicsLock); + DoMenuChooser (pMS, PM_CREW); + } return TRUE; } Modified: trunk/sc2/src/uqm/starbase.c =================================================================== --- trunk/sc2/src/uqm/starbase.c 2009-11-08 08:07:45 UTC (rev 3294) +++ trunk/sc2/src/uqm/starbase.c 2009-11-08 20:02:26 UTC (rev 3295) @@ -76,7 +76,7 @@ } void -DrawShipPiece (MENU_STATE *pMS, COUNT which_piece, COUNT which_slot, +DrawShipPiece (FRAME ModuleFrame, COUNT which_piece, COUNT which_slot, BOOLEAN DrawBluePrint) { COLOR OldColor = 0; // Initialisation is to keep the compiler silent. @@ -138,7 +138,7 @@ Side.origin.x += which_slot * SHIP_PIECE_OFFSET; if (RepairSlot < 0) { - Side.frame = SetAbsFrameIndex (pMS->ModuleFrame, + Side.frame = SetAbsFrameIndex (ModuleFrame, ((NUM_MODULES - 1) + (6 - 2)) + (NUM_MODULES + 6) - (RepairSlot + 1)); DrawStamp (&Side); @@ -176,7 +176,7 @@ { if (RepairSlot) SetContextForeGroundColor (OldColor); - Side.frame = SetAbsFrameIndex (pMS->ModuleFrame, which_piece - 1); + Side.frame = SetAbsFrameIndex (ModuleFrame, which_piece - 1); DrawFilledStamp (&Side); } else @@ -216,7 +216,7 @@ } } - Top.frame = SetAbsFrameIndex (pMS->ModuleFrame, which_piece); + Top.frame = SetAbsFrameIndex (ModuleFrame, which_piece); DrawStamp (&Top); Side.frame = SetRelFrameIndex (Top.frame, (NUM_MODULES - 1) + 6); @@ -228,7 +228,7 @@ s.origin = Top.origin; s.origin.x -= SHIP_PIECE_OFFSET; - s.frame = SetAbsFrameIndex (pMS->ModuleFrame, NUM_MODULES + 5); + s.frame = SetAbsFrameIndex (ModuleFrame, NUM_MODULES + 5); DrawStamp (&s); s.origin = Side.origin; s.origin.x -= SHIP_PIECE_OFFSET; @@ -245,7 +245,7 @@ && which_slot >= NUM_MODULE_SLOTS - 3) ++which_piece; - Top.frame = SetAbsFrameIndex (pMS->ModuleFrame, which_piece); + Top.frame = SetAbsFrameIndex (ModuleFrame, which_piece); DrawStamp (&Top); Side.frame = SetRelFrameIndex (Top.frame, (NUM_MODULES - 1) + 6); Modified: trunk/sc2/src/uqm/starbase.h =================================================================== --- trunk/sc2/src/uqm/starbase.h 2009-11-08 08:07:45 UTC (rev 3294) +++ trunk/sc2/src/uqm/starbase.h 2009-11-08 20:02:26 UTC (rev 3295) @@ -36,7 +36,8 @@ extern BOOLEAN DoStarBase (MENU_STATE *pMS); extern BOOLEAN DoOutfit (MENU_STATE *pMS); extern BOOLEAN DoShipyard (MENU_STATE *pMS); -extern void DrawShipPiece (MENU_STATE *pMS, COUNT which_piece, COUNT + +extern void DrawShipPiece (FRAME ModuleFrame, COUNT which_piece, COUNT which_slot, BOOLEAN DrawBluePrint); extern COUNT WrapText (const UNICODE *pStr, COUNT len, TEXT *tarray, SIZE This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-11 09:31:07
|
Revision: 3298 http://sc2.svn.sourceforge.net/sc2/?rev=3298&view=rev Author: avolkov Date: 2009-11-11 09:30:58 +0000 (Wed, 11 Nov 2009) Log Message: ----------- Melee menu flash selection task retired Modified Paths: -------------- trunk/sc2/src/uqm/loadmele.c trunk/sc2/src/uqm/loadmele.h trunk/sc2/src/uqm/melee.c trunk/sc2/src/uqm/melee.h Modified: trunk/sc2/src/uqm/loadmele.c =================================================================== --- trunk/sc2/src/uqm/loadmele.c 2009-11-11 08:03:22 UTC (rev 3297) +++ trunk/sc2/src/uqm/loadmele.c 2009-11-11 09:30:58 UTC (rev 3298) @@ -263,7 +263,7 @@ #define FILE_STRING_ORIGIN_Y 34 #define ENTRY_HEIGHT 32 -void +static void SelectFileString (MELEE_STATE *pMS, bool hilite) { CONTEXT OldContext; @@ -325,6 +325,29 @@ pMS->load.top = index - LOAD_TEAM_VIEW_SIZE / 2; } +static void +flashSelectedTeam (MELEE_STATE *pMS) +{ +#define FLASH_RATE (ONE_SECOND / 9) + static TimeCount NextTime = 0; + static int hilite = 0; + TimeCount Now = GetTimeCounter (); + + if (Now >= NextTime) + { + CONTEXT OldContext; + + NextTime = Now + FLASH_RATE; + hilite ^= 1; + + LockMutex (GraphicsLock); + OldContext = SetContext (SpaceContext); + SelectFileString (pMS, hilite); + SetContext (OldContext); + UnlockMutex (GraphicsLock); + } +} + BOOLEAN DoLoadTeam (MELEE_STATE *pMS) { @@ -440,6 +463,8 @@ } } + flashSelectedTeam (pMS); + SleepThreadUntil (TimeIn + ONE_SECOND / 30); return TRUE; Modified: trunk/sc2/src/uqm/loadmele.h =================================================================== --- trunk/sc2/src/uqm/loadmele.h 2009-11-11 08:03:22 UTC (rev 3297) +++ trunk/sc2/src/uqm/loadmele.h 2009-11-11 09:30:58 UTC (rev 3298) @@ -53,7 +53,6 @@ BOOLEAN DoSaveTeam (MELEE_STATE *pMS); bool ReadTeamImage (TEAM_IMAGE *pTI, uio_Stream *load_fp); int WriteTeamImage (TEAM_IMAGE *pTI, uio_Stream *save_fp); -void SelectFileString (MELEE_STATE *pMS, bool hilite); void LoadTeamList (MELEE_STATE *pMS); #endif /* _LOADMELE_H */ Modified: trunk/sc2/src/uqm/melee.c =================================================================== --- trunk/sc2/src/uqm/melee.c 2009-11-11 08:03:22 UTC (rev 3297) +++ trunk/sc2/src/uqm/melee.c 2009-11-11 09:30:58 UTC (rev 3298) @@ -703,13 +703,10 @@ DrawMeleeIcon (25); /* "Battle!" (not highlighted) */ break; case LOAD_TOP: + DrawMeleeIcon (17); /* "Load" (top, not highlighted) */ + break; case LOAD_BOT: - if (pMeleeState->InputFunc != DoLoadTeam) - DrawMeleeIcon (opt == LOAD_TOP ? 17 : 22); - /* 17: "Load" (top, not highlighted) */ - /* 22: "Load" (bottom, not highlighted) */ - else - SelectFileString (pMeleeState, false); + DrawMeleeIcon (22); /* "Load" (bottom, not highlighted) */ break; case SAVE_TOP: DrawMeleeIcon (18); /* "Save" (top, not highlighted) */ @@ -765,13 +762,10 @@ DrawMeleeIcon (26); /* "Battle!" (highlighted) */ break; case LOAD_TOP: + DrawMeleeIcon (19); /* "Load" (top, highlighted) */ + break; case LOAD_BOT: - if (pMeleeState->InputFunc != DoLoadTeam) - DrawMeleeIcon (opt == LOAD_TOP ? 19 : 24); - /* 19: "Load" (top, highlighted) */ - /* 24: "Load" (bottom, highlighted) */ - else - SelectFileString (pMeleeState, true); + DrawMeleeIcon (24); /* "Load" (bottom, highlighted) */ break; case SAVE_TOP: DrawMeleeIcon (20); /* "Save" (top; highlighted) */ @@ -814,39 +808,30 @@ } } -static int -flash_selection_func (void *data) +static void +flashSelection (MELEE_STATE *pMS) { - DWORD TimeIn; - Task task = (Task) data; - volatile MELEE_STATE *pMS = pMeleeState; - - TimeIn = GetTimeCounter (); - while (!Task_ReadState (task, TASK_EXIT)) +#define FLASH_RATE (ONE_SECOND / 9) + static TimeCount NextTime = 0; + static bool select = false; + TimeCount Now = GetTimeCounter (); + + if (Now >= NextTime) { -#define FLASH_RATE (ONE_SECOND / 8) CONTEXT OldContext; - LockMutex (GraphicsLock); - OldContext = SetContext (SpaceContext); - Deselect (pMS->MeleeOption); - SetContext (OldContext); - UnlockMutex (GraphicsLock); - SleepThreadUntil (TimeIn + FLASH_RATE); - TimeIn = GetTimeCounter (); + NextTime = Now + FLASH_RATE; + select ^= true; LockMutex (GraphicsLock); OldContext = SetContext (SpaceContext); - Select (pMS->MeleeOption); + if (select) + Select (pMS->MeleeOption); + else + Deselect (pMS->MeleeOption); SetContext (OldContext); UnlockMutex (GraphicsLock); - SleepThreadUntil (TimeIn + FLASH_RATE); - TimeIn = GetTimeCounter (); } - - FinishTask (task); - - return 0; } static void @@ -867,9 +852,6 @@ r.corner.x = r.corner.y = 0; RedrawMeleeFrame (); - - pMS->flash_task = AssignTask (flash_selection_func, 2048, - "flash melee selection"); } static void @@ -1220,6 +1202,8 @@ flushPacketQueues (); #endif + flashSelection (pMS); + SleepThreadUntil (TimeIn + ONE_SECOND / 30); return (TRUE); @@ -1290,11 +1274,7 @@ else if (PulsedInputState.menu[KEY_MENU_SPECIAL] && (pMeleeState->CurIndex != (BYTE)~0)) { - BOOLEAN (*InputFunc) (struct melee_state *pInputState); - InputFunc = pMS->InputFunc; - pMS->InputFunc = 0; /* disable ship flashing */ DoShipSpin (pMS->CurIndex, (MUSIC_REF)0); - pMS->InputFunc = InputFunc; return (TRUE); } @@ -1342,6 +1322,8 @@ } } + flashSelection (pMS); + SleepThreadUntil (TimeIn + ONE_SECOND / 30); return (TRUE); @@ -1554,11 +1536,6 @@ static void FreeMeleeInfo (MELEE_STATE *pMS) { - if (pMS->flash_task) - { - ConcludeTask (pMS->flash_task); - pMS->flash_task = 0; - } DestroyDirEntryTable (ReleaseDirEntryTable (pMS->load.dirEntries)); pMS->load.dirEntries = 0; @@ -1696,13 +1673,7 @@ static void StartMelee (MELEE_STATE *pMS) { - if (pMS->flash_task) { - ConcludeTask (pMS->flash_task); - pMS->flash_task = 0; - } - - { BYTE black_buf[] = {FadeAllToBlack}; FadeMusic (0, ONE_SECOND / 2); @@ -1926,11 +1897,6 @@ RedrawMeleeFrame (); pMS->InputFunc = DoMelee; pMS->LastInputTime = GetTimeCounter (); - if (!pMS->flash_task) - { - pMS->flash_task = AssignTask (flash_selection_func, 2048, - "flash melee selection"); - } flushPacketQueues (); @@ -1955,11 +1921,6 @@ pMS->LastInputTime = GetTimeCounter (); Deselect (pMS->MeleeOption); pMS->MeleeOption = START_MELEE; - if (!pMS->flash_task) - { - pMS->flash_task = AssignTask (flash_selection_func, 2048, - "flash melee selection"); - } } } @@ -2083,12 +2044,6 @@ COUNT which_side; BOOLEAN confirmed; - if (pMS->flash_task) - { - ConcludeTask (pMS->flash_task); - pMS->flash_task = 0; - } - which_side = pMS->MeleeOption == NET_TOP ? 1 : 0; confirmed = MeleeConnectDialog (which_side); RedrawMeleeFrame (); @@ -2098,15 +2053,6 @@ pMS->Initialized = FALSE; pMS->InputFunc = DoConnectingDialog; } - else - { - if (!pMS->flash_task) - { - pMS->flash_task = AssignTask (flash_selection_func, - 2048, "flash melee selection"); - } - } - break; } #endif /* NETPLAY */ @@ -2248,6 +2194,8 @@ check_for_disconnections (pMS); #endif + flashSelection (pMS); + SleepThreadUntil (TimeIn + ONE_SECOND / 30); return (TRUE); Modified: trunk/sc2/src/uqm/melee.h =================================================================== --- trunk/sc2/src/uqm/melee.h 2009-11-11 08:03:22 UTC (rev 3297) +++ trunk/sc2/src/uqm/melee.h 2009-11-11 09:30:58 UTC (rev 3298) @@ -20,7 +20,6 @@ #define _MELEE_H #include "init.h" -#include "libs/tasklib.h" #include "libs/gfxlib.h" #include "libs/mathlib.h" #include "libs/sndlib.h" @@ -112,7 +111,6 @@ struct melee_side_state SideState[NUM_SIDES]; struct melee_load_state load; COUNT CurIndex; - Task flash_task; RandomContext *randomContext; /* RNG state for all local random decisions, i.e. those * decisions that are not shared among network parties. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-17 08:49:34
|
Revision: 3309 http://sc2.svn.sourceforge.net/sc2/?rev=3309&view=rev Author: avolkov Date: 2009-11-17 08:49:22 +0000 (Tue, 17 Nov 2009) Log Message: ----------- Naming code cleanup: some abuses of MENU_STATE removed; load savegame info while fading music; some dead code removed Modified Paths: -------------- trunk/sc2/src/uqm/gameopt.c trunk/sc2/src/uqm/gameopt.h trunk/sc2/src/uqm/outfit.c trunk/sc2/src/uqm/sis.c trunk/sc2/src/uqm/state.h Modified: trunk/sc2/src/uqm/gameopt.c =================================================================== --- trunk/sc2/src/uqm/gameopt.c 2009-11-16 23:32:01 UTC (rev 3308) +++ trunk/sc2/src/uqm/gameopt.c 2009-11-17 08:49:22 UTC (rev 3309) @@ -44,12 +44,15 @@ #define SUMMARY_SIDE_OFFS 7 #define SAVES_PER_PAGE 5 +#define MAX_NAME_SIZE SIS_NAME_SIZE + static BOOLEAN DoSettings (MENU_STATE *pMS); static BOOLEAN DoNaming (MENU_STATE *pMS); static MENU_STATE *pLocMenuState; static BYTE prev_save; //keeps track of the last slot that was saved or loaded +static NamingCallback *namingCB; void ConfirmSaveLoad (STAMP *MsgStamp) @@ -188,9 +191,9 @@ #define DDSHS_BLOCKCUR 2 static BOOLEAN -DrawDescriptionString (MENU_STATE *pMS, COUNT which_string, COUNT state) +DrawDescriptionString (MENU_STATE *pMS, UNICODE *Str, COUNT CursorPos, + COUNT state) { - COUNT rel_index; RECT r; TEXT lf; COLOR BackGround, ForeGround; @@ -198,8 +201,6 @@ LockMutex (GraphicsLock); - rel_index = (COUNT)(which_string - pMS->first_item.y); - { r.corner.x = 2; r.extent.width = SHIP_NAME_WIDTH; @@ -207,7 +208,7 @@ SetContext (StatusContext); if (pMS->CurState == CHANGE_CAPTAIN_SETTING) - { + { // Naming the captain Font = TinyFont; r.corner.y = 10; ++r.corner.x; @@ -218,7 +219,7 @@ ForeGround = BUILD_COLOR (MAKE_RGB15 (0x0A, 0x1F, 0x1F), 0x0B); } else - { + { // Naming the flagship Font = StarConFont; r.corner.y = 20; lf.baseline.x = r.corner.x + (r.extent.width >> 1); @@ -232,44 +233,23 @@ } SetContextFont (Font); - lf.pStr = ((GAME_DESC *)pMS->Extra)[rel_index]; + lf.pStr = Str; lf.CharCount = (COUNT)~0; if (!(state & DDSHS_EDIT)) { // normal state SetFlashRect (SFR_MENU_3DO); - if (pMS->InputFunc == DoNaming) - { - if (pMS->CurState == CHANGE_CAPTAIN_SETTING) - DrawCaptainsName (); - else - { - DrawFlagshipName (TRUE); - if (pMenuState && pMenuState->InputFunc == DoOutfit) - DrawFlagshipName (FALSE); - } - } + if (pMS->CurState == CHANGE_CAPTAIN_SETTING) + DrawCaptainsName (); else - { // XXX: remnants of DOS? this function is never actually - // called outside DoNaming nowadays, which makes this - // code utterly dead - if (state == 0) - { - COLOR OldColor; - - OldColor = SetContextForeGroundColor (BLACK_COLOR); - DrawFilledRectangle (&r); - SetContextForeGroundColor (OldColor); - } - font_DrawText (&lf); - } + DrawFlagshipName (TRUE); } else { // editing state COUNT i; RECT text_r; - BYTE char_deltas[MAX_DESC_CHARS]; + BYTE char_deltas[MAX_NAME_SIZE]; BYTE *pchar_deltas; TextRect (&lf, &text_r, char_deltas); @@ -285,18 +265,18 @@ DrawFilledRectangle (&r); pchar_deltas = char_deltas; - for (i = pMS->first_item.x; i > 0; --i) - text_r.corner.x += (SIZE)*pchar_deltas++; - if ((COUNT)pMS->first_item.x < lf.CharCount) /* end of line */ + for (i = CursorPos; i > 0; --i) + text_r.corner.x += *pchar_deltas++; + if (CursorPos < lf.CharCount) /* end of line */ --text_r.corner.x; if (state & DDSHS_BLOCKCUR) { // Use block cursor for keyboardless systems - if ((COUNT)pMS->first_item.x == lf.CharCount) + if (CursorPos == lf.CharCount) { // cursor at end-line -- use insertion point text_r.extent.width = 1; } - else if ((COUNT)pMS->first_item.x + 1 == lf.CharCount) + else if (CursorPos + 1 == lf.CharCount) { // extra pixel for last char margin text_r.extent.width = (SIZE)*pchar_deltas + 2; } @@ -331,34 +311,23 @@ MENU_STATE *pMS = (MENU_STATE*) pTES->CbParam; COUNT hl = DDSHS_EDIT; - pMS->first_item.x = pTES->CursorPos; if (pTES->JoystickMode) hl |= DDSHS_BLOCKCUR; - return DrawDescriptionString (pMS, 0, hl); + return DrawDescriptionString (pMS, pTES->BaseStr, pTES->CursorPos, hl); } static BOOLEAN DoNaming (MENU_STATE *pMS) { - GAME_DESC buf; + UNICODE buf[MAX_NAME_SIZE] = ""; TEXTENTRY_STATE tes; UNICODE *Setting; pMS->Initialized = TRUE; pMS->InputFunc = DoNaming; - buf[0] = '\0'; - // XXX: this code abuses MENU_STATE struct members to store - // some values: - // first_item.x - current cursor position - // first_item.y - must be set to 0; DrawDescriptionString() - // treats it as base index into array of strings - // supplied in Extra - pMS->first_item.x = 0; - pMS->first_item.y = 0; - pMS->Extra = buf; - DrawDescriptionString (pMS, 0, DDSHS_EDIT); + DrawDescriptionString (pMS, buf, 0, DDSHS_EDIT); LockMutex (GraphicsLock); DrawStatusMessage (GAME_STRING (NAMING_STRING_BASE + 0)); @@ -388,8 +357,11 @@ utf8StringCopy (Setting, tes.MaxSize, buf); else utf8StringCopy (buf, sizeof (buf), Setting); - DrawDescriptionString (pMS, 0, DDSHS_NORMAL); + DrawDescriptionString (pMS, buf, 0, DDSHS_NORMAL); + if (namingCB) + namingCB (); + SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); pMS->InputFunc = DoSettings; @@ -399,6 +371,12 @@ return (TRUE); } +void +SetNamingCallback (NamingCallback *callback) +{ + namingCB = callback; +} + static BOOLEAN DoSettings (MENU_STATE *pMS) { @@ -867,11 +845,6 @@ pMS->delta_item = (SIZE)pMS->CurState; pMS->CurState = NewState = prev_save; pMS->InputFunc = DoPickGame; - SleepThreadUntil ((DWORD)pMS->CurFrame); - pMS->CurFrame = 0; - PauseMusic (); - StopSound (); - FadeMusic (NORMAL_VOLUME, 0); { extern FRAME PlayFrame; @@ -884,7 +857,6 @@ BatchGraphics (); Restart: SetContext (SpaceContext); - LoadGameDescriptions ((SUMMARY_DESC *)pMS->Extra); DrawCargo (1); pMS->Initialized = TRUE; goto ChangeGameSelection; @@ -941,6 +913,7 @@ SaveProblem (); pMS->Initialized = FALSE; + LoadGameDescriptions ((SUMMARY_DESC *)pMS->Extra); NewState = pMS->CurState; LockMutex (GraphicsLock); BatchGraphics (); @@ -1139,7 +1112,10 @@ SUMMARY_DESC desc_array[MAX_SAVED_GAMES]; RECT DlgRect; STAMP DlgStamp; + TimeCount TimeOut; + TimeOut = FadeMusic (0, ONE_SECOND / 2); + if (pSolarSysState) { ++pSolarSysState->MenuState.Initialized; @@ -1147,6 +1123,8 @@ TaskSwitch (); } + LoadGameDescriptions (desc_array); + LockMutex (GraphicsLock); OldContext = SetContext (SpaceContext); @@ -1164,6 +1142,11 @@ pMS->Extra = desc_array; UnlockMutex (GraphicsLock); + SleepThreadUntil (TimeOut); + PauseMusic (); + StopSound (); + FadeMusic (NORMAL_VOLUME, 0); + DoInput (pMS, TRUE); LockMutex (GraphicsLock); pMS->Initialized = -1; @@ -1179,7 +1162,7 @@ } if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) - { + { // Restore previous screen if necessary // TODO: Need a better test for in-encounter if (CommData.ConversationPhrasesRes || !(pSolarSysState Modified: trunk/sc2/src/uqm/gameopt.h =================================================================== --- trunk/sc2/src/uqm/gameopt.h 2009-11-16 23:32:01 UTC (rev 3308) +++ trunk/sc2/src/uqm/gameopt.h 2009-11-17 08:49:22 UTC (rev 3309) @@ -22,5 +22,8 @@ extern void ConfirmSaveLoad (STAMP *MsgStamp); extern BOOLEAN GameOptions (void); +typedef void (NamingCallback) (void); +extern void SetNamingCallback (NamingCallback *); + #endif /* _GAMEOPT_H */ Modified: trunk/sc2/src/uqm/outfit.c =================================================================== --- trunk/sc2/src/uqm/outfit.c 2009-11-16 23:32:01 UTC (rev 3308) +++ trunk/sc2/src/uqm/outfit.c 2009-11-17 08:49:22 UTC (rev 3309) @@ -609,6 +609,15 @@ } } +static void +onNamingDone (void) +{ + // In case player just named a ship, redraw it + LockMutex (GraphicsLock); + DrawFlagshipName (FALSE); + UnlockMutex (GraphicsLock); +} + BOOLEAN DoOutfit (MENU_STATE *pMS) { @@ -620,6 +629,8 @@ pMS->InputFunc = DoOutfit; pMS->Initialized = TRUE; + SetNamingCallback (onNamingDone); + { COUNT num_frames; STAMP s; @@ -747,6 +758,8 @@ DestroyDrawable (ReleaseDrawable (pMS->ModuleFrame)); pMS->ModuleFrame = 0; + SetNamingCallback (NULL); + return (FALSE); } } Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2009-11-16 23:32:01 UTC (rev 3308) +++ trunk/sc2/src/uqm/sis.c 2009-11-17 08:49:22 UTC (rev 3309) @@ -237,7 +237,9 @@ { // editing state int i; RECT text_r; - BYTE char_deltas[MAX_DESC_CHARS]; + // XXX: 128 is currently safe, but it would be better to specify + // the size to TextRect() + BYTE char_deltas[128]; BYTE *pchar_deltas; t.baseline.x = 3; Modified: trunk/sc2/src/uqm/state.h =================================================================== --- trunk/sc2/src/uqm/state.h 2009-11-16 23:32:01 UTC (rev 3308) +++ trunk/sc2/src/uqm/state.h 2009-11-17 08:49:22 UTC (rev 3309) @@ -46,9 +46,6 @@ // (GROUP_LIST) in one of the state files extern void BuildGroups (void); -#define MAX_DESC_CHARS 60 -typedef UNICODE GAME_DESC[MAX_DESC_CHARS + 1]; - typedef struct GAME_STATE_FILE GAME_STATE_FILE; #define STARINFO_FILE 0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-17 21:41:48
|
Revision: 3312 http://sc2.svn.sourceforge.net/sc2/?rev=3312&view=rev Author: avolkov Date: 2009-11-17 21:41:37 +0000 (Tue, 17 Nov 2009) Log Message: ----------- Uncouple DrawStatusMessage() from pMenuState (carry the required parameter forward) Modified Paths: -------------- trunk/sc2/src/uqm/comm/melnorm/melnorm.c trunk/sc2/src/uqm/encount.c trunk/sc2/src/uqm/planets/cargo.c trunk/sc2/src/uqm/shipyard.c trunk/sc2/src/uqm/sis.c trunk/sc2/src/uqm/sis.h trunk/sc2/src/uqm/starbase.c trunk/sc2/src/uqm/starcon.c Modified: trunk/sc2/src/uqm/comm/melnorm/melnorm.c =================================================================== --- trunk/sc2/src/uqm/comm/melnorm/melnorm.c 2009-11-17 09:56:02 UTC (rev 3311) +++ trunk/sc2/src/uqm/comm/melnorm/melnorm.c 2009-11-17 21:41:37 UTC (rev 3312) @@ -194,6 +194,7 @@ } }; +static StatMsgMode prevMsgMode; static void DoFirstMeeting (RESPONSE_REF R); @@ -574,7 +575,7 @@ SET_GAME_STATE (MELNORME_CREDIT0, LOBYTE (Credit)); SET_GAME_STATE (MELNORME_CREDIT1, HIBYTE (Credit)); LockMutex (GraphicsLock); - DrawStatusMessage ((UNICODE *)~0); + DrawStatusMessage (NULL); UnlockMutex (GraphicsLock); } else @@ -1810,6 +1811,8 @@ static void Intro (void) { + prevMsgMode = SetStatusMessageMode (SMM_CREDITS); + if (GET_GAME_STATE (MET_MELNORME) == 0) { SET_GAME_STATE (MET_MELNORME, 1); @@ -1841,14 +1844,16 @@ static COUNT uninit_melnorme (void) { - return (0); + return 0; } static void post_melnorme_enc (void) { LockMutex (GraphicsLock); - DrawStatusMessage (0); + if (prevMsgMode != SMM_UNDEFINED) + SetStatusMessageMode (prevMsgMode); + DrawStatusMessage (NULL); UnlockMutex (GraphicsLock); } @@ -1868,6 +1873,8 @@ local_stack0 = 0; local_stack1 = 0; + prevMsgMode = SMM_UNDEFINED; + SET_GAME_STATE (BATTLE_SEGUE, 0); AskedToBuy = FALSE; retval = &melnorme_desc; Modified: trunk/sc2/src/uqm/encount.c =================================================================== --- trunk/sc2/src/uqm/encount.c 2009-11-17 09:56:02 UTC (rev 3311) +++ trunk/sc2/src/uqm/encount.c 2009-11-17 21:41:37 UTC (rev 3312) @@ -443,6 +443,7 @@ STAMP ship_s; const UNICODE *str1 = NULL; const UNICODE *str2 = NULL; + StatMsgMode prevMsgMode; UNICODE buf[80]; HSHIPFRAG hStarShip; SHIP_FRAGMENT *FragPtr; @@ -486,6 +487,7 @@ } UnlockShipFrag (&GLOBAL (npc_built_ship_q), hStarShip); + prevMsgMode = SetStatusMessageMode (SMM_RES_UNITS); Sleepy = TRUE; for (i = 0; i < NUM_SIDES; ++i) { @@ -539,7 +541,7 @@ { RecycleAmount = 0; - DrawStatusMessage ((UNICODE *)~0); + DrawStatusMessage (NULL); ship_s.origin.x = scavenge_r.corner.x + 32; ship_s.origin.y = scavenge_r.corner.y + 56; @@ -651,6 +653,7 @@ UnlockShipFrag (pQueue, hStarShip); } } + SetStatusMessageMode (prevMsgMode); if (VictoryState) { Modified: trunk/sc2/src/uqm/planets/cargo.c =================================================================== --- trunk/sc2/src/uqm/planets/cargo.c 2009-11-17 09:56:02 UTC (rev 3311) +++ trunk/sc2/src/uqm/planets/cargo.c 2009-11-17 21:41:37 UTC (rev 3312) @@ -376,10 +376,6 @@ --pMS->Initialized; pMS->CurState = 1; - LockMutex (GraphicsLock); - DrawStatusMessage ((UNICODE *)~0); - UnlockMutex (GraphicsLock); - SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); DoInput (pMS, TRUE); Modified: trunk/sc2/src/uqm/shipyard.c =================================================================== --- trunk/sc2/src/uqm/shipyard.c 2009-11-17 09:56:02 UTC (rev 3311) +++ trunk/sc2/src/uqm/shipyard.c 2009-11-17 21:41:37 UTC (rev 3312) @@ -802,7 +802,6 @@ // refresh SIS display DeltaSISGauges (UNDEFINED_DELTA, UNDEFINED_DELTA, UNDEFINED_DELTA); - DrawStatusMessage ((UNICODE *)~0); r.corner.x = pMS->flash_rect0.corner.x; r.corner.y = pMS->flash_rect0.corner.y; r.extent.width = SHIP_WIN_WIDTH; Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2009-11-17 09:56:02 UTC (rev 3311) +++ trunk/sc2/src/uqm/sis.c 2009-11-17 21:41:37 UTC (rev 3312) @@ -33,6 +33,8 @@ #include <stdio.h> +static StatMsgMode curMsgMode = SMM_DEFAULT; + static const UNICODE *describeWeapon (BYTE moduleType); void @@ -363,34 +365,40 @@ BUILD_COLOR (MAKE_RGB15 (0x00, 0x08, 0x00), 0x6E)); ClearDrawable (); - if (pStr == (UNICODE *)~0) + if (!pStr) { - if (pMenuState == 0 - && CommData.ConversationPhrases /* Melnorme shenanigans */ - && cur_comm == MELNORME_CONVERSATION) + if (curMsgMode == SMM_CREDITS) + { sprintf (buf, "%u %s", MAKE_WORD ( GET_GAME_STATE (MELNORME_CREDIT0), GET_GAME_STATE (MELNORME_CREDIT1) ), GAME_STRING (STATUS_STRING_BASE + 0)); // "Cr" - else if (GET_GAME_STATE (CHMMR_BOMB_STATE) < 2) - sprintf (buf, "%u %s", GLOBAL_SIS (ResUnits), - GAME_STRING (STATUS_STRING_BASE + 1)); // "RU" + } + else if (curMsgMode == SMM_RES_UNITS) + { + if (GET_GAME_STATE (CHMMR_BOMB_STATE) < 2) + { + sprintf (buf, "%u %s", GLOBAL_SIS (ResUnits), + GAME_STRING (STATUS_STRING_BASE + 1)); // "RU" + } + else + { + sprintf (buf, "%s %s", + (optWhichMenu == OPT_PC) ? + GAME_STRING (STATUS_STRING_BASE + 2) + : STR_INFINITY_SIGN, // "UNLIMITED" + GAME_STRING (STATUS_STRING_BASE + 1)); // "RU" + } + } else - sprintf (buf, "%s %s", - (optWhichMenu == OPT_PC) ? - GAME_STRING (STATUS_STRING_BASE + 2) - : STR_INFINITY_SIGN, // "UNLIMITED" - GAME_STRING (STATUS_STRING_BASE + 1)); // "RU" + { // Just a date + DateToString (buf, sizeof buf, + GLOBAL (GameClock.month_index), + GLOBAL (GameClock.day_index), + GLOBAL (GameClock.year_index)); + } pStr = buf; } - else if (pStr == 0) - { - DateToString (buf, sizeof buf, - GLOBAL (GameClock.month_index), - GLOBAL (GameClock.day_index), - GLOBAL (GameClock.year_index)); - pStr = buf; - } t.baseline.x = STATUS_MESSAGE_WIDTH >> 1; t.baseline.y = STATUS_MESSAGE_HEIGHT - 1; @@ -409,6 +417,14 @@ SetContext (OldContext); } +StatMsgMode +SetStatusMessageMode (StatMsgMode newMode) +{ + StatMsgMode oldMode = curMsgMode; + curMsgMode = newMode; + return oldMode; +} + void DrawCaptainsName (void) { @@ -1041,7 +1057,8 @@ else GLOBAL_SIS (ResUnits) += resunit_delta; - DrawStatusMessage ((UNICODE *)~0); + assert (curMsgMode == SMM_RES_UNITS); + DrawStatusMessage (NULL); } else { @@ -1052,17 +1069,7 @@ SetContextForeGroundColor ( BUILD_COLOR (MAKE_RGB15 (0x00, 0x08, 0x00), 0x6E)); DrawFilledRectangle (&r); - - if ((pMenuState == 0 - && CommData.ConversationPhrases /* Melnorme shenanigans */ - && cur_comm == MELNORME_CONVERSATION) - || (pMenuState - && (pMenuState->InputFunc == DoStarBase - || pMenuState->InputFunc == DoOutfit - || pMenuState->InputFunc == DoShipyard))) - DrawStatusMessage ((UNICODE *)~0); - else - DrawStatusMessage (NULL); + DrawStatusMessage (NULL); } } UnbatchGraphics (); Modified: trunk/sc2/src/uqm/sis.h =================================================================== --- trunk/sc2/src/uqm/sis.h 2009-11-17 09:56:02 UTC (rev 3311) +++ trunk/sc2/src/uqm/sis.h 2009-11-17 21:41:37 UTC (rev 3312) @@ -277,7 +277,20 @@ extern void DrawGameDate (void); extern void DateToString (unsigned char *buf, size_t bufLen, BYTE month_index, BYTE day_index, COUNT year_index); + extern void DrawStatusMessage (const UNICODE *pStr); +typedef enum +{ + SMM_UNDEFINED = 0, + SMM_DATE, + SMM_RES_UNITS, + SMM_CREDITS, + + SMM_DEFAULT = SMM_DATE, +} StatMsgMode; +// Sets the new mode and return the previous +extern StatMsgMode SetStatusMessageMode (StatMsgMode); + extern void DrawLanders (void); extern void DrawStorageBays (BOOLEAN Refresh); extern void GetGaugeRect (RECT *pRect, BOOLEAN IsCrewRect); Modified: trunk/sc2/src/uqm/starbase.c =================================================================== --- trunk/sc2/src/uqm/starbase.c 2009-11-17 09:56:02 UTC (rev 3311) +++ trunk/sc2/src/uqm/starbase.c 2009-11-17 21:41:37 UTC (rev 3312) @@ -451,6 +451,7 @@ { MENU_STATE MenuState; CONTEXT OldContext; + StatMsgMode prevMsgMode = SMM_UNDEFINED; if (GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) { @@ -497,6 +498,7 @@ } } + prevMsgMode = SetStatusMessageMode (SMM_RES_UNITS); pMenuState = &MenuState; memset (&MenuState, 0, sizeof (MenuState)); @@ -514,6 +516,7 @@ SetContext (OldContext); pMenuState = 0; + SetStatusMessageMode (prevMsgMode); ExitStarBase: if (!(GLOBAL (CurrentActivity) & (CHECK_LOAD | CHECK_ABORT))) Modified: trunk/sc2/src/uqm/starcon.c =================================================================== --- trunk/sc2/src/uqm/starcon.c 2009-11-17 09:56:02 UTC (rev 3311) +++ trunk/sc2/src/uqm/starcon.c 2009-11-17 21:41:37 UTC (rev 3312) @@ -209,7 +209,8 @@ continue; } #endif - + SetStatusMessageMode (SMM_DEFAULT); + if (!((GLOBAL (CurrentActivity) | NextActivity) & CHECK_LOAD)) ZeroVelocityComponents (&GLOBAL (velocity)); // not going into talking pet conversation This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-18 05:39:48
|
Revision: 3318 http://sc2.svn.sourceforge.net/sc2/?rev=3318&view=rev Author: avolkov Date: 2009-11-18 05:39:40 +0000 (Wed, 18 Nov 2009) Log Message: ----------- Removed references to pMenuState from comm (required parameter carried forward); some header file cleanups; comments and minor cleanup of Starbase Modified Paths: -------------- trunk/sc2/src/uqm/comm/chmmr/chmmrc.c trunk/sc2/src/uqm/comm/commall.h trunk/sc2/src/uqm/comm/melnorm/melnorm.c trunk/sc2/src/uqm/comm/urquan/urquanc.c trunk/sc2/src/uqm/comm.c trunk/sc2/src/uqm/comm.h trunk/sc2/src/uqm/commglue.h trunk/sc2/src/uqm/credits.c trunk/sc2/src/uqm/encount.h trunk/sc2/src/uqm/gameev.c trunk/sc2/src/uqm/gameopt.c trunk/sc2/src/uqm/grpinfo.c trunk/sc2/src/uqm/ipdisp.c trunk/sc2/src/uqm/menu.c trunk/sc2/src/uqm/plandata.c trunk/sc2/src/uqm/planets/lander.c trunk/sc2/src/uqm/planets/orbits.c trunk/sc2/src/uqm/planets/pstarmap.c trunk/sc2/src/uqm/planets/scan.c trunk/sc2/src/uqm/restart.c trunk/sc2/src/uqm/sis.c trunk/sc2/src/uqm/starbase.c trunk/sc2/src/uqm/starcon.c Modified: trunk/sc2/src/uqm/comm/chmmr/chmmrc.c =================================================================== --- trunk/sc2/src/uqm/comm/chmmr/chmmrc.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/comm/chmmr/chmmrc.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -577,6 +577,7 @@ } else { + SetCommIntroMode (CIM_FADE_IN_SCREEN, ONE_SECOND * 2); NPCPhrase (WE_ARE_FREE); if (NumVisits) Modified: trunk/sc2/src/uqm/comm/commall.h =================================================================== --- trunk/sc2/src/uqm/comm/commall.h 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/comm/commall.h 2009-11-18 05:39:40 UTC (rev 3318) @@ -20,7 +20,6 @@ #include "uqm/colors.h" #include "uqm/comm.h" #include "uqm/commglue.h" -#include "uqm/encount.h" #include "libs/reslib.h" #endif /* _COMMALL_H */ Modified: trunk/sc2/src/uqm/comm/melnorm/melnorm.c =================================================================== --- trunk/sc2/src/uqm/comm/melnorm/melnorm.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/comm/melnorm/melnorm.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -26,7 +26,10 @@ #include "libs/inplib.h" #include "libs/mathlib.h" +// XXX: temporary, for SOL_X/SOL_Y +#include "uqm/races.h" + #define NUM_HISTORY_ITEMS 9 #define NUM_EVENT_ITEMS 8 #define NUM_ALIEN_RACE_ITEMS 16 Modified: trunk/sc2/src/uqm/comm/urquan/urquanc.c =================================================================== --- trunk/sc2/src/uqm/comm/urquan/urquanc.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/comm/urquan/urquanc.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -429,6 +429,7 @@ } else if (GET_GAME_STATE (PLAYER_HYPNOTIZED)) { + SetCommIntroMode (CIM_FADE_IN_SCREEN, ONE_SECOND * 5); UrquanHypno ((RESPONSE_REF)0); } else Modified: trunk/sc2/src/uqm/comm.c =================================================================== --- trunk/sc2/src/uqm/comm.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/comm.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -50,10 +50,11 @@ LOCDATA CommData; -int cur_comm; UNICODE shared_phrase_buf[2048]; static BOOLEAN TalkingFinished; +static CommIntroMode curIntroMode = CIM_DEFAULT; +static TimeCount fadeTime; typedef struct response_entry { @@ -686,6 +687,47 @@ TalkingFinished = TRUE; } +static void +CommIntroTransition (void) +{ + if (curIntroMode == CIM_CROSSFADE_SCREEN) + { + ScreenTransition (3, NULL); + UnbatchGraphics (); + } + else if (curIntroMode == CIM_CROSSFADE_SPACE) + { + RECT r; + r.corner.x = SIS_ORG_X; + r.corner.y = SIS_ORG_Y; + r.extent.width = SIS_SCREEN_WIDTH; + r.extent.height = SIS_SCREEN_HEIGHT; + ScreenTransition (3, &r); + UnbatchGraphics (); + } + else if (curIntroMode == CIM_CROSSFADE_WINDOW) + { + ScreenTransition (3, &CommWndRect); + UnbatchGraphics (); + } + else if (curIntroMode == CIM_FADE_IN_SCREEN) + { + BYTE clut_buf[] = {FadeAllToColor}; + UnbatchGraphics (); + XFormColorMap ((COLORMAPPTR)clut_buf, fadeTime); + } + else + { // Uknown transition + // Have to unbatch anyway or no more graphics, ever + UnbatchGraphics (); + assert (0 && "Unknown comm intro transition"); + } + + // Reset the mode for next time. Everything that needs a + // different one will let us know. + curIntroMode = CIM_DEFAULT; +} + void AlienTalkSegue (COUNT wait_track) { @@ -703,43 +745,7 @@ DrawAlienFrame (NULL, 0, TRUE); UpdateSpeechGraphics (TRUE); - if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE - || (!GET_GAME_STATE (PLAYER_HYPNOTIZED) - && !GET_GAME_STATE (CHMMR_EMERGING) - && GET_GAME_STATE (CHMMR_BOMB_STATE) != 2 - && (pMenuState == 0 || !GET_GAME_STATE (MOONBASE_ON_SHIP) - || GET_GAME_STATE (PROBE_ILWRATH_ENCOUNTER)))) - { - RECT r; - - if (pMenuState == 0 && - LOBYTE (GLOBAL (CurrentActivity)) != WON_LAST_BATTLE) - { - r.corner.x = SIS_ORG_X; - r.corner.y = SIS_ORG_Y; - r.extent.width = SIS_SCREEN_WIDTH; - r.extent.height = SIS_SCREEN_HEIGHT; - ScreenTransition (3, &r); - } - else - { - ScreenTransition (3, &CommWndRect); - } - UnbatchGraphics (); - } - else - { - BYTE clut_buf[] = {FadeAllToColor}; - - UnbatchGraphics (); - if (GET_GAME_STATE (MOONBASE_ON_SHIP) - || GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) - XFormColorMap ((COLORMAPPTR)clut_buf, ONE_SECOND * 2); - else if (GET_GAME_STATE (CHMMR_EMERGING)) - XFormColorMap ((COLORMAPPTR)clut_buf, ONE_SECOND * 2); - else - XFormColorMap ((COLORMAPPTR)clut_buf, ONE_SECOND * 5); - } + CommIntroTransition (); pCurInputState->Initialized = TRUE; PlayMusic (CommData.AlienSong, TRUE, 1); @@ -1238,28 +1244,21 @@ SetContextClipRect (&r); CommWndRect.corner = r.corner; - if (pMenuState == 0) - { - RepairSISBorder (); - UnlockMutex (GraphicsLock); - DrawMenuStateStrings ((BYTE)~0, 1); - LockMutex (GraphicsLock); + DrawSISFrame (); + // TODO: find a better way to do this, perhaps set the titles + // forward from callers. + if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) == (BYTE)~0 + && GET_GAME_STATE (STARBASE_AVAILABLE)) + { // Talking to allied Starbase + DrawSISMessage (GAME_STRING (STARBASE_STRING_BASE + 1)); + // "Starbase Commander" + DrawSISTitle (GAME_STRING (STARBASE_STRING_BASE + 0)); + // "Starbase" } - else /* in starbase */ - { - DrawSISFrame (); - if (GET_GAME_STATE (STARBASE_AVAILABLE)) - { - DrawSISMessage (GAME_STRING (STARBASE_STRING_BASE + 1)); - // "Starbase Commander" - DrawSISTitle (GAME_STRING (STARBASE_STRING_BASE + 0)); - // "Starbase" - } - else - { - DrawSISMessage (NULL); - DrawSISTitle (GLOBAL_SIS (PlanetName)); - } + else + { // Default titles: star name + planet name + DrawSISMessage (NULL); + DrawSISTitle (GLOBAL_SIS (PlanetName)); } } @@ -1297,6 +1296,13 @@ pCurInputState = 0; } +void +SetCommIntroMode (CommIntroMode newMode, TimeCount howLong) +{ + curIntroMode = newMode; + fadeTime = howLong; +} + COUNT InitCommunication (CONVERSATION which_comm) { @@ -1400,9 +1406,7 @@ if (status == HAIL) { - cur_comm = which_comm; HailAlien (); - cur_comm = 0; } else if (LocDataPtr) { // only when comm initied successfully @@ -1417,10 +1421,14 @@ status = 0; if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { + // The Sa-Matra battle is skipped when Cyborg is enabled. + // Most likely because the Cyborg is too dumb to know what + // to do in this battle. if (LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE && (GLOBAL (glob_flags) & CYBORG_ENABLED)) ReinitQueue (&GLOBAL (npc_built_ship_q)); + // Clear the location flags SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 0); status = (GET_GAME_STATE (BATTLE_SEGUE) && GetHeadLink (&GLOBAL (npc_built_ship_q))); Modified: trunk/sc2/src/uqm/comm.h =================================================================== --- trunk/sc2/src/uqm/comm.h 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/comm.h 2009-11-18 05:39:40 UTC (rev 3318) @@ -20,6 +20,8 @@ #include "globdata.h" #include "libs/compiler.h" #include "libs/gfxlib.h" +#include "commglue.h" + // for CONVERSATION #ifdef COMM_INTERNAL @@ -98,8 +100,16 @@ #endif +#define TEXT_X_OFFS 1 +#define TEXT_Y_OFFS 1 +#define SIS_TEXT_WIDTH (SIS_SCREEN_WIDTH - (TEXT_X_OFFS << 1)) + extern void init_communication (void); extern void uninit_communication (void); + +extern COUNT InitCommunication (CONVERSATION which_comm); +extern void RaceCommunication (void); + extern void AlienTalkSegue (COUNT wait_track); BOOLEAN getLineWithinWidth(TEXT *pText, const unsigned char **startNext, SIZE maxWidth, COUNT maxChars); @@ -108,6 +118,17 @@ extern RECT CommWndRect; /* comm window rect */ +typedef enum +{ + CIM_CROSSFADE_SPACE, + CIM_CROSSFADE_WINDOW, + CIM_CROSSFADE_SCREEN, + CIM_FADE_IN_SCREEN, + + CIM_DEFAULT = CIM_CROSSFADE_SPACE, +} CommIntroMode; +extern void SetCommIntroMode (CommIntroMode, TimeCount howLong); + extern void EnableTalkingAnim (BOOLEAN enable); #endif /* _COMM_H */ Modified: trunk/sc2/src/uqm/commglue.h =================================================================== --- trunk/sc2/src/uqm/commglue.h 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/commglue.h 2009-11-18 05:39:40 UTC (rev 3318) @@ -54,7 +54,6 @@ } CONVERSATION; extern LOCDATA CommData; -extern int cur_comm; extern UNICODE shared_phrase_buf[2048]; #define PLAYER_SAID(r,i) ((r)==(i)) Modified: trunk/sc2/src/uqm/credits.c =================================================================== --- trunk/sc2/src/uqm/credits.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/credits.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -19,11 +19,9 @@ #include "credits.h" #include "controls.h" -#include "encount.h" #include "options.h" #include "oscill.h" #include "comm.h" -#include "commglue.h" #include "resinst.h" #include "nameref.h" #include "settings.h" @@ -617,6 +615,7 @@ for (i = 0; (i < NUM_OUTTAKES) && !(GLOBAL (CurrentActivity) & CHECK_ABORT); i++) { + SetCommIntroMode (CIM_CROSSFADE_WINDOW, 0); InitCommunication (outtake_list[i]); } Modified: trunk/sc2/src/uqm/encount.h =================================================================== --- trunk/sc2/src/uqm/encount.h 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/encount.h 2009-11-18 05:39:40 UTC (rev 3318) @@ -19,11 +19,12 @@ #ifndef _ENCOUNT_H #define _ENCOUNT_H +// XXX: temporary, for CONVERSATION #include "commglue.h" #include "displist.h" #include "libs/gfxlib.h" #include "planets/planets.h" -#include "races.h" +#include "element.h" typedef HLINK HENCOUNTER; @@ -124,10 +125,7 @@ #define UMGAH_DEFINED TALKING_PET_DEFINED -#define TEXT_X_OFFS 1 -#define TEXT_Y_OFFS 1 -#define SIS_TEXT_WIDTH (SIS_SCREEN_WIDTH - (TEXT_X_OFFS << 1)) - +// XXX: The stuff till EOC does not belong here extern STAR_DESC *CurStarDescPtr; extern STAR_DESC *star_array; @@ -137,6 +135,7 @@ SIZE xbounds, SIZE ybounds); extern void GetClusterName (const STAR_DESC *pSD, UNICODE buf[]); +// <<< EOC enum { @@ -149,8 +148,9 @@ extern void BuildBattle (COUNT which_player); extern COUNT InitEncounter (void); extern COUNT UninitEncounter (void); + +// XXX: in comm.h, temporary, until solsys generation code is redone extern COUNT InitCommunication (CONVERSATION which_comm); -extern void RaceCommunication (void); extern void GenerateSOL (BYTE control); extern void GenerateShofixti (BYTE control); Modified: trunk/sc2/src/uqm/gameev.c =================================================================== --- trunk/sc2/src/uqm/gameev.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/gameev.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -19,6 +19,7 @@ #include "build.h" #include "clock.h" +// XXX: for CurStarDescPtr and XXX_DEFINED constants #include "encount.h" #include "globdata.h" #include "hyper.h" Modified: trunk/sc2/src/uqm/gameopt.c =================================================================== --- trunk/sc2/src/uqm/gameopt.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/gameopt.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -21,7 +21,9 @@ #include "build.h" #include "colors.h" #include "commglue.h" + // for CommData #include "controls.h" +// XXX: for FindStart(), GetClusterName() #include "encount.h" #include "planets/lander.h" #include "gamestr.h" Modified: trunk/sc2/src/uqm/grpinfo.c =================================================================== --- trunk/sc2/src/uqm/grpinfo.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/grpinfo.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -17,6 +17,7 @@ */ #include "build.h" +// XXX: for CurStarDescPtr and XXX_DEFINED constants #include "encount.h" #include "libs/file.h" #include "globdata.h" Modified: trunk/sc2/src/uqm/ipdisp.c =================================================================== --- trunk/sc2/src/uqm/ipdisp.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/ipdisp.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -25,6 +25,7 @@ #include "process.h" #include "grpinfo.h" #include "encount.h" + // for EncounterGroup, EncounterRace #include "libs/mathlib.h" Modified: trunk/sc2/src/uqm/menu.c =================================================================== --- trunk/sc2/src/uqm/menu.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/menu.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -17,7 +17,6 @@ */ #include "colors.h" -#include "commglue.h" #include "controls.h" #include "options.h" #include "setup.h" Modified: trunk/sc2/src/uqm/plandata.c =================================================================== --- trunk/sc2/src/uqm/plandata.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/plandata.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -16,8 +16,10 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +// XXX: for XXX_DEFINED constants #include "encount.h" #include "resinst.h" +#include "planets/planets.h" #include "planets/elemdata.h" Modified: trunk/sc2/src/uqm/planets/lander.c =================================================================== --- trunk/sc2/src/uqm/planets/lander.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/planets/lander.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -23,6 +23,7 @@ #include "../cons_res.h" #include "../controls.h" #include "../colors.h" +// XXX: for CurStarDescPtr and XXX_DEFINED #include "../encount.h" #include "../process.h" #include "../gamestr.h" Modified: trunk/sc2/src/uqm/planets/orbits.c =================================================================== --- trunk/sc2/src/uqm/planets/orbits.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/planets/orbits.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -17,6 +17,7 @@ */ #include "planets.h" +// XXX: for CurStarDescPtr #include "../encount.h" #include "libs/compiler.h" #include "libs/mathlib.h" Modified: trunk/sc2/src/uqm/planets/pstarmap.c =================================================================== --- trunk/sc2/src/uqm/planets/pstarmap.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/planets/pstarmap.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -19,6 +19,7 @@ #include "scan.h" #include "../colors.h" #include "../controls.h" +// XXX: for stuff that does not belong there #include "../encount.h" #include "../gameopt.h" #include "../gamestr.h" Modified: trunk/sc2/src/uqm/planets/scan.c =================================================================== --- trunk/sc2/src/uqm/planets/scan.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/planets/scan.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -22,6 +22,7 @@ #include "../cons_res.h" #include "../controls.h" #include "../encount.h" + // for EncounterGroup #include "../gamestr.h" #include "../nameref.h" #include "../resinst.h" Modified: trunk/sc2/src/uqm/restart.c =================================================================== --- trunk/sc2/src/uqm/restart.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/restart.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -21,6 +21,7 @@ #include "colors.h" #include "controls.h" #include "credits.h" +// XXX: for star_array[] #include "encount.h" #include "fmv.h" #include "gamestr.h" Modified: trunk/sc2/src/uqm/sis.c =================================================================== --- trunk/sc2/src/uqm/sis.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/sis.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -17,7 +17,8 @@ */ #include "colors.h" -#include "commglue.h" +#include "races.h" +// XXX: including encount.h for stuff that does not belong there #include "encount.h" #include "gamestr.h" #include "options.h" Modified: trunk/sc2/src/uqm/starbase.c =================================================================== --- trunk/sc2/src/uqm/starbase.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/starbase.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -19,7 +19,9 @@ #include "build.h" #include "colors.h" #include "controls.h" +// XXX: for CurStarDescPtr #include "encount.h" +#include "comm.h" #include "gamestr.h" #include "load.h" #include "starbase.h" @@ -34,6 +36,8 @@ MENU_STATE *pMenuState; +static void CleanupAfterStarBase (void); + static void DrawBaseStateStrings (STARBASE_STATE OldState, STARBASE_STATE NewState) { @@ -289,6 +293,8 @@ BOOLEAN DoStarBase (MENU_STATE *pMS) { + // XXX: This function is full of hacks and otherwise strange code + if (GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD)) { pMS->CurState = DEPART_BASE; @@ -344,9 +350,7 @@ UnbatchGraphics (); UnlockMutex (GraphicsLock); } - else if (PulsedInputState.menu[KEY_MENU_SELECT] - || GET_GAME_STATE (MOONBASE_ON_SHIP) - || GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) + else if (PulsedInputState.menu[KEY_MENU_SELECT]) { ExitStarBase: DestroyDrawable (ReleaseDrawable (pMS->CurFrame)); @@ -372,6 +376,8 @@ { FlushInput (); InitCommunication (COMMANDER_CONVERSATION); + // XXX: InitCommunication() clears these flags, and we need them + // This marks that we are in Starbase. SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, (BYTE)~0); } else @@ -453,22 +459,31 @@ CONTEXT OldContext; StatMsgMode prevMsgMode = SMM_UNDEFINED; + // XXX: This should probably be moved out to Starcon2Main() if (GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) - { - CurStarDescPtr = 0; - goto TimePassage; + { // We were just transported by Chmmr to the Starbase + // Force a reload of the SolarSys + CurStarDescPtr = NULL; + // This marks that we are in Starbase. + SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, (BYTE)~0); } - else if (!GET_GAME_STATE (STARBASE_AVAILABLE)) + + if (!GET_GAME_STATE (STARBASE_AVAILABLE)) { HSHIPFRAG hStarShip; SHIP_FRAGMENT *FragPtr; pMenuState = 0; + // Unallied Starbase conversation + SetCommIntroMode (CIM_CROSSFADE_SCREEN, 0); InitCommunication (COMMANDER_CONVERSATION); if (!GET_GAME_STATE (PROBE_ILWRATH_ENCOUNTER) || (GLOBAL (CurrentActivity) & CHECK_ABORT)) - goto ExitStarBase; + { + CleanupAfterStarBase (); + return; + } /* Create an Ilwrath ship responding to the Ur-Quan * probe's broadcast */ @@ -483,18 +498,18 @@ InitCommunication (ILWRATH_CONVERSATION); if (GLOBAL_SIS (CrewEnlisted) == (COUNT)~0 || (GLOBAL (CurrentActivity) & CHECK_ABORT)) - return; - SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, (BYTE)~0); - + return; // Killed by Ilwrath + + // After Ilwrath battle, about-to-ally Starbase conversation { pMenuState = &MenuState; + SetCommIntroMode (CIM_CROSSFADE_SCREEN, 0); InitCommunication (COMMANDER_CONVERSATION); - -TimePassage: + if (GLOBAL (CurrentActivity) & CHECK_ABORT) + return; + // XXX: InitCommunication() clears these flags, and we need them + // This marks that we are in Starbase. SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, (BYTE)~0); - DoTimePassage (); - if (GLOBAL_SIS (CrewEnlisted) == (COUNT)~0) - return; // You are now dead! Thank you! } } @@ -504,11 +519,23 @@ memset (&MenuState, 0, sizeof (MenuState)); MenuState.InputFunc = DoStarBase; + if (GET_GAME_STATE (MOONBASE_ON_SHIP) || GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) - { - MenuState.Initialized = TRUE; - MenuState.CurState = TALK_COMMANDER; + { // Go immediately into a conversation with the Commander when the + // Starbase becomes available for the first time, or after Chmmr + // install the bomb. + DoTimePassage (); + if (GLOBAL_SIS (CrewEnlisted) == (COUNT)~0) + return; // You are now dead! Thank you! (killed by Kohr-Ah) + + SetCommIntroMode (CIM_FADE_IN_SCREEN, ONE_SECOND * 2); + InitCommunication (COMMANDER_CONVERSATION); + if (GLOBAL (CurrentActivity) & CHECK_ABORT) + return; + // XXX: InitCommunication() clears these flags, and we need them + // This marks that we are in Starbase. + SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, (BYTE)~0); } OldContext = SetContext (ScreenContext); @@ -518,10 +545,17 @@ pMenuState = 0; SetStatusMessageMode (prevMsgMode); -ExitStarBase: + CleanupAfterStarBase (); +} + +static void +CleanupAfterStarBase (void) +{ if (!(GLOBAL (CurrentActivity) & (CHECK_LOAD | CHECK_ABORT))) { + // Mark as not in Starbase anymore SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 0); + // Fake a load so Starcon2Main takes us to IP GLOBAL (CurrentActivity) = CHECK_LOAD; NextActivity = MAKE_WORD (IN_INTERPLANETARY, 0) | START_INTERPLANETARY; Modified: trunk/sc2/src/uqm/starcon.c =================================================================== --- trunk/sc2/src/uqm/starcon.c 2009-11-18 01:59:57 UTC (rev 3317) +++ trunk/sc2/src/uqm/starcon.c 2009-11-18 05:39:40 UTC (rev 3318) @@ -18,7 +18,7 @@ #include <stdlib.h> -#include "encount.h" +#include "comm.h" #include "battle.h" #include "fmv.h" #include "gameev.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <av...@us...> - 2009-11-18 13:27:58
|
Revision: 3320 http://sc2.svn.sourceforge.net/sc2/?rev=3320&view=rev Author: avolkov Date: 2009-11-18 13:27:48 +0000 (Wed, 18 Nov 2009) Log Message: ----------- The utter destruction of pMenuState Modified Paths: -------------- trunk/sc2/src/uqm/menustat.h trunk/sc2/src/uqm/pickship.c trunk/sc2/src/uqm/planets/pstarmap.c trunk/sc2/src/uqm/planets/roster.c trunk/sc2/src/uqm/planets/scan.c trunk/sc2/src/uqm/starbase.c Modified: trunk/sc2/src/uqm/menustat.h =================================================================== --- trunk/sc2/src/uqm/menustat.h 2009-11-18 12:55:10 UTC (rev 3319) +++ trunk/sc2/src/uqm/menustat.h 2009-11-18 13:27:48 UTC (rev 3320) @@ -48,8 +48,6 @@ void *Extra; } MENU_STATE; -extern MENU_STATE *pMenuState; - #endif /* _MENUSTAT_H */ Modified: trunk/sc2/src/uqm/pickship.c =================================================================== --- trunk/sc2/src/uqm/pickship.c 2009-11-18 12:55:10 UTC (rev 3319) +++ trunk/sc2/src/uqm/pickship.c 2009-11-18 13:27:48 UTC (rev 3320) @@ -278,10 +278,8 @@ MenuState.flash_rect1.extent.width = 0; UnlockMutex (GraphicsLock); - pMenuState = &MenuState; SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); DoInput (&MenuState, FALSE); - pMenuState = 0; LockMutex (GraphicsLock); SetFlashRect (NULL); Modified: trunk/sc2/src/uqm/planets/pstarmap.c =================================================================== --- trunk/sc2/src/uqm/planets/pstarmap.c 2009-11-18 12:55:10 UTC (rev 3319) +++ trunk/sc2/src/uqm/planets/pstarmap.c 2009-11-18 13:27:48 UTC (rev 3320) @@ -1590,7 +1590,6 @@ RECT clip_r; CONTEXT OldContext; - pMenuState = &MenuState; memset (&MenuState, 0, sizeof (MenuState)); zoomLevel = 0; @@ -1638,8 +1637,6 @@ DoInput (&MenuState, FALSE); SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); - pMenuState = 0; - LockMutex (GraphicsLock); DrawHyperCoords (universe); @@ -1717,10 +1714,8 @@ break; case EQUIP_DEVICE: { - pMenuState = pMS; if (!Devices (pMS)) select = FALSE; - pMenuState = 0; if (GET_GAME_STATE (PORTAL_COUNTER)) { // A player-induced portal to QuasiSpace is // opening. Modified: trunk/sc2/src/uqm/planets/roster.c =================================================================== --- trunk/sc2/src/uqm/planets/roster.c 2009-11-18 12:55:10 UTC (rev 3319) +++ trunk/sc2/src/uqm/planets/roster.c 2009-11-18 13:27:48 UTC (rev 3320) @@ -390,11 +390,7 @@ if (num_support_ships) { MENU_STATE MenuState; - MENU_STATE *pOldMenuState; - pOldMenuState = pMenuState; - pMenuState = &MenuState; - // 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)); @@ -409,8 +405,6 @@ SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); DoInput (&MenuState, TRUE); - pMenuState = pOldMenuState; - return TRUE; } Modified: trunk/sc2/src/uqm/planets/scan.c =================================================================== --- trunk/sc2/src/uqm/planets/scan.c 2009-11-18 12:55:10 UTC (rev 3319) +++ trunk/sc2/src/uqm/planets/scan.c 2009-11-18 13:27:48 UTC (rev 3320) @@ -1205,10 +1205,8 @@ else PrintCoarseScan3DO (); - pMenuState = &MenuState; SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT); DoInput (&MenuState, FALSE); - pMenuState = 0; if (ScanContext) { Modified: trunk/sc2/src/uqm/starbase.c =================================================================== --- trunk/sc2/src/uqm/starbase.c 2009-11-18 12:55:10 UTC (rev 3319) +++ trunk/sc2/src/uqm/starbase.c 2009-11-18 13:27:48 UTC (rev 3320) @@ -34,8 +34,6 @@ #include "libs/tasklib.h" -MENU_STATE *pMenuState; - static void CleanupAfterStarBase (void); static void @@ -473,8 +471,6 @@ HSHIPFRAG hStarShip; SHIP_FRAGMENT *FragPtr; - pMenuState = 0; - // Unallied Starbase conversation SetCommIntroMode (CIM_CROSSFADE_SCREEN, 0); InitCommunication (COMMANDER_CONVERSATION); @@ -501,25 +497,17 @@ return; // Killed by Ilwrath // After Ilwrath battle, about-to-ally Starbase conversation - { - pMenuState = &MenuState; - SetCommIntroMode (CIM_CROSSFADE_SCREEN, 0); - InitCommunication (COMMANDER_CONVERSATION); - if (GLOBAL (CurrentActivity) & CHECK_ABORT) - return; - // XXX: InitCommunication() clears these flags, and we need them - // This marks that we are in Starbase. - SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, (BYTE)~0); - } + SetCommIntroMode (CIM_CROSSFADE_SCREEN, 0); + InitCommunication (COMMANDER_CONVERSATION); + if (GLOBAL (CurrentActivity) & CHECK_ABORT) + return; + // XXX: InitCommunication() clears these flags, and we need them + // This marks that we are in Starbase. + SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, (BYTE)~0); } prevMsgMode = SetStatusMessageMode (SMM_RES_UNITS); - pMenuState = &MenuState; - memset (&MenuState, 0, sizeof (MenuState)); - - MenuState.InputFunc = DoStarBase; - if (GET_GAME_STATE (MOONBASE_ON_SHIP) || GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) { // Go immediately into a conversation with the Commander when the @@ -538,13 +526,14 @@ SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, (BYTE)~0); } + memset (&MenuState, 0, sizeof (MenuState)); + MenuState.InputFunc = DoStarBase; + OldContext = SetContext (ScreenContext); - DoInput (pMenuState, TRUE); + DoInput (&MenuState, TRUE); SetContext (OldContext); - pMenuState = 0; SetStatusMessageMode (prevMsgMode); - CleanupAfterStarBase (); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |