home · contact · privacy
Emptied map_objects library of stuff that fits better elsewhere, like a new map_objec...
authorChristian Heller <c.heller@plomlompom.de>
Thu, 18 Jul 2013 02:11:42 +0000 (04:11 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Thu, 18 Jul 2013 02:11:42 +0000 (04:11 +0200)
src/draw_wins.c
src/main.c
src/map_objects.c
src/map_objects.h
src/misc.c
src/misc.h

index 9efc8c93146a25a38e8e3a39a514dc37ec3b0345..81281b79aec8299c6c239a7defcef1c4100f3d58 100644 (file)
@@ -101,8 +101,8 @@ extern void draw_map_win (struct Win * win) {
       if (y < height_map_av && x < width_map_av) {
           mvwaddch(win->frame.curses_win, y, x, cells[z]);
         z++; } } }
-  draw_map_objects (world, world->item, map, win);
-  draw_map_objects (world, world->monster, map, win);
+  draw_map_objects (world, (struct MapObj *) world->item, map, win);
+  draw_map_objects (world, (struct MapObj *) world->monster, map, win);
   if (   player->pos.y >= map->offset.y && player->pos.y < map->offset.y + win->frame.size.y
       && player->pos.x >= map->offset.x && player->pos.x < map->offset.x + win->frame.size.x)
     mvwaddch(win->frame.curses_win, player->pos.y - map->offset.y, player->pos.x - map->offset.x, '@'); }
index 53784b8a9e6edb545e4d7b10b2dd8546e25d5946..3d6c0d38f5054db6dcac826b2c871a4ac02841cc 100644 (file)
@@ -8,6 +8,7 @@
 #include "keybindings.h"
 #include "readwrite.h"
 #include "map_objects.h"
+#include "map_object_actions.h"
 #include "map.h"
 #include "misc.h"
 
index 7c13ed21c592717a5f1cccd4b30fb423a0dd1898..731d830df716864932571d14a245e8e52f7bbfe3 100644 (file)
@@ -1,10 +1,8 @@
 #include "map_objects.h"
 #include <stdlib.h>
 #include <stdio.h>
-#include "yx_uint16.h"
 #include "readwrite.h"
 #include "misc.h"
-#include "map.h"
 #include "main.h"
 
 static struct MapObj * get_next_map_obj (void *, char *, size_t, struct MapObj *);
@@ -96,93 +94,3 @@ extern struct MapObjDef * get_map_obj_def (struct World * world, char def_id) {
   if (d->id != def_id)
     for (d = (struct MapObjDef *) world->item_def; d->id != def_id && 0 != d->next; d = d->next);
   return d; }
-
-extern struct yx_uint16 find_passable_pos (struct Map * map) {
-// Return a random passable position on map.
-  struct yx_uint16 pos;
-  for (pos.y = pos.x = 0; 0 == is_passable(map, pos);) {
-      pos.y = rrand(0, 0) % map->size.y;
-      pos.x = rrand(0, 0) % map->size.x; }
-  return pos; }
-
-extern char is_passable (struct Map * map, struct yx_uint16 pos) {
-// Check if coordinate on (or beyond) map is accessible to actor movement.
-  char passable = 0;
-  if (0 <= pos.x && pos.x < map->size.x && 0 <= pos.y && pos.y < map->size.y)
-    if ('.' == map->cells[pos.y * map->size.x + pos.x])
-      passable = 1;
-  return passable; }
-
-extern void move_monster (struct World * world, struct Monster * monster) {
-// Move monster in random direction, trigger fighting when hindered by player/monster.
-  char d = rrand(0, 0) % 5;
-  struct yx_uint16 t = mv_yx_in_dir (d, monster->map_obj.pos);
-  char * msg = malloc(100);
-  struct MapObjDef * mod = get_map_obj_def (world, monster->map_obj.type);
-  char * desc = mod->desc;
-  char * desc_other;
-  if (yx_uint16_cmp (t, world->player->pos)) {
-    sprintf(msg, "\nThe %s hits you.", desc);
-    update_log (world, msg);
-    world->player->hitpoints--;
-    if (0 == world->player->hitpoints)
-      update_log (world, "\nYou are dead.");
-    return; }
-  struct Monster * other_monster;
-  for (other_monster = world->monster; other_monster != 0; other_monster = other_monster->map_obj.next) {
-    if (other_monster == monster)
-      continue;
-    if (yx_uint16_cmp (t, other_monster->map_obj.pos)) {
-      mod = get_map_obj_def (world, monster->map_obj.type);
-      desc_other = mod->desc;
-      sprintf(msg, "\n%s bumps into %s.", desc, desc_other);
-      update_log (world, msg);
-      return; } }
-  free (msg);
-  if (is_passable(world->map, t))
-    monster->map_obj.pos = t; }
-
-extern void move_player (struct World * world, char d) {
-// Move player in direction d, update log and turn over to the enemy.
-  struct yx_uint16 t = mv_yx_in_dir (d, world->player->pos);
-  struct Monster * monster;
-  struct MapObjDef * mod;
-  char * msg = calloc(100, sizeof(char));
-  char * desc;
-  for (monster = world->monster; monster != 0; monster = monster->map_obj.next)
-    if (yx_uint16_cmp (t, monster->map_obj.pos)) {
-      mod = get_map_obj_def (world, monster->map_obj.type);
-      desc = mod->desc;
-      sprintf (msg, "\nYou hit the %s.", desc);
-      update_log (world, msg);
-      monster->hitpoints--;
-      if (0 == monster->hitpoints) {
-        sprintf (msg, "\nYou kill the %s.", desc);
-        update_log (world, msg);
-        if (world->monster == monster)
-          world->monster = world->monster->map_obj.next;
-        else {
-          struct Monster * m_prev;
-          for (m_prev = world->monster; m_prev->map_obj.next != monster; m_prev = m_prev->map_obj.next);
-          m_prev->map_obj.next = monster->map_obj.next; }
-        free(monster); }
-      turn_over (world, d);
-      return; }
-  char * msg_content = "You fail to move";
-  char * dir;
-  if      (NORTH == d) dir = "north";
-  else if (EAST  == d) dir = "east" ;
-  else if (SOUTH == d) dir = "south";
-  else if (WEST  == d) dir = "west" ;
-  if (is_passable(world->map, t)) {
-    msg_content = "You move";
-    world->player->pos = t; }
-  sprintf(msg, "\n%s %s.", msg_content, dir);
-  update_log (world, msg);
-  free(msg);
-  turn_over (world, d); }
-
-extern void player_wait (struct World * world) {
-// Make player wait one turn.
-  update_log (world, "\nYou wait.");
-  turn_over (world, 0); }
index 80e7c0f0cdad7795c06ba46a4fee0ab200b98381..9ef7f3b3a86bf484651bb7601395011d92d5f1b8 100644 (file)
@@ -5,7 +5,6 @@
 #include "yx_uint16.h"
 
 struct World;
-struct Map;
 
 struct Player {
   struct yx_uint16 pos;
@@ -47,10 +46,4 @@ extern void * build_map_objects (struct World *, void *, char, unsigned char, si
                                  void (*) (struct MapObjDef *, void *));
 extern struct MapObjDef * get_map_obj_def (struct World *, char);
 
-extern struct yx_uint16 find_passable_pos (struct Map *);
-extern char is_passable (struct Map *, struct yx_uint16);
-extern void move_monster (struct World *, struct Monster *);
-extern void move_player (struct World *, char);
-extern void player_wait(struct World *);
-
 #endif
index 83ed263a4ff3891925d76f10c3061dc7f7fcb22c..683346f84efd974538a501f904b18f1d909e5ae7 100644 (file)
@@ -5,8 +5,10 @@
 #include "keybindings.h"
 #include "readwrite.h"
 #include "map_objects.h"
+#include "map_object_actions.h"
 #include "map.h"
 #include "main.h"
+#include "yx_uint16.h"
 
 extern uint16_t rrand(char use_seed, uint32_t new_seed) {
 // Pseudo-random number generator (LGC algorithm). Use instead of rand() to ensure portable predictability.
@@ -98,6 +100,14 @@ extern void growshrink_active_window (struct WinMeta * win_meta, char change) {
     else if (change == '*') size.x++;
     resize_active_win (win_meta, size); } }
 
+extern struct yx_uint16 find_passable_pos (struct Map * map) {
+// Return a random passable position on map.
+  struct yx_uint16 pos;
+  for (pos.y = pos.x = 0; 0 == is_passable(map, pos);) {
+      pos.y = rrand(0, 0) % map->size.y;
+      pos.x = rrand(0, 0) % map->size.x; }
+  return pos; }
+
 extern unsigned char meta_keys(int key, struct World * world, struct WinMeta * win_meta,
                                struct Win * win_keys, struct Win * win_map, struct Win * win_info,
                                struct Win * win_log) {
index 5bccd401394cec7e86393eec2e4bbc7d122e2f7c..64e10db078e6d38dcd71645ef8649f65ec13499f 100644 (file)
@@ -2,10 +2,12 @@
 #define MISC_H
 
 #include <stdint.h>
+#include "yx_uint16.h"
 
 struct World;
 struct WinMeta;
 struct Win;
+struct Map;
 
 extern uint16_t rrand(char, uint32_t);
 extern void update_log (struct World *, char *);
@@ -15,6 +17,7 @@ extern void save_game(struct World *);
 extern void toggle_window (struct WinMeta *, struct Win *);
 extern void scroll_pad (struct WinMeta *, char);
 extern void growshrink_active_window (struct WinMeta *, char);
+extern struct yx_uint16 find_passable_pos (struct Map *);
 extern unsigned char meta_keys(int, struct World *, struct WinMeta *, struct Win *, struct Win *, struct Win *, struct Win *);
 
 #endif