Compare commits
No commits in common. "master" and "1.6.2" have entirely different histories.
50 changed files with 7455 additions and 7563 deletions
BIN
3dslink.exe
Normal file
BIN
3dslink.exe
Normal file
Binary file not shown.
BIN
3dstool.exe
Normal file
BIN
3dstool.exe
Normal file
Binary file not shown.
4
Makefile
4
Makefile
|
@ -36,8 +36,8 @@ INCLUDES := include
|
||||||
ROMFS := romfs
|
ROMFS := romfs
|
||||||
|
|
||||||
APP_TITLE := Minicraft 3DS
|
APP_TITLE := Minicraft 3DS
|
||||||
APP_DESCRIPTION := Originally created by Notch.
|
APP_DESCRIPTION := Minicraft was originally created by Markus "Notch" Perrson. Ported to the 3DS by Davideesk.
|
||||||
APP_AUTHOR := Davideesk/andre111/ElijahZAwesome/tognee
|
APP_AUTHOR := Davideesk/andre111/ElijahZAwesome
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# options for code generation
|
# options for code generation
|
||||||
|
|
|
@ -7,7 +7,7 @@ Current Version: Version 1.6.1
|
||||||
**Download:**
|
**Download:**
|
||||||
|
|
||||||
If you just want to download the game prebuilt check the releases tab in Github:
|
If you just want to download the game prebuilt check the releases tab in Github:
|
||||||
//TODO
|
https://github.com/ElijahZAwesome/Minicraft3DS/releases
|
||||||
For building the game yourself look below.
|
For building the game yourself look below.
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,4 +75,4 @@ If you are going to make a mod of this version, be sure to give credit to Markus
|
||||||
|
|
||||||
This source code is subject to a lot of change for better optimization/cleanliness.
|
This source code is subject to a lot of change for better optimization/cleanliness.
|
||||||
|
|
||||||
Forum thread: //TODO
|
Forum thread: https://gbatemp.net/threads/release-new-minicraft3ds-fork-v1-4.494947/
|
||||||
|
|
BIN
bannertool.exe
Normal file
BIN
bannertool.exe
Normal file
Binary file not shown.
|
@ -1,10 +1,11 @@
|
||||||
@echo off
|
@echo off
|
||||||
echo Building 3DSX/ELF/SMDH...
|
echo Building 3DSX/ELF/SMDH...
|
||||||
|
set mypath=%cd%
|
||||||
make
|
make
|
||||||
echo Creating banner...
|
echo Creating banner...
|
||||||
bannertool makebanner -i icons-banners/banner.png -a icons-banners/audio.wav -o icons-banners/banner.bnr
|
bannertool.exe makebanner -i icons-banners/banner.png -a icons-banners/audio.wav -o icons-banners/banner.bnr
|
||||||
echo Creating icon...
|
echo Creating icon...
|
||||||
bannertool makesmdh -s "Minicraft3DS" -l "3DS Homebrew port of Notch's ludum dare game 'Minicraft', updated." -p "Davideesk/Andre111/ElijahZAwesome" -i icons-banners/icon.png -o icons-banners/icon.icn
|
bannertool.exe makesmdh -s "Minicraft3DS" -l "3DS Homebrew port of Notch's ludum dare game 'Minicraft', updated." -p "Davideesk/Andre111/ElijahZAwesome" -i icons-banners/icon.png -o icons-banners/icon.icn
|
||||||
echo Creating ROMFS...
|
echo Creating ROMFS...
|
||||||
3dstool -cvtf romfs icons-banners/romfs.bin --romfs-dir romfs/
|
3dstool -cvtf romfs icons-banners/romfs.bin --romfs-dir romfs/
|
||||||
echo Creating CIA...
|
echo Creating CIA...
|
||||||
|
|
12
build.command
Executable file
12
build.command
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
cd "`dirname $0`"
|
||||||
|
echo Building 3DSX/ELF/SMDH...
|
||||||
|
make
|
||||||
|
echo Creating banner...
|
||||||
|
`dirname $0`/bannertool makebanner -i icons-banners/banner.png -a icons-banners/audio.wav -o icons-banners/banner.bnr
|
||||||
|
echo Creating icon...
|
||||||
|
`dirname $0`/bannertool makesmdh -s "Minicraft3DS" -l "3DS Homebrew port of Notch's ludum dare game 'Minicraft', updated." -p "Davideesk/Andre111/ElijahZAwesome" -i icons-banners/icon.png -o icons-banners/icon.icn
|
||||||
|
echo Creating CIA...
|
||||||
|
`dirname $0`/makerom -f cia -o result/Minicraft3DS.cia -DAPP_ENCRYPTED=false -rsf icons-banners/Minicraft3DS.rsf -target t -exefslogo -elf result/Minicraft3DS.elf -icon icons-banners/icon.icn -banner icons-banners/banner.bnr
|
||||||
|
echo Creating 3DS/CCI...
|
||||||
|
`dirname $0`/makerom -f cci -o result/Minicraft3DS.3ds -DAPP_ENCRYPTED=true -rsf icons-banners/Minicraft3DS.rsf -target t -exefslogo -elf result/Minicraft3DS.elf -icon icons-banners/icon.icn -banner icons-banners/banner.bnr
|
12
build.sh
12
build.sh
|
@ -1,12 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
cd "`dirname $0`"
|
|
||||||
echo Building 3DSX/ELF/SMDH...
|
|
||||||
make
|
|
||||||
echo Creating banner...
|
|
||||||
bannertool makebanner -i icons-banners/banner.png -a icons-banners/audio.wav -o icons-banners/banner.bnr
|
|
||||||
echo Creating icon...
|
|
||||||
bannertool makesmdh -s "Minicraft3DS" -l "Original game by Notch" -p "Davideesk/Andre111/ElijahZAwesome/tognee" -i icons-banners/icon.png -o icons-banners/icon.icn
|
|
||||||
echo Creating CIA...
|
|
||||||
makerom -f cia -o result/Minicraft3DS.cia -DAPP_ENCRYPTED=false -rsf icons-banners/Minicraft3DS.rsf -target t -exefslogo -elf result/Minicraft3DS.elf -icon icons-banners/icon.icn -banner icons-banners/banner.bnr
|
|
||||||
echo Creating 3DS/CCI...
|
|
||||||
makerom -f cci -o result/Minicraft3DS.3ds -DAPP_ENCRYPTED=true -rsf icons-banners/Minicraft3DS.rsf -target t -exefslogo -elf result/Minicraft3DS.elf -icon icons-banners/icon.icn -banner icons-banners/banner.bnr
|
|
BIN
ctrtool.exe
Normal file
BIN
ctrtool.exe
Normal file
Binary file not shown.
BIN
data/icons.png
BIN
data/icons.png
Binary file not shown.
Before Width: | Height: | Size: 41 KiB |
BIN
data/icons2.png
Executable file
BIN
data/icons2.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
BIN
data/player.png
BIN
data/player.png
Binary file not shown.
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
78
docs/README.md
Normal file
78
docs/README.md
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
# Minicraft3DS
|
||||||
|
3DS Homebrew port of Notch's ludum dare game "Minicraft"
|
||||||
|
Current Version: Version 1.6.1
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
**Download:**
|
||||||
|
|
||||||
|
If you just want to download the game prebuilt check the releases tab in Github:
|
||||||
|
https://github.com/ElijahZAwesome/Minicraft3DS/releases
|
||||||
|
For building the game yourself look below.
|
||||||
|
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
**Dependencies:**
|
||||||
|
|
||||||
|
For building and installing the dependencies look below.
|
||||||
|
|
||||||
|
ctrulib by smea: https://github.com/smealum/ctrulib
|
||||||
|
citro3d by fincs: https://github.com/fincs/citro3d
|
||||||
|
sf2dlib by xerpi: https://github.com/xerpi/sf2dlib
|
||||||
|
sfillib by xerpi: https://github.com/xerpi/sfillib
|
||||||
|
zlib: http://www.zlib.net/
|
||||||
|
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
**Building:**
|
||||||
|
|
||||||
|
**1. Install devkitARM by devkitPro**
|
||||||
|
- On Windows download https://sourceforge.net/projects/devkitpro/files/Automated%20Installer/
|
||||||
|
- And install atleast Minimal System and devkitARM
|
||||||
|
- This includes make, ctrulib and citro3d
|
||||||
|
|
||||||
|
**2. Install zlib, libjpeg-turbo and libpng**
|
||||||
|
- Download 3DS-Portlibs: https://github.com/devkitPro/3ds_portlibs
|
||||||
|
- Run these commands:
|
||||||
|
|
||||||
|
```
|
||||||
|
make zlib
|
||||||
|
make install-zlib
|
||||||
|
make libjpeg-turbo
|
||||||
|
make libpng
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
|
||||||
|
**3. Install sf2dlib**
|
||||||
|
- Download https://github.com/xerpi/sf2dlib
|
||||||
|
- In the libsf2d directory run these commands:
|
||||||
|
```
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
**4. Install sfillib**
|
||||||
|
- Download https://github.com/xerpi/sfillib
|
||||||
|
- In the libsfil directory run these commands:
|
||||||
|
```
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
|
||||||
|
**5. You can now build Minicraft3DS 3dsx, elf, cia, and 3ds files by running the build.bat file.**
|
||||||
|
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
You can do anything with the source code (besides sell it) as long as you give proper credit to the right people.
|
||||||
|
If you are going to make a mod of this version, be sure to give credit to Markus "Notch" Perrson because he did create the original game after all.
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
|
||||||
|
This source code is subject to a lot of change for better optimization/cleanliness.
|
||||||
|
|
||||||
|
Forum thread: https://gbatemp.net/threads/release-new-minicraft3ds-fork-v1-4.494947/
|
4
docs/_config.yml
Normal file
4
docs/_config.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
theme: jekyll-theme-cayman
|
||||||
|
title: Minicraft3DS
|
||||||
|
description: A 2D Homebrew for 3DS
|
||||||
|
show_downloads: true
|
0
ignore_3dstool.txt
Normal file
0
ignore_3dstool.txt
Normal file
BIN
makerom.exe
Normal file
BIN
makerom.exe
Normal file
Binary file not shown.
5
run in Citra.bat
Normal file
5
run in Citra.bat
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
@echo off
|
||||||
|
echo Building 3DSX/ELF/SMDH...
|
||||||
|
make
|
||||||
|
echo Running in citra
|
||||||
|
%localappdata%/Citra/canary-mingw/citra-qt.exe result/Minicraft3DS.3dsx
|
|
@ -87,16 +87,11 @@ Recipe defineRecipe(int item, int amountOrLevel, int numArgs, ...){
|
||||||
}
|
}
|
||||||
|
|
||||||
void initRecipes(){
|
void initRecipes(){
|
||||||
|
|
||||||
curPlace = 0;
|
curPlace = 0;
|
||||||
|
workbenchRecipes.size = 22;
|
||||||
inHeadRecipes.size = 2;
|
|
||||||
inHeadRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (inHeadRecipes.size));
|
|
||||||
inHeadRecipes.recipes[0] = defineRecipe(ITEM_WORKBENCH,1,1,ITEM_WOOD,10);
|
|
||||||
inHeadRecipes.recipes[1] = defineRecipe(ITEM_TORCH,1,2,ITEM_WOOD,1,ITEM_COAL,1);
|
|
||||||
|
|
||||||
workbenchRecipes.size = 24;
|
|
||||||
workbenchRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (workbenchRecipes.size));
|
workbenchRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (workbenchRecipes.size));
|
||||||
workbenchRecipes.recipes[0] = defineRecipe(ITEM_WORKBENCH,1,1,ITEM_WOOD,10);
|
workbenchRecipes.recipes[0] = defineRecipe(ITEM_WORKBENCH,1,1,ITEM_WOOD,20);
|
||||||
workbenchRecipes.recipes[1] = defineRecipe(ITEM_FURNACE,1,1,ITEM_STONE,20);
|
workbenchRecipes.recipes[1] = defineRecipe(ITEM_FURNACE,1,1,ITEM_STONE,20);
|
||||||
workbenchRecipes.recipes[2] = defineRecipe(ITEM_OVEN,1,1,ITEM_STONE,20);
|
workbenchRecipes.recipes[2] = defineRecipe(ITEM_OVEN,1,1,ITEM_STONE,20);
|
||||||
workbenchRecipes.recipes[3] = defineRecipe(ITEM_CHEST,1,1,ITEM_WOOD,20);
|
workbenchRecipes.recipes[3] = defineRecipe(ITEM_CHEST,1,1,ITEM_WOOD,20);
|
||||||
|
@ -118,10 +113,8 @@ void initRecipes(){
|
||||||
workbenchRecipes.recipes[19] = defineRecipe(ITEM_ARROW_STONE,1,3,ITEM_WOOD,1,ITEM_STONE,1,ITEM_STRING,1);
|
workbenchRecipes.recipes[19] = defineRecipe(ITEM_ARROW_STONE,1,3,ITEM_WOOD,1,ITEM_STONE,1,ITEM_STRING,1);
|
||||||
workbenchRecipes.recipes[20] = defineRecipe(ITEM_WALL_WOOD,1,1,ITEM_WOOD,4);
|
workbenchRecipes.recipes[20] = defineRecipe(ITEM_WALL_WOOD,1,1,ITEM_WOOD,4);
|
||||||
workbenchRecipes.recipes[21] = defineRecipe(ITEM_WALL_STONE,1,1,ITEM_STONE,4);
|
workbenchRecipes.recipes[21] = defineRecipe(ITEM_WALL_STONE,1,1,ITEM_STONE,4);
|
||||||
workbenchRecipes.recipes[22] = defineRecipe(ITEM_FISHING_ROD,1,2,ITEM_WOOD,10,ITEM_STRING,3);
|
|
||||||
workbenchRecipes.recipes[23] = defineRecipe(ITEM_TORCH,1,2,ITEM_WOOD,1,ITEM_COAL,1);
|
|
||||||
|
|
||||||
anvilRecipes.size = 19;
|
anvilRecipes.size = 18;
|
||||||
anvilRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (anvilRecipes.size));
|
anvilRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (anvilRecipes.size));
|
||||||
anvilRecipes.recipes[0] = defineRecipe(TOOL_SWORD,2,2,ITEM_WOOD,5,ITEM_IRONINGOT,5);
|
anvilRecipes.recipes[0] = defineRecipe(TOOL_SWORD,2,2,ITEM_WOOD,5,ITEM_IRONINGOT,5);
|
||||||
anvilRecipes.recipes[1] = defineRecipe(TOOL_AXE,2,2,ITEM_WOOD,5,ITEM_IRONINGOT,5);
|
anvilRecipes.recipes[1] = defineRecipe(TOOL_AXE,2,2,ITEM_WOOD,5,ITEM_IRONINGOT,5);
|
||||||
|
@ -141,7 +134,6 @@ void initRecipes(){
|
||||||
anvilRecipes.recipes[15] = defineRecipe(ITEM_WALL_GOLD,1,1,ITEM_GOLDINGOT,2);
|
anvilRecipes.recipes[15] = defineRecipe(ITEM_WALL_GOLD,1,1,ITEM_GOLDINGOT,2);
|
||||||
anvilRecipes.recipes[16] = defineRecipe(ITEM_COIN,3,1,ITEM_IRONINGOT,1);
|
anvilRecipes.recipes[16] = defineRecipe(ITEM_COIN,3,1,ITEM_IRONINGOT,1);
|
||||||
anvilRecipes.recipes[17] = defineRecipe(ITEM_POTION_MAKER,1,3,ITEM_IRONINGOT,5,ITEM_GOLDINGOT,25,ITEM_GEM,5);
|
anvilRecipes.recipes[17] = defineRecipe(ITEM_POTION_MAKER,1,3,ITEM_IRONINGOT,5,ITEM_GOLDINGOT,25,ITEM_GEM,5);
|
||||||
anvilRecipes.recipes[18] = defineRecipe(ITEM_SHEARS,1,1,ITEM_IRONINGOT,2);
|
|
||||||
|
|
||||||
furnaceRecipes.size = 3;
|
furnaceRecipes.size = 3;
|
||||||
furnaceRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (furnaceRecipes.size));
|
furnaceRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (furnaceRecipes.size));
|
||||||
|
@ -149,17 +141,15 @@ void initRecipes(){
|
||||||
furnaceRecipes.recipes[1] = defineRecipe(ITEM_GOLDINGOT,1,2,ITEM_GOLDORE,4,ITEM_COAL,1);
|
furnaceRecipes.recipes[1] = defineRecipe(ITEM_GOLDINGOT,1,2,ITEM_GOLDORE,4,ITEM_COAL,1);
|
||||||
furnaceRecipes.recipes[2] = defineRecipe(ITEM_GLASS,1,2,ITEM_SAND,4,ITEM_COAL,1);
|
furnaceRecipes.recipes[2] = defineRecipe(ITEM_GLASS,1,2,ITEM_SAND,4,ITEM_COAL,1);
|
||||||
|
|
||||||
ovenRecipes.size = 4;
|
ovenRecipes.size = 3;
|
||||||
ovenRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (ovenRecipes.size));
|
ovenRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (ovenRecipes.size));
|
||||||
ovenRecipes.recipes[0] = defineRecipe(ITEM_BREAD,1,1,ITEM_WHEAT,4);
|
ovenRecipes.recipes[0] = defineRecipe(ITEM_BREAD,1,1,ITEM_WHEAT,4);
|
||||||
ovenRecipes.recipes[1] = defineRecipe(ITEM_PORK_COOKED,1,2,ITEM_PORK_RAW,1,ITEM_COAL,1);
|
ovenRecipes.recipes[1] = defineRecipe(ITEM_PORK_COOKED,1,2,ITEM_PORK_RAW,1,ITEM_COAL,1);
|
||||||
ovenRecipes.recipes[2] = defineRecipe(ITEM_BEEF_COOKED,1,2,ITEM_BEEF_RAW,1,ITEM_COAL,1);
|
ovenRecipes.recipes[2] = defineRecipe(ITEM_BEEF_COOKED,1,2,ITEM_BEEF_RAW,1,ITEM_COAL,1);
|
||||||
ovenRecipes.recipes[3] = defineRecipe(ITEM_FISH_COOKED,1,2,ITEM_FISH_RAW,1,ITEM_COAL,1);
|
|
||||||
|
|
||||||
loomRecipes.size = 2;
|
loomRecipes.size = 1;
|
||||||
loomRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (loomRecipes.size));
|
loomRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (loomRecipes.size));
|
||||||
loomRecipes.recipes[0] = defineRecipe(ITEM_STRING,1,1,ITEM_WOOL,1);
|
loomRecipes.recipes[0] = defineRecipe(ITEM_STRING,1,1,ITEM_WOOL,1);
|
||||||
loomRecipes.recipes[1] = defineRecipe(ITEM_BED,1,2,ITEM_WOOD,5,ITEM_WOOL,3);
|
|
||||||
|
|
||||||
enchanterRecipes.size = 8;
|
enchanterRecipes.size = 8;
|
||||||
enchanterRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (enchanterRecipes.size));
|
enchanterRecipes.recipes = (Recipe*)malloc(sizeof(Recipe) * (enchanterRecipes.size));
|
||||||
|
@ -182,7 +172,6 @@ void initRecipes(){
|
||||||
|
|
||||||
/* Free up allocated memory */
|
/* Free up allocated memory */
|
||||||
void freeRecipes(){
|
void freeRecipes(){
|
||||||
free(inHeadRecipes.recipes);
|
|
||||||
free(workbenchRecipes.recipes);
|
free(workbenchRecipes.recipes);
|
||||||
free(ovenRecipes.recipes);
|
free(ovenRecipes.recipes);
|
||||||
free(furnaceRecipes.recipes);
|
free(furnaceRecipes.recipes);
|
||||||
|
|
|
@ -21,7 +21,7 @@ typedef struct _recipeManager {
|
||||||
Recipe * recipes;
|
Recipe * recipes;
|
||||||
} RecipeManager;
|
} RecipeManager;
|
||||||
|
|
||||||
RecipeManager inHeadRecipes;
|
|
||||||
RecipeManager workbenchRecipes;
|
RecipeManager workbenchRecipes;
|
||||||
RecipeManager furnaceRecipes;
|
RecipeManager furnaceRecipes;
|
||||||
RecipeManager ovenRecipes;
|
RecipeManager ovenRecipes;
|
||||||
|
|
|
@ -246,3 +246,6 @@ Entity newGlowwormEntity(int x, int y, int level);
|
||||||
Entity newNPCEntity(int type, int x, int y, int level);
|
Entity newNPCEntity(int type, int x, int y, int level);
|
||||||
void addEntityToList(Entity e, EntityManager* em);
|
void addEntityToList(Entity e, EntityManager* em);
|
||||||
void removeEntityFromList(Entity * e,int level,EntityManager* em);
|
void removeEntityFromList(Entity * e,int level,EntityManager* em);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,7 @@ void hurtEntity(Entity *e, int damage, int dir, u32 hurtColor, Entity *damager){
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// In hindsight I should've made a generic Mob struct, but whatever. <20>\_(-.-)_/<2F>
|
// In hindsight I should've made a generic Mob struct, but whatever. ¯\_(-.-)_/¯
|
||||||
switch(e->type){
|
switch(e->type){
|
||||||
case ENTITY_PLAYER:
|
case ENTITY_PLAYER:
|
||||||
e->p.health -= damage;
|
e->p.health -= damage;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include "MapGen.h"
|
#include "MapGen.h"
|
||||||
#include "Quests.h"
|
#include "Quests.h"
|
||||||
|
|
||||||
#include "icons_png.h"
|
#include "icons2_png.h"
|
||||||
#include "player_png.h"
|
#include "player_png.h"
|
||||||
#include "Font_png.h"
|
#include "Font_png.h"
|
||||||
#include "bottombg_png.h"
|
#include "bottombg_png.h"
|
||||||
|
@ -89,8 +89,6 @@
|
||||||
//WARNING: Having this set to different values in different clients will break multiplayer!
|
//WARNING: Having this set to different values in different clients will break multiplayer!
|
||||||
#define TESTGODMODE false
|
#define TESTGODMODE false
|
||||||
|
|
||||||
bool paused;
|
|
||||||
|
|
||||||
u32 localUID;
|
u32 localUID;
|
||||||
|
|
||||||
int loadedtp;
|
int loadedtp;
|
||||||
|
|
|
@ -368,6 +368,7 @@ void renderGame() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void exitGame() {
|
void exitGame() {
|
||||||
|
romfsExit();
|
||||||
networkDisconnect();
|
networkDisconnect();
|
||||||
synchronizerReset();
|
synchronizerReset();
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ void ingameMenuTick(PlayerData *pd, int menu) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MENU_INVENTORY:
|
case MENU_INVENTORY:
|
||||||
if (pd->inputs.k_menu.clicked || pd->inputs.k_use.clicked || pd->inputs.k_decline.clicked){
|
if (pd->inputs.k_menu.clicked || pd->inputs.k_decline.clicked){
|
||||||
pd->ingameMenu = MENU_NONE;
|
pd->ingameMenu = MENU_NONE;
|
||||||
pd->activeItem = &noItem;
|
pd->activeItem = &noItem;
|
||||||
pd->entity.p.isCarrying = false;
|
pd->entity.p.isCarrying = false;
|
||||||
|
@ -75,7 +75,7 @@ void ingameMenuTick(PlayerData *pd, int menu) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_CRAFTING:
|
case MENU_CRAFTING:
|
||||||
if (pd->inputs.k_menu.clicked || pd->inputs.k_use.clicked || pd->inputs.k_decline.clicked) pd->ingameMenu = MENU_NONE;
|
if (pd->inputs.k_menu.clicked || pd->inputs.k_decline.clicked) pd->ingameMenu = MENU_NONE;
|
||||||
if (pd->inputs.k_accept.clicked){
|
if (pd->inputs.k_accept.clicked){
|
||||||
if(craftItem(&(pd->currentRecipes), &(pd->currentRecipes.recipes[pd->ingameMenuInvSel]), &(pd->inventory))){
|
if(craftItem(&(pd->currentRecipes), &(pd->currentRecipes.recipes[pd->ingameMenuInvSel]), &(pd->inventory))){
|
||||||
playSoundPositioned(snd_craft, pd->entity.level, pd->entity.x, pd->entity.y);
|
playSoundPositioned(snd_craft, pd->entity.level, pd->entity.x, pd->entity.y);
|
||||||
|
@ -313,7 +313,7 @@ void ingameMenuRender(PlayerData *pd, int menu) {
|
||||||
int ttlCst = rec->costs[i].costAmount;
|
int ttlCst = rec->costs[i].costAmount;
|
||||||
int col = 0xFFFFFFFF; if(amnt<ttlCst) col = 0xFF7F7F7F;
|
int col = 0xFFFFFFFF; if(amnt<ttlCst) col = 0xFF7F7F7F;
|
||||||
renderItemIcon(rec->costs[i].costItem,1,128,48+(i*8));
|
renderItemIcon(rec->costs[i].costItem,1,128,48+(i*8));
|
||||||
sprintf(craftText,"%d/%d",ttlCst,amnt);
|
sprintf(craftText,"%d/%d",amnt,ttlCst);
|
||||||
drawTextColor(craftText,274,96+(i*18),col);
|
drawTextColor(craftText,274,96+(i*18),col);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,6 @@ void tickKeys(Inputs *inputs, u32 held, u32 down){
|
||||||
toggleKey(&(inputs->k_right), held & localInputs.k_right.input, down & localInputs.k_right.input);
|
toggleKey(&(inputs->k_right), held & localInputs.k_right.input, down & localInputs.k_right.input);
|
||||||
toggleKey(&(inputs->k_pause), held & localInputs.k_pause.input, down & localInputs.k_pause.input);
|
toggleKey(&(inputs->k_pause), held & localInputs.k_pause.input, down & localInputs.k_pause.input);
|
||||||
toggleKey(&(inputs->k_attack), held & localInputs.k_attack.input, down & localInputs.k_attack.input);
|
toggleKey(&(inputs->k_attack), held & localInputs.k_attack.input, down & localInputs.k_attack.input);
|
||||||
toggleKey(&(inputs->k_pickup), held & localInputs.k_pickup.input, down & localInputs.k_pickup.input);
|
|
||||||
toggleKey(&(inputs->k_use), held & localInputs.k_use.input, down & localInputs.k_use.input);
|
|
||||||
toggleKey(&(inputs->k_menu), held & localInputs.k_menu.input, down & localInputs.k_menu.input);
|
toggleKey(&(inputs->k_menu), held & localInputs.k_menu.input, down & localInputs.k_menu.input);
|
||||||
toggleKey(&(inputs->k_accept), held & localInputs.k_accept.input, down & localInputs.k_accept.input);
|
toggleKey(&(inputs->k_accept), held & localInputs.k_accept.input, down & localInputs.k_accept.input);
|
||||||
toggleKey(&(inputs->k_decline), held & localInputs.k_decline.input, down & localInputs.k_decline.input);
|
toggleKey(&(inputs->k_decline), held & localInputs.k_decline.input, down & localInputs.k_decline.input);
|
||||||
|
@ -33,8 +31,6 @@ void resetKeys(Inputs *inputs) {
|
||||||
toggleKey(&(inputs->k_right), false, false);
|
toggleKey(&(inputs->k_right), false, false);
|
||||||
toggleKey(&(inputs->k_pause), false, false);
|
toggleKey(&(inputs->k_pause), false, false);
|
||||||
toggleKey(&(inputs->k_attack), false, false);
|
toggleKey(&(inputs->k_attack), false, false);
|
||||||
toggleKey(&(inputs->k_pickup), false, false);
|
|
||||||
toggleKey(&(inputs->k_use), false, false);
|
|
||||||
toggleKey(&(inputs->k_menu), false, false);
|
toggleKey(&(inputs->k_menu), false, false);
|
||||||
toggleKey(&(inputs->k_accept), false, false);
|
toggleKey(&(inputs->k_accept), false, false);
|
||||||
toggleKey(&(inputs->k_decline), false, false);
|
toggleKey(&(inputs->k_decline), false, false);
|
||||||
|
@ -50,8 +46,6 @@ void resetClicked(Inputs *inputs) {
|
||||||
inputs->k_right.clicked = false;
|
inputs->k_right.clicked = false;
|
||||||
inputs->k_pause.clicked = false;
|
inputs->k_pause.clicked = false;
|
||||||
inputs->k_attack.clicked = false;
|
inputs->k_attack.clicked = false;
|
||||||
inputs->k_pickup.clicked = false;
|
|
||||||
inputs->k_use.clicked = false;
|
|
||||||
inputs->k_menu.clicked = false;
|
inputs->k_menu.clicked = false;
|
||||||
inputs->k_accept.clicked = false;
|
inputs->k_accept.clicked = false;
|
||||||
inputs->k_decline.clicked = false;
|
inputs->k_decline.clicked = false;
|
||||||
|
|
|
@ -15,8 +15,6 @@ typedef struct {
|
||||||
Key k_left;
|
Key k_left;
|
||||||
Key k_right;
|
Key k_right;
|
||||||
Key k_attack;
|
Key k_attack;
|
||||||
Key k_pickup;
|
|
||||||
Key k_use;
|
|
||||||
Key k_menu;
|
Key k_menu;
|
||||||
Key k_pause;
|
Key k_pause;
|
||||||
Key k_accept;
|
Key k_accept;
|
||||||
|
|
|
@ -200,20 +200,6 @@ char* getItemName(int itemID, int countLevel) {
|
||||||
}
|
}
|
||||||
case TOOL_BOW: return "Bow";
|
case TOOL_BOW: return "Bow";
|
||||||
case TOOL_MAGIC_COMPASS: return "Magic Compass";
|
case TOOL_MAGIC_COMPASS: return "Magic Compass";
|
||||||
case TOOL_CLAYMORE:
|
|
||||||
switch(countLevel){
|
|
||||||
case 1: return "Rock Claymore";
|
|
||||||
case 2: return "Iron Claymore";
|
|
||||||
case 3: return "Gold Claymore";
|
|
||||||
case 4: return "Gem Claymore";
|
|
||||||
default: return "Wood Claymore";
|
|
||||||
}
|
|
||||||
case ITEM_TORCH: return "Torch";
|
|
||||||
case ITEM_BED: return "Bed";
|
|
||||||
case ITEM_FISHING_ROD: return "Fishing Rod";
|
|
||||||
case ITEM_SHEARS: return "Shears";
|
|
||||||
case ITEM_FISH_RAW: sprintf(currentName,"%d Fish", countLevel); return currentName;
|
|
||||||
case ITEM_FISH_COOKED: sprintf(currentName,"%d Cooked Fish", countLevel); return currentName;
|
|
||||||
default: return ""; // null
|
default: return ""; // null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -330,20 +316,6 @@ char* getBasicItemName(int itemID, int countLevel) {
|
||||||
}
|
}
|
||||||
case TOOL_BOW: return "Bow";
|
case TOOL_BOW: return "Bow";
|
||||||
case TOOL_MAGIC_COMPASS: return "Magic Compass";
|
case TOOL_MAGIC_COMPASS: return "Magic Compass";
|
||||||
case TOOL_CLAYMORE:
|
|
||||||
switch(countLevel){
|
|
||||||
case 1: return "Rock Claymore";
|
|
||||||
case 2: return "Iron Claymore";
|
|
||||||
case 3: return "Gold Claymore";
|
|
||||||
case 4: return "Gem Claymore";
|
|
||||||
default: return "Wood Claymore";
|
|
||||||
}
|
|
||||||
case ITEM_TORCH: return "Torch";
|
|
||||||
case ITEM_BED: return "Bed";
|
|
||||||
case ITEM_FISHING_ROD: return "Fishing Rod";
|
|
||||||
case ITEM_SHEARS: return "Shears";
|
|
||||||
case ITEM_FISH_RAW: return "Fish";
|
|
||||||
case ITEM_FISH_COOKED: return "Cooked Fish";
|
|
||||||
default: return ""; // null
|
default: return ""; // null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,9 +46,6 @@
|
||||||
#define ITEM_LOOM 34
|
#define ITEM_LOOM 34
|
||||||
#define ITEM_ENCHANTER 35
|
#define ITEM_ENCHANTER 35
|
||||||
#define ITEM_POTION_MAKER 36
|
#define ITEM_POTION_MAKER 36
|
||||||
#define TOOL_CLAYMORE 37
|
|
||||||
#define ITEM_TORCH 38
|
|
||||||
#define ITEM_BED 39
|
|
||||||
|
|
||||||
#define ITEM_WALL_WOOD 51
|
#define ITEM_WALL_WOOD 51
|
||||||
#define ITEM_WALL_STONE 52
|
#define ITEM_WALL_STONE 52
|
||||||
|
@ -80,14 +77,10 @@
|
||||||
#define ITEM_SPEED_POTION 78
|
#define ITEM_SPEED_POTION 78
|
||||||
#define ITEM_REGEN_POTION 79
|
#define ITEM_REGEN_POTION 79
|
||||||
#define ITEM_SWIM_BREATH_POTION 80
|
#define ITEM_SWIM_BREATH_POTION 80
|
||||||
#define ITEM_FISH_RAW 81
|
|
||||||
#define ITEM_FISH_COOKED 82
|
|
||||||
|
|
||||||
#define TOOL_BUCKET 101
|
#define TOOL_BUCKET 101
|
||||||
#define TOOL_BOW 102
|
#define TOOL_BOW 102
|
||||||
#define TOOL_MAGIC_COMPASS 103
|
#define TOOL_MAGIC_COMPASS 103
|
||||||
#define ITEM_FISHING_ROD 104
|
|
||||||
#define ITEM_SHEARS 105
|
|
||||||
|
|
||||||
#define ARMOR_TEST 120
|
#define ARMOR_TEST 120
|
||||||
|
|
||||||
|
|
|
@ -875,3 +875,4 @@ void createDungeonRoom(int w, int h, bool dragon, int level, u8 * map, u8 * data
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
117
source/Menu.c
117
source/Menu.c
|
@ -16,7 +16,7 @@ int keys[] = {
|
||||||
KEY_L,KEY_R,KEY_ZL,KEY_ZR,
|
KEY_L,KEY_R,KEY_ZL,KEY_ZR,
|
||||||
KEY_START,KEY_SELECT
|
KEY_START,KEY_SELECT
|
||||||
};
|
};
|
||||||
int keyProp[14] = {[0 ... 13] = 0};
|
int keyProp[12] = {[0 ... 11] = 0};
|
||||||
bool areYouSure = false;
|
bool areYouSure = false;
|
||||||
bool areYouSureSave = false;
|
bool areYouSureSave = false;
|
||||||
bool bindOpt = false;
|
bool bindOpt = false;
|
||||||
|
@ -218,49 +218,46 @@ void doTouchButton(){
|
||||||
|
|
||||||
void switchGameBut(bool left, int buttonID){
|
void switchGameBut(bool left, int buttonID){
|
||||||
int id;
|
int id;
|
||||||
for(id = 0; id < 13; ++id){
|
for(id = 0; id < 7; ++id){
|
||||||
if(id > 8 && id < 12) continue;
|
|
||||||
if(keyProp[id] & buttonID){
|
if(keyProp[id] & buttonID){
|
||||||
keyProp[id] ^= buttonID; // Toggle buttonID bit
|
keyProp[id] ^= buttonID; // Toggle buttonID bit
|
||||||
if(left){
|
if(left){
|
||||||
int id2 = id - 1;
|
int id2 = id -1;
|
||||||
if (id2 == 11) id2 = 8;
|
|
||||||
if (id2 < 0) return;
|
if (id2 < 0) return;
|
||||||
keyProp[id2] ^= buttonID;
|
keyProp[id2] ^= buttonID;
|
||||||
} else {
|
} else {
|
||||||
int id2 = id+1;
|
int id2 = id+1;
|
||||||
if (id2 == 9) id2 = 12;
|
if (id2 > 6) return;
|
||||||
if (id2 > 13) return;
|
|
||||||
keyProp[id2] ^= buttonID;
|
keyProp[id2] ^= buttonID;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(left) keyProp[13] ^= buttonID;
|
if(left) keyProp[6] ^= buttonID;
|
||||||
else keyProp[0] ^= buttonID;
|
else keyProp[0] ^= buttonID;
|
||||||
|
|
||||||
}
|
}
|
||||||
void switchMenuBut(bool left, int buttonID){
|
void switchMenuBut(bool left, int buttonID){
|
||||||
int id;
|
int id;
|
||||||
for(id = 0; id < 13; ++id){
|
for(id = 0; id < 12; ++id){
|
||||||
if(id > 3 && id < 9) continue;
|
if(id > 3 && id < 7) continue;
|
||||||
if(keyProp[id] & buttonID){
|
if(keyProp[id] & buttonID){
|
||||||
keyProp[id] ^= buttonID; // Toggle buttonID bit
|
keyProp[id] ^= buttonID; // Toggle buttonID bit
|
||||||
if(left){
|
if(left){
|
||||||
int id2 = id - 1;
|
int id2 = id - 1;
|
||||||
if (id2 == 8) id2 = 3;
|
if (id2 == 6) id2 = 3;
|
||||||
if (id2 < 0) return;
|
if (id2 < 0) return;
|
||||||
keyProp[id2] ^= buttonID;
|
keyProp[id2] ^= buttonID;
|
||||||
} else {
|
} else {
|
||||||
int id2 = id+1;
|
int id2 = id+1;
|
||||||
if (id2 == 4) id2 = 9;
|
if (id2 == 4) id2 = 7;
|
||||||
if (id2 > 13) return;
|
if (id2 > 11) return;
|
||||||
keyProp[id2] ^= buttonID;
|
keyProp[id2] ^= buttonID;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(left) keyProp[13] ^= buttonID;
|
if(left) keyProp[11] ^= buttonID;
|
||||||
else keyProp[0] ^= buttonID;
|
else keyProp[0] ^= buttonID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,8 +274,6 @@ s8 checkPropButtons(){
|
||||||
if(keyProp[9] == 0) return 9;
|
if(keyProp[9] == 0) return 9;
|
||||||
if(keyProp[10] == 0) return 10;
|
if(keyProp[10] == 0) return 10;
|
||||||
if(keyProp[11] == 0) return 11;
|
if(keyProp[11] == 0) return 11;
|
||||||
if(keyProp[12] == 0) return 12;
|
|
||||||
if(keyProp[13] == 0) return 13;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,18 +340,16 @@ void tickMenu(int menu){
|
||||||
localInputs.k_left.input = keyProp[2];
|
localInputs.k_left.input = keyProp[2];
|
||||||
localInputs.k_right.input = keyProp[3];
|
localInputs.k_right.input = keyProp[3];
|
||||||
localInputs.k_attack.input = keyProp[4];
|
localInputs.k_attack.input = keyProp[4];
|
||||||
localInputs.k_pickup.input = keyProp[5];
|
localInputs.k_menu.input = keyProp[5];
|
||||||
localInputs.k_use.input = keyProp[6];
|
localInputs.k_pause.input = keyProp[6];
|
||||||
localInputs.k_menu.input = keyProp[7];
|
localInputs.k_accept.input = keyProp[7];
|
||||||
localInputs.k_pause.input = keyProp[8];
|
localInputs.k_decline.input = keyProp[8];
|
||||||
localInputs.k_accept.input = keyProp[9];
|
localInputs.k_delete.input = keyProp[9];
|
||||||
localInputs.k_decline.input = keyProp[10];
|
localInputs.k_menuNext.input = keyProp[10];
|
||||||
localInputs.k_delete.input = keyProp[11];
|
localInputs.k_menuPrev.input = keyProp[11];
|
||||||
localInputs.k_menuNext.input = keyProp[12];
|
|
||||||
localInputs.k_menuPrev.input = keyProp[13];
|
|
||||||
|
|
||||||
FILE *fs=fopen("btnSave.bin","wb");
|
FILE *fs=fopen("btnSave.bin","wb");
|
||||||
fwrite(keyProp,sizeof(keyProp),1,fs);
|
fwrite(keyProp,sizeof(int),12,fs);
|
||||||
fclose(fs);
|
fclose(fs);
|
||||||
|
|
||||||
currentSelection = 0;
|
currentSelection = 0;
|
||||||
|
@ -374,16 +367,14 @@ void tickMenu(int menu){
|
||||||
keyProp[1] = KEY_DDOWN | KEY_CPAD_DOWN | KEY_CSTICK_DOWN;
|
keyProp[1] = KEY_DDOWN | KEY_CPAD_DOWN | KEY_CSTICK_DOWN;
|
||||||
keyProp[2] = KEY_DLEFT | KEY_CPAD_LEFT | KEY_CSTICK_LEFT;
|
keyProp[2] = KEY_DLEFT | KEY_CPAD_LEFT | KEY_CSTICK_LEFT;
|
||||||
keyProp[3] = KEY_DRIGHT | KEY_CPAD_RIGHT | KEY_CSTICK_RIGHT;
|
keyProp[3] = KEY_DRIGHT | KEY_CPAD_RIGHT | KEY_CSTICK_RIGHT;
|
||||||
keyProp[4] = KEY_A;
|
keyProp[4] = KEY_A | KEY_B | KEY_L | KEY_ZR;
|
||||||
keyProp[5] = KEY_B;
|
keyProp[5] = KEY_X | KEY_Y | KEY_R | KEY_ZL;
|
||||||
keyProp[6] = KEY_X;
|
keyProp[6] = KEY_START;
|
||||||
keyProp[7] = KEY_Y ;
|
keyProp[7] = KEY_A;
|
||||||
keyProp[8] = KEY_START;
|
keyProp[8] = KEY_B;
|
||||||
keyProp[9] = KEY_A;
|
keyProp[9] = KEY_X;
|
||||||
keyProp[10] = KEY_B;
|
keyProp[10] = KEY_R;
|
||||||
keyProp[11] = KEY_X;
|
keyProp[11] = KEY_L;
|
||||||
keyProp[12] = KEY_R | KEY_ZR;
|
|
||||||
keyProp[13] = KEY_L | KEY_ZL;
|
|
||||||
bindOpt = false;
|
bindOpt = false;
|
||||||
errorBut = -1;
|
errorBut = -1;
|
||||||
break;
|
break;
|
||||||
|
@ -499,7 +490,7 @@ void tickMenu(int menu){
|
||||||
if(currentSelection > 0){
|
if(currentSelection > 0){
|
||||||
isLoadingTP = 4;
|
isLoadingTP = 4;
|
||||||
} else {
|
} else {
|
||||||
icons = sfil_load_PNG_buffer(icons_png, SF2D_PLACE_RAM);
|
icons = sfil_load_PNG_buffer(icons2_png, SF2D_PLACE_RAM);
|
||||||
reloadColors();
|
reloadColors();
|
||||||
font = sfil_load_PNG_buffer(Font_png, SF2D_PLACE_RAM);
|
font = sfil_load_PNG_buffer(Font_png, SF2D_PLACE_RAM);
|
||||||
bottombg = sfil_load_PNG_buffer(bottombg_png, SF2D_PLACE_RAM);
|
bottombg = sfil_load_PNG_buffer(bottombg_png, SF2D_PLACE_RAM);
|
||||||
|
@ -533,15 +524,13 @@ void tickMenu(int menu){
|
||||||
keyProp[2] = localInputs.k_left.input;
|
keyProp[2] = localInputs.k_left.input;
|
||||||
keyProp[3] = localInputs.k_right.input;
|
keyProp[3] = localInputs.k_right.input;
|
||||||
keyProp[4] = localInputs.k_attack.input;
|
keyProp[4] = localInputs.k_attack.input;
|
||||||
keyProp[5] = localInputs.k_pickup.input;
|
keyProp[5] = localInputs.k_menu.input;
|
||||||
keyProp[6] = localInputs.k_use.input;
|
keyProp[6] = localInputs.k_pause.input;
|
||||||
keyProp[7] = localInputs.k_menu.input;
|
keyProp[7] = localInputs.k_accept.input;
|
||||||
keyProp[8] = localInputs.k_pause.input;
|
keyProp[8] = localInputs.k_decline.input;
|
||||||
keyProp[9] = localInputs.k_accept.input;
|
keyProp[9] = localInputs.k_delete.input;
|
||||||
keyProp[10] = localInputs.k_decline.input;
|
keyProp[10] = localInputs.k_menuNext.input;
|
||||||
keyProp[11] = localInputs.k_delete.input;
|
keyProp[11] = localInputs.k_menuPrev.input;
|
||||||
keyProp[12] = localInputs.k_menuNext.input;
|
|
||||||
keyProp[13] = localInputs.k_menuPrev.input;
|
|
||||||
left = true;
|
left = true;
|
||||||
selBut = false;
|
selBut = false;
|
||||||
bindOpt = false;
|
bindOpt = false;
|
||||||
|
@ -727,12 +716,8 @@ char * getButtonFunctionGame(int key){
|
||||||
if(keyProp[2] & key) return "Move left";
|
if(keyProp[2] & key) return "Move left";
|
||||||
if(keyProp[3] & key) return "Move right";
|
if(keyProp[3] & key) return "Move right";
|
||||||
if(keyProp[4] & key) return "Attack";
|
if(keyProp[4] & key) return "Attack";
|
||||||
if(keyProp[5] & key) return "Pick up";
|
if(keyProp[5] & key) return "Toggle Menu";
|
||||||
if(keyProp[6] & key) return "Use";
|
if(keyProp[6] & key) return "Pause";
|
||||||
if(keyProp[7] & key) return "Toggle Menu";
|
|
||||||
if(keyProp[8] & key) return "Pause";
|
|
||||||
if(keyProp[12] & key) return "Next";
|
|
||||||
if(keyProp[13] & key) return "Previous";
|
|
||||||
return "Nothing";
|
return "Nothing";
|
||||||
}
|
}
|
||||||
char * getButtonFunctionMenu(int key){
|
char * getButtonFunctionMenu(int key){
|
||||||
|
@ -740,11 +725,11 @@ char * getButtonFunctionMenu(int key){
|
||||||
if(keyProp[1] & key) return "Down";
|
if(keyProp[1] & key) return "Down";
|
||||||
if(keyProp[2] & key) return "Left";
|
if(keyProp[2] & key) return "Left";
|
||||||
if(keyProp[3] & key) return "Right";
|
if(keyProp[3] & key) return "Right";
|
||||||
if(keyProp[9] & key) return "Accept";
|
if(keyProp[7] & key) return "Accept";
|
||||||
if(keyProp[10] & key) return "Decline";
|
if(keyProp[8] & key) return "Decline";
|
||||||
if(keyProp[11] & key) return "Delete";
|
if(keyProp[9] & key) return "Delete";
|
||||||
if(keyProp[12] & key) return "Next";
|
if(keyProp[10] & key) return "Next";
|
||||||
if(keyProp[13] & key) return "Previous";
|
if(keyProp[11] & key) return "Previous";
|
||||||
return "Nothing";
|
return "Nothing";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -969,7 +954,7 @@ void renderMenu(int menu,int xscr,int yscr){
|
||||||
drawText("Press to return", 98, 190);
|
drawText("Press to return", 98, 190);
|
||||||
renderButtonIcon(localInputs.k_decline.input & -localInputs.k_decline.input, 168, 188, 1);
|
renderButtonIcon(localInputs.k_decline.input & -localInputs.k_decline.input, 168, 188, 1);
|
||||||
|
|
||||||
if(errorBut >= 0 && errorBut < 14){
|
if(errorBut >= 0 && errorBut < 12){
|
||||||
char errorText[30];
|
char errorText[30];
|
||||||
switch(errorBut){
|
switch(errorBut){
|
||||||
case 0: sprintf(errorText, "Error: Missing 'Move up'"); break;
|
case 0: sprintf(errorText, "Error: Missing 'Move up'"); break;
|
||||||
|
@ -977,15 +962,13 @@ void renderMenu(int menu,int xscr,int yscr){
|
||||||
case 2: sprintf(errorText, "Error: Missing 'Move right'"); break;
|
case 2: sprintf(errorText, "Error: Missing 'Move right'"); break;
|
||||||
case 3: sprintf(errorText, "Error: Missing 'Move left'"); break;
|
case 3: sprintf(errorText, "Error: Missing 'Move left'"); break;
|
||||||
case 4: sprintf(errorText, "Error: Missing 'Attack'"); break;
|
case 4: sprintf(errorText, "Error: Missing 'Attack'"); break;
|
||||||
case 5: sprintf(errorText, "Error: Missing 'Pick up'"); break;
|
case 5: sprintf(errorText, "Error: Missing 'Toggle Menu'"); break;
|
||||||
case 6: sprintf(errorText, "Error: Missing 'Use'"); break;
|
case 6: sprintf(errorText, "Error: Missing 'Pause'"); break;
|
||||||
case 7: sprintf(errorText, "Error: Missing 'Toggle Menu'"); break;
|
case 7: sprintf(errorText, "Error: Missing 'Accept'"); break;
|
||||||
case 8: sprintf(errorText, "Error: Missing 'Pause'"); break;
|
case 8: sprintf(errorText, "Error: Missing 'Decline'"); break;
|
||||||
case 9: sprintf(errorText, "Error: Missing 'Accept'"); break;
|
case 9: sprintf(errorText, "Error: Missing 'Delete'"); break;
|
||||||
case 10: sprintf(errorText, "Error: Missing 'Decline'"); break;
|
case 10: sprintf(errorText, "Error: Missing 'Next'"); break;
|
||||||
case 11: sprintf(errorText, "Error: Missing 'Delete'"); break;
|
case 11: sprintf(errorText, "Error: Missing 'Previous'"); break;
|
||||||
case 12: sprintf(errorText, "Error: Missing 'Next'"); break;
|
|
||||||
case 13: sprintf(errorText, "Error: Missing 'Previous'"); break;
|
|
||||||
}
|
}
|
||||||
drawTextColor(errorText,(400 - (strlen(errorText) * 12))/2,50,0xFF0000FF);
|
drawTextColor(errorText,(400 - (strlen(errorText) * 12))/2,50,0xFF0000FF);
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ void networkHandleRecieve() {
|
||||||
actualSize -= sizeof(u16);
|
actualSize -= sizeof(u16);
|
||||||
|
|
||||||
//if the seq id was expected handle the packet
|
//if the seq id was expected handle the packet
|
||||||
u16 nextID = networkGetExpectedSeqFrom(sourceNetworkNodeID);
|
u32 nextID = networkSeqRecvLast[sourceNetworkNodeID]+1;
|
||||||
if(seqID==nextID) {
|
if(seqID==nextID) {
|
||||||
networkSeqRecvLast[sourceNetworkNodeID] = seqID;
|
networkSeqRecvLast[sourceNetworkNodeID] = seqID;
|
||||||
ackToSend = seqID;
|
ackToSend = seqID;
|
||||||
|
@ -117,8 +117,8 @@ void networkHandleRecieve() {
|
||||||
} else {
|
} else {
|
||||||
processPacket(readPointer, size);
|
processPacket(readPointer, size);
|
||||||
}
|
}
|
||||||
} else if(networkSeqIsLowerThan(seqID, nextID)) {
|
} else if(seqID<=nextID-1) {
|
||||||
ackToSend = seqID;
|
ackToSend = nextID-1;
|
||||||
}
|
}
|
||||||
readPointer += size;
|
readPointer += size;
|
||||||
actualSize -= size;
|
actualSize -= size;
|
||||||
|
@ -527,24 +527,6 @@ bool networkGetNodeName(u16 id, char *name) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 networkGetExpectedSeqFrom(u16 id) {
|
|
||||||
u16 nextID = networkSeqRecvLast[id];
|
|
||||||
nextID += 1;
|
|
||||||
if(nextID==0) {
|
|
||||||
nextID = 1;
|
|
||||||
}
|
|
||||||
return nextID;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool networkSeqIsLowerThan(u16 firstID, u16 secondID) {
|
|
||||||
if (secondID < 100) {
|
|
||||||
return (firstID < secondID) || (firstID > 65536-100);
|
|
||||||
} else if (secondID > 65536-100) {
|
|
||||||
return (firstID < secondID) && (firstID > 100);
|
|
||||||
} else {
|
|
||||||
return (firstID < secondID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int fitInSendBuffer(size_t size) {
|
int fitInSendBuffer(size_t size) {
|
||||||
//add "header" length
|
//add "header" length
|
||||||
|
|
|
@ -40,8 +40,5 @@ u16 networkGetLocalNodeID();
|
||||||
bool networkIsNodeConnected(u16 id);
|
bool networkIsNodeConnected(u16 id);
|
||||||
bool networkGetNodeName(u16 id, char *name);
|
bool networkGetNodeName(u16 id, char *name);
|
||||||
|
|
||||||
u16 networkGetExpectedSeqFrom(u16 id);
|
|
||||||
bool networkSeqIsLowerThan(u16 firstID, u16 secondID);
|
|
||||||
|
|
||||||
void networkSend(void *packet, size_t size);
|
void networkSend(void *packet, size_t size);
|
||||||
void networkSendWaitFlush();
|
void networkSendWaitFlush();
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
FILE *recvFile;
|
FILE *recvFile;
|
||||||
size_t recvFileSize;
|
size_t recvFileSize;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void * writeBool(void *buffer, size_t *size, bool value) {
|
void * writeBool(void *buffer, size_t *size, bool value) {
|
||||||
*((bool*) buffer) = value;
|
*((bool*) buffer) = value;
|
||||||
*(size) += sizeof(bool);
|
*(size) += sizeof(bool);
|
||||||
|
@ -35,6 +38,9 @@ void * writeSizeT(void *buffer, size_t *size, size_t value) {
|
||||||
return buffer + sizeof(size_t);
|
return buffer + sizeof(size_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void * readBool(void *buffer, size_t *size, bool *value) {
|
void * readBool(void *buffer, size_t *size, bool *value) {
|
||||||
*value = *((bool*) buffer);
|
*value = *((bool*) buffer);
|
||||||
*(size) -= sizeof(bool);
|
*(size) -= sizeof(bool);
|
||||||
|
@ -65,6 +71,9 @@ void * readSizeT(void *buffer, size_t *size, size_t *value) {
|
||||||
return buffer + sizeof(size_t);
|
return buffer + sizeof(size_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void processPacket(void *packet, size_t size) {
|
void processPacket(void *packet, size_t size) {
|
||||||
//Differenciate the packets and process them
|
//Differenciate the packets and process them
|
||||||
switch(packetGetID(packet)) {
|
switch(packetGetID(packet)) {
|
||||||
|
@ -193,6 +202,9 @@ size_t packetGetDataSize(size_t size) {
|
||||||
return size-sizeof(u8)-sizeof(u8)-sizeof(u32);
|
return size-sizeof(u8)-sizeof(u8)-sizeof(u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
size_t writeStartPacket(void *buffer, u32 seed) {
|
size_t writeStartPacket(void *buffer, u32 seed) {
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
buffer = writeU8(buffer, &size, PACKET_START);
|
buffer = writeU8(buffer, &size, PACKET_START);
|
||||||
|
@ -233,8 +245,6 @@ size_t writeInputPacket(void *buffer, Inputs *inputs, u8 playerID, u32 turnNumbe
|
||||||
buffer = writeBool(buffer, &size, inputs->k_left.down); buffer = writeBool(buffer, &size, inputs->k_left.clicked);
|
buffer = writeBool(buffer, &size, inputs->k_left.down); buffer = writeBool(buffer, &size, inputs->k_left.clicked);
|
||||||
buffer = writeBool(buffer, &size, inputs->k_right.down); buffer = writeBool(buffer, &size, inputs->k_right.clicked);
|
buffer = writeBool(buffer, &size, inputs->k_right.down); buffer = writeBool(buffer, &size, inputs->k_right.clicked);
|
||||||
buffer = writeBool(buffer, &size, inputs->k_attack.down); buffer = writeBool(buffer, &size, inputs->k_attack.clicked);
|
buffer = writeBool(buffer, &size, inputs->k_attack.down); buffer = writeBool(buffer, &size, inputs->k_attack.clicked);
|
||||||
buffer = writeBool(buffer, &size, inputs->k_pickup.down); buffer = writeBool(buffer, &size, inputs->k_pickup.clicked);
|
|
||||||
buffer = writeBool(buffer, &size, inputs->k_use.down); buffer = writeBool(buffer, &size, inputs->k_use.clicked);
|
|
||||||
buffer = writeBool(buffer, &size, inputs->k_menu.down); buffer = writeBool(buffer, &size, inputs->k_menu.clicked);
|
buffer = writeBool(buffer, &size, inputs->k_menu.down); buffer = writeBool(buffer, &size, inputs->k_menu.clicked);
|
||||||
buffer = writeBool(buffer, &size, inputs->k_pause.down); buffer = writeBool(buffer, &size, inputs->k_pause.clicked);
|
buffer = writeBool(buffer, &size, inputs->k_pause.down); buffer = writeBool(buffer, &size, inputs->k_pause.clicked);
|
||||||
buffer = writeBool(buffer, &size, inputs->k_accept.down); buffer = writeBool(buffer, &size, inputs->k_accept.clicked);
|
buffer = writeBool(buffer, &size, inputs->k_accept.down); buffer = writeBool(buffer, &size, inputs->k_accept.clicked);
|
||||||
|
@ -262,10 +272,6 @@ bool readInputPacketData(void *buffer, size_t size, Inputs *inputs) {
|
||||||
if(size<=0) return false;
|
if(size<=0) return false;
|
||||||
buffer = readBool(buffer, &size, &(inputs->k_attack.down)); buffer = readBool(buffer, &size, &(inputs->k_attack.clicked));
|
buffer = readBool(buffer, &size, &(inputs->k_attack.down)); buffer = readBool(buffer, &size, &(inputs->k_attack.clicked));
|
||||||
if(size<=0) return false;
|
if(size<=0) return false;
|
||||||
buffer = readBool(buffer, &size, &(inputs->k_pickup.down)); buffer = readBool(buffer, &size, &(inputs->k_pickup.clicked));
|
|
||||||
if(size<=0) return false;
|
|
||||||
buffer = readBool(buffer, &size, &(inputs->k_use.down)); buffer = readBool(buffer, &size, &(inputs->k_use.clicked));
|
|
||||||
if(size<=0) return false;
|
|
||||||
buffer = readBool(buffer, &size, &(inputs->k_menu.down)); buffer = readBool(buffer, &size, &(inputs->k_menu.clicked));
|
buffer = readBool(buffer, &size, &(inputs->k_menu.down)); buffer = readBool(buffer, &size, &(inputs->k_menu.clicked));
|
||||||
if(size<=0) return false;
|
if(size<=0) return false;
|
||||||
buffer = readBool(buffer, &size, &(inputs->k_pause.down)); buffer = readBool(buffer, &size, &(inputs->k_pause.clicked));
|
buffer = readBool(buffer, &size, &(inputs->k_pause.down)); buffer = readBool(buffer, &size, &(inputs->k_pause.clicked));
|
||||||
|
|
|
@ -61,9 +61,10 @@ void playerInitInventory(PlayerData *pd) {
|
||||||
pd->inventory.lastSlot = 0;
|
pd->inventory.lastSlot = 0;
|
||||||
pd->activeItem = &noItem;
|
pd->activeItem = &noItem;
|
||||||
|
|
||||||
if(shouldRenderDebug && playerCount < 2) {
|
|
||||||
addItemToInventory(newItem(ITEM_POWGLOVE,0), &(pd->inventory));
|
|
||||||
addItemToInventory(newItem(ITEM_WORKBENCH,0), &(pd->inventory));
|
addItemToInventory(newItem(ITEM_WORKBENCH,0), &(pd->inventory));
|
||||||
|
addItemToInventory(newItem(ITEM_POWGLOVE,0), &(pd->inventory));
|
||||||
|
|
||||||
|
if(shouldRenderDebug && playerCount < 1) {
|
||||||
addItemToInventory(newItem(ITEM_GOLD_APPLE,1), &(pd->inventory));
|
addItemToInventory(newItem(ITEM_GOLD_APPLE,1), &(pd->inventory));
|
||||||
addItemToInventory(newItem(ITEM_STRENGTH_POTION,1), &(pd->inventory));
|
addItemToInventory(newItem(ITEM_STRENGTH_POTION,1), &(pd->inventory));
|
||||||
addItemToInventory(newItem(ITEM_REGEN_POTION,1), &(pd->inventory));
|
addItemToInventory(newItem(ITEM_REGEN_POTION,1), &(pd->inventory));
|
||||||
|
@ -505,81 +506,6 @@ void tickPlayer(PlayerData *pd, bool inmenu) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//picking up furniture
|
|
||||||
if(pd->inputs.k_pickup.clicked){
|
|
||||||
if (pd->entity.p.isCarrying){
|
|
||||||
if (pd->entity.p.stamina != 0) {
|
|
||||||
if(!shouldRenderDebug) pd->entity.p.stamina--;
|
|
||||||
pd->entity.p.staminaRecharge = 0;
|
|
||||||
playerAttack(pd);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
int yo = -2;
|
|
||||||
int range = 12;
|
|
||||||
// see if entity near player
|
|
||||||
int x0, y0, x1, y1 = 0;
|
|
||||||
switch(pd->entity.p.dir){
|
|
||||||
case 0:
|
|
||||||
x0 = pd->entity.x - 8;
|
|
||||||
y0 = pd->entity.y + 4 + yo;
|
|
||||||
x1 = pd->entity.x + 8;
|
|
||||||
y1 = pd->entity.y + range + yo;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
x0 = pd->entity.x - 8;
|
|
||||||
y0 = pd->entity.y - range + yo;
|
|
||||||
x1 = pd->entity.x + 8;
|
|
||||||
y1 = pd->entity.y - 4 + yo;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
x0 = pd->entity.x - range;
|
|
||||||
y0 = pd->entity.y - 8 + yo;
|
|
||||||
x1 = pd->entity.x - 4;
|
|
||||||
y1 = pd->entity.y + 8 + yo;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
x0 = pd->entity.x + 4;
|
|
||||||
y0 = pd->entity.y - 8 + yo;
|
|
||||||
x1 = pd->entity.x + range;
|
|
||||||
y1 = pd->entity.y + 8 + yo;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Entity * es[eManager.lastSlot[pd->entity.level]];
|
|
||||||
int eSize = getEntities(es, pd->entity.level, x0, y0, x1, y1);
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < eSize; ++i) {
|
|
||||||
Entity * ent = es[i];
|
|
||||||
if (ent != &(pd->entity)){
|
|
||||||
if(ent->type == ENTITY_FURNITURE){
|
|
||||||
//Important: close all crafting windows using this furniture (only applies to chest) or else they will write invalid memory
|
|
||||||
for(int i=0; i<playerCount; i++) {
|
|
||||||
if(players[i].curChestEntity==ent) {
|
|
||||||
players[i].ingameMenu = MENU_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item nItem = newItem(ent->entityFurniture.itemID,0);
|
|
||||||
if(ent->entityFurniture.itemID == ITEM_CHEST) nItem.chestPtr = ent->entityFurniture.inv;
|
|
||||||
pushItemToInventoryFront(nItem, &(pd->inventory));
|
|
||||||
|
|
||||||
removeEntityFromList(ent, ent->level, &eManager);
|
|
||||||
pd->activeItem = &(pd->inventory.items[0]);
|
|
||||||
pd->entity.p.isCarrying = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// in head crafting
|
|
||||||
if(pd->inputs.k_use.clicked){
|
|
||||||
pd->ingameMenuInvSel = 0;
|
|
||||||
if(!playerUse(pd)){
|
|
||||||
pd->currentCraftTitle = "Crafting";
|
|
||||||
openCraftingMenu(pd, &inHeadRecipes, "Crafting");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pd->inputs.k_menu.clicked){
|
if (pd->inputs.k_menu.clicked){
|
||||||
pd->ingameMenuInvSel = 0;
|
pd->ingameMenuInvSel = 0;
|
||||||
if(!playerUse(pd)) pd->ingameMenu = MENU_INVENTORY;
|
if(!playerUse(pd)) pd->ingameMenu = MENU_INVENTORY;
|
||||||
|
|
|
@ -1118,7 +1118,7 @@ void renderFurniture(int itemID, int x, int y) {
|
||||||
render16(x, y, 240, 128, 0);
|
render16(x, y, 240, 128, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_POTION_MAKER:
|
case ITEM_POTION_MAKER:
|
||||||
render16(x, y, 192, 168, 0);
|
render16(x, y, 240, 96, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1523,7 +1523,7 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
|
||||||
render(x, y, 0, 152, 0);
|
render(x, y, 0, 152, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_WOOD:
|
case ITEM_WOOD:
|
||||||
render(x, y, 160, 168, 0);
|
render(x, y, 8, 152, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_STONE:
|
case ITEM_STONE:
|
||||||
renderb(x, y, 16, 152, 0, rockColor[1]);
|
renderb(x, y, 16, 152, 0, rockColor[1]);
|
||||||
|
@ -1559,19 +1559,19 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
|
||||||
render(x, y, 80, 152, 0);
|
render(x, y, 80, 152, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_GOLD_APPLE:
|
case ITEM_GOLD_APPLE:
|
||||||
render(x, y, 144, 168, 0);
|
render(x, y, 177, 160, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_STRENGTH_POTION:
|
case ITEM_STRENGTH_POTION:
|
||||||
render(x, y, 176, 160, 0);
|
|
||||||
break;
|
|
||||||
case ITEM_SPEED_POTION:
|
|
||||||
render(x, y, 184, 160, 0);
|
render(x, y, 184, 160, 0);
|
||||||
break;
|
break;
|
||||||
|
case ITEM_SPEED_POTION:
|
||||||
|
render(x, y, 191, 160, 0);
|
||||||
|
break;
|
||||||
case ITEM_REGEN_POTION:
|
case ITEM_REGEN_POTION:
|
||||||
render(x, y, 192, 160, 0);
|
render(x, y, 198, 160, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_SWIM_BREATH_POTION:
|
case ITEM_SWIM_BREATH_POTION:
|
||||||
render(x, y, 200, 160, 0);
|
render(x, y, 219, 160, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_SLIME:
|
case ITEM_SLIME:
|
||||||
renderb(x, y, 88, 152, 0, 0xFF4DC04D);
|
renderb(x, y, 88, 152, 0, 0xFF4DC04D);
|
||||||
|
@ -1604,7 +1604,7 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
|
||||||
render(x, y, 144, 160, 0);
|
render(x, y, 144, 160, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_POTION_MAKER:
|
case ITEM_POTION_MAKER:
|
||||||
render(x, y, 192, 168, 0);
|
render(x, y, 216, 152, 0);
|
||||||
break;
|
break;
|
||||||
case ITEM_WALL_WOOD:
|
case ITEM_WALL_WOOD:
|
||||||
renderb(x, y, 224, 144, 0, woodColor);
|
renderb(x, y, 224, 144, 0, woodColor);
|
||||||
|
@ -1698,26 +1698,5 @@ void renderItemIcon(int itemID, int countLevel, int x, int y) {
|
||||||
else render(x, y, 136, 168, 0);
|
else render(x, y, 136, 168, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TOOL_CLAYMORE:
|
|
||||||
render(x, y, countLevel * 8, 176, 0);
|
|
||||||
break;
|
|
||||||
case ITEM_TORCH:
|
|
||||||
render(x, y, 168, 168, 0);
|
|
||||||
break;
|
|
||||||
case ITEM_BED:
|
|
||||||
render(x, y, 176, 168, 0);
|
|
||||||
break;
|
|
||||||
case ITEM_SHEARS:
|
|
||||||
render(x, y, 40, 176, 0);
|
|
||||||
break;
|
|
||||||
case ITEM_FISHING_ROD:
|
|
||||||
render(x, y, 48, 176, 0);
|
|
||||||
break;
|
|
||||||
case ITEM_FISH_RAW:
|
|
||||||
render(x, y, 56, 176, 0);
|
|
||||||
break;
|
|
||||||
case ITEM_FISH_COOKED:
|
|
||||||
render(x, y, 64, 176, 0);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,9 +8,9 @@ void loadSound(Sound * snd, char * filename){
|
||||||
FILE *file = fopen(filename, "rb");
|
FILE *file = fopen(filename, "rb");
|
||||||
if(file != NULL){
|
if(file != NULL){
|
||||||
fseek(file, 0, SEEK_END);
|
fseek(file, 0, SEEK_END);
|
||||||
snd->size = ftell(file)/2;
|
snd->size = ftell(file);
|
||||||
fseek(file, 0, SEEK_SET);
|
fseek(file, 0, SEEK_SET);
|
||||||
snd->buffer = linearAlloc(snd->size*sizeof(u16));
|
snd->buffer = linearAlloc(snd->size);
|
||||||
fread(snd->buffer, 1, snd->size, file);
|
fread(snd->buffer, 1, snd->size, file);
|
||||||
}
|
}
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
|
@ -25,8 +25,6 @@
|
||||||
|
|
||||||
//TODO: Something still causes desyncs very rarely
|
//TODO: Something still causes desyncs very rarely
|
||||||
|
|
||||||
static aptHookCookie cookie;
|
|
||||||
|
|
||||||
void setupGame() {
|
void setupGame() {
|
||||||
synchronizerInit(rand(), 1, 0);
|
synchronizerInit(rand(), 1, 0);
|
||||||
synchronizerSetPlayerUID(0, localUID);
|
synchronizerSetPlayerUID(0, localUID);
|
||||||
|
@ -79,16 +77,6 @@ void setupBGMap() {
|
||||||
|
|
||||||
initBGMap = 0;
|
initBGMap = 0;
|
||||||
}
|
}
|
||||||
static void task_apt_hook(APT_HookType hook, void* param) {
|
|
||||||
switch(hook) {
|
|
||||||
case APTHOOK_ONSUSPEND:
|
|
||||||
paused = true;
|
|
||||||
stopMusic();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//for rendering -> move to a better place
|
//for rendering -> move to a better place
|
||||||
|
@ -135,7 +123,7 @@ int main() {
|
||||||
quitGame = false;
|
quitGame = false;
|
||||||
initBGMap = 1;
|
initBGMap = 1;
|
||||||
|
|
||||||
icons = sfil_load_PNG_buffer(icons_png, SF2D_PLACE_RAM);
|
icons = sfil_load_PNG_buffer(icons2_png, SF2D_PLACE_RAM);
|
||||||
playerSprites = sfil_load_PNG_buffer(player_png, SF2D_PLACE_RAM);
|
playerSprites = sfil_load_PNG_buffer(player_png, SF2D_PLACE_RAM);
|
||||||
font = sfil_load_PNG_buffer(Font_png, SF2D_PLACE_RAM);
|
font = sfil_load_PNG_buffer(Font_png, SF2D_PLACE_RAM);
|
||||||
bottombg = sfil_load_PNG_buffer(bottombg_png, SF2D_PLACE_RAM);
|
bottombg = sfil_load_PNG_buffer(bottombg_png, SF2D_PLACE_RAM);
|
||||||
|
@ -163,16 +151,14 @@ int main() {
|
||||||
localInputs.k_down.input = KEY_DDOWN | KEY_CPAD_DOWN | KEY_CSTICK_DOWN;
|
localInputs.k_down.input = KEY_DDOWN | KEY_CPAD_DOWN | KEY_CSTICK_DOWN;
|
||||||
localInputs.k_left.input = KEY_DLEFT | KEY_CPAD_LEFT | KEY_CSTICK_LEFT;
|
localInputs.k_left.input = KEY_DLEFT | KEY_CPAD_LEFT | KEY_CSTICK_LEFT;
|
||||||
localInputs.k_right.input = KEY_DRIGHT | KEY_CPAD_RIGHT | KEY_CSTICK_RIGHT;
|
localInputs.k_right.input = KEY_DRIGHT | KEY_CPAD_RIGHT | KEY_CSTICK_RIGHT;
|
||||||
localInputs.k_attack.input = KEY_A;
|
localInputs.k_attack.input = KEY_A | KEY_B | KEY_L | KEY_ZR;
|
||||||
localInputs.k_pickup.input = KEY_B;
|
localInputs.k_menu.input = KEY_X | KEY_Y | KEY_R | KEY_ZL;
|
||||||
localInputs.k_use.input = KEY_X;
|
|
||||||
localInputs.k_menu.input = KEY_Y ;
|
|
||||||
localInputs.k_pause.input = KEY_START;
|
localInputs.k_pause.input = KEY_START;
|
||||||
localInputs.k_accept.input = KEY_A;
|
localInputs.k_accept.input = KEY_A;
|
||||||
localInputs.k_decline.input = KEY_B;
|
localInputs.k_decline.input = KEY_B;
|
||||||
localInputs.k_delete.input = KEY_X;
|
localInputs.k_delete.input = KEY_X;
|
||||||
localInputs.k_menuNext.input = KEY_R | KEY_ZR;
|
localInputs.k_menuNext.input = KEY_R;
|
||||||
localInputs.k_menuPrev.input = KEY_L | KEY_ZL;
|
localInputs.k_menuPrev.input = KEY_L;
|
||||||
|
|
||||||
/* If btnSave exists, then use that. */
|
/* If btnSave exists, then use that. */
|
||||||
if ((file = fopen("btnSave.bin", "rb"))) {
|
if ((file = fopen("btnSave.bin", "rb"))) {
|
||||||
|
@ -181,8 +167,6 @@ int main() {
|
||||||
fread(&(localInputs.k_left.input), sizeof(int), 1, file);
|
fread(&(localInputs.k_left.input), sizeof(int), 1, file);
|
||||||
fread(&(localInputs.k_right.input), sizeof(int), 1, file);
|
fread(&(localInputs.k_right.input), sizeof(int), 1, file);
|
||||||
fread(&(localInputs.k_attack.input), sizeof(int), 1, file);
|
fread(&(localInputs.k_attack.input), sizeof(int), 1, file);
|
||||||
fread(&(localInputs.k_pickup.input), sizeof(int), 1, file);
|
|
||||||
fread(&(localInputs.k_use.input), sizeof(int), 1, file);
|
|
||||||
fread(&(localInputs.k_menu.input), sizeof(int), 1, file);
|
fread(&(localInputs.k_menu.input), sizeof(int), 1, file);
|
||||||
fread(&(localInputs.k_pause.input), sizeof(int), 1, file);
|
fread(&(localInputs.k_pause.input), sizeof(int), 1, file);
|
||||||
fread(&(localInputs.k_accept.input), sizeof(int), 1, file);
|
fread(&(localInputs.k_accept.input), sizeof(int), 1, file);
|
||||||
|
@ -204,9 +188,7 @@ int main() {
|
||||||
initPlayers();
|
initPlayers();
|
||||||
initRecipes();
|
initRecipes();
|
||||||
initTrades();
|
initTrades();
|
||||||
aptHook(&cookie, task_apt_hook, NULL);
|
|
||||||
while (aptMainLoop()) {
|
while (aptMainLoop()) {
|
||||||
if (paused == true) playMusic(&music_menu);
|
|
||||||
if (quitGame) break;
|
if (quitGame) break;
|
||||||
|
|
||||||
if (initGame > 0 && --initGame==0) setupGame();
|
if (initGame > 0 && --initGame==0) setupGame();
|
||||||
|
|
|
@ -89,7 +89,7 @@ int loadTexturePack(char * filename) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(texturepackUseDefaultIcons){
|
if(texturepackUseDefaultIcons){
|
||||||
icons = sfil_load_PNG_buffer(icons_png, SF2D_PLACE_RAM);
|
icons = sfil_load_PNG_buffer(icons2_png, SF2D_PLACE_RAM);
|
||||||
reloadColors();
|
reloadColors();
|
||||||
}
|
}
|
||||||
if(texturepackUseDefaultPlayer) playerSprites = sfil_load_PNG_buffer(player_png, SF2D_PLACE_RAM);
|
if(texturepackUseDefaultPlayer) playerSprites = sfil_load_PNG_buffer(player_png, SF2D_PLACE_RAM);
|
||||||
|
|
Loading…
Add table
Reference in a new issue