tModLoader Dragon Ball Terraria

Reminder that there's a report button.

I need to give this mod a proper shot at some point... I'm assuming it's still being developed? I just haven't been keeping up, really.
 
Reminder that there's a report button.

I need to give this mod a proper shot at some point... I'm assuming it's still being developed? I just haven't been keeping up, really.
Yeah, there was a lot of rework required and then there was porting what I had on to 1.4
 
Hello, I have saw an error: If I equip guide voodoo doll and try to use any weapon of this mod, e. g. the Kamehamehas to kill the guide, it does not work while vanilla items work fine. I hope I do not sound evil here 😈. It can be that modded items are hard-blocked by TML itself to not be affected by guide voodoo doll when aiming to the guide.
 
Theres particular on hit code for the attacks which likely won't do anything because they need to be handled differently. Its also such a niche piece of functionality that its not really worth messing around with in case it breaks all npcs
 
Changelog:

Version Dragon ball Terraria 1.0.9.9 Ported (1.4.4 TMOD) Version 0.4 - August 2, 2023

Added "Config" option to the mod configuration menu. (Ki Charge Toggle)

Improved "Auto Reforge" functionality to correctly reforge to the desired prefix. (Auto Reforge works now)

Enhanced the "Wish Menu" activation conditions for awakening options: (Before you can wish for a form these conditions need to be fufilled)
"Super Saiyan 1 (SSJ1)": Now obtainable during hardmode progression.
"Legendary Super Saiyan 1 (LSSJ1)/Super Saiyan 2 (SSJ2)": Can be acquired after mastering SSJ1 and defeating any mech boss.
"Super Saiyan 3 (SSJ3)": Available after mastering SSJ2 and defeating Plantera.
"Legendary Super Saiyan 2 (LSSJ2)": Can be obtained after mastering LSSJ1 and surviving the Martian invasion.
 
I'd like to report a bug. Apparently the mod will remove the super saiyan transformation from the player after exiting the game. I had the super saiyan form mastered, saved and exited. I loaded the game up again and the form is gone.

Edit: I just found out that this only happens if I have multiple characters and worlds saved. Example; Lets say that I created a fresh character and a fresh world. OK, the mod seems to work as it is intended. However the moment I create a new character and world the mod breaks on the new character even after I remove the old character and world. I actually tried to just delete one or the other but to no avail. Idk how I can explain this bug better.
 
Last edited:
I have an idea of a way to possibly make the oozaru transformation work
I will say that I don't know much about coding but i've been playing terraria for years
and thought that you might be able to use mounts to make the oozaru big since mounts have can make the player take up more room
and then you could even change the jump height and fall speed of the mount to make it not feel clunky to use
for the weapons you could have ki attacks fire out the mouth and regular swords and stuff not work since why would a big monkey be able to hold human weapons
not sure if this would work but I thought I might aswell tell you my idea
 
Last edited:
Ok
I just thought it might help make the primal trait more unique

bye the way is the divine trait going to be able to use the scythe of sorrow
 
Last edited:
I've noticed a bug or something with the DBZ mod and the "for the worthy" world generation for Legendary difficulty (not the issue, see edit) the dragon ball at spawning doesn't drop by breaking the dresser it is on or by breaking it directly, none of the dragon balls drop. my friends and I can't get any of the dragon balls not even the host can, we have Calamity, Thorium, Magic Storage, and some other mods on the server, the dragon balls do respawn each time we rejoin though. We're currently pre Queen Bee, and haven't killed Skeletron yet (edit: tested solo, not linked) I have tested on a solo world as well and the 4 star ball just does not spawn on the dresser at all. When it did, wasn't breakable (edit: except by longest playtime character)

Edit: After more testing i have found out that ONLY my character with the LONGEST playtime can break Dragon Balls, new world, new character can't break them. Old character new world with 44 hours playtime can't break them. New world longest playtime character (66 hours) CAN break them. Tried this on 5 different characters, on 2-3 different new and old worlds same results on all.
 
Last edited:
I think if there were more coders on the team it wouldn't take so long to develop

Do you want it to come out polished or buggy?
Personally, I'd rather it come out late than come out buggy
 
Would it be possible to include a config to turn OFF the transformation wigs? While I hate to come off as disrespectful, I love the DBT mod and the addons people have made for it, but the wigs are... Rough, and they override my head vanity, which really kills my look. Ideally, I'd like it if the transformations simply changed the hair color, like Super Saiyan God, but I'd be fine with just turning the wigs off if that's too much work. The wigs are just too customization unfriendly. x'D
 
Since not all characters have in Terraria black hair: Let (r, g, b) be your standard character hair color with r, g, b in range 0x00-0xFF. Then the super saiyajin colors shall be these dependant on the color of your standard character hair.
SSJ123(r,g,b) = (0xC0 + 0.25*(MIN(0xFF, r+0.5b)), 0xC0 + 0.25*(MIN(0xFF, g+0.5b)), 0) to make the yellow guaranteed bright.
SSJBLUE(r,g,b) = (0, 0xC0 + 0.25*(MIN(0xFF, g+0.5r)), 0xC0 + 0.25*(MIN(0xFF, b+0.5r))) to make the cyan guaranteed bright.
SSJROSE(r,g,b) = (0xC0 + 0.25*(MIN(0xFF, r+0.5g)), 0, 0xC0 + 0.25*(MIN(0xFF, b+0.5g)), 0) to make the magenta guaranteed bright.
The minimum brightness of the color components of yellow, cyan and magenta will be 0xC0. Also the color will not derive too much hue wise from the needed super saiyajin color.

Edit: I adjusted the functions a little, especially in the SSJ123 function if the Green component is greater than the Red component, half of the difference is added to the Red component so that the hair cannot be more lime than yellow. I also made a Java program that has the 3 functions in a GUI where you can choose the colors. Its code (about 260 lines, so lag warning on mobile, the code will be cleaned up and commented some time later, since now I have to sleep.):

Java:
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Button;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Scale;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;

interface ColorFunction {
    public org.eclipse.swt.graphics.Color transformColors(org.eclipse.swt.graphics.Color color);
}

public class ColorFunctionDisplay extends Composite {

    static HashMap<ColorFunction, String> functionsMap = new HashMap<>();
    static List<ColorFunction> functionsList = new ArrayList<>();
    static final int WIDTH_OF_LABEL_OF_SELECTED_COLOR_COMPONENTS = 70;
    static final int SIDE_WIDTH_OF_COLOR_PREVIEW_SQUARES = 75;
    static final int WIDTH_OF_LABEL_OF_HEX_COLOR_CODES_OF_THE_COLOR_PREVIEW_SQUARES = 65;

    public static void main(String[] args) {

        functionsMap.put((color) -> {
            int r = 0xC0 + (int) (0.25 * (Math.min(0xFF, (int) color.getRed() + 0.5 * color.getBlue())));
            int g = 0xC0 + (int) (0.25 * (Math.min(0xFF, (int) color.getGreen() + 0.5 * color.getBlue())));
            int b = 0;

            if ((g - r) > 0) {
                r += (g - r) / 2;
            }

            return new Color(r, g, b);
        }, "SSJ123");
        
        functionsMap.put((color) -> {
            int b = 0xC0 + (int) (0.25 * (Math.min(0xFF, (int) color.getBlue() + 0.5 * color.getRed())));
            int g = 0xC0 + (int) (0.25 * (Math.min(0xFF, (int) color.getGreen() + 0.5 * color.getRed())));
            int r = 0;
            return new Color(r, g, b);
        }, "SSJBlue");
        
        functionsMap.put((color) -> {
            int b = 0xC0 + (int) (0.25 * (Math.min(0xFF, (int) color.getBlue() + 0.5 * color.getGreen())));
            int r = 0xC0 + (int) (0.25 * (Math.min(0xFF, (int) color.getRed() + 0.5 * color.getGreen())));
            int g = 0;
            return new Color(r, g, b);
        }, "SSJRose");

        functionsList = functionsMap.keySet().stream().collect(Collectors.toList());

        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setSize(420, 500);
        shell.setLayout(new RowLayout());
        shell.setText("Composite Example");
        
        ColorFunctionDisplay cfd = new ColorFunctionDisplay(shell, SWT.NONE);
        GridLayout gridLayout = new GridLayout();
        
        gridLayout.numColumns = 3;
        cfd.setLayout(gridLayout);
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }

    public ColorFunctionDisplay(Composite parent, int style) {
        super(parent, style);
        setLayout(new GridLayout(3, false));

        Label lblColorToTransform = new Label(this, SWT.NONE);
        lblColorToTransform.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
        lblColorToTransform.setText("Color to transform");

        Label lblEnterR = new Label(this, SWT.NONE);
        lblEnterR.setText("R");

        Scale scaleR = new Scale(this, SWT.NONE);
        scaleR.setMaximum(255);

        Label lblValueR = new Label(this, SWT.NONE);
        GridData gd_lblValueR = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_lblValueR.widthHint = WIDTH_OF_LABEL_OF_SELECTED_COLOR_COMPONENTS;
        lblValueR.setLayoutData(gd_lblValueR);
        lblValueR.setText("0");

        Label lblEnterG = new Label(this, SWT.NONE);
        lblEnterG.setText("G");

        Scale scaleG = new Scale(this, SWT.NONE);
        scaleG.setMaximum(255);

        Label lblValueG = new Label(this, SWT.NONE);
        GridData gd_lblValueG = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_lblValueG.widthHint = WIDTH_OF_LABEL_OF_SELECTED_COLOR_COMPONENTS;
        lblValueG.setLayoutData(gd_lblValueG);
        lblValueG.setText("0");

        Label lblEnterB = new Label(this, SWT.NONE);
        lblEnterB.setText("B");

        Scale scaleB = new Scale(this, SWT.NONE);
        scaleB.setMaximum(255);

        Label lblValueB = new Label(this, SWT.NONE);
        GridData gd_lblValueB = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_lblValueB.widthHint = WIDTH_OF_LABEL_OF_SELECTED_COLOR_COMPONENTS;
        lblValueB.setLayoutData(gd_lblValueB);
        lblValueB.setText("0");

        Label lblOldColorHex = new Label(this, SWT.NONE);
        lblOldColorHex.setText("#000000");
        new Label(this, SWT.NONE);

        Label lblNewColorHex = new Label(this, SWT.NONE);
        GridData gd_lblNewColorHex = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_lblNewColorHex.widthHint = WIDTH_OF_LABEL_OF_HEX_COLOR_CODES_OF_THE_COLOR_PREVIEW_SQUARES;
        lblNewColorHex.setLayoutData(gd_lblNewColorHex);

        Button btnOldColorDisplay = new Button(this, SWT.NONE);
        btnOldColorDisplay.setBackground(new Color(new RGB(0, 0, 0)));
        btnOldColorDisplay.setText("");
        btnOldColorDisplay.setEnabled(false);
        
        GridData gd_btnOldColorDisplay = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_btnOldColorDisplay.widthHint = SIDE_WIDTH_OF_COLOR_PREVIEW_SQUARES;
        gd_btnOldColorDisplay.heightHint = SIDE_WIDTH_OF_COLOR_PREVIEW_SQUARES;
        btnOldColorDisplay.setLayoutData(gd_btnOldColorDisplay);
        lblNewColorHex
                .setText(colorToHex(functionsList.get(0).transformColors(btnOldColorDisplay.getBackground()), true));

        Label lblNewColor = new Label(this, SWT.NONE);
        GridData gd_lblNewColor = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_lblNewColor.widthHint = 207;
        lblNewColor.setLayoutData(gd_lblNewColor);
        lblNewColor.setText("New Color: ");

        Button btnNewColorDisplay = new Button(this, SWT.NONE);
        btnNewColorDisplay.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
            }
        });

        btnNewColorDisplay.setText("");
        GridData gd_btnNewColorDisplay = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_btnNewColorDisplay.widthHint = SIDE_WIDTH_OF_COLOR_PREVIEW_SQUARES;
        gd_btnNewColorDisplay.heightHint = SIDE_WIDTH_OF_COLOR_PREVIEW_SQUARES;
        btnNewColorDisplay.setLayoutData(gd_btnNewColorDisplay);
        btnNewColorDisplay.setBackground(functionsList.get(0).transformColors(btnOldColorDisplay.getBackground()));
        btnNewColorDisplay.setEnabled(false);
        new Label(this, SWT.NONE);

        Scale scaleFunctionNumber = new Scale(this, SWT.NONE);
        new Label(this, SWT.NONE);
        scaleFunctionNumber.setMaximum(functionsList.size() - 1);
        scaleFunctionNumber.setMinimum(0);
        scaleFunctionNumber.setIncrement(1);

        Label lblFunctionNumber = new Label(this, SWT.NONE);
        lblFunctionNumber.setText("0");

        Label lblFunctionName = new Label(this, SWT.NONE);
        GridData gd_lblFunctionName = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_lblFunctionName.widthHint = 207;
        lblFunctionName.setLayoutData(gd_lblFunctionName);
        lblFunctionName.setText(functionsMap.get(functionsList.get(0)));
        new Label(this, SWT.NONE);

        scaleR.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                int selectedFunctionNumber = scaleFunctionNumber.getSelection();
                int rValue = scaleR.getSelection();
                lblValueR.setText(Integer.toString(rValue));
                Color oldColor = btnOldColorDisplay.getBackground();
                btnOldColorDisplay.setBackground(new Color(rValue, oldColor.getGreen(), oldColor.getBlue()));
                Color newColor = btnOldColorDisplay.getBackground();
                lblOldColorHex.setText(colorToHex(newColor, true));
                Color outputForColorTransformation = functionsList.get(selectedFunctionNumber)
                        .transformColors(btnOldColorDisplay.getBackground());
                btnNewColorDisplay.setBackground(outputForColorTransformation);
                lblNewColorHex.setText(colorToHex(outputForColorTransformation, true));
            }
        });

        scaleG.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                int selectedFunctionNumber = scaleFunctionNumber.getSelection();
                int gValue = scaleG.getSelection();
                lblValueG.setText(Integer.toString(gValue));
                Color oldColor = btnOldColorDisplay.getBackground();
                btnOldColorDisplay.setBackground(new Color(oldColor.getRed(), gValue, oldColor.getBlue()));
                Color newColor = btnOldColorDisplay.getBackground();
                lblOldColorHex.setText(colorToHex(newColor, true));
                Color outputForColorTransformation = functionsList.get(selectedFunctionNumber)
                        .transformColors(btnOldColorDisplay.getBackground());
                btnNewColorDisplay.setBackground(outputForColorTransformation);
                lblNewColorHex.setText(colorToHex(outputForColorTransformation, true));
            }
        });

        scaleB.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                int selectedFunctionNumber = scaleFunctionNumber.getSelection();
                int bValue = scaleB.getSelection();
                lblValueB.setText(Integer.toString(bValue));
                Color oldColor = btnOldColorDisplay.getBackground();
                btnOldColorDisplay.setBackground(new Color(oldColor.getRed(), oldColor.getGreen(), bValue));
                Color newColor = btnOldColorDisplay.getBackground();
                lblOldColorHex.setText(colorToHex(newColor, true));
                Color outputForColorTransformation = functionsList.get(selectedFunctionNumber)
                        .transformColors(btnOldColorDisplay.getBackground());
                btnNewColorDisplay.setBackground(outputForColorTransformation);
                lblNewColorHex.setText(colorToHex(outputForColorTransformation, true));
            }
        });

        scaleFunctionNumber.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                int selectedFunctionNumber = scaleFunctionNumber.getSelection();
                lblFunctionNumber.setText(Integer.toString(selectedFunctionNumber));
                lblFunctionName.setText(functionsMap.get(functionsList.get(selectedFunctionNumber)));
                btnNewColorDisplay.setBackground(functionsMap.keySet().stream().collect(Collectors.toList())
                        .get(selectedFunctionNumber).transformColors(btnOldColorDisplay.getBackground()));
                lblNewColorHex.setText(colorToHex(btnNewColorDisplay.getBackground(), true));
            }
        });
    }

    public static String colorToHex(Color color, boolean addHash) {
        String out = addHash ? "#" : "";
        out += (color.getRed() < 16) ? "0" : "";
        out += Integer.toString(color.getRed(), 16);
        out += (color.getGreen() < 16) ? "0" : "";
        out += Integer.toString(color.getGreen(), 16);
        out += (color.getBlue() < 16) ? "0" : "";
        out += Integer.toString(color.getBlue(), 16);
        return out;
    }
}
 
Last edited:
Back
Top Bottom