summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xinclude/game.h1
-rw-r--r--kamek_ntsc.x1
-rw-r--r--kamek_ntsc2.x1
-rw-r--r--kamek_pal.x1
-rw-r--r--kamek_pal2.x1
-rw-r--r--randtilegen.rb48
-rw-r--r--randtiles.yaml5
-rw-r--r--src/randtiles.cpp5
8 files changed, 58 insertions, 5 deletions
diff --git a/include/game.h b/include/game.h
index 3c631c6..554e17a 100755
--- a/include/game.h
+++ b/include/game.h
@@ -41,6 +41,7 @@ void *DVD_GetFile(void *dvdclass2, const char *arc, const char *file);
void *DVD_GetFile(void *dvdclass2, const char *arc, const char *file, u32 *length);
int MakeRandomNumber(int count);
+int MakeRandomNumberForTiles(int count);
extern int Player_Active[4];
diff --git a/kamek_ntsc.x b/kamek_ntsc.x
index da5f3dd..6724759 100644
--- a/kamek_ntsc.x
+++ b/kamek_ntsc.x
@@ -1004,6 +1004,7 @@ SECTIONS {
RandomSeed = 0x80429F44;
MakeRandomNumber__Fi = 0x800B2EE0;
+ MakeRandomNumberForTiles__Fi = 0x801613A0;
StrangeReplayValue1 = 0x8042792E;
StrangeReplayValue2 = 0x80429D69;
diff --git a/kamek_ntsc2.x b/kamek_ntsc2.x
index 5fc9d3b..e3b3bce 100644
--- a/kamek_ntsc2.x
+++ b/kamek_ntsc2.x
@@ -1004,6 +1004,7 @@ SECTIONS {
RandomSeed = 0x80429F44;
MakeRandomNumber__Fi = 0x800B2EE0;
+ MakeRandomNumberForTiles__Fi = 0x801613A0;
StrangeReplayValue1 = 0x8042792E;
StrangeReplayValue2 = 0x80429D69;
diff --git a/kamek_pal.x b/kamek_pal.x
index c7a2fb7..e535d2a 100644
--- a/kamek_pal.x
+++ b/kamek_pal.x
@@ -1004,6 +1004,7 @@ SECTIONS {
RandomSeed = 0x8042A224;
MakeRandomNumber__Fi = 0x800B2EE0;
+ MakeRandomNumberForTiles__Fi = 0x801614E0;
StrangeReplayValue1 = 0x80427C2E;
StrangeReplayValue2 = 0x8042A049;
diff --git a/kamek_pal2.x b/kamek_pal2.x
index 8e1321a..d6a3d40 100644
--- a/kamek_pal2.x
+++ b/kamek_pal2.x
@@ -1004,6 +1004,7 @@ SECTIONS {
RandomSeed = 0xDEADBEEF;
MakeRandomNumber__Fi = 0xDEADBEEF;
+ MakeRandomNumberForTiles__Fi = 0xDEADBEEF;
StrangeReplayValue1 = 0xDEADBEEF;
StrangeReplayValue2 = 0xDEADBEEF;
diff --git a/randtilegen.rb b/randtilegen.rb
index f77d333..f92db5d 100644
--- a/randtilegen.rb
+++ b/randtilegen.rb
@@ -11,9 +11,19 @@ class RandTileGenerator
end
def random(range, type=:both, numbers=nil)
- numbers = range if numbers.nil?
-
- @current_section[:entries] << {range: range, type: type, numbers: numbers.to_a}
+ case range
+ when Range
+ # Regular handling
+ numbers = range if numbers.nil?
+ @current_section[:entries] << {range: range, type: type, numbers: numbers.to_a}
+ when Numeric
+ # One number
+ random(range..range, type, numbers)
+ when Enumerable
+ # An array or something else similar
+ numbers = range if numbers.nil?
+ range.each { |r| random(r, type, numbers) }
+ end
end
def pack
@@ -79,6 +89,33 @@ class RandTileGenerator
output << "\0"
output.join
end
+
+
+ def regular_terrain
+ # Left Side
+ random([0x10, 0x20, 0x30, 0x40], :vert)
+ # Right Side
+ random([0x11, 0x21, 0x31, 0x41], :vert)
+ # Top Side
+ random(2..7, :horz)
+ # Bottom Side
+ random(0x22..0x27, :horz)
+ # Middle
+ random(0x12..0x17)
+ end
+
+ def sub_terrain
+ # Left Side
+ random([0x18, 0x28, 0x38, 0x48], :vert)
+ # Right Side
+ random([0x19, 0x29, 0x39, 0x49], :vert)
+ # Top Side
+ random(0xA..0xF, :horz)
+ # Bottom Side
+ random(0x2A..0x2F, :horz)
+ # Middle
+ random(0x1A..0x1F)
+ end
end
@@ -89,6 +126,11 @@ g.section('TestTileset') do
g.random(250..255, :vert, 0..5)
end
+g.section('Pa1_nohara') do
+ g.regular_terrain
+ g.sub_terrain
+end
+
File.open('/home/me/Games/Newer/DolphinPatch/NewerRes/RandTiles.bin', 'wb') do |f|
f.write g.pack
end
diff --git a/randtiles.yaml b/randtiles.yaml
index 5ee73aa..5bdc11c 100644
--- a/randtiles.yaml
+++ b/randtiles.yaml
@@ -24,3 +24,8 @@ hooks:
src_addr_pal: 0x80086B48
target_func: 'TryAndRandomise'
+ - name: AHackOfGiganticProportions
+ type: patch
+ addr_pal: 0x80086B4C
+ data: '4800 0120'
+
diff --git a/src/randtiles.cpp b/src/randtiles.cpp
index 4af3bf7..92e31ae 100644
--- a/src/randtiles.cpp
+++ b/src/randtiles.cpp
@@ -109,7 +109,7 @@ extern "C" void TryAndRandomise(RTilemapClass *self, BGRender *bgr) {
// Found it!!
// Try to make one until we meet the conditions
u8 *tileNums = entry->getTileNums();
- u8 chosen = 0xFF;
+ u16 chosen = 0xFF;
u16 *top = 0, *left = 0, *right = 0, *bottom = 0;
if (entry->type == RandomTileData::CHECK_HORZ || entry->type == RandomTileData::CHECK_BOTH) {
@@ -123,7 +123,8 @@ extern "C" void TryAndRandomise(RTilemapClass *self, BGRender *bgr) {
}
while (true) {
- chosen = tileNums[MakeRandomNumber(entry->count)];
+ // is there even a point to using that special random function?
+ chosen = (tileset << 8) | tileNums[MakeRandomNumberForTiles(entry->count)];
if (top != 0 && *top == chosen)
continue;