wboy

Members
  • Content count

    399
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by wboy

  1. Need to learn that s**t myself... maybe one day. maybe not.... we'll see in time.
  2. Very nice work. Well done smozoma! Other than the no organ pipe sounds at the start of a team 31 or 32 home game... I don't think any other crashes have been found?
  3. Just a few edits to the NOSE.ini file would happily support a 32 Team ROM.
  4. Team 31 or 32 as either Home or Away crashes Genesis Plus GX at both the Team Select and Player Card screens. From the Player Cards it always throws also up the address error 0011DB8 = 000000FF as per one of my earlier post attachments.
  5. No probs.... please report any issues or bugs you may find running NOSE via Wine for all. I only did very brief testing within NOSE itself and found those things...
  6. Thanks jer_33. Wasn't expecting that quick of a response to that request! Seems the emulation within Gens & Genesis Plus GX is more accurate in that regard (compared to real hardware) than both Kega Fusion & PicoDrive. I just quickly tested accessing the Player Cards in-game menu option using both Lakka/Libretro cores. Like before it causes the game to freeze within Gens Plus GX, but PicoDrive renders the screen and behaves fine with the exception of the bogus Records data that is displayed. This is most probably the clue to fixing this issue as either core has no issue showing just the player cards alone during the match-ups intro screens (where the Records data is not displayed unlike the opening team select menu and player cards screens). *cough* smozoma *cough* 32 Team ROM Player Cards.zip
  7. After you've installed Wine on your preferred Linux distribution, simply download and install the Visual Basic 6.0 Service Pack 6 Run-Time also and the Microsoft Visual Basic 6.0 Common Controls (as would also be recommended/required for any Windows based OS). # Tested on Xubuntu 16.04.1 LTS (xenial) - Xfce Desktop Environment. Should also work on any Debian or Ubuntu based distribution including Linux Mint. - Open a Terminal Emulator window. $ sudo apt-get update $ sudo apt-get install -y wine $ winecfg - Click OK when the Wine configuration dialog eventually appears. $ cd Desktop/ $ wget -v https://download.microsoft.com/download/5/a/d/5ad868a0-8ecd-4bb0-a882-fe53eb7ef348/VB6.0-KB290887-X86.exe $ wine VB6.0-KB290887-X86.exe - Click YES and extract it to the user's Desktop folder as seen within Wine (e.g. Z:\home\wboy\Deskop) $ wine vbrun60sp6.exe - Disregard the Visual Basic 6.0 Service Pack 6 Run-Time install errors displayed as most of the files already exist within ~/.wine/drive_c/windows/system32 $ wget -v https://download.microsoft.com/download/3/a/5/3a5925ac-e779-4b1c-bb01-af67dc2f96fc/VisualBasic6-KB896559-v1-ENU.exe $ wine VisualBasic6-KB896559-v1-ENU.exe - Click YES (& YES again) to install the Microsoft Visual Basic 6.0 Common Controls - Copy nose1.2b.zip to the Desktop - Extract nose1.2b.zip to effectively create the folder ~/Desktop/nose1.2b/ - Change to the folder in your terminal window and run NOSE within Wine! $ cd nose1.2b/ $ wine nose.exe - Alternatively just double click the nose.exe from within your file manager. - Probably makes no real performance difference within Wine but you can also decompress the supplied (and upx'ed) nose.exe using: $ sudo apt-get install -y upx-ucl $ mv nose.exe nose_upx.exe $ upx -d nose_upx.exe -onose.exe # Bugs I've noticed so far: - Launching a second instance of NOSE [F9] works, but pressing it again won't bring the other instance back to focus. - You can cut and paste goalies/players/lines etc. within the open ROM, but not between two open instances (clipboard handling within NOSE would need to be simplified I'm guessing). - Wine always presents a Program Error when you close the last instance of NOSE! I haven't yet cared to check the Wine logs exactly why so, as it seems to happily open/edit/save ROMs. # Originally Referenced Download Links: - Service Pack 6 for Visual Basic 6.0: Run-Time Redistribution Pack (vbrun60sp6.exe) [VB6.0-KB290887-X86.SP6.exe] @ https://www.microsoft.com/en-au/download/details.aspx?id=24417 - Microsoft Visual Basic 6.0 Common Controls [VisualBasic6-KB896559-v1-ENU.exe] @ https://www.microsoft.com/en-au/download/details.aspx?id=10019
  8. Missing organ pipe music I referred to was just after you "start game" before the first face off. Team 31 at home sound like a body check, 32 starts with the louder body/check boarding(?). That's all I tested with limited time and effort. Would be good to document all that is noticed. e.g. you say team 30 has no goal music. I assume this also affects my original nhl94 30 team rom hack? I'm sure it can probably all be fixed, but again I'm guessing smozoma's talents are probably better suited here. EDIT: can anyone confirm what it does on real hardware via one of those SD Card ROM attachments? e.g. Does it die/freeze or keep going like on Kega Fusion and PicoDrive.
  9. I just tested your ROM within Lakka - http://www.lakka.tv/, an awesome way to retrogame on your TV if y'all haven't checked it out it already. It's basically a Playstation 2 like frontend to Libretro - http://www.libretro.com/ Those who have used RetroPie - https://retropie.org.uk/or Recalbox https://www.recalbox.com/are pretty much using the same thing on their Raspberry Pi. Lakka/Libretro offers 2 cores (emulators) for Genesis, Genesis Plus GX and PicoDrive (the now default Genesis emulator for low powers devices like the Pi IIRC). Genesis Plus GX crashes straight after the first player card (also fails to draw the banners) much like old Gens I used to use as I assume it's spawned from the same project/code. PicoDrive seems to work though! (not based of Kega Fusion as that code never got released apparently even though it is now discontinued - http://www.carpeludum.com/forums/topic/kega-fusion-source-code/) Attached are some screenshots that may give some clues on where things are going wrong. It's as if the RAM is only so big and the 31st & 32nd team force other elements of the game to display the wrong data/info. Something I think smozoma may have to get involved in to better understand the issue and fix it much like some of his other similar achievements. The other interesting thing is start the ROM with team 31 & 32, you get a checking sound effect instead of the organ pipe music. This is where someone really needs to play the ROM more even in it's current state within Kega Fusion, PicoDrive & Gens to see if any more such quirks are uncovered (and why I quickly went back to a 30 team ROM which did nothing of the like). 32 Team ROM Snapshots.zip
  10. That rings a bell you know... as in I think that's what used happen with my attempt too now that you mention it. So it works in fusion? Only ask as I have none of the old hacking tools and emulators installed on any of my current PCs.
  11. "Show me the money!" NOSE 1.3b (10 year anniversary edition) New: CryptoLocker support - encrypts all your ROM files and make you pay wboy's bitcoin account to get them back!
  12. Apologies to the community for not posting this (many years) earlier. NOSE 1.2b was coded in Visual Basic 6 (VB6). You would need this installed if you were ever to try recompile nose.exe. To just view the code with color syntax highlighting you can use something like Notepad++. All of the code is within the *.frm (Forms), *.bas (Basic Modules) & *.cls (Classes). Just remember to select Language > V > Visual Basic within Notepad++ after you have opened any of those files. Sorry if some of the code within is shoddy or confusing, but it was somewhat of a learning exercise in both ROM hacking and Visual Basic programming for myself too. Hopefully it’s of some benefit to someone. wboy NOSE_source_1.2b_wboy.zip
  13. Thanks guys. Nice to hear it still gets used today now 10 years on. Helps me justify the amount of time I probably spent on it back in the day rom hacking and coding NOSE... not that I didn't enjoy it... I did... I only just ran NOSE on my Windows 10 box yesterday and amazed to see it worked even without registering the OCXes.... though it did kick of my Office 2013 setup first time before it launched (not sure wtf that happened). lol @ clockwise!
  14. Attached is what appears my last attempts of my 32 team rom (up to stage 8) before I started noticing the games was crashing on me. The stages should relate mostly to what is found in the SG NHL94 - 30 Team ROM.docx as part of the source code zip release, remembering though some of the data pasted within will be bigger thus some different offsets may exit (e.g. two extra banners). 32teamromfail.zip
  15. You can try your luck but its been along time away from it. Note I did try with a 32 team ROM initially (before my cutting back to my 30 team releases) but gave up on it as the ROM would crash on me IIRC. I never cared to investigate it further at the time as I wasn't sure I was capable of working out the cause and fix. smozoma and some of his asm work may be of value here too? Within that source code release under #resources/30 Team ROM are also a ms word docx (and pdf version) for all the bytes I moved around to make the 30 team version. Can't remember if I ever posted them before but they may be of some value to you.
  16. Well after some considerable analysis of NHL94 and later rom years (admittedly made a hell of a lot easier using the upcoming editor to test values ), I think I've worked out how ingame displayed ratings work in reference to the Hex 0-6 scaling first used in NHL94, reverting from the original Hex 0-F scales used by NHL93 and earlier roms. I tested this by setting an entire team's players to the same rating... e.g. first all 0's, check the ingame ratings... then change to all 1's... check ingame rating, repeat... etc until Hex 6 reached. Interesting, while all players where in theory the same, they did all potentially show some mild variances in their attribute ratings. These are not always consistent either! A player's overall and individal attributes rating may be "what you expect" for your first game, the higher for the next, then back to "what you expect"/got first game, then lower the following game?!?! To prove this, take the original NHL94 rom. Play a regular game with DETROIT. Before the game starts, go to the team roster and check the starting line's player overall ratings. With some luck, they will match the documented overall ratings as found in the roster section (off the main site) of Evan's NHL94 website. Reset the rom, choose the exact same teams/settings again. Check the roster, and now, the overall rating for the players will most likey be different than before. Reset again, and with some luck, yet another new rating for the same players. It doesn't appear to be completely random. Its as if there is three or four different typical scenarios that you will recieve. Every time you get the same scenario (testing with the same teams), you should also find that it is the same HOT or COLD players. Within the team roster, each player's overall and individual attributes talents will be exact as of the previous time you noticed you've had the same scenario. A predefined random possibly? So why is this, and how come a whole team of players with the same hex attributes can have what appears to be quite different scalings in the same rating? I have a theory that *may* be somewhat right, but for now what I can quite accurately tell you is this. Dependant on the hex rating of a attribute, the following info will give you general indication of what ingame attribute rating you could possibly expect for that player. Hex 0, attribute rating will always range from 25 to 29 (maximum difference of 4) Hex 1, attribute rating will always range from 29 to 38 (maximum difference of 9) Hex 2, attribute rating will always range from 38 to 47 (maximum difference of 9) Hex 3, attribute rating will always range from 47 to 62 (maximum difference of 15) Hex 4, attribute rating will always range from 63 to 80 (maximum difference of 17) Hex 5, attribute rating will always range from 81 to 98 (maximum difference of 17) Hex 6, attribute rating will always be 99 (no possible difference) From this I had the idea that the game possibly uses the Hex 0-6 rating to dynamically assign Hex 0 -F to the players based on potential ranges of the rating scale shown above. This could be done in attempt to simulate players having good (hot) or bad (cold) days and thus potentially creating a more random game. Interestingly NHL95 appears to go by these exact ratings except for the Stick Handling, which is different to NHL94, as it supports Hex 0-F. Checking the ranges of the assigned hex values of the Stick Handling attribute show this: Hex 0, attribute rating will always range from 25 to 29 Hex 1, 2, attribute rating will always range from 29 to 38 Hex 3, 4, 5, attribute rating will always range from 38 to 47 Hex 6, 7, 8, attribute rating will always range from 47 to 62 Hex 9, A, B, attribute rating will always range from 63 to 80 Hex C, D, E, attribute rating will always range from 81 to 98 Hex F, attribute rating will always be 99 While I originally thought this confirmed my theory, unfortunately the ingame displayed ratings didn't seem to match the finding. By that I mean with the stick handling attribute set to Hex E for all players, I expected all the ratings to be within 92 and 98... the top third values of the range expected for Hex E. Unforunately that was not the case, as values ranged from 81 to 98. Either the displayed value may display wrong (highly unlikey), or doesn't make a difference at all if its Hex C, D or E. Going back to NHL94, this may mean that a Hex 5 is a Hex 5, irrespective if the players is Hot and rated 98, verus the other who is Cold, and rated 81 for the same attribute. One attribute that could possible test this theory would be SPEED. If both players are the effectively same, are at different ends of the Hex 5 scale (e.g. hot-98, cold-81), but are as fast as each other ingame, then the whole Hot/Cold rating difference is really more of a misleading attempt by EA to make the game appear more complex that it is? I'll look at hacking a rom soon that could test this theory, and I'll let you know when its done so I few people can test it and give me their thoughts/findings. Doing similar tests with 96, I vaguely remember a scenario where the same "cold" player rated higher than the same opposings teams equivalent player who was normal. Mind you, I will check that again to confirm. If that is the case, the hot/cold rating may really mean noting ingame. Time will hopefully tell. The end.
  17. I've finally posted the tutorial on my site. I've packaged it as a download (rather than online pages) as there is a fair bit of other resources I have included to help you with the process of updating player cards. It basically contains: a step-by-step tutorial on updating player cards in Tile Molester, additional pages & documents (pdfs) listing all the offsets & player cards (for both NHL 94 & 95), information about changing the player card to roster player associations, IPS patches to repair player cards with shared tiles, and more... Let me know if you think any sections are unclear or vague (excuse any bad engrish), and I'll update the tutorial appropriately in the near future. Find it here: http://www.hexaddicts.com/nose EDIT: link dead, here is the file: player card tutorial.zip -smozoma Enjoy, wboy. PS: Evan, feel free to use the info & resources as you wish in the editing section of this site.
  18. The linked zip file below contains a collection of screen shot references that should be more than enough to educate yourself on loading and editing the graphics and palettes within the NHL 94 - 30 Team ROM: http://hexaddicts.com/nose/tmr30v1.0.zip EDIT: link dead, here is the file -smozoma tmr30v1.0.zip EDIT: Here is a link to all the images on imgur.com so you don't need to download them: http://imgur.com/a/RqZf3 A few samples have been attached to this post to give you an idea of how they appear and how to work with them. Changing the Genesis palettes within TM can be a bit dicky and inaccurate especially if you are attempting to change an entire palette of 16 etc. Personally, I prefer to enter my palettes directly with a hex editor after determining my palette by using NOSE's color sniper utility, or building it manually with the color gradient square. More advanced stuff (like the optimized importing of title screen backgrounds etc.) may follow in the hopefully not-to-distant future. Happy gfx hax0ring, wboy.
  19. Good point, has been too many years and completely forgot 3bbp it was only it only had 8 color palette. All I remember is back in day when I started to better understad the headers for images, I only then started to find the "hidden rink" graphic tiles etc, and from memory, they where flagged in the image header exactly like the player tiles (as in 03 for 3bbp & 00 for 4bbp as I assumed) forgetting that the rink tiles have a 16 color palette available to it. As you have now highlighted the header byte simply flagged if the Run-Length Encoding was used (also why the occasional player card tiles where shared). My way around that was exporting a Gens screenshot of the VDP(?) memory, cut out the tiles/sprites and then paste them into a new part of the ROM with with Tile Molester and create a header implying 4bpp.
  20. Call it what you will, but it saved space and had no reduction in quality of the imagine being stored and then presented in game. A basic routine/algorithm that offered basic compression no?
  21. Back in the day the co$t of production between a 1MB ROM inside a gaming cartridge vs a 2MB ROM was substantial. Kind of like buying 128GB vs 256GB embedded storage in your smart device of choice these days. The original NHL94 would of probably been a little over the 1MB at best. That alone made it a no brainer that EA store most of all the graphics compressed in 3bpp linear format, and not the 4bpp linear format used by the original and more easily editable EA Hockey & NHL 92. 1 less bbp = 25% saving on all graphic bytes stored that way. The rest of the bytes (teams, rosters and the game engine) are not compressed. When loaded into the memory during game play, the graphics are loaded uncompressed. That fact and understanding the header bytes for graphics is what allowed the editable rink versions of NHL93 and 94 to become a reality.
  22. Details below outline the changes made to permit 30 teams selectable from the menu screens of NHL94. Use this info to limit the selectable team to even less teams where required for your hack. Original NHL94 has 28 teams or 0x1C. 0x1E = 30 Offset 0xF7922 Bytes control the Team 1 & 2 return to 1st team (Anaheim) when ASW is exceeded. Changed 001C001C to 001E001E Offset 0xF7934 Bytes control the Team 1 & 2 return to 1st team (Anaheim) when ASW is exceeded (when game is started with 4 player multitap) Changed 001C001C to 001E001E Offset 0xF79E4 Bytes change the selected team back to expected range if you just changed from Regular Season to Playoff Mode Changed 781A to 781E (where 0x1A = 26, original 94 limit forced to exclude All Star teams). Offset 0x17D36 Bytes control the Team 1 return to 1st team (Anaheim) in the Playoff Team selection mode. Changed 0019 to 001D (yes, 0x19 = 25 not 26, but remember 0 thru 25 is 26 available values) Offset 0x17D3C Bytes control the Team 2 return to 1st team (Anaheim) in the Playoff Team selection mode. Changed 7419 to 741D Playoff Data: Ensure only the teams you are permitting selection to be available in Playoff Mode/Data or expect possible freezes/bugs. Use NOSE to alter playoff data. Known issues/unfound data: If you limit the rom to say 16 teams, the Regular Session game results seen between periods can still use teams after the 16 you apparently permit. Live with it.
  23. Read supplied notes within download for more details. Note this is a alpha, and not a beta. Reasons: - Seems to work but not thoroughly tested. - Does not contain as much uncompressed graphics (e.g. Title screen not editable - disabling animations like glitter etc more tedious that first thought, Ron Barr headshot not editable etc.). - No documentation or reference screen shots supplied. - Not supported by NOSE 1.2b. Easily fixed if you add the following lines to the NOSE application folder's roms\roms.ini file. [GM T-50396 -30] Comments=NHLPA Hockey '93 (UE) (REV01) [!] - 30 Team ROM Hack by wboy OriginalROMProductCode=GM T-50396 -01 Teams=30 Download IPS patch here: 93 IPS 1.0a.zip EDIT: Correction to ini files settings (error on my part). A complete roms.ini is now within the zip distribution which you can simply copy over your existing roms.ini
  24. Within this post you will find three hacks effectively. The are: 1: Unlimited Player Stamina with Lines Changes On! - change 3580 to 6002 This hack stops players on the rink from losing energy. Thus effectively gives the game a mode it never had. "Line Changes: On", with the full energy arcade feel of "Line Changes: Off". Technically this could somewhat be achieved by setting the depletion rate below to 0000. 2: Player/Line Stamina Depletion Rate (Rink) - change 0021 (or 001E) to ???? This hack changes the master value/rate at which players on the rink lose their energy (together with their stamina rating). Raise the value to effectively force more line changes. Remember the value is Hexadecimal. 3: Player/Line Stamina Recovery Rate (Bench) - change 0009 to ???? This hack changes the master value/rate at which players on the bench (and penalty box?) recover their energy. Remember the value is Hexadecimal. 0009 = 9, 0010 = 16, not 10 (which is 000A). Additional Info: Within the game, each player has a $1000 hex energy total. Offsets to set this value at the start of each periods, and also the maximum recovery (also set to $1000) are known. I haven't cared to post them here as the line energy bars won't effectively draw accurately if you alter/increase these values. If anyone is interested in having all players start with less than full, or only be able to recover to 90% of the full value, let me know and I'll post it for you. As mentioned though, the line energy bars will have minor display glitches doing so, which is why I think you're just better off messing with the depletion/recovery rates to get the balance you desire. Thanks to Tony H for the initial finds. Usage: [GoodGen 3.0 ROM Name] #: $ [ROM Hex Offset]:[Original Hex Value] NHL 94 (UE) [!] 1: $ 015782:3580 2: $ 010D42:0021 3: $ 007A1A:0009 EA Hockey (E) [!] 1: $ 00CFBA:3580 2: $ 0086B8:0021 3: $ 00449A:0009 NHL Hockey (U) [!] 1: $ 00D38A:3580 2: $ 008AC6:0021 3: $ 00485C:0009 NHLPA Hockey '93 (UE) (REV01) [!] 1: $ 01136E:3580 2: $ 00D4E2:0021 3: $ 0066AE:0009 NHLPA Hockey '93 (UE) (REV00) 1: $ 011356:3580 2: $ 00D4CA:0021 3: $ 0066A0:0009 NHL 95 (UE) [!] 1: $ 07DBD2:3580 2: $ 08C1C2:0021 3: $ 07DB62:0009 NHL 95 Elitserien (E) [c][!] 1: $ 07B13E:3580 2: $ 08998A:0021 3: $ 07B0CE:0009 NHL 96 (UE) [!] 1: $ 01FB4C:3580 2: $ 01ACF8:001E 3: $ 014B04:0009 NHL 96 Elitserien (E) 1: $ 01D37E:3580 2: $ 018486:001E 3: $ 012264:0009 NHL 97 (UE) [!] 1: $ 024CEC:3580 2: $ 01F93E:001E 3: $ 0190AA:0009 NHL 98 (U) [c][!] 1: $ 02511C:3580 2: $ 01FD48:001E 3: $ 0194AE:0009
  25. This hack allows you to control the stopping distance and turn of a skater when skating from one direction to the opposite (e.g. Up to down, left to right etc.) Normally when this occurs, the skater sprites go into the hockey stop animation. To alter the value, change the bytes 0096 (or 00B4) to ???? hex. The higher the value, the quicker a skater will pull up and turn (possibly in addition to their agility rating). A high enough value will even make the skater change directions so quick it defies Newton's law of Motion. The lower the value, the longer it takes to stop. If you set to 0001, your skater will do a huuuuuuuugggeee hockey stop... then turn (eventually). Note, if do set the value too low... even if you're facing left, then turn right, there can be a delay to respond (counter the current speed) and turn around unless you use the control-pad diagonals to speed up the process. Thanks to Tony H. for this find... not to mention the fact that I didn't even have request this one! It just came in the mail so to speak Usage: [GoodGen 3.0 ROM Name] #: $ [ROM Hex Offset]:[Original Hex Value] - Comment NHL 94 (UE) [!] $ 010E24:0096 - from Left of screen to Right $ 010E32:0096 - from Right of screen to Left $ 010E48:0096 - from Top of screen to Bottom $ 010E56:0096 - from Bottom of screen to Top EA Hockey (E) [!] $ 008760:0096 - from Left of screen to Right $ 00876E:0096 - from Right of screen to Left $ 008784:0096 - from Top of screen to Bottom $ 008792:0096 - from Bottom of screen to Top NHL Hockey (U) [!] $ 008B6E:0096 - from Left of screen to Right $ 008B7C:0096 - from Right of screen to Left $ 008B92:0096 - from Top of screen to Bottom $ 008BA0:0096 - from Bottom of screen to Top NHLPA Hockey '93 (UE) (REV01) [!] $ 00D58A:0096 - from Left of screen to Right $ 00D598:0096 - from Right of screen to Left $ 00D5AE:0096 - from Top of screen to Bottom $ 00D5BC:0096 - from Bottom of screen to Top NHLPA Hockey '93 (UE) (REV00) $ 00D572:0096 - from Left of screen to Right $ 00D580:0096 - from Right of screen to Left $ 00D596:0096 - from Top of screen to Bottom $ 00D5A4:0096 - from Bottom of screen to Top NHL 95 (UE) [!] $ 008BB28:0096 - from Left of screen to Right $ 008BB36:0096 - from Right of screen to Left $ 008BB50:0096 - from Top of screen to Bottom $ 008BB5E:0096 - from Bottom of screen to Top NHL 95 Elitserien (E) [c][!] $ 00892F0:0096 - from Left of screen to Right $ 00892FE:0096 - from Right of screen to Left $ 0089318:0096 - from Top of screen to Bottom $ 0089326:0096 - from Bottom of screen to Top NHL 96 (UE) [!] $ 001AE20:00B4 - from Left of screen to Right $ 001AE2E:00B4 - from Right of screen to Left $ 001AE44:00B4 - from Top of screen to Bottom $ 001AE52:00B4 - from Bottom of screen to Top NHL 96 Elitserien (E) $ 00185AE:00B4 - from Left of screen to Right $ 00185BC:00B4 - from Right of screen to Left $ 00185D2:00B4 - from Top of screen to Bottom $ 00185E0:00B4 - from Bottom of screen to Top NHL 97 (UE) [!] $ 001FA66:00B4 - from Left of screen to Right $ 001FA74:00B4 - from Right of screen to Left $ 001FA8A:00B4 - from Top of screen to Bottom $ 001FA98:00B4 - from Bottom of screen to Top NHL 98 (U) [c][!] $ 001FE70:00B4 - from Left of screen to Right $ 001FE7E:00B4 - from Right of screen to Left $ 001FE94:00B4 - from Top of screen to Bottom $ 001FEA2:00B4 - from Bottom of screen to Top