From 9e6e6cecaaec6cf27fd818a66a18edadd6804a2b Mon Sep 17 00:00:00 2001 From: Treeki Date: Mon, 25 Jul 2011 04:31:00 +0200 Subject: random tile hack complete! it's missing definitions though --- include/game.h | 1 + kamek_ntsc.x | 1 + kamek_ntsc2.x | 1 + kamek_pal.x | 1 + kamek_pal2.x | 1 + randtilegen.rb | 48 +++++++++++++++++++++++++++++++++++++++++++++--- randtiles.yaml | 5 +++++ src/randtiles.cpp | 5 +++-- 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; -- cgit v1.2.3