It seems to starting up correctly now. Do I need to start a new game file to take use of the additional mods?
This mod, and most of the other mods here are changing things in MoA, so you don't need to play from the very beginning. So starting from MoA (Beach Scene) is enough. You've got less money and Intel though And for me FA is also fun so I played the whole game again after I installed all the mods
Edit: Just one warning. Deinstalling mods is a bit more complicated, because most of the savegames will be corrupt. Luckily most mods have options/ways to disable them without actually deleting them. Send me a PM if you want to disable a certain mod. I'll help you then.
I get this error message when trying to start the game: I'm sorry, but an uncaught exception occurred.
While running game code: ScriptError: Name u'setGMBG' is defined twice, at game/ModFramework_LD.rpy:822 and game/galaxy map.rpy:66.
-- Full Traceback ------------------------------------------------------------
Full traceback: File "C:\Program Files\Steam\steamapps\common\Sunrider Liberation Day\renpy\bootstrap.py", line 281, in bootstrap renpy.main.main() File "C:\Program Files\Steam\steamapps\common\Sunrider Liberation Day\renpy\main.py", line 351, in main renpy.game.script.load_script() # sets renpy.game.script. File "C:\Program Files\Steam\steamapps\common\Sunrider Liberation Day\renpy\script.py", line 259, in load_script self.load_appropriate_file(".rpyc", ".rpy", dir, fn, initcode) File "C:\Program Files\Steam\steamapps\common\Sunrider Liberation Day\renpy\script.py", line 738, in load_appropriate_file self.finish_load(stmts, initcode, filename=fn + source) File "C:\Program Files\Steam\steamapps\common\Sunrider Liberation Day\renpy\script.py", line 414, in finish_load bad_node.filename, bad_node.linenumber)) ScriptError: Name u'setGMBG' is defined twice, at game/ModFramework_LD.rpy:822 and game/galaxy map.rpy:66.
Windows-8-6.2.9200 Ren'Py 6.99.8.959
I tried removing the galaxy documents and the game work all the way until I needed to use the map for the next destination.
Never delete game files which were originally in the game. You installed the wrong data somehow. ModFramework_LD.rpy is the wrong data. Delete it and redownload the Tweakpack from this thread. (or here: drive.google.com/file/d/0B0D6n1uinVVzcy10dHdUUlhhYzA/view ) . The data should read Tweakpack.rpy. Make sure you don't have two Tweakpack.rpy's in your game.
I got this error message when starting the game: I'm sorry, but errors were detected in your script. Please correct the errors listed below, and try again.
File "game/Mod/Mod_SL_SM_KryskaMission_LD_MoA.rpy", line 85: Tab characters are not allowed in Ren'Py scripts.
Ren'Py Version: Ren'Py 6.99.8.959
In this case, just open the .rpy in notepad or editor and go to line 85 und replace the tab with 4 spaces. I'm a bit surprised that tabs got inserted, as I just copied the .rpy from my folder to the zip oO. Sorry. If you get any other tabs, just open the file in Notepad and replace these tabs with 4 spaces.
Edit: In my case the line 85 is just an empty line so you can just delete the tabs.
Improved dialog. Thank you saibotlieh for revising and enhancing the dialogs of the first half of the mod! Based on your suggestions I revised the other half of the mod. Now the dialogs should be a bit more natural.
Improved AI for the Ryuvian Destroyer
Aoe Missiles for the original ships of the Sunrider game are now outsourced in an extra mod which is already included in this Side Story mod. Just delete the "Aoe_Missiles" folder in the Mod Folder to disable these Missiles.
The upgrades from the additional research during the side story now work properly for the Paladin.
All effects of store items from mods you purchased during MoA are now taken over to LD, even if you've Reset_on_LD on True.
This time I couldn't test everything, so please report immediately if bugs come up.
Is it possible to download the mods from another site where I can actually make a profile? No matter how I try the site find something wrong with the registration...
Can I put in the Liberation section of Sunrider? Or does it only work for MOA?
I'm not exactly sure what you mean. If you're talking about the Tweakpack: You need to put the Tweakpack in the Sunrider Liberation Day game folder (or subfolder). (...\Sunrider Liberation Day\game\...)
I have thinking of adding additional mods, from the instructions some lines is only needed right? I don't need to download the "framework" or what it was called?
PlayerTurnMusic and EnemyTurnMusic were wrong in the very first and second mission (MoA1 and MoA2). I inserted the music from the original sunrider.
Reset_on_LD is not resetting Intel, which means people have too much intel at the beginning of LD. Due to balancing these lines are changed:
python: if Reset_on_LD: BM.money = int(0.2*BM.money) #instead of BM.money = 3000 BM.intel = int(0.2*BM.intel) #instead of carrying whole BM.intel over to LD BM.cmd = 0
In LD the music,sound,voice volumes are set to 0.27,0.8,1.0. This is done by the after_load label or when starting the game LD. However when starting MoA or FA this adjustment is missing, so the game is being too loud until the player loads his game the first time. I remember how I adjusted the volume and had to adjust it again after loading the game - super annoying. Moreover the game resets the volume to 1.0,1.0,1.0 evertime one returns to the main title.
I added following lines in Start_MoA / Start_FA label:
"delay = 3" to not cut off the volume of the title soundtrack. You'll see I set the volume of the music in FA to 0.8 first, which will then get adjusted in the first fight to 0.27. This is because the music in the FA intro is very quite.
To be super sure, just compare your old file with my new file with the compare plugin of Notepad. Super useful tool! All changes are highlighted.
_______
In regards of the Reset_on_ld functions: This is not required because a start_funcs, which has a function being only triggered if BM.mission == 1 and Reset_on_LD == True, is just like a function which gets called in a Reset_on_LD function One reason is, that the store/upgrade screen is not accessible until the shower scene which is AFTER the first fight (luckyyyy ).
So if saibotlieh wants the effects of his mission rewards (like libertys +10 EN) or certain store_items to remain after the reset, he needs to add the following code in any of his .rpy. This should even work without the tweakpack.
init 30 python: def SL_SM_retain_rewards_storeitems(): if BM.mission == 1:
if Reset_on_LD == True and HasSL_SM_SolaMission_StoreItem: seraphim.move_cost -= 10
if Reset_on_LD == True and SL_SM_ChigaraMission_Complete: liberty.max_en += 10
if Reset_on_LD == True and SL_SM_IcariMission_StoreItem_Attached: phoenix.max_en -= 10
Don't know if this is intended but after Reset_on_LD the Sunrider loses his 'Sunrider Shield Upgrade'. It's not readded like the rocket upgrade or the repair upgrade of the Liberty.Was caused by a mistake in my Jaguar Mod. Forget this.
Maybe you could add an eval of a certain list in reset_LD() where modders like me and saibotlieh can add functions which are called when resetting to LD. The problem is, the upgrades which can be bought in saibotlieh's mod and in my mod before the reset are lost as well.
Maybe adding something like this?:
def reset_LD(): ... if reset_LD_actions != []: for item in reset_LD_actions: if eval(item[0]): item[1]()
init -1 python: reset_LD_actions == []
saibotlieh would then have the following code in any of his .rpy's:
init 50 python:
def saibotlieh_rewards_and_items(): if HasSL_SM_SolaMission_StoreItem: seraphim.move_cost -= 10 if SL_SM_ChigaraMission_Complete: liberty.max_en += 10 if SL_SM_IcariMission_StoreItem_Attached: phoenix.max_en -= 10
reset_LD_actions.append(("True",saibotlieh_rewards_and_items)) One more thing: The music in the very first fight is wrong. I think "The_Final_Battle.ogg" is a bit too epic for the first warm up fight Also the enemy turn music is turned off. In the second fight the enemy turn music is turned off as well. Correct would be: Fight 1: $ PlayerTurnMusic = "MoA/music/Titan.ogg" $ EnemyTurnMusic = "MoA/music/Dusty_Universe.ogg" Fight 2: $ PlayerTurnMusic = None $ EnemyTurnMusic = "MoA/music/Sui_Generis.ogg"
As soon as I put your AsagaFixedVoices folder into my game I couldn't start any battles anymore. And the cause are two mistakes in your code:
AsagaFixedVoices.rpy line 24: x.evoice_files = asagafixedvoices x.evoice_files = AsagaFixedVoices (because you named your files AsagaFixedVoices and not asagafixedvoices)
AsagaFixedVoices.rpy line 27: start_funcs.append(["True","fixasagavoice"]) start_funcs.append(("True",fixasagavoice)) (fixasagavoice is a function, not a string. Moreover I don't know if [] is working. I'd use () instead)
...gosh, I'm sounding like a real game developer. Next thing you know, I'll be offering exclusive pre-order bonuses and shoving lootboxes everywhere.
Don't forget to offer some DLCs as well when the time comes
I installed Sunrider MoA and I cannot save when I start your mod from the dev console when being in the main menu. I need to start or load a game and be in a label with dialog before typing "TheVoid()" into console to be able to save. This problem occurs in both LD and the original Sunrider FA/MoA game on my end. I'm sure saving is fine when th mod is inserted into the bonus menu, didn't try it though. Typing "TheVoid()" into console is much easier than adding code to a .rpy deep in the game folder
It's absolutely normal to still have bugs in a mod when it's the first time another person is testing something you created. Even ReTurn needed a second version (3.00 -> 3.01) cause therewere some bugs And this was pure dialogue as well.
I love the idea of enemys having upgrades, but it shouldn't be too random. It's still a strategy game, not a lottery. I don't want to restart the battle just because I got unlucky with the enemys buff . The number of buffed/upgraded enemys and the strength of these buffs/upgrades should scale with difficulty. And the tooltip of the ship should clearly state, that this particular ship has additional upgrades.
At least letting the enemys upgrade themselves opens new possibilities for balancing. Some enemy units could get buffed depending on the average upgrade level of the ryder squad.
I just read the first bit of your Story Mod and I'm captivated. This is really good stuff!
There is one thing I would recommend: Add $ renpy.full_restart() before your very last "return". Otherwise the game won't go back to the main title and will continue whence you entered "TheVoid()" which is strange. This problem should occur in Sunrider MoA as well. Another problem is: Starting your mod from Title Menu is not advisable because you won't be able to save your game. You need to start a game or load a savegame where you are in a simple dialogue (not in a battle or on the shipmap!). I don't know the cause and how to fix that though...
As I don't have Sunrider installed I made a transition to Liberation Day, which needed very little modification of the .rpy, since LD has certain Backgrounds, CGs and Musics not included in its main folder.
Lines I changed for Transition:
All "Background/" "CG/" "Music/" to "The Void/Background" "The Void/CG" "The Void/Music". I added the needed files in the "The Void" folder.
"show screen quick_menu" in line 463 to enable saving
"hide screen leftbuttons" in line 464 to hide the Research/Store button in case someone started TheVoid() from a label where these buttons are present.
$ renpy.full_restart() in line 2507 to enable the reader to return to the main menu.
Unfortunatelly the saving problem that occurs when starting TheVoid() from title also appears in LD.
In the .rpy all changed lines are marked with "##N" for easy locating. I uploaded the transition here: TheVoidLDTransition Please check if you like this. If yes, you might add it to your title post. If not I'll delete the link immediatelly
I didn't encounter any problems like Le_Fay did. Could be caused by starting TheVoid() in title screen.
if bullet.type == 'Laser': $ i = 0 for weapons in bullet.parent.weapons: if weapons.wtype == 'Laser' and weapons.custom_fire != False: add weapons.custom_fire: xpos xposition ypos yposition yanchor 0.5 xanchor 0.0 rotate (360-angle)+90 transform_anchor True # at tr_explosion $ i = 1 if i == 0: add "Battle UI/laserhit map.png": xpos xposition ypos yposition yanchor 0.5 xanchor 0.0 rotate (360-angle)+90 transform_anchor True # at tr_explosion
And I've got a question about buffs: It is possible to only increase the damage of a specific weapon type like kinetics? I want a ryder to buff it's kinetic without increasing it's laser damage at the same time. I just can't find a way to do that
There is a bug in your ammo setting. I use following code in a label before a fight:
sunrider.weapons[0].ammo = "L" sunrider.weapons[0].ammo_cost = 1 sunrider.ammo["L"] = [10,10,True] However after every new start of the game (or shift+R), sunrider.ammo["L"] get's a key error and is not [10,10,True] anymore. Thus loading a savegame ends in an error Unfortunatelly I can't find the root of this bug... My workaround - putting this code into the missionlabel. I still need to press "ignore error" one time if the sunrider is BM.selected the moment I saved the game :/
if len(sunrider.ammo) > 0: sunrider_charges = sunrider.ammo["L"][0] if len(sunrider.ammo) == 0: sunrider.ammo["L"] = [sunrider_charges,10,True]
Also you need to fix the following line in your tutorial:
turn_actions.append("True",DeathstarLaser_charge) # Triggers on END of turn The correct line is:
turn_actions.append(("True",DeathstarLaser_charge)) # Triggers on END of turn I've spent one hour full of frustration to find out that turn_actions actually needs two brackets .__________.
I just played FA/MoA again with the most actual version of your Evasion Mod and Tweakpack. After a while I returned to my personal tweaks again and incooperated all your recent changes into it.
Since the crit display is still bugged I used my display which I posted some time ago. You don't have to take over my way of displaying the crits - I know it's some code which needs to be added in Tweakpack.rpy and Evasion.rpy, but I think you should consider it nevertheless. Missing crit texts are taking away the joy about striking a critical hit and the code is safe for people not having the Evasionmod installed.
Moreover you should consider to insert the "get_realangle()" into your Tweakpack and use it in MoveMod.rpy to prevent wrong angle calculations.
Also the "start_funcs.append(["True",CloseRangeEvasionStart])" still needs to be taken out of the code to avert crashes. I found the cause of this bug in your def CloseRangeEvasionStart()
I tested your new Tweakpack and it works fine There is just one thing you need to fix soon. I already mentioned it in my last big post in this thread:
You need to add "and renpy.get_screen('commands') != None" into the condition of when the turn button can be seen. Otherwise following scenario will lead to a crash: -You defeated the enemy with the Paladin (BM.selected = Paladin after the battle) -Now a new battle starts where the Paladin is not present. -However the turn button is shown because BM.selected is still != None. If you press the button the game crashes.
# Custom Add Neppi Adds a button which turns the ryder/ship without moving a hex (Evasion Mod) Turning costs no energy if Angle Mod is False if BM.phase == 'Player' and BM.selected != None and BM.selected.faction == 'Player' and hasattr(store,'TL') and renpy.get_screen('commands') != None: if (BM.selected.stype != 'Ryder' and BM.selected.en >= 10) or (BM.selected.stype == 'Ryder' and BM.selected.en >= 5) or TL == False: $changedirbutton_idle = 'Mod/Evasion Mod/button_change_direction.png' else: $changedirbutton_idle = 'Mod/Evasion Mod/button_change_direction_no_en.png'
After the fight with the Ascendant everybody thought that the war is over. So the mercenarys might have left the Sunrider. I played the end of LD just one single time so I can't really remember everything, but I think the mercenarys were disappearing right before the massacre.
While running game code: File "game/MoA/MoA in LD.rpy", line 13928, in script call ava "Begin First Commander's log. It has been months since we've been marooned on this godforsaken place." File "renpy/common/00console.rpy", line 651, in script call python in _console: File "game/Mod/Mod_SL_SM_AsagaMission_LD_MoA.rpy", line 2231, in script call call JumpBackToShipMap File "game/Mod/Mod_SL_SM_SolaMission_LD_MoA.rpy", line 4351, in script call call JumpBackToShipMap File "game/Mod/Mod_SL_SM_SolaMission_LD_MoA.rpy", line 5556, in script call call EndCharacterMission File "game/Mod/Mod_SL_SM_ExtraMission_LD_MoA.rpy", line 1038, in script call call EndCharacterMission File "game/Mod/Mod_SL_SM_AsagaMission_LD_MoA.rpy", line 3540, in script call call EndCharacterMission File "game/MoA/Jaguar/rpy/Mod_JaguarMission1.rpy", line 2125, in script call call EndCharacterMission File "game/Mod/Mod_SL_SM_ChigaraMission_LD_MoA.rpy", line 776, in script call call EndCharacterMission File "game/Mod/Mod_SL_SM_ClaudeMission_LD_MoA.rpy", line 215, in script call call JumpBackToShipMap File "game/Mod/Mod_SL_SM_KryskaMission_LD_MoA.rpy", line 1012, in script call call JumpBackToShipMap File "game/Mod/Mod_SL_SM_KryskaMission_LD_MoA.rpy", line 1050, in script call call JumpBackToShipMap File "game/Mod/Jaguar Mod/Mod_Jaguar_edits_of_SL_SM_KryskaMission_LD.rpy", line 843, in script File "game/Mod/Jaguar Mod/Mod_Jaguar_edits_of_SL_SM_KryskaMission_LD.rpy", line 843, in <module> File "game/classes.rpy", line 1228, in battle self.result = ui.interact() IOError: Couldn't find file 'UnionFrigate/selection3.ogg'.
-- Full Traceback ------------------------------------------------------------
Full traceback: File "game/MoA/MoA in LD.rpy", line 13928, in script call ava "Begin First Commander's log. It has been months since we've been marooned on this godforsaken place." File "renpy/common/00console.rpy", line 651, in script call python in _console: File "game/Mod/Mod_SL_SM_AsagaMission_LD_MoA.rpy", line 2231, in script call call JumpBackToShipMap File "game/Mod/Mod_SL_SM_SolaMission_LD_MoA.rpy", line 4351, in script call call JumpBackToShipMap File "game/Mod/Mod_SL_SM_SolaMission_LD_MoA.rpy", line 5556, in script call call EndCharacterMission File "game/Mod/Mod_SL_SM_ExtraMission_LD_MoA.rpy", line 1038, in script call call EndCharacterMission File "game/Mod/Mod_SL_SM_AsagaMission_LD_MoA.rpy", line 3540, in script call call EndCharacterMission File "game/MoA/Jaguar/rpy/Mod_JaguarMission1.rpy", line 2125, in script call call EndCharacterMission File "game/Mod/Mod_SL_SM_ChigaraMission_LD_MoA.rpy", line 776, in script call call EndCharacterMission File "game/Mod/Mod_SL_SM_ClaudeMission_LD_MoA.rpy", line 215, in script call call JumpBackToShipMap File "game/Mod/Mod_SL_SM_KryskaMission_LD_MoA.rpy", line 1012, in script call call JumpBackToShipMap File "game/Mod/Mod_SL_SM_KryskaMission_LD_MoA.rpy", line 1050, in script call call JumpBackToShipMap File "game/Mod/Jaguar Mod/Mod_Jaguar_edits_of_SL_SM_KryskaMission_LD.rpy", line 843, in script File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\ast.py", line 805, in execute renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\python.py", line 1461, in py_exec_bytecode exec bytecode in globals, locals File "game/Mod/Jaguar Mod/Mod_Jaguar_edits_of_SL_SM_KryskaMission_LD.rpy", line 843, in <module> File "game/classes.rpy", line 1228, in battle self.result = ui.interact() File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\ui.py", line 277, in interact rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs) File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\display\core.py", line 2424, in interact repeat, rv = self.interact_core(preloads=preloads, **kwargs) File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\display\core.py", line 2715, in interact_core renpy.audio.audio.interact() File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\audio\audio.py", line 790, in interact periodic() File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\audio\audio.py", line 724, in periodic c.periodic() File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\audio\audio.py", line 340, in periodic topf = load(self.file_prefix + topq.filename + self.file_suffix) File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\audio\audio.py", line 74, in load rv = renpy.loader.load(fn) File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\loader.py", line 533, in load raise IOError("Couldn't find file '%s'." % name) IOError: Couldn't find file 'UnionFrigate/selection3.ogg'.
Kryska with plugsuit is just shown in a cg of Liberation Day, right? That is a minus for me. Still I like the blue more than the green even though the Paladin has a green appearance. emoticon_kryska2_small
So, I worked a bit on the crit messages and on the custom screens for the battle screen. I've uploaded the modified .rpys here (Tweakpack, Evasion and Movemod):
Everything is tested and working. If you are satisfied you can use this to overwrite your current ones.
Tweakpack: Adding custom screenlists + functions and adding display of crits like in my videos which I posted some time ago. Also fixing the bug with the changedirection button and adding the get_realangle(). MoveMod: get_realangle() is now used to see if direction change is needed or not. EvasionMod: Crit message is now triggered directly at the crit effect (no missing text anymore). Also some edits are done to enable the display of crit damage. Moreover crit damage fluctuates a bit now. (Still want to add, that the Wreckage mod is still not working for me. Game chrashes as soon as the wreckage wants to despawn after 3 turns. Couldn't fix is though.)
More Details below :
Tweakpack.rpy
What was changed? (green = added, red = deleted, black = unchanged)
screen battle_screen(): ... if BM.taking_damage: ... (behind the display of the normal damage text):
if not hasattr(store,'crit_damage'): #this is needed if Evasion Mod is not installed $ store.crit_damage = 0 #Neppi custom crit message if not hasattr(store,'crit_debuff'): $ store.crit_debuff = "" #Neppi custom crit message
if (store.crit_damage > 0 or store.crit_debuff != "") and damage != 'miss': #Neppi custom crit message text ("A critical hit!"): at crit_float(yposition-75) xpos xposition xanchor 0.5 yanchor 0.5 size 24 color 'c10' outlines [(2,'fff',0,0)] $delay_float_text = 0.2 $y_offset = 25
if (store.crit_damage > 0 or store.crit_debuff != "") and damage != 'miss': #Neppi custom crit message $ renpy.show_screen('message',message = BM.attacker.name +" scored a critical hit and "+critmessage,xpos=0.5,ypos=0.7) #$ globals()['critmessage'] = ""
if damage > 0 and store.crit_damage > 0 and damage != 'miss': #Neppi show damage custom show crit damage under real damage text (str(store.crit_damage)): at crit_number(yposition+y_offset,delay_float_text) xpos xposition xanchor 0.5 yanchor 0.5 size 20 color 'c30' outlines [(2,'fff',0,0)]
if damage > 0 and store.crit_debuff != "" and damage != 'miss': #Neppi custom crit message if store.crit_damage > 0: $delay_float_text = 0.4 $y_offset = 50 else: $delay_float_text = 0.2 $y_offset = 25 text (str(store.crit_debuff)): at crit_number(yposition+y_offset,delay_float_text) xpos xposition xanchor 0.5 yanchor 0.5 size 20 color 'c30' outlines [(2,'fff',0,0)] $delay_float_text = 0.2 $y_offset = 25
3.) Adding several things at the end of the Tweakpack.rpy: -adding a function which is used in the battle screen to display all custom screens in screenlists[] -adding functions to delete/insert a screen to the screenlists (which are shown in the battle screen then) (for modders) -adding transforms for the crit damage display -adding the get_realangle() function to the tweakpack. This gives you the real angle between two locations (rly helpful for modding)! It is used in the modified MoveMod.rpy for example
def show_hide_custom_screens(): screencountMod = 0 while screencountMod < len(screenlists): if renpy.get_screen(screenlists[screencountMod+2]) == None: if eval(screenlists[screencountMod]) == True and eval(screenlists[screencountMod+1]) == False: renpy.show_screen(screenlists[screencountMod+2]) if renpy.get_screen(screenlists[screencountMod+2]) != None and eval(screenlists[screencountMod+1]) == True: renpy.hide_screen(screenlists[screencountMod+2]) screencountMod += 3
def set_custom_screen(show_cond,hide_cond,screen): if not hasattr(store,'screenlists'): store.screenlists = [] for y in screenlists: if y == screen: return store.screenlists += [show_cond,hide_cond,screen] return
def delete_custom_screen(screen): if not hasattr(store,'screenlists'): return screencountdel = 0 if screenlists != []: while screencountdel < len(screenlists): if screenlists[screencountdel] == screen: screenlists.remove(screenlists[screencountdel-2]) screenlists.remove(screenlists[screencountdel-2]) screenlists.remove(screenlists[screencountdel-2]) return screencountdel += 1 return
transform crit_float(yy,t=0): pause t ypos yy linear 1.25 ypos (yy - 50) alpha 0.0
transform crit_number(yy,t=0): pause t ypos yy linear 1.5 ypos (yy - 75) alpha 0.0
def get_realangle(attacker, target): #for evasion mod if hasattr(store,'CM_Chance'): #all crits are deleted after turning so every new hit is a new crit calculation store.crit_damage = 0 store.crit_debuff = "" if attacker == None or target == None or attacker.location == None or target.location == None: return 0 att = [target.location[0],target.location[1]] tar = [attacker.location[0],attacker.location[1]] if att[1] %2==0: att[0]+=0 else: att[0]-=0.5 if tar[1] %2==0: tar[0]+=0 else: tar[0]-=0.5 a = (att[0] - tar[0]) b = (att[1] - tar[1]) c = int(math.degrees(math.atan2(a,b)))+90 if c < 0: c = 360 + c store.ccdebug = c #for looking up the last angle calculation return c
4.) a bugfix for the direction change button (!!): You need to add "and renpy.get_screen('commands') != None" into the condition when the turn button can be seen. Otherwise following scenario leads to a crash: -You defeated the enemy with the Paladin (BM.selected = Paladin after the battle) -Now a new battle starts where the Paladin is not present. -Without the condition though the turn button is shown because BM.selected is still != None. If you press the button the game crashes.
# Custom Add Neppi Adds a button which turns the ryder/ship without moving a hex (Evasion Mod) Turning costs no energy if Angle Mod is False if BM.phase == 'Player' and BM.selected != None and BM.selected.faction == 'Player' and hasattr(store,'TL') and renpy.get_screen('commands') != None: if (BM.selected.stype != 'Ryder' and BM.selected.en >= 10) or (BM.selected.stype == 'Ryder' and BM.selected.en >= 5) or TL == False: $changedirbutton_idle = 'Mod/Evasion Mod/button_change_direction.png' else: $changedirbutton_idle = 'Mod/Evasion Mod/button_change_direction_no_en.png'
MoveMod.rpy Using the get_realangle() function to check direction during fire. With the old code sometimes the direction was wrong.
def check_direction_fire(damage,hitcount,damageid): if BM.target.location[0] > BM.attacker.location[0]: # Face East mode = "East" if BM.target.location[0] < BM.attacker.location[0]: # Face West mode = "West" if BM.target.location[0] == BM.attacker.location[0]: # Adjust for row offset if BM.target.location[1] %2 > BM.attacker.location[1] %2: mode = "East" elif BM.target.location[1]%2 < BM.attacker.location[1]%2: mode = "West" else: mode = BM.attacker.Direction #(No Change)
c = get_realangle(BM.attacker, BM.target) if c < 90 or c > 270: mode = "West" else: mode = "East" ...
EvasionMod.rpy 1.) At first you need to look over a bug regarding this: start_funcs.append(["True",CloseRangeEvasionStart]). In my uploaded EvasionMod.rpy I changed it to #start_funcs.append(["True",CloseRangeEvasionStart]). Otherwise my game just crashs at every battle start:
While running game code: File "game/combatlabels.rpy", line 104, in script python: File "game/combatlabels.rpy", line 116, in <module> BM.start() File "game/classes.rpy", line 1183, in start if eval(item[0]): item[1]() File "game/Mod/Evasion Mod/EvasionMod.rpy", line 348, in CloseRangeEvasionStart ship.evasion_penalty.stack_counter = ship.adjacent AttributeError: 'NoneType' object has no attribute 'stack_counter'
-- Full Traceback ------------------------------------------------------------
Full traceback: File "game/combatlabels.rpy", line 104, in script python: File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\ast.py", line 805, in execute renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) File "H:\Steamspiele\steamapps\common\Sunrider Liberation Day\renpy\python.py", line 1461, in py_exec_bytecode exec bytecode in globals, locals File "game/combatlabels.rpy", line 116, in <module> BM.start() File "game/classes.rpy", line 1183, in start if eval(item[0]): item[1]() File "game/Mod/Evasion Mod/EvasionMod.rpy", line 348, in CloseRangeEvasionStart ship.evasion_penalty.stack_counter = ship.adjacent AttributeError: 'NoneType' object has no attribute 'stack_counter'
This prevents all ships from gaining the CloseRangeEvasion penalty at the first turn, but it fixs itself as soon as you end turn 1, so its the fastest fix right now.
2.) I changed some code in every possible crit effect. I'll just show one example of a damage crit and one example of debuff crit. I also changed a bit code in apply_criticalhit():
def MissileCrit(dmg,shots,id): if BM.target.crit_effect == MissileCrit: BM.target.missiles -= 1 BM.target.crit_effect = None store.crit_damage = int(CM_Missiles_Mag*renpy.random.triangular(0.87,1.13)) #Variation of the crit damage. store.crit_damage is also used for the crit display globals()['critmessage'] = "detonated one of the "+BM.target.name+"'s missiles" globals()['critmessage'] = "detonated one of the "+BM.target.name+"'s missiles causing "+str(store.crit_damage)+" extra damage" #damage is now shown in the message
store.crit_debuff = "- Missile" #debuff message for crit display in battle screen ("" if no debuff) #renpy.show_screen("critdamageshow") #if we solve the problem with the correct display of floating texts/numbers in the battle screen from outside the battlescreen this can be used.
renpy.show_screen('message',message = BM.attacker.name +" scored a critical hit and "+critmessage,xpos=0.5,ypos=0.7) #crit message is now shown directly in each crit effect. No missing texts anymore
def __init__(self,parent): Buff.__init__(self,'defense',parent=parent) globals()['critmessage'] = "disabled the "+BM.target.name+"'s shields" store.crit_debuff = "- Shields" #debuff message for crit display in battle screen ("" if no debuff) #renpy.show_screen("critdamageshow") #if we solve the problem with the correct display of floating texts/numbers in the battle screen from outside the battlescreen this can be used
renpy.show_screen('message',message = BM.attacker.name +" scored a critical hit and "+critmessage,xpos=0.5,ypos=0.7) #crit message is now shown directly in each crit effect. No missing texts anymore ...
def apply_criticalhit(na1, na2, na3): store.crit_damage = 0 #Just in case store.crit_debuff = "" #Just in case crit_chance = CM_Chance # 0.05 if TrueAcc > 100: crit_chance += (TrueAcc-100)*CM_Inc # Overaccuracy converted to crit chance # store.crit_chance = crit_chance crit_chance += BM.attacker.crit_bonus() # Function that normally returns 0 but can return a modifier if renpy.random.random() <= crit_chance: # Roll 0-1, if in crit range, apply crit effect if CM_Boss == False: if BM.target.boss == True: return assign_crit() try: show_message(BM.attacker.name +" scored a critical hit and "+critmessage,0.5,0.7,3) globals()['critmessage'] = "" except: pass store.crit_chance = crit_chance return 0
Nothing more is changed. I tested all of this a lot so it should be safe to use. If you are satisfied with it, just replace your files with it, bigfoot
Here is an example how to add a custom screen (just example, it is not added in any .rpys now): This is adding a symbol which shows you the current objective of the current mission (nice for added missions by modders). I will publish this mod as soon as the tweakpack is supporting custom screens.
def objective_screen_append(): set_custom_screen("BM.phase == 'Player' and not BM.moving and hasattr(store,'ObjectivButton')","BM.phase != 'Player'",'objectivemod')
screen objectivemod: if hasattr(store,'ObjectivButton'): if ObjectivButton == True and BM.phase == 'Player' and sunrider.hp >= 0: $changedirbutton_idle = im.Rotozoom('Mod/Objective Button Mod/button_objective.png',0,0.75) imagebutton: xpos 210 ypos 10 idle changedirbutton_idle hover hoverglow(changedirbutton_idle) action Function(show_current_objective)#show_current_objective show the current objective
I recommand to use the compare plugin for notepad. You can see the changes much better then (best plugin for modders imo!)
Okay, got through the content of the Mod_SL_SM_After_Jaguar1_Day1 file so far and am liking a lot what I'm seeing so far. The battles have some nice ideas, the new music pieces fit well and sound good and the new pilot plus ryder seem to be quite interesting so far. But I'll have to see how its addition will change the balance of future fights still.
Also no crashes and nearly no weird behaviour so far. Here are some things which might need fixing / could maybe be improved:
- At the start of the inner base battle, you get the message about the mercenary ships not participating. This can be a bit confusing if the player does not own any mercenary ships (like I did). - When Chigara and Takumi join the battle again, there is a slight problem if the Sunrider is surrounded by the five other ryders it seems. For me, only the Liberty appeared in the remaining empty space. However, once I clicked on the Liberty, the Jaguar appeared next to it. - There is no floating description for the Jaguar's Laser and Melee attacks. - The position of the Tucana Corridor could use some adjustment, at least following the map on the official wiki (https://sunrider.gamepedia.com/The_Alliance-Imperial_War) it is within PACT space at the moment. - Sola is a bit overpowered in your savegame (has a damage of 30457 for me). I will send you a screenshot in a private message. - I would maybe name the 'small battleship' directly with a fitting designation, like 'Cruiser', 'Frigate' or 'Corvette' for example. - The writing could use some polishing. I'll add a modified file with some suggestions to the private message as well
As I said, so far I'm liking what I'm seeing, many thanks for sharing your work. I'm looking forward to the rest, it just takes a bit of time for me to get to it at the moment with lots of other things to do.
Thanks for the feedback! Yes I know that writing in english is not my best ability so I'm very thankful for the suggestions! I hope it didn't kill the atmosphere/gameplay to hard, rly tried my best to avoid that. Missed that map on the wiki, thanks for this! Seraphim with 30k attack... it seems I mixed up the savegame. Will be fixed as soon as possible. Entering "seraphim.kinetic_dmg -= 100" in the dev console should fix it back to the real damage. Sorry for using the 'SM_SL'. Didn't know what the prefix ment and thought it would be good to have the same prefix for all Sidestory mods will be fixed in the next version.
Fake (or real) Claude, gender flipped Fontana and... is this Star Guardian Jinx from League of Legends in her young ages? Moreover we have a mix of Ava and Chigara.
My vote went to Sasami. Normally I go with the red hairs but I'm not the loli type, so yeah. Her story wasn't yet that much appealing to me to make up for the loli type (like Emi could in Katawa Shoujo). I always had a weakness for the reliable nice girl from next door with the hidden story. As the red hair route is locked this time I go with the vote for Sasami.
I liked the demo as well. It was a nice introduction of the story where every girl got her screentime. I hope the common route is going to be a bit longer as I wouldn't be able yet to decide which girl to focus. The story is very nice. The idol thing is still not my cup of tea but the story was very good nevertheless. Really wanting me to play further.
There were two things which were quite annoying for me though.
The sound which plays in these "AS IF!" scenes! The sound is just toooooooo loud. Moreover these scenes weren't even that funny or interesting, especially the scene with Nemu (wtf?). Personally I don't get the humor. Of course thats just my opinion. But the sound was really too loud. (RIP headphone user)
Another thing: On the last scene on the stage, every girl gets her scene where she gets nervous or dark thoughts and want to give up but reminds herself that she shouldn't let down her mum/producer/.... With seven girls this was just a bit too repetitive. The pattern was too similar for each girl.
Despite that the demo was quite nice. Of course I know this was just an improved early beta. Nevertheless I also signed in to Patreon, but don't know if I want to play the betas or if I play the game when it's released.
From where do you start the game? From steam itself? I always need to start my Sunrider.exe right from the folder at the workplace to get it running (c\Steam\...\). Even the link at desktop didn't work at the beginning. Needed to change "steam://rungameid/xxxxxxx" into the actual place at the workplace.
Sorzo: Stepping away from the Discord for a bit to clear my head. I've been spending far too much time on there lately, to the point of it being detrimental to my work. I'll be back at some point, though whether that's a few days or a few months I can't say.
Mar 2, 2023 12:25:05 GMT -8
darling22xn: alguien sabe como va la traduccion del surider 4?
Aug 18, 2023 23:54:36 GMT -8
Sora: happy (overdue) new year shoutbox (ºwº
Jan 29, 2024 20:13:49 GMT -8
matti: I can't access Discord server. My account got hacked and it spammed links to another Discord server. My account likely got suspended because of it. I've changed my Discord password and it isn't problem anymore. May I be allowed back on Discord? matti1739
Feb 18, 2024 11:04:50 GMT -8
Nemjen: matti - Sorry for the slow response, currently on vacation. I have removed the ban but please keep in mind that we'll need to keep a closer eye on your account in the interim as a precaution. Please feel free to dm me if you require more feedback during
Feb 24, 2024 16:34:03 GMT -8
Nemjen: This time, welcome back!
Feb 24, 2024 16:34:19 GMT -8
cliffmastah15: Hey Nemjen! I've also been hacked back in early February. I got my discord account back under my control. Could you please give me access back to the discord channel? cliff_mastah#1483
Mar 25, 2024 7:20:40 GMT -8
Nemjen: cliffmastah15 - Now also done for yourself, same precautions as before but you'll be able to join.
Apr 8, 2024 4:50:36 GMT -8
cliffmastah15: @nemjen Many Thanks.
Apr 8, 2024 16:36:49 GMT -8