kobodl/myship.h
Ville Lindholm be85e999f0
Fix latent bugs and collapse repetition in myship/filemap
- filemap.cpp: fix inverted ternary in getkey() that dereferenced ref
  when ref==NULL; remove dead strncpy in recurse_get(); log a warning
  when addpath() silently truncates keys longer than 8 chars.
- screen.cpp: replace lone strcpy with memcpy.
- enemies.h: brace nested if/else blocks to silence dangling-else
  warnings (no behavior change).
- myship.cpp: replace three 8-case direction switches (movement and
  twice in shot_single) with dir_dx[]/dir_dy[] lookup tables;
  extract free_bolt() helper to deduplicate five copies of the
  boltst/free_obj/NULL pattern.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 20:56:11 +03:00

115 lines
3.0 KiB
C++

/*
------------------------------------------------------------
Kobo Deluxe - An enhanced SDL port of XKobo
------------------------------------------------------------
* Copyright (C) 1995, 1996, Akira Higuchi
* Copyright (C) 2001, 2003, 2007 David Olofson
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef XKOBO_H_MYSHIP
#define XKOBO_H_MYSHIP
#include "config.h"
#include "gfxengine.h"
#include "game.h"
#define ABS(x) (((x)>=0) ? (x) : (-(x)))
#define MAX(x,y) (((x)>(y)) ? (x) : (y))
//---------------------------------------------------------------------------//
enum _myship_state
{
normal,
dead
};
class _myship
{
static _myship_state _state;
static int di; /* direction */
static int virtx, virty; /* scroll position */
static int x, y;
static int _health;
static int health_time;
static int explo_time;
static int nose_reload_timer;
static int nose_temperature;
static int nose_alt;
static int tail_reload_timer;
static int tail_temperature;
static int tail_alt;
static int lapx, lapy;
static int boltx[MAX_BOLTS], bolty[MAX_BOLTS];
static int boltdx[MAX_BOLTS], boltdy[MAX_BOLTS];
static int boltst[MAX_BOLTS];
/* For the gfxengine connection */
static cs_obj_t *object;
static cs_obj_t *bolt_objects[MAX_BOLTS];
static cs_obj_t *crosshair;
static void state(_myship_state s);
static void shot_single(int i, int dir, int offset);
static void apply_position();
static void explode(int x, int y);
static void free_bolt(int i);
public:
_myship();
static inline int get_x()
{
return x;
}
static inline int get_y()
{
return y;
}
static inline int get_virtx()
{
return virtx;
}
static inline int get_virty()
{
return virty;
}
static inline int get_nose_temp()
{
return nose_temperature;
}
static inline int get_tail_temp()
{
return tail_temperature;
}
static int init();
static void off();
static int move();
static int put();
static void put_crosshair();
static int xkobo_shot();
static int nose_fire();
static int tail_fire();
static int hit_structure();
static int hit_bolt(int ex, int ey, int hitsize, int health);
static void hit(int dmg);
static int health() { return _health; }
static void health(int h) { _health = h; }
static void health_bonus(int h);
static void set_position(int px, int py);
static int alive() { return _state == normal; }
};
extern _myship myship;
#endif // XKOBO_H_MYSHIP