aboutsummaryrefslogtreecommitdiff
path: root/trade.c
diff options
context:
space:
mode:
Diffstat (limited to 'trade.c')
-rw-r--r--trade.c293
1 files changed, 144 insertions, 149 deletions
diff --git a/trade.c b/trade.c
index b220eea..a15d9c3 100644
--- a/trade.c
+++ b/trade.c
@@ -1,177 +1,172 @@
#include "7w.h"
#include <stdio.h>
-int data_hasbuilt(int p, int era, int card);
-int data_haswonderstage(int p, int wonder, int stage);
-int* data_gettradables(int p);
-void data_addgold(int amnt, int p);
-int data_getgold(int p);
-int data_geteast(int p);
-int data_getwest(int p);
-int data_numplayers();
-int data_numcards(int p);
-int io_getkey();
-void io_printborder(int x, int y, int width);
-int io_printtext(int xorigin, int y, int width, char* text);
-void io_printplain(int x, int y, char *s);
-void io_printcolor(int x, int y, int color, char *s);
-char* getname(int res);
-char* itoa(int i);
-
-static int tradebuffer[3][GOLD+1];
+static int tradebuffer[3][GOLD + 1];
//0 is east, 1 is west
int get_trade(int player, int type, int direction) {
- if(type <= ORE) { //resource
- if(data_haswonderstage(player, 7, 4)) return 1;
- if(direction == 0) { //east
- if(data_hasbuilt(player, 0, 18)) return 1;
- } else { //west
- if(data_hasbuilt(player, 0, 19)) return 1;
- }
- } else { //industrial product
- if(data_hasbuilt(player, 0, 20)) return 1;
- }
- return 2;
+ if (type <= ORE) { //resource
+ if (data_haswonderstage(player, 7, 4))
+ return 1;
+ if (direction == 0) { //east
+ if (data_hasbuilt(player, 0, 18))
+ return 1;
+ } else { //west
+ if (data_hasbuilt(player, 0, 19))
+ return 1;
+ }
+ } else { //industrial product
+ if (data_hasbuilt(player, 0, 20))
+ return 1;
+ }
+ return 2;
}
-int* trade_buffer()
-{
- return tradebuffer[2];
+int* trade_buffer() {
+ return tradebuffer[2];
}
-void trade_clear(int player)
-{
- data_addgold(tradebuffer[0][GOLD]*-1, data_geteast(player));
- data_addgold(tradebuffer[1][GOLD]*-1, data_getwest(player));
- data_addgold(tradebuffer[2][GOLD]*-1, player);
- int i, j;
- for(i = 0; i < 3; i++)
- for(j = 0; j < GOLD+1; j++)
- tradebuffer[i][j] = 0;
+void trade_clear(int player) {
+ data_addgold(tradebuffer[0][GOLD] * -1, data_geteast(player));
+ data_addgold(tradebuffer[1][GOLD] * -1, data_getwest(player));
+ data_addgold(tradebuffer[2][GOLD] * -1, player);
+ int i, j;
+ for (i = 0; i < 3; i++)
+ for (j = 0; j < GOLD + 1; j++)
+ tradebuffer[i][j] = 0;
}
-void trade_set(int player, int trade[3][GOLD])
-{
- int i, j;
- for(i = 0; i < 3; i++)
- tradebuffer[i][GOLD] = 0; //we deal with gold in the method that calls this
- for(i = 0; i < 2; i++) {
- for(j = 0; j < GOLD; j++) {
- tradebuffer[i][j] = trade[i][j] * -1;
- }
- }
- for(j = 0; j < GOLD; j++)
- tradebuffer[2][j] = trade[2][j];
+void trade_set(int player, int trade[3][GOLD]) {
+ int i, j;
+ for (i = 0; i < 3; i++)
+ tradebuffer[i][GOLD] = 0; //we deal with gold in the method that calls this
+ for (i = 0; i < 2; i++) {
+ for (j = 0; j < GOLD; j++) {
+ tradebuffer[i][j] = trade[i][j] * -1;
+ }
+ }
+ for (j = 0; j < GOLD; j++)
+ tradebuffer[2][j] = trade[2][j];
}
//gold amounts relative to player
-void trade_addgold(int player, int amnt, int direction)
-{
- int p;
- if(direction == 0) p = data_geteast(player);
- if(direction == 1) p = data_getwest(player);
- data_addgold(amnt, player);
- tradebuffer[2][GOLD] += amnt;
- data_addgold(amnt*-1, p);
- tradebuffer[direction][GOLD] -= amnt;
+void trade_addgold(int player, int amnt, int direction) {
+ int p = 0;
+ if (direction == 0)
+ p = data_geteast(player);
+ if (direction == 1)
+ p = data_getwest(player);
+ data_addgold(amnt, player);
+ tradebuffer[2][GOLD] += amnt;
+ data_addgold(amnt * -1, p);
+ tradebuffer[direction][GOLD] -= amnt;
}
-void trade_commit(int player)
-{
- int i;
- for(i = 0; i < 3; i++)
- tradebuffer[i][GOLD] = 0;
- trade_clear(player);
+void trade_commit(int player) {
+ int i;
+ for (i = 0; i < 3; i++)
+ tradebuffer[i][GOLD] = 0;
+ trade_clear(player);
}
-int* trade_gettradables(int player, int direction)
-{
- int i;
- static int ret[GOLD+1];
- if(direction) arraycpy(data_gettradables(data_getwest(player)), ret, GOLD+1);
- else arraycpy(data_gettradables(data_geteast(player)), ret, GOLD+1);
- for(i = 0; i < GOLD; i++)
- ret[i] += tradebuffer[direction][i];
- return ret;
+int* trade_gettradables(int player, int direction, int ret[GOLD + 1]) {
+ int i;
+ if (direction)
+ data_gettradables(data_getwest(player), ret);
+ else
+ data_gettradables(data_geteast(player), ret);
+ for (i = 0; i < GOLD; i++)
+ ret[i] += tradebuffer[direction][i];
+ return ret;
}
-void trade_print(int x, int y, int player, int cursorx, int cursory)
-{
- char s[40];
- int east[GOLD+1];
- arraycpy(trade_gettradables(player, 0), east, GOLD+1);
- int west[GOLD+1];
- arraycpy(trade_gettradables(player, 1), west, GOLD+1);
- int width = 28;
- io_printborder(x, y++, width);
- y = io_printtext(x, y, width, "West: | East:");
- sprintf(s, "rate: %d | rate: %d", get_trade(player, cursory, 1), get_trade(player, cursory, 0));
- y = io_printtext(x, y, width, s);
- int i;
- for(i = 0; i < GOLD+1; i++) {
- sprintf(s, "%-7s%2d %c| %-7s %d %c", getname(i), west[i], (cursorx == 1 && cursory == i)? '*' : ' ', getname(i), east[i], (cursorx == 0 && cursory == i)? '*' : ' ');
- y = io_printtext(x, y, width, s);
- if(tradebuffer[1][i]) {
- if(west[i] < 10)
- io_printcolor(x+10, y-1, 31, itoa(west[i]));
- else
- io_printcolor(x+9, y-1, 31, itoa(west[i]));
- }
- if(tradebuffer[0][i]) {
- io_printcolor(x+23, y-1, 31, itoa(east[i]));
- }
- }
- sprintf(s, "Your gold: %d", data_getgold(player));
- y = io_printtext(x, y, width, s);
- io_printborder(x, y++, width);
+void trade_print(int x, int y, int player, int cursorx, int cursory) {
+ char s[40];
+ int east[GOLD + 1];
+ trade_gettradables(player, 0, east);
+ int west[GOLD + 1];
+ trade_gettradables(player, 1, west);
+ int width = 28;
+ io_printborder(x, y++, width);
+ y = io_printtext(x, y, width, "West: | East:");
+ sprintf(s, "rate: %d | rate: %d", get_trade(player, cursory, 1),
+ get_trade(player, cursory, 0));
+ y = io_printtext(x, y, width, s);
+ int i;
+ for (i = 0; i < GOLD + 1; i++) {
+ sprintf(s, "%-7s%2d %c| %-7s %d %c", getname(i), west[i],
+ (cursorx == 1 && cursory == i) ? '*' : ' ', getname(i), east[i],
+ (cursorx == 0 && cursory == i) ? '*' : ' ');
+ y = io_printtext(x, y, width, s);
+ if (tradebuffer[1][i]) {
+ if (west[i] < 10)
+ io_printcolor(x + 10, y - 1, 31, itoa(west[i]));
+ else
+ io_printcolor(x + 9, y - 1, 31, itoa(west[i]));
+ }
+ if (tradebuffer[0][i]) {
+ io_printcolor(x + 23, y - 1, 31, itoa(east[i]));
+ }
+ }
+ sprintf(s, "Your gold: %d", data_getgold(player));
+ y = io_printtext(x, y, width, s);
+ io_printborder(x, y++, width);
}
-int trade_change(int cursorx, int cursory, int player, int change)
-{
- int forced = 0;
- int tradee[GOLD+1];
- arraycpy(trade_gettradables(player, cursorx), tradee, GOLD+1);
- if(tradebuffer[2][cursory]-1 < 0) {
- change = 1;
- forced = 1;
- }
- if(tradee[cursory]-1 < 0 || data_getgold(player) < get_trade(player, cursory, cursorx)) {
- if(forced) return 1;
- change = -1;
- }
+int trade_change(int cursorx, int cursory, int player, int change) {
+ int forced = 0;
+ int tradee[GOLD + 1];
+ trade_gettradables(player, cursorx, tradee);
+ if (tradebuffer[2][cursory] - 1 < 0) {
+ change = 1;
+ forced = 1;
+ }
+ if (tradee[cursory] - 1 < 0
+ || data_getgold(player) < get_trade(player, cursory, cursorx)) {
+ if (forced)
+ return 1;
+ change = -1;
+ }
- tradebuffer[cursorx][cursory] -= change;
- tradebuffer[2][cursory] += change;
- trade_addgold(player, get_trade(player, cursory, cursorx)*change*-1, cursorx);
+ tradebuffer[cursorx][cursory] -= change;
+ tradebuffer[2][cursory] += change;
+ trade_addgold(player, get_trade(player, cursory, cursorx) * change * -1,
+ cursorx);
- if(tradebuffer[2][cursory] == 0 || data_getgold(player) == 0) return change*-1;
- return change;
+ if (tradebuffer[2][cursory] == 0 || data_getgold(player) == 0)
+ return change * -1;
+ return change;
}
-int trade_routine(int x, int y, int player)
-{
- int cursorx, cursory, change;
- cursorx = cursory = 0;
- change = 1;
- while(1) {
- trade_print(x, y, player, cursorx, cursory);
- switch(io_getkey()) {
- case LEFT:
- case RIGHT: cursorx = !cursorx;
- change = 1;
- break;
- case UP: cursory--;
- change = 1;
- break;
- case DOWN: cursory++;
- change = 1;
- break;
- case ENTER: change = trade_change(cursorx, cursory, player, change);
- break;
- default: break;
- }
- if(cursory < 0) return 0;
- if(cursory >= GOLD) return 1;
- }
+int trade_routine(int x, int y, int player) {
+ int cursorx, cursory, change;
+ cursorx = cursory = 0;
+ change = 1;
+ while (1) {
+ trade_print(x, y, player, cursorx, cursory);
+ switch (io_getkey()) {
+ case LEFT:
+ case RIGHT:
+ cursorx = !cursorx;
+ change = 1;
+ break;
+ case UP:
+ cursory--;
+ change = 1;
+ break;
+ case DOWN:
+ cursory++;
+ change = 1;
+ break;
+ case ENTER:
+ change = trade_change(cursorx, cursory, player, change);
+ break;
+ default:
+ break;
+ }
+ if (cursory < 0)
+ return 0;
+ if (cursory >= GOLD)
+ return 1;
+ }
}
bgstack15