summaryrefslogtreecommitdiff
path: root/src/being.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/being.cpp')
-rw-r--r--src/being.cpp257
1 files changed, 130 insertions, 127 deletions
diff --git a/src/being.cpp b/src/being.cpp
index 31b87d73..4404854a 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -30,6 +30,7 @@ NODE *player_node = NULL;
NODE *head = NULL; // First node of the list
unsigned int b_count = 0; // Number of beings in the list
+
PATH_NODE::PATH_NODE(unsigned short x, unsigned short y):
next(NULL)
{
@@ -44,172 +45,174 @@ PATH_NODE *calculate_path(
return find_path(1, src_x, src_y, dest_x, dest_y);
}
-/** Returns the first node of the list */
-NODE *get_head() {
- return head;
-}
-
-/** Creates a empty node */
NODE::NODE():
- id(0), job(0),
- next(NULL),
- action(0), frame(0),
- path(NULL),
- speech(NULL), speech_time(0),
- tick_time(0), speed(150),
- emotion(0), emotion_time(0),
- text_x(0), text_y(0),
- hair_style(1), hair_color(1),
- weapon(0)
+ id(0), job(0),
+ next(NULL),
+ action(0), frame(0),
+ path(NULL),
+ speech(NULL), speech_time(0),
+ tick_time(0), speed(150),
+ emotion(0), emotion_time(0),
+ text_x(0), text_y(0),
+ hair_style(1), hair_color(1),
+ weapon(0)
{
memset(coordinates, 0, 3);
speech_color = makecol(0, 0, 0);
}
-/** Returns number of beings in the list */
+NODE *get_head() {
+ return head;
+}
+
unsigned int get_count() {
- return b_count;
+ return b_count;
}
-/** Removes all beings from the list */
void empty() {
- NODE *node = head;
- NODE *next;
- while(node) {
- next = node->next;
- delete node;
- node = next;
- }
- b_count = 0;
- head = NULL;
+ NODE *node = head;
+ NODE *next;
+ while(node) {
+ next = node->next;
+ delete node;
+ node = next;
+ }
+ b_count = 0;
+ head = NULL;
}
-/** Add a node to the list */
void add_node(NODE *node) {
- NODE *temp = head;
- if(temp) {
- while(temp->next)
- temp = temp->next;
- temp->next = node;
- } else head = node;
- b_count++;
+ NODE *temp = head;
+ if(temp) {
+ while(temp->next)
+ temp = temp->next;
+ temp->next = node;
+ } else head = node;
+ b_count++;
}
-/** Remove a node */
void remove_node(unsigned int id) {
- unsigned int temp;
- NODE *node_old, *node_new;
- node_old = head;
- node_new = NULL;
- while(node_old) {
- temp = get_id(node_old);
- if(temp==id) {
- if(node_new==NULL) {
- head = node_old->next;
- delete node_old;
- b_count--;
- return;
- } else {
+ unsigned int temp;
+ NODE *node_old, *node_new;
+ node_old = head;
+ node_new = NULL;
+ while (node_old) {
+ temp = get_id(node_old);
+ if (temp==id) {
+ if (node_new==NULL) {
+ head = node_old->next;
+ delete node_old;
+ b_count--;
+ return;
+ } else {
node_new->next = node_old->next;
- delete node_old;
- b_count--;
- return;
- }
+ delete node_old;
+ b_count--;
+ return;
+ }
} else {
- node_new = node_old;
- node_old = node_old->next;
+ node_new = node_old;
+ node_old = node_old->next;
+ }
}
- }
}
-/** Returns the id of a being in the list */
unsigned int get_id(NODE *node) {
- return node->id;
+ return node->id;
}
-/** Find a NPC id based on its coordinates */
unsigned int find_npc(unsigned short x, unsigned short y) {
- NODE *node = head;
- while(node) {
- if((node->job>=46)&&(node->job<=125)) { // Check if is a NPC (only low job ids)
- if((get_x(node->coordinates)==x)&&(get_y(node->coordinates)==y))
- return node->id;
- else node = node->next;
- } else {
- node = node->next;
- //alert("id","","","","",0,0);
- }
- }
- return 0;
+ NODE *node = head;
+ while (node) {
+ // Check if is a NPC (only low job ids)
+ if ((node->job >= 46) && (node->job <= 125)) {
+ if ((get_x(node->coordinates) == x) &&
+ (get_y(node->coordinates) == y))
+ {
+ return node->id;
+ }
+ else {
+ node = node->next;
+ }
+ } else {
+ node = node->next;
+ }
+ }
+ return 0;
}
-/** Find a MONSTER id based on its coordinates */
unsigned int find_monster(unsigned short x, unsigned short y) {
- NODE *node = head;
- while(node) {
- if(node->job>200) { // Check if is a MONSTER
- if(get_x(node->coordinates)==x && get_y(node->coordinates)==y)
- return node->id;
+ NODE *node = head;
+ while (node) {
+ // Check if is a MONSTER
+ if (node->job > 200) {
+ if (get_x(node->coordinates) == x &&
+ get_y(node->coordinates) == y)
+ {
+ return node->id;
+ }
+ }
+ node = node->next;
}
- node = node->next;
- }
- return 0;
+ return 0;
}
-/** Return a specific id node */
NODE *find_node(unsigned int id) {
- NODE *node = head;
- while(node)
- if(node->id==id)
- return node;
- else node = node->next;
- return NULL;
+ NODE *node = head;
+ while (node) {
+ if (node->id == id) {
+ return node;
+ }
+ else {
+ node = node->next;
+ }
+ return NULL;
+ }
}
-/** Sort beings in vertical order using bubble sort */
void sort() {
- NODE *p, *q, *r, *s, *temp;
- s = NULL;
-
- while(s!=head->next) {
- r = p = head;
- q = p->next;
-
- while(p!=s) {
- if(get_y(p->coordinates)>get_y(q->coordinates)) {
- if(p==head) {
- temp = q->next;
- q->next = p;
- p->next = temp;
- head = q;
- r = q;
- } else {
- temp = q->next;
- q->next = p;
- p->next = temp;
- r->next = q;
- r = q;
+ NODE *p, *q, *r, *s, *temp;
+ s = NULL;
+
+ // Bubble sort
+ while (s != head->next) {
+ r = p = head;
+ q = p->next;
+
+ while (p != s) {
+ if (get_y(p->coordinates) > get_y(q->coordinates)) {
+ if (p == head) {
+ temp = q->next;
+ q->next = p;
+ p->next = temp;
+ head = q;
+ r = q;
+ } else {
+ temp = q->next;
+ q->next = p;
+ p->next = temp;
+ r->next = q;
+ r = q;
+ }
+ } else {
+ r = p;
+ p = p->next;
+ }
+ q = p->next;
+ if (q == s) s = p;
}
- } else {
- r = p;
- p = p->next;
- }
- q = p->next;
- if(q==s)s = p;
}
- }
}
-/** Remove all path nodes from a being */
void empty_path(NODE *node) {
- if(node) {
- PATH_NODE *temp = node->path;
- PATH_NODE *next;
- while(temp) {
- next = temp->next;
- delete temp;
- temp = next;
+ if (node) {
+ PATH_NODE *temp = node->path;
+ PATH_NODE *next;
+ while (temp) {
+ next = temp->next;
+ delete temp;
+ temp = next;
+ }
+ node->path = NULL;
}
- node->path = NULL;
- }
}