diff --git a/Configs/Default.config.gmx b/Configs/Default.config.gmx
index 96a5155..35713ba 100644
--- a/Configs/Default.config.gmx
+++ b/Configs/Default.config.gmx
@@ -518,7 +518,7 @@
False
True
False
- 152
+ 153
0
@@ -526,7 +526,7 @@
1
5
- 2
+ 3
0
@@ -611,7 +611,7 @@
1
Configs\Default\windows\RunnerInstaller.nsi
- 2
+ 3
Configs\Default\windows\Runner_finish.bmp
Configs\Default\windows\Runner_header.bmp
0
diff --git a/README.md b/README.md
index e2faf75..7590d97 100644
--- a/README.md
+++ b/README.md
@@ -70,9 +70,9 @@ This repository, being based on YellowAfterlife's source reconstruction, is inst
1. Download everything from the requirements section above.
2. Download and extract [this repository](https://github.com/AM2R-Community-Developers/AM2R-Community-Updates/archive/refs/heads/main.zip) somewhere.
3. Go to where you have your AM2Rlauncher located, then into the `Profiles` folder, and after that the `Community Updates (Latest)`. Place the `data.win` file from there into the project directory.
-
-4. Drag the `AM2R.exe` file onto the GmxDataSync executable. If everything is correct, this will populate the project with art/audio assets from the binary.
-
+
+4. Drag the `data.win` file onto the GmxDataSync executable. If everything is correct, this will populate the project with art/audio assets from the binary.
+
5. Replace the two blank shader assets with default GM:S shader skeletons or your own copy of each shader, as well as the accompanying script files for the Retro Palette Swapper: `pal_swap_init_system` and `pal_swap_set`.
**WARNING:** If the two above scripts are not replaced *before* opening the project file, GM:S 1.4 will replace them with `` references in the asset tree at `Scripts/Lojical/Shaders/`. This will produce numerous seemingly unrelated errors until they are deleted and replaced with the appropriately named scripts.
6. Finally, you will need to install `modifiers.ini` as well as the `lang` and `mods` folders as datafiles within the GM:S project. The default ones do not contain the actual assets and are merely references. These can be copied from your `Community Updates (Latest)` folder.
diff --git a/objects/oA6Dust.object.gmx b/objects/oA6Dust.object.gmx
index e39f5d9..e260080 100644
--- a/objects/oA6Dust.object.gmx
+++ b/objects/oA6Dust.object.gmx
@@ -81,13 +81,15 @@ speed = random(0.5);
1
if (!fadeout) {
if (image_alpha < max_alpha) image_alpha += 0.02;
-} else if (image_alpha > 0) {
- image_alpha -= 0.02;
-}
-if (image_alpha < 0) { // fix for YYC
- instance_destroy();
}
-
+else {
+ if (image_alpha > 0) {
+ image_alpha -= 0.02;
+ }
+ else {
+ instance_destroy();
+ }
+}
diff --git a/objects/oA6DustSpawner.object.gmx b/objects/oA6DustSpawner.object.gmx
index 5addd61..427814f 100644
--- a/objects/oA6DustSpawner.object.gmx
+++ b/objects/oA6DustSpawner.object.gmx
@@ -49,12 +49,14 @@ alarm[1] = 2;
1
- repeat (15) {
+ var x1, y1, x2, y2;
+
+repeat (15) {
x1 = max(0, view_xview[0] - 64 - (oControl.widescreen_space/2));
y1 = max(0, view_yview[0] - 64);
x2 = min(room_width, view_xview[0] + view_wview[0] + 64 + (oControl.widescreen_space/2));
y2 = min(room_height, view_yview[0] + view_hview[0] + 64);
- dust = instance_create(random_range(x1, x2), random_range(y1, y2), oA6Dust);
+ dust = instance_create(irandom_range(x1, x2), irandom_range(y1, y2), oA6Dust);
}
@@ -78,11 +80,11 @@ alarm[1] = 2;
1
- x1 = max(0, view_xview[0] - 64 - (oControl.widescreen_space/2));
-y1 = max(0, view_yview[0] - 64);
-x2 = min(room_width, view_xview[0] + view_wview[0] + 64 + (oControl.widescreen_space/2));
-y2 = min(room_height, view_yview[0] + view_hview[0] + 64);
-instance_create(random_range(x1, x2), random_range(y1, y2), oA6Dust);
+ var x1 = max(0, view_xview[0] - 64 - (oControl.widescreen_space/2)),
+ y1 = max(0, view_yview[0] - 64),
+ x2 = min(room_width, view_xview[0] + view_wview[0] + 64 + (oControl.widescreen_space/2)),
+ y2 = min(room_height, view_yview[0] + view_hview[0] + 64);
+instance_create(irandom_range(x1, x2), irandom_range(y1, y2), oA6Dust);
alarm[0] = 15;
diff --git a/objects/oBlobThrowerLand.object.gmx b/objects/oBlobThrowerLand.object.gmx
index 3fa78a8..781ef14 100644
--- a/objects/oBlobThrowerLand.object.gmx
+++ b/objects/oBlobThrowerLand.object.gmx
@@ -71,7 +71,7 @@ vulnerable = 0;
var inst = instance_place(x, y, oBeam);
if(inst != noone) {
- if(inst.ibeam) exit
+ if(inst.ibeam) exit;
}
repeat (2) {
diff --git a/objects/oCreditsText.object.gmx b/objects/oCreditsText.object.gmx
index c7329bc..2f5d835 100644
--- a/objects/oCreditsText.object.gmx
+++ b/objects/oCreditsText.object.gmx
@@ -25,13 +25,98 @@
1
- if(global.saxmode) room_goto(rm_score);
-text = "Another " + global.monsterStr + " 2 Remake# # # # # # # # # # # #Producer#Milton 'DoctorM64' Guasti# #Graphic Design#Ramiro Negri#Steve 'Sabre230' Rothlisberger#Jack Witty#Kirill '1Eni1' Fevralev#Jasper#MichaelGabrielR# #Promo Art#Azima 'Zim' Khan# #Writing#James 'Ridley' Hobbs#Paulo 'Latinlingo' Villalobos# #Platform Engine Code#Martin Piecyk# #Music Composition#Milton 'DoctorM64' Guasti#Darren Kerwin#Torbjørn 'Falcool' Brandrud# #Debug#Hemse#Dragondarch#Esteban 'DruidVorse' Criado#Verneri 'Naatiska' Viljanen# #Playtest#Jennifer Potter#Mario Crestanello#Live4Truths#Torbjørn 'Falcool' Brandrud#Lise Trehjørningen#Nommiin#Gabriel Kaplan#Nicolas 'Skol' Del Negro#Darren Kerwin#Robert Sephazon# #Community Management#Dragonheart91#Ammypendent#Karrde# #Special Thanks#Nommiin#Nathan 'wickedclown' Hess#Tyler Rogers#Kousoru#Infinity's End#CapCom#Isabelle Amponin#The " + global.monsterStr + " Community# # # # # #Source Code Reconstruction#YellowAfterlife# # #Continued Revisions# #Lead - Former#Gatordile#Alex 'Wanderer' Mack# #Lead#Lojemiru# #Development#Craig Kostelecky#" + global.monsterStr + "3D# #Art Lead#Dannon 'Shmegleskimo' Yates# #Art#ShirtyScarab#Cooper Garvin#Chris 'Messianic' Oliveira#ChloePlz# #Special Thanks#Banjo, Grom PE,#King Bore, Jean-Samuel Pelletier,#Reaku The Crate, Scooterboot, #Sylandro, TheKhaosDemon, #Unknown, Iwantdevil, #PixHammer, CaptGlitch,#Nokbient, EODTex,#Electrix, gponys,#Japanese Community# # # # # #Original " + global.monsterStr + " II Staff# #Producer#Gunpei Yokoi# #Director#Hiroji Kiyotake, Hiroyuki Kimura# #Main Programmer#Takahiro Harada# #Programmer#Masaru Yamanaka, Masao Yamamoto,#Isao Hirano# #Graphic Designer#Hiroji Kiyotake, Hiroyuki Kimura# #Program Assistant#Yuzuru Ogawa, Nobuhiro Ozaki# #Sound Programmer#Ryohji Yoshitomi# #Designer#Makoto Kanoh, Masafumi Sakashita,#Tomoyoshi Yamane, Takehiko Hosokawa,#Yasuo Inoue# #Debug#Masaru Okadaga, Kenji Nishizawa,#Hirofumi Matsuoka, Tohru Ohsawa,#Kohta Fukui, Keisuke Terasaki,#Kenichi Sugino, Hitoshi Yamagami,#Katsuya Yamaoe, Yuji Hori# #Co-op Mod#milesthenerd#xzackly7# # # # # # # # #In Memory of Satoru Iwata";
+ /*
+ FORMATTING KEY:
+ ; = linebreak marker (NOT # because we want to handle it manually and insert them later)
+ = = split into left/right strings here
+ / = centered name
+ * = centered header (gets custom display color)
+*/
+
+// Refer to key above
+text = "*Another " + global.monsterStr + " 2 Remake;;;;;;;;;;;;*Producer;/Milton 'DoctorM64' Guasti;;*Graphic Design;Ramiro Negri=MichaelGabrielR;Jasper=Jack Witty;/Steve 'Sabre230' Rothlisberger;/Kirill '1Eni1' Fevralev;;*Promo Art;/Azima 'Zim' Khan;;*Writing;/James 'Ridley' Hobbs;/Paulo 'Latinlingo' Villalobos;;*Platform Engine Code;/Martin Piecyk;;*Music Composition;/Milton 'DoctorM64' Guasti;/Darren Kerwin;/Torbjørn 'Falcool' Brandrud;;*Debug;Dragondarch=Hemse;/Esteban 'DruidVorse' Criado;/Verneri 'Naatiska' Viljanen;;*Playtesting;Jennifer Potter=Mario Crestanello;Live4Truths=Nommiin;/Torbjørn 'Falcool' Brandrud;/Nicolas 'Skol' Del Negro;Lise Trehjørningen=Gabriel Kaplan;Darren Kerwin=Robert Sephazon;;*Community Management;Dragonheart91=Ammypendent;/Karrde;;*Special Thanks;Nommiin=Tyler Rogers;Kousoru=Infinity's End;Isabelle Amponin=CapCom;/Nathan 'wickedclown' Hess;/The " + global.monsterStr + " Community;;;;*Source Code Reconstruction;/YellowAfterlife;;;;*Continued Revisions;;*Development;Gatordile=Lojemiru;/Alex 'Wanderer' Mack;;*Programming;" + global.monsterStr + "3D=Scooterboot;/Craig Kostelecky;;*Art Lead;/Dannon 'Shmegleskimo' Yates;;*Art;ShirtyScarab=Cooper Garvin;/Chris 'Messianic' Oliveira;/ChloePlz;;*Debug;Miepee=EODTex;/Esteban 'DruidVorse' Criado;/Verneri 'Naatiska' Viljanen;/Electrix;;*Localization;Imsu=Diegomg;m3Zz=LPCaiser;Miepee=unknown;fedprod=ReNext;LetsPlayNintendoITA=SadNES cITy e Vecna;Atver=Gponys;DarkEspeon=Vectrex28;R3VOWOOD=Ritinha;LiveLM=pMega0n;peachflavored=Katherine_S2003;PanHooHa=realgard;Mister Bond=joe_urahara;RippeR1692=LudvigNG;/Andréas;;*Special Thanks;Banjo=King Bore;Reaku the Crate=Grom PE;Sylandro=TheKhaosDemon;Iwantdevil=PixHammer;GaptGlitch=Nokbient;Nanassshy=kitronmacaron;/Jean-Samuel Pelletier;/Japanese Community;;;;*Original " + global.monsterStr + " II Staff;;*Producer;/Gunpei Yokoi;;*Director;Hiroji Kiyotake=Hiroyuki Kimura;;*Main Programmer;/Takahiro Harada;;*Programmer;Masaru Yamanaka=Masao Yamamoto;/Isao Hirano;;*Graphic Designer;Hiroji Kiyotake=Hiroyuki Kimura;;*Program Assistant;Yuzuru Ogawa=Nobuhiro Ozaki;;*Sound Programmer;/Ryohji Yoshitomi;;*Designer;Makoto Kanoh=Masafumi Sakashita;Tomoyoshi Yamane=Takehiko Hosokawa;/Yasuo Inoue;;*Debug;Masaru Okadaga=Kenji Nishizawa;Hirofumi Matsuoka=Tohru Ohsawa;Kohta Fukui=Keisuke Terasaki;Kenichi Sugino=Hitoshi Yamagami;Katsuya Yamaoe=Yuji Hori;;;;;;;;;;/In Memory of Satoru Iwata;";
+
+// Constants
+TEXT_ROWS = string_count(";", text);
+X_POS = room_width / 2;
+WIDE_SPACE = oControl.widescreen_space / 2;
+
+// Calculate scroll speed based on line count.
+SCROLL_SPEED = (TEXT_ROWS * -0.27) / 120;
+
+// Vars
+var arrayIndex = 0;
+var subStr = "";
+var line = 0;
+
+// Generate blank space in 2D array...
+for (var i = 0; i < TEXT_ROWS; i++) {
+ for (var j = 0; j < 4; j++) {
+ textArray[i, j] = "";
+ }
+}
+
+var strLength = string_length(text)
+
+// Parse text
+for (var i = 1; i <= strLength; i++) {
+ // Get next char
+ var nextChar = string_char_at(text, i);
+
+ // Parsing - refer to key above
+ if (nextChar == "=") { // Split
+ // Store subStr as left (technically anything but left is what it /should/ be)
+ textArray[line, arrayIndex] = subStr;
+
+ // Reset subStr
+ subStr = "";
+
+ // Set next index to right
+ arrayIndex = 1;
+ }
+ else if (nextChar == ";") { // Linebreak
+ // Store subStr to index
+ textArray[line, arrayIndex] = subStr;
+
+ // Reset subStr/index
+ subStr = "";
+ arrayIndex = 0;
+
+ // Drop to next line
+ line++;
+ }
+ else if (nextChar == "/") { // Centered
+ // Set index to center
+ arrayIndex = 2;
+ }
+ else if (nextChar == "*") { // Centered header
+ // Set index to header
+ arrayIndex = 3;
+ }
+ else {
+ // Add current char to subStr
+ subStr += nextChar;
+ }
+}
+
+// Create text strings
+textLeft = "";
+textRight = "";
+textCenter = "";
+textHeader = "";
+
+// Compile arrays into their respective strings; add newlines
+for (var i = 0; i < TEXT_ROWS; i++) {
+ textLeft += textArray[i, 0] + "#";
+ textRight += textArray[i, 1] + "#";
+ textCenter += textArray[i, 2] + "#";
+ textHeader += textArray[i, 3] + "#";
+}
+
yoffset = 0;
fadeout = 0;
canfadeout = 0;
-//canfadeout = 1; //remove this!
alarm[0] = 1;
image_alpha = 0;
if (global.creditsmenuopt == 1) {
@@ -44,10 +129,6 @@ if (global.creditsmenuopt == 1) {
}
if (os_type == os_android) os_powersave_enable(false);
-
-widespace = oControl.widescreen*53;
-
-if(audio_is_playing(oMusicV2.currentbgm)) audio_stop_sound(oMusicV2.currentbgm);
@@ -142,22 +223,31 @@ if(audio_is_playing(oMusicV2.currentbgm)) audio_stop_sound(oMusicV2.currentbgm);
1
- if (canfadeout && (oControl.kMenu1 || oControl.kMenu2 || oControl.kStart)) fadeout = 1;
+ // User fadeout input
+if (canfadeout && (oControl.kMenu1 || oControl.kMenu2 || oControl.kStart)) fadeout = 1;
+
+// Fadeout routine
if (fadeout) {
if (yoffset > 0) {
yoffset -= 1;
} else event_user(0);
}
+
+// Credits cutscene animation
if (statetime == 360) instance_create(192, 88, oCreditsShip);
+
+// Fade in
if (statetime > 520) {
if (image_alpha < 1) image_alpha += 0.05;
}
-//This dictates the credit scrolling speed
-if (statetime == 700) vspeed = -0.34;
-statetime += 1;
+// This dictates the credit scrolling speed
+if (statetime == 700) vspeed = SCROLL_SPEED; // -0.34;
-if(audio_is_playing(oMusicV2.currentbgm)) audio_stop_sound(oMusicV2.currentbgm);
+// This stops the credits on the final line
+if (y <= ystart + 8 - (TEXT_ROWS * 12)) vspeed = 0;
+
+statetime++;
@@ -180,7 +270,9 @@ if(audio_is_playing(oMusicV2.currentbgm)) audio_stop_sound(oMusicV2.currentbgm);
1
- display_set_gui_size(-1,-1);
+ /// Reset GUI, determine exit condition
+
+display_set_gui_size(-1,-1);
if (global.creditsmenuopt == 0) {
room_goto(rm_score);
@@ -211,31 +303,31 @@ if (global.creditsmenuopt == 0) {
1
- display_set_gui_size(320,240);
+ // Setup
+display_set_gui_size(320, 240);
draw_set_alpha(image_alpha);
draw_set_font(fontGUI2);
-draw_set_color(c_black);
-draw_text(x + 1 - widespace, y + 17, text);
-draw_set_color(c_white);
-draw_text(x - widespace, y + 16, text);
-draw_set_alpha(1);
-draw_set_color(c_black);
-draw_rectangle(0 - widespace, 0, 330 + widespace, 120 - yoffset, false);
-draw_rectangle(0 - widespace, 120 + yoffset, 330 + widespace, 250, false);
+// Left
+draw_set_halign(fa_right);
+draw_cool_text(X_POS - 12, y + 17, textLeft, c_black, c_white, c_white, 1);
-/* //Old code in draw event
+// Right
+draw_set_halign(fa_left);
+draw_cool_text(X_POS + 12, y + 17, textRight, c_black, c_white, c_white, 1);
-draw_set_alpha(image_alpha);
-draw_set_font(fontGUI2);
-draw_set_color(c_black);
-draw_text(round(x + 1), round(y + 17), text);
-draw_set_color(c_white);
-draw_text(round(x), round(y + 16), text);
+// Center
+draw_set_halign(fa_center);
+draw_cool_text(X_POS, y + 17, textCenter, c_black, c_white, c_white, 1);
+
+// Header
+draw_cool_text(X_POS, y + 17, textHeader, c_black, c_dkgray, c_gray, 1);
+
+// Draw black bars
draw_set_alpha(1);
draw_set_color(c_black);
-draw_rectangle(0, 0, 330, 120 - yoffset, false);
-draw_rectangle(0, 120 + yoffset, 330, 250, false);
+draw_rectangle(0 - WIDE_SPACE, 0, 330 + WIDE_SPACE, 120 - yoffset, false);
+draw_rectangle(0 - WIDE_SPACE, 120 + yoffset, 330 + WIDE_SPACE, 250, false);
diff --git a/objects/oOptionSeed.object.gmx b/objects/oOptionSeed.object.gmx
index eadb234..aa82303 100644
--- a/objects/oOptionSeed.object.gmx
+++ b/objects/oOptionSeed.object.gmx
@@ -70,7 +70,7 @@ draw_set_color(c_black);
draw_text(x + 1, y - 3, label);
//draw_text(x + textoffset + 1, y - 3, optext);
var voff = 0;
-for (var i = 0; i < string_length(optext) - 1; i++) {
+for (var i = 0; i < string_length(optext); i++) {
var str = string_char_at(optext, i + 1);
draw_text(x + textoffset + (i * 7) - (4 * voff) + 1, y - 3, str);
if (str == "1") voff += 1; // special case to make 1 not be super awkward
diff --git a/objects/oTestKeys.object.gmx b/objects/oTestKeys.object.gmx
index f553383..1562a27 100644
--- a/objects/oTestKeys.object.gmx
+++ b/objects/oTestKeys.object.gmx
@@ -25,12 +25,13 @@
1
- //instance_destroy();
+ instance_destroy();
/// The object for debug keyboard shortcuts. Lots of them.
if (os_type == os_android) instance_destroy();
+/*
targetroom = rm_a0h11;
bigdisplaytest = 0;
viewmode = 0;
@@ -61,10 +62,12 @@ msg_loadout = 0;
1
- //instance_destroy()
+ instance_destroy()
if (os_type == os_android) instance_destroy();
+/*
+
if (mouse_check_button(mb_left) && global.ingame) {
oCharacter.x = mouse_x;
oCharacter.y = mouse_y;
diff --git a/rooms/rm_a5c14.room.gmx b/rooms/rm_a5c14.room.gmx
index 7f8c281..4a47886 100644
--- a/rooms/rm_a5c14.room.gmx
+++ b/rooms/rm_a5c14.room.gmx
@@ -924,6 +924,7 @@ global.darkness = 0;
+
0
0
diff --git a/scripts/load_resources.gml b/scripts/load_resources.gml
index 987c8e5..9826383 100644
--- a/scripts/load_resources.gml
+++ b/scripts/load_resources.gml
@@ -34,6 +34,23 @@ if (os_type == os_linux) {
lin = "/assets";
}
+// Suit Palettes, MonsterPalettesFusionOnly and Metroid Pallettes definition
+oControl.PowerPalette = -1;
+oControl.VariaPalette = -1;
+oControl.GravityPalette = -1;
+
+oControl.MonsterPalettesFusionOnly = 1;
+
+oControl.AlphaPalette = -1;
+oControl.GammaPalette = -1;
+oControl.ZetaPalette = -1;
+oControl.OmegaPalette = -1;
+oControl.QueenPalette = -1;
+oControl.ZetaBlur = -1;
+oControl.QueenDead = -1;
+oControl.QueenBloodDrop = -1;
+oControl.QueenBloodParticle = -1;
+
if(os_type == os_android) exit; // "Safety Check" on Android
//Area Headers