From 55ec52e19b3948df99cecd7b5a8c5178de6d9c4d Mon Sep 17 00:00:00 2001 From: Martin Schaffner Date: Sat, 15 May 2004 17:16:34 +0000 Subject: [PATCH] implement repair centers --- ChangeLog | 3 +++ main/fuelcen.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++-- main/fuelcen.h | 5 +++-- main/object.c | 13 ++++++++---- 4 files changed, 70 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index e72478b6..6a91b1fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,9 @@ * main/laser.c: limit homing missile turn rate + * main/fuelcen.{c,h}, main/object.c: implement repair centers + (work like fuel centers but provide shield) + 2004-05-13 Bradley Bell * VisualC/d2/d2x/d2x.dsp, VisualC/d2xgl/d2xgl.dsp, diff --git a/main/fuelcen.c b/main/fuelcen.c index 0f4a2d0f..a924abb5 100644 --- a/main/fuelcen.c +++ b/main/fuelcen.c @@ -1,4 +1,4 @@ -/* $Id: fuelcen.c,v 1.8 2003-10-04 03:30:27 btb Exp $ */ +/* $Id: fuelcen.c,v 1.9 2004-05-15 17:16:34 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -243,7 +243,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #endif #ifdef RCS -static char rcsid[] = "$Id: fuelcen.c,v 1.8 2003-10-04 03:30:27 btb Exp $"; +static char rcsid[] = "$Id: fuelcen.c,v 1.9 2004-05-15 17:16:34 schaffner Exp $"; #endif #include @@ -922,6 +922,59 @@ fix fuelcen_give_fuel(segment *segp, fix MaxAmountCanTake ) } } +//------------------------------------------------------------- +// DM/050904 +// Repair centers +// use same values as fuel centers +fix repaircen_give_shields(segment *segp, fix MaxAmountCanTake ) +{ + segment2 *seg2p = &Segment2s[segp-Segments]; + static fix last_play_time=0; + + Assert( segp != NULL ); + PlayerSegment = segp; + if ( (segp) && (seg2p->special==SEGMENT_IS_REPAIRCEN) ) { + fix amount; +// detect_escort_goal_accomplished(-4); // UGLY! Hack! -4 means went through fuelcen. +// if (Station[segp->value].MaxCapacity<=0) { +// HUD_init_message( "Repaircenter %d is destroyed.", segp->value ); +// return 0; +// } +// if (Station[segp->value].Capacity<=0) { +// HUD_init_message( "Repaircenter %d is empty.", segp->value ); +// return 0; +// } + if (MaxAmountCanTake <= 0 ) { + //gauge_message( "Shields restored!"); + return 0; + } + amount = fixmul(FrameTime,Fuelcen_give_amount); + if (amount > MaxAmountCanTake ) + amount = MaxAmountCanTake; +// if (!(Game_mode & GM_MULTI)) +// if ( Station[segp->value].Capacity < amount ) { +// amount = Station[segp->value].Capacity; +// Station[segp->value].Capacity = 0; +// } else { +// Station[segp->value].Capacity -= amount; +// } + if (last_play_time > GameTime) + last_play_time = 0; + if (GameTime > last_play_time+FUELCEN_SOUND_DELAY) { + digi_play_sample( SOUND_REFUEL_STATION_GIVING_FUEL, F1_0/2 ); +#ifdef NETWORK + if (Game_mode & GM_MULTI) + multi_send_play_sound(SOUND_REFUEL_STATION_GIVING_FUEL, F1_0/2); +#endif + last_play_time = GameTime; + } +//HUD_init_message( "Fuelcen %d has %d/%d fuel", segp->value,f2i(Station[segp->value].Capacity),f2i(Station[segp->value].MaxCapacity) ); + return amount; + } else { + return 0; + } +} + //--unused-- //----------------------------------------------------------- //--unused-- // Damages a fuel center //--unused-- void fuelcen_damage(segment *segp, fix damage ) diff --git a/main/fuelcen.h b/main/fuelcen.h index 83ea7e9f..195665be 100644 --- a/main/fuelcen.h +++ b/main/fuelcen.h @@ -1,4 +1,4 @@ -/* $Id: fuelcen.h,v 1.5 2003-10-04 03:14:47 btb Exp $ */ +/* $Id: fuelcen.h,v 1.6 2004-05-15 17:16:34 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -154,9 +154,10 @@ void fuelcen_replentish_all(); // Create a matcen robot extern object *create_morph_robot(segment *segp, vms_vector *object_pos, int object_id); -// Returns the amount of fuel this segment can give up. +// Returns the amount of fuel/shield this segment can give up. // Can be from 0 to 100. fix fuelcen_give_fuel(segment *segp, fix MaxAmountCanTake ); +fix repaircent_give_shields(segment *segp, fix MaxAmountCanTake ); // Call once per frame. void fuelcen_update_all(); diff --git a/main/object.c b/main/object.c index b6fc2190..5f94b265 100644 --- a/main/object.c +++ b/main/object.c @@ -1,4 +1,4 @@ -/* $Id: object.c,v 1.9 2003-10-04 03:14:47 btb Exp $ */ +/* $Id: object.c,v 1.10 2004-05-15 17:16:34 schaffner Exp $ */ /* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO @@ -2230,7 +2230,11 @@ void object_move_one( object * obj ) fuel=fuelcen_give_fuel( &Segments[obj->segnum], INITIAL_ENERGY-Players[Player_num].energy ); if (fuel > 0 ) { Players[Player_num].energy += fuel; + } + shields = repaircen_give_shields( &Segments[obj->segnum], INITIAL_ENERGY-Players[Player_num].energy ); + if (shields > 0) { + Players[Player_num].shields += shields; } } @@ -2268,9 +2272,10 @@ void object_move_one( object * obj ) case CT_AI: //NOTE LINK TO CT_MORPH ABOVE!!! if (Game_suspended & SUSP_ROBOTS) return; - #if !defined(NDEBUG) && !defined(NMONO) - if (print_object_info>1) mprintf( (0, "AI: Moving robot object #%d\n",obj-Objects )); - #endif +#if !defined(NDEBUG) && !defined(NMONO) + if (print_object_info>1) + mprintf( (0, "AI: Moving robot object #%d\n",obj-Objects )); +#endif do_ai_frame(obj); break; -- 2.39.2