You could make a header file that contains all relevant function prototypes and include it whereever the functions are needed. If your code is divided in several modules (e.g. player.c, zombie.c ...) you can make a header file for each module.

For example, the zombie header file:
Code:
// zombie.h

#ifndef ZOMBIE_H
#define ZOMBIE_H

void zombie_attack(ENTITY *zombie ENTITY *target);
void zombie_die(ENTITY *zombie);
...

#endif



And the appropriate zombie.c-file:
Code:
// zombie.c

// include required header files
#include "zombie.h"
#include "player.h"

/* FUNCTION IMPLEMENTATIONS HERE */



Just as an example.